← Back to Skills Marketplace
netanel-abergel

Chat History Local

by Netanel Abergel · GitHub ↗ · v1.0.0 · MIT-0
cross-platform ⚠ suspicious
108
Downloads
0
Stars
1
Active Installs
1
Versions
Install in OpenClaw
/install chat-history-local
Description
Search past WhatsApp/chat conversations stored in the audit log PostgreSQL database. Use when the user asks about past conversations, what was discussed, wha...
README (SKILL.md)

Chat History Search

Search and reference past conversations from the audit log database.

⚠️ Two Databases — Know the Difference

There are TWO PostgreSQL databases on port 15432:

Database Table Purpose Use when
openclaw_audit messages WhatsApp/chat messages — who said what, when, in which chat Searching conversations, finding what someone said, quoting messages
openclaw_audit audit_log LLM API costs — model usage, tokens, cost per call Checking spending, model usage stats, cost analysis

For message search: always use the messages table.

Database Connection

  • Host: 127.0.0.1, Port: 15432, User: postgres, DB: openclaw_audit
  • psql: LC_ALL=C /opt/homebrew/Cellar/postgresql@18/18.2/bin/psql -h 127.0.0.1 -p 15432 -U postgres -d openclaw_audit
  • Important: Must use PG 18 binary and LC_ALL=C prefix

Messages Table Schema

Column Type Description
id bigint Auto-increment PK
ts timestamptz Message timestamp
message_id text WhatsApp message ID (use for reply_to)
chat_id text Chat identifier (+972... for direct, [email protected] for groups)
chat_type text direct / group / device / unknown
chat_name text Group name or chat label
sender_phone text Sender phone number
sender_name text Sender display name / 'assistant' for Nova
body text Message text content
media_type text image/audio/etc or null
is_from_me boolean true = assistant's messages
session_key text OpenClaw session UUID
tokens_in integer Input tokens (assistant msgs only)
tokens_out integer Output tokens (assistant msgs only)
cost_usd numeric Cost of response
model varchar(80) Model used

Indexes

  • Full-text search: idx_messages_body_fts (GIN on to_tsvector('simple', body))
  • By chat + time: idx_messages_chat (chat_id, ts)
  • By sender: idx_messages_sender (sender_phone)
  • By time: idx_messages_ts (ts)
  • Unique message_id: idx_messages_unique_id

How to Run Queries

LC_ALL=C /opt/homebrew/Cellar/postgresql@18/18.2/bin/psql -h 127.0.0.1 -p 15432 -U postgres -d openclaw_audit -c "QUERY"

Always add LIMIT. Start with 20, increase if needed.

Query Patterns

Full-text search (preferred for keyword searches)

SELECT id, ts, chat_name, sender_name, is_from_me, LEFT(body, 200), message_id
FROM messages
WHERE to_tsvector('simple', body) @@ plainto_tsquery('simple', 'search terms')
ORDER BY ts DESC LIMIT 20;

Search by chat

-- Roy's direct messages
SELECT id, ts, LEFT(body, 200) FROM messages 
WHERE chat_id = '+972542440470' AND chat_type = 'direct'
ORDER BY ts DESC LIMIT 20;

-- A specific group
SELECT id, ts, sender_name, LEFT(body, 200) FROM messages 
WHERE chat_id = '[email protected]'
ORDER BY ts DESC LIMIT 20;

Search by date range

SELECT id, ts, chat_name, sender_name, is_from_me, LEFT(body, 200)
FROM messages WHERE ts BETWEEN '2026-02-20' AND '2026-02-21'
ORDER BY ts LIMIT 50;

ILIKE search (for phrases or partial matches)

SELECT id, ts, chat_name, sender_name, is_from_me, LEFT(body, 200)
FROM messages WHERE body ILIKE '%exact phrase%'
ORDER BY ts DESC LIMIT 20;

Get conversation context around a message

SELECT id, ts, chat_name, sender_name, is_from_me, LEFT(body, 300)
FROM messages WHERE id BETWEEN (TARGET_ID - 5) AND (TARGET_ID + 5)
ORDER BY ts;

List all chats

SELECT chat_id, chat_type, chat_name, COUNT(*) as msgs,
  MIN(ts) as first_msg, MAX(ts) as last_msg
FROM messages GROUP BY chat_id, chat_type, chat_name
ORDER BY msgs DESC;

Replying to Past Messages

When you find a message to reference, use message_id:

  • Include [[reply_to:\x3Cmessage_id>]] in your response for a native WhatsApp reply

Known Limitations

  • Messages before Feb 18, 2026 use old ingest format (chat_id from JSONL metadata)
  • Messages from Feb 18+ use ingest-v2 (chat_id from gateway.log correlation)
  • Sub-agent sessions show as unknown-* chat_id (no gateway log match)
  • NO_REPLY / HEARTBEAT_OK messages are filtered out during ingest

Tips

  • is_from_me = true → Nova sent it
  • is_from_me = false → a human sent it
  • For group chats, chat_name has the group name
  • sender_name = 'assistant' → Nova's outbound messages
  • Always respect child safety rules — never reveal info about Ben
Usage Guidance
This skill queries a local PostgreSQL audit DB containing sensitive WhatsApp/chat messages. Before installing, confirm you actually want an agent that can run psql on your host and read message rows. Pay attention to these points: - The SKILL.md expects the Postgres 18 psql binary at a specific path but the skill metadata lists no required binaries; verify psql is available at that location or adjust the metadata. - The DB host/port/user are hardcoded (127.0.0.1:15432, user=postgres, db=openclaw_audit). Ensure that access to that DB is intended and that authentication (password/.pgpass/peer auth) is configured safely. - The agent will be able to run arbitrary SELECT queries you or the skill instructs; these will expose private conversations. Only enable the skill if you trust it and want the agent to access those messages. - If you are concerned about autonomous queries, disable autonomous invocation or restrict the skill's usage to interactive/manual runs; consider adding explicit required-binaries and credential metadata so the skill's footprint matches its runtime needs. - If you need higher assurance, ask the publisher for provenance (source/homepage) and for the skill to declare required binaries/credentials explicitly.
Capability Assessment
Purpose & Capability
The SKILL.md clearly describes searching a local PostgreSQL audit DB for WhatsApp/chat messages, which matches the skill name and description. However, the instructions require a specific psql binary path and PostgreSQL 18 (LC_ALL=C /opt/homebrew/.../psql), but the skill metadata declares no required binaries — that's an inconsistency between declared requirements and actual runtime expectations.
Instruction Scope
The instructions are narrowly scoped to constructing and running SQL queries against the local openclaw_audit.messages table, with templates for FTS, chat/date filters, and reply behavior. They do not instruct contacting external endpoints or reading unrelated system files. They do assume the agent will execute psql on the host and will run arbitrary SQL queries against the DB (which has sensitive chat content).
Install Mechanism
There is no install spec (instruction-only), so nothing new is written to disk. This is low-risk from an install perspective. The instruction to use a specific local psql binary is operational guidance, not an installer.
Credentials
The skill declares no environment variables or credentials, yet the SKILL.md hardcodes DB connection parameters (127.0.0.1:15432, user 'postgres', DB 'openclaw_audit') and expects password-less or local-auth PostgreSQL access. That implicit credential/access assumption should be explicit; reading the messages table gives access to sensitive personal conversations, so the privilege implied is significant even if no env vars are listed.
Persistence & Privilege
The skill does not request always: true and has no install step that persists on disk. It would be invoked at runtime and may run psql commands; autonomous invocation is allowed by default (not unusual) but combined with DB access this increases potential impact.
How to Use
  1. Make sure OpenClaw is installed (local or Docker)
  2. Run the install command in chat: /install chat-history-local
  3. After installation, invoke the skill by name or use /chat-history-local
  4. Provide required inputs per the skill's parameter spec and get structured output
Version History
v1.0.0
- Initial release of chat-history skill. - Enables searching and referencing past WhatsApp/chat conversations stored in the audit log PostgreSQL database. - Clearly documents table schemas, index usage, and query examples for common message search scenarios. - Explains key differences between the messages and audit_log tables. - Provides instructions for replying to and quoting past messages using message_id. - Includes usage tips and known limitations for accurate search and reply functionality.
Metadata
Slug chat-history-local
Version 1.0.0
License MIT-0
All-time Installs 1
Active Installs 1
Total Versions 1
Frequently Asked Questions

What is Chat History Local?

Search past WhatsApp/chat conversations stored in the audit log PostgreSQL database. Use when the user asks about past conversations, what was discussed, wha... It is an AI Agent Skill for Claude Code / OpenClaw, with 108 downloads so far.

How do I install Chat History Local?

Run "/install chat-history-local" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.

Is Chat History Local free?

Yes, Chat History Local is completely free, licensed under MIT-0. You can download, install and use it at no cost.

Which platforms does Chat History Local support?

Chat History Local is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).

Who created Chat History Local?

It is built and maintained by Netanel Abergel (@netanel-abergel); the current version is v1.0.0.

💬 Comments