Crucible recall
Query session history from the persistent activity index. Returns event logs, summaries, and filtered views that survive context compaction.
git clone https://github.com/raddue/crucible
T=$(mktemp -d) && git clone --depth=1 https://github.com/raddue/crucible "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/recall" ~/.claude/skills/raddue-crucible-recall && rm -rf "$T"
skills/recall/SKILL.mdRecall
Query the session activity index for event history, file change logs, decisions, and errors. The session index is written continuously by the PostToolUse hook and persists across compaction events.
Skill type: Rigid -- follow exactly, no shortcuts.
Execution model: Direct execution by the orchestrator. No subagent dispatch. No Agent/Task tool needed.
Announce at start: Output
[recall] Querying session activity index... before any processing.
Session Index Discovery
The session index lives at:
~/.claude/projects/<project-hash>/memory/session-index/<session-id>/ events.jsonl # append-only event log summary.md # rolling narrative summary
Discover the index path:
- Compute project hash:
echo -n "<absolute project dir>" | sha256sum | cut -c1-16 - Glob for
~/.claude/projects/<hash>/memory/session-index/*/events.jsonl - Pick the most recently modified
— its parent directory is the active session indexevents.jsonl - If no session index exists, return:
No session index found. Enable session indexing by adding the PostToolUse hook — see
.hooks/README.md
Tool constraint: Use Read and Glob tools for session-index access. Do not use Bash to access
~/.claude/ paths (safety hooks block this).
Query Modes
No Arguments: /recall
/recallReturn the full contents of
summary.md. If summary.md does not exist but events.jsonl does, read the last 20 entries from events.jsonl and format them as a table.
Keyword Search: /recall what files did I edit
/recall what files did I edit- Read
using the Read toolevents.jsonl - Search all entries for lines containing any of the query keywords (case-insensitive match on the
andsummary
fields)detail - Return up to 20 most recent matching entries, formatted as a table
Type Filter: /recall errors
, /recall decisions
, /recall edits
/recall errors/recall decisions/recall editsMap common words to event types:
| Query Word | Event Type(s) |
|---|---|
| errors | error |
| decisions | decision |
| edits, files | file_edit, file_create |
| commits | git_commit |
| tests | test_run |
| phases | phase_change |
Filter
events.jsonl to matching types. Return up to 20 most recent entries.
Time Range: /recall last 30 minutes
, /recall last hour
/recall last 30 minutes/recall last hourParse the time expression:
- "last N minutes" -> filter events with
within the last N minutests - "last N hours" / "last hour" -> filter events within the last N hours
- "today" -> filter events from today (UTC)
Return up to 20 most recent matching entries.
Output Format
For summary mode (no arguments), return the raw
summary.md content.
For filtered/search results, format as:
## Recall: [query description] **Showing:** [N] events from [time range or filter description] | Time | Type | Summary | |------|------|---------| | 14:30 | file_edit | Modified src/auth/middleware.ts: added rate limiting | | 14:32 | file_create | Created docs/plans/auth-rate-limit.md | | ... | ... | ... |
Cap output at 20 entries. If more entries match, note the total:
*(showing 20 of 47 matching events)*.
Event Schema Reference
Each line in
events.jsonl follows this schema (see skills/shared/session-index-convention.md for full details):
{ "ts": "2026-04-07T14:30:00Z", "seq": 1, "type": "file_edit | file_create | git_commit | git_checkout | test_run | error | decision | phase_change | skill_start | skill_end", "summary": "One-line human-readable summary, max 120 chars", "detail": { "type-specific payload" } }
Integration with Pipeline Skills
Pipeline skills can invoke
/recall internally after compaction to supplement CSB-based recovery:
- Existing recovery: Read CSB / pipeline-status.md / handoff manifest
- Supplementary: Read
from the session index for narrative contextsummary.md - Targeted: Query specific events via
for focused context (e.g.,/recall
to recover error history)/recall errors
This is additive -- it does not replace existing recovery mechanisms.
Red Flags
- Using Bash to access
paths (use Read/Glob tools instead)~/.claude/ - Treating session index as authoritative over CSB state (session index is supplementary narrative, CSB is authoritative state)
- Returning more than 20 events in a single recall (wastes context budget)
- Failing silently when the session index is missing (must return a helpful message pointing to hook setup)