# knowledge-base > Personal knowledge base with SQLite + FTS5. Index contacts, documents, ChatGPT exports, and WhatsApp data. Query everything instantly with full-text search. Use for contact lookups, conversation history search, document retrieval, and building persistent memory systems. - Author: Rachael White - Repository: boomsystel-code/openclaw-workspace - Version: 20260208062059 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-07 - Source: https://github.com/boomsystel-code/openclaw-workspace - Web: https://mule.run/skillshub/@@boomsystel-code/openclaw-workspace~knowledge-base:20260208062059 --- --- name: knowledge-base version: 1.0.0 description: Personal knowledge base with SQLite + FTS5. Index contacts, documents, ChatGPT exports, and WhatsApp data. Query everything instantly with full-text search. Use for contact lookups, conversation history search, document retrieval, and building persistent memory systems. homepage: https://github.com/openclaw/openclaw repository: https://github.com/openclaw/openclaw --- # Knowledge Base A local SQLite database for indexing and querying personal data with full-text search. ## What It Indexes | Source | Data | |--------|------| | **WhatsApp** | Contacts, groups, memberships (from `whatsapp-contacts-full.json`) | | **Documents** | All markdown files in `memory/` | | **ChatGPT** | Conversation exports (from `chatgpt-export/`) | | **Contacts** | VCF exports from phone | ## Quick Start ```bash # Initialize database (first time) python3 skills/knowledge-base/scripts/init_db.py # Query python3 skills/knowledge-base/scripts/query.py search "term" python3 skills/knowledge-base/scripts/query.py contact "+34659..." python3 skills/knowledge-base/scripts/query.py stats ``` ## Commands | Command | Description | |---------|-------------| | `search ` | Full-text search across all content | | `contact ` | Look up contact + their groups | | `groups ` | List groups a phone is in | | `members ` | List members of a group | | `chatgpt ` | Search ChatGPT message history | | `doc ` | Search documents only | | `stats` | Database statistics | | `sql ` | Run raw SQL | ## Data Sources ### WhatsApp Contacts Export via the WhatsApp skill's contact extraction (produces `bank/whatsapp-contacts-full.json`). ### ChatGPT Export Use the chatgpt-exporter skill or manual export. Place JSON in `chatgpt-export/` directory. Supported formats: - `{ "conversations": [...] }` — custom format with `id`, `title`, `created`, `messages` - Native ChatGPT export format with `mapping` structure ### VCF Contacts Export from phone (Android: Contacts → Settings → Export). Run: ```bash python3 skills/knowledge-base/scripts/import_vcf.py path/to/contacts.vcf ``` ### Documents Automatically indexes all `*.md` files in `memory/` directory. ## Database Location `db/jarvis.db` in workspace root. ## Re-indexing To refresh the database with new data: ```bash rm db/jarvis.db python3 skills/knowledge-base/scripts/init_db.py ``` Or for incremental updates: ```bash python3 skills/knowledge-base/scripts/sync.py # (if available) ``` ## Schema See `references/schema.md` for full table definitions. Key tables: - `contacts` — phone, name, source - `wa_groups` — WhatsApp group metadata - `wa_memberships` — who is in which group - `documents` — markdown files with FTS - `chatgpt_conversations` — conversation metadata - `chatgpt_messages` — individual messages with FTS ## Example Queries ```sql -- Find all groups someone is in SELECT g.name FROM wa_groups g JOIN wa_memberships m ON m.group_jid = g.jid WHERE m.phone = '+34659418105'; -- Search ChatGPT for a topic SELECT c.title, m.content FROM chatgpt_fts f JOIN chatgpt_messages m ON m.conversation_id = f.conv_id JOIN chatgpt_conversations c ON c.id = m.conversation_id WHERE chatgpt_fts MATCH 'spirituality'; -- Find contacts in a specific group SELECT c.phone, c.name FROM contacts c JOIN wa_memberships m ON m.phone = c.phone JOIN wa_groups g ON g.jid = m.group_jid WHERE g.name LIKE '%Family%'; ``` ## WhatsApp Group Allowlist Management The database enables easy management of WhatsApp group allowlists for security. ### Find a group's JID ```bash python3 skills/knowledge-base/scripts/query.py sql \ "SELECT jid, name, participant_count FROM wa_groups WHERE name LIKE '%Family%'" ``` ### List all allowed groups (cross-reference with config) ```bash python3 skills/knowledge-base/scripts/query.py sql \ "SELECT name, participant_count FROM wa_groups WHERE jid IN ( '34609572036-1370260813@g.us', '34659418105-1561917865@g.us' -- add your allowlist JIDs here )" ``` ### Add a group to allowlist 1. Find the JID: `query.py sql "SELECT jid, name FROM wa_groups WHERE name LIKE '%GroupName%'"` 2. Add to config: `channels.whatsapp.groupAllowFrom` 3. Restart gateway ### Security rationale - `groupPolicy: "open"` = any group can trigger the bot (risky with large public groups) - `groupPolicy: "allowlist"` = only specified groups can interact (recommended) - Reduces prompt injection attack surface by ~95% ## Tips 1. **No contact names?** WhatsApp only provides phone numbers. Import your phone's VCF to add names. 2. **Search not finding?** FTS5 uses word boundaries. Use `*` for prefix matching: `Bas*` matches "Bashar". 3. **Large exports?** ChatGPT exports can be 50MB+. First import may take 30-60 seconds.