SKILL.md
Claude History Search
Search through Claude Code conversation history to find past interactions.
🛑 Do NOT pipe to head / tail
tools claude history already bounds its own output. Piping it through head -40 / tail -20:
- truncates the result set mid-record, so a match that WAS found looks absent;
- masks the real exit code (the pipeline reports
head's); - can SIGPIPE the indexer mid-scan on
--allruns.
Use the CLI's own bounds instead:
tools claude history "query" --all --limit 10 # fewer results
tools claude history "query" --all --limit 5 --context 0 # no surrounding messages
tools claude history "query" --all > /tmp/hist.md # big result set → file, then Read it
Rules of thumb:
- Cap with
--limit, never withhead. Default is 20; drop to5-10for a scoped question. - A quoted query on
--allisrgthen a parallel parse of the hits (main sessions first, then subagents). It should return in about a second, not tens of seconds. If it is still walking every JSONL, the rg prefilter failed and you will seefastPath: "rg-fallback"in the debug log. --summary-onlyreads the metadata cache: titles, summaries, and the first 5000 characters of USER text. It never sees assistant replies or tool output, so a path that only appeared in a tool result, or late in a long session, will miss. Use a normal query, or--file.- Need only a machine answer?
--format json | tools jsonis fine — that is a converter, not a truncator. - Redirecting to a file with
>and thenReading costs less than a re-run after a bad truncation. There is no-oflag on this command.
Quick Reference
# Basic search
tools claude history "keyword"
# Search with filters
tools claude history "query" --tool Edit --since "7 days ago"
# Interactive mode
tools claude history -i
Common Use Cases
Find by Keywords
tools claude history "backup mcp-manager refactor"
tools claude history "authentication bug" --exact
Find by File Modified
tools claude history --file "config/api.php"
tools claude history --file "*.tsx" --tool Edit
tools claude history --files ".vitrinka/" --all
--file / --files are repeatable aliases. They match tool-call file_path / path and other tool inputs (Bash command, Write content, …).
Find by Tool Usage
tools claude history --tool Edit --since "7 days ago"
tools claude history --tool Task --limit 50
Find by Project
tools claude history "timer" --project GenesisTools
tools claude history "migration" --all # Search all projects
Show Context
tools claude history "timer" --context 10 # 10 messages before/after
CLI Options
| Option | Description |
|---|---|
-i, --interactive |
Interactive mode with autocomplete |
-p, --project <name> |
Filter by project name |
--all |
Search all projects |
-f, --file <pattern> |
Match tool-call paths and tool inputs (repeatable) |
--files <pattern> |
Same as --file |
-t, --tool <name> |
Filter by tool (Edit, Write, Bash, etc.) |
--since <date> |
Since date (e.g., "7 days ago", "yesterday") |
--until <date> |
Until date |
-l, --limit <n> |
Limit results (default: 20) |
-c, --context <n> |
Show N messages before/after match |
--exact |
Exact match instead of fuzzy |
--regex |
Use regex for query |
--agents-only |
Only search subagent conversations |
--exclude-agents |
Exclude subagent conversations |
--exclude-thinking |
Exclude thinking blocks |
--reindex |
Rebuild search index (use when index seems stale or after manual edits) |
--format <type> |
Output: ai (default), json |
Output Formats
Default (ai): Perfect markdown with summaries and file paths With --context: Shows surrounding messages in markdown JSON: Raw JSON for programmatic use
Performance
Content search no longer parses every JSONL under ~/.claude/projects.
rg -lthe longest query word (or the--filetoken) across*.jsonl.- Parse those hits in parallel (16 at a time).
- Main sessions first, then subagents, then
--limit.
--exclude-agents skips the second wave. --agents-only is only wave two. A query-less --all uses the SQLite session listing (and does refresh that index). A content query does not write the index; it only reads rg + JSONL hits.
--summary-only reads the metadata cache (titles, summaries, first 5000 chars of user text). Good for names, unreliable for paths.
Summarize Sessions
Summarize Claude Code sessions using LLM-powered templates. Extracts key information and produces structured output in 7 modes.
Quick Start
# Interactive mode — guided session & mode selection
tools claude history summarize -i
# Summarize a specific session
tools claude history summarize <session-id> --mode documentation
# Summarize current session (inside Claude Code)
tools claude history summarize --current --mode short-memory
# Output prompt only (no LLM call)
tools claude history summarize <session-id> --prompt-only --mode changelog
Summarization Modes
| Mode | Description |
|---|---|
documentation |
Full technical doc: problem, changes, patterns, lessons |
memorization |
Comprehensive learnings organized by topic tags |
short-memory |
Concise MEMORY.md-ready bullets (500-2000 chars) |
changelog |
Added/Changed/Fixed/Removed with file paths |
debug-postmortem |
Symptoms, investigation, dead ends, root cause, fix |
onboarding |
"How this works" for new devs: architecture, key files |
custom |
Your own prompt with session content |
Summarize Options
| Option | Description |
|---|---|
-s, --session <id> |
Session ID (repeatable) |
--current |
The active Claude Code session. Claude Code only: under grok or Codex it refuses, naming the host it detected, because the id is looked up in ~/.claude/projects |
--since <date> |
Sessions since date |
--until <date> |
Sessions until date |
-m, --mode <name> |
Template mode (default: documentation) |
--model <name> |
LLM model name |
--provider <name> |
LLM provider name |
--prompt-only |
Output the prepared prompt without calling LLM |
-o, --output <path> |
Write output to file |
--clipboard |
Copy output to clipboard |
--thorough |
Chunked summarization for large sessions |
--max-tokens <n> |
Token budget (default: 128000) |
--include-tool-results |
Include tool execution results |
--include-thinking |
Include thinking blocks |
--priority <type> |
Content priority: balanced, user-first, assistant-first |
-i, --interactive |
Interactive guided flow |
--custom-prompt <text> |
Custom prompt (for custom mode) |
--memory-dir <path> |
Output dir for memorization topic files |
Examples
# Generate onboarding docs from a session
tools claude history summarize abc123 --mode onboarding -o docs/onboarding.md
# Extract debug learnings
tools claude history summarize abc123 --mode debug-postmortem --clipboard
# Memorization with topic files
tools claude history summarize abc123 --mode memorization --memory-dir ./memory/
# Large session with chunked processing
tools claude history summarize abc123 --mode documentation --thorough
# Custom analysis
tools claude history summarize abc123 --mode custom --custom-prompt "List all API endpoints discussed"
# Use specific model
tools claude history summarize abc123 --mode short-memory --provider anthropic --model claude-sonnet-4-5-20250929
Extract shell quirks (zsh/bash NOMATCH)
Mine Claude session JSONLs for Bash tool calls that tripped on zsh 5.9 expansion quirks (no matches found, unquoted ? in URLs, bare === equals-expansion, *(N) / nobareglobqual, for-loop aborts). Each finding includes the command, result excerpt, and exact jsonl path + line so another agent can jump straight there.
# Full report → file (notes-vault path example)
tools claude history extract-shell-quirks --all \
-o ~/notes/claude/bugs/ZshBugs.extracted.md
# Machine JSON
tools claude history extract-shell-quirks --all --json --max 50
# One project only
tools claude history extract-shell-quirks -p GenesisTools -o /tmp/zsh.md
| Flag | Meaning |
|---|---|
--all |
Scan every project under ~/.claude/projects |
-p / --project |
Restrict to one project |
--max <n> |
Cap findings (do not use -l; parent history owns that) |
--exclude-agents |
Skip subagent transcripts |
--no-rule-codification |
Skip pure CLAUDE.md discussion hits |
--no-dedupe |
Keep repeated identical command+error occurrences as separate findings (default collapses to one with ×N) |
-o / --output |
Write markdown report |
--json |
Findings JSON on stdout |
Dashboard
For visual exploration, tools claude history dashboard launches a web-based React/Vite interface for browsing and analyzing conversation history.