Search Session Memory
Search the persistent memory database for past coding observations, decisions, and context.
$ARGUMENTS
How It Works
This skill queries the SQLite FTS5 full-text search index at ~/.softspark/ai-toolkit/memory.db to find relevant observations from past sessions.
Instructions
Parse the search query from
$ARGUMENTS. If empty, prompt the user for a query.Initialize the database if it does not exist:
python3 "$HOME/.softspark/ai-toolkit/hooks/../plugins/memory-pack/scripts/init_db.py" 2>/dev/null || trueRun the FTS5 search against the observations table:
sqlite3 ~/.softspark/ai-toolkit/memory.db " SELECT o.id, o.session_id, o.tool_name, o.content, o.created_at, s.project_dir, s.summary FROM observations_fts fts JOIN observations o ON o.id = fts.rowid LEFT JOIN sessions s ON s.session_id = o.session_id WHERE observations_fts MATCH '<query>' ORDER BY rank LIMIT 10; "Replace
<query>with the user's search terms. Escape single quotes by doubling them.Progressive disclosure -- present results in two stages:
Stage 1: Summary view (show first)
## Memory Search: "<query>" Found N results across M sessions. | # | Session | Project | Tool | Time | Preview | |---|---------|---------|------|------|---------| | 1 | abc123 | /path | Edit | 2025-01-15 | First 80 chars... |Stage 2: Detail view (on request) Show the full observation content, session summary, and related observations from the same session.
If no results found, suggest:
- Trying broader search terms
- Checking if memory-pack hooks are installed
- Running
init-db.shif the database is missing
Query Tips
- Use simple keywords:
mem-search database migration - FTS5 supports prefix matching:
migrat*matches "migration", "migrate" - Boolean operators:
database AND NOT test - Column filters:
tool_name:Editto search only Edit tool observations
Example
/mem-search "postgres migration rollback"
Typical output:
## Memory Search: "postgres migration rollback"
Found 3 results across 2 sessions.
| # | Session | Project | Tool | Time | Preview |
|---|---------|------------------|------|------------|--------------------------------------|
| 1 | abc123 | magento2-os | Edit | 2026-03-12 | Rolled back 0042_add_tax_col... |
| 2 | def456 | magento2-b2b | Bash | 2026-02-28 | pg_dump before schema migration... |
| 3 | abc123 | magento2-os | Read | 2026-03-12 | Reviewed migration safety checklist |
Rules
- MUST escape single quotes in queries by doubling (
it''s) — SQL injection into the FTS5 call will break the query - NEVER return the raw database path — treat
~/.softspark/ai-toolkit/memory.dbas internal - CRITICAL: if the database does not exist, initialize it silently and return zero results — do not fail the skill
- MANDATORY: present Stage 1 (summary table) first; only expand to Stage 2 on follow-up
Gotchas
- FTS5
MATCHis picky: hyphens, slashes, and dots are parsed as operator separators and will reject queries likemem-search api/v1with a crypticmalformed MATCH expression. Wrap multi-token phrases with double-quotes:"api/v1"or"mem-search". - Results are ordered by
rank(FTS5 relevance), not bycreated_at. A stale but high-ranked match outranks a fresh but weak one — include thecreated_atcolumn and considerORDER BY rank, created_at DESCfor time-sensitive queries. - The database path is static at
~/.softspark/ai-toolkit/memory.db. If the user runs from a container,~resolves to the container's home, not the host's — the observation list will look empty. Check the env varSOFTSPARK_HOMEbefore assuming the DB is missing. observations_ftsis a separate virtual table; when observations are deleted directly (not via the SDK) the FTS index can drift. If counts betweenobservationsandobservations_ftsdiffer, rebuild withINSERT INTO observations_fts(observations_fts) VALUES('rebuild');.
When NOT to Use
- To search the KB or documentation — use
/research-masteryorsmart_query() - To find a specific commit — use
git log --grepor/git-mastery - To list agent tasks — use
TaskListor/plan - When memory-pack hooks are not installed — direct the user to install them first