Agent Recall

Makes past agent sessions searchable and points each result back to the original work, so useful context is easier to trust and reuse.

Agent Recall overview

A short overview of the problem, solution, and result.

Starting Point

Useful decisions, blockers, commands, and implementation details were scattered across local agent session archives.

What Shipped

Built a Rust CLI that streams supported transcript archives, redacts common secret patterns, parses high-signal events, and indexes them into a disposable SQLite FTS5 database.

Why It Mattered

Shipped a public, installable tool for local recall across Codex, OMP, Pi, Claude, and optional archived Codex log sources.

Summary

Agent Recall is a local memory layer for agent work.

It indexes Codex, OMP, Pi, and Claude session archives into SQLite FTS5. That gives agents and humans a way to find prior decisions, commands, blockers, and facts without pasting raw transcript blobs into the next conversation.

The situation

Agent work leaves a lot of useful history behind.

The useful parts are usually buried in JSONL archives: why a decision was made, which command proved something, where a blocker appeared, or what the next thread should know. Plain “memory” is not enough if nobody can verify where it came from.

How it works

Keep local archives as the source of truth.

The index is disposable. Agent Recall can delete and rebuild SQLite state from raw transcript archives, while pins live outside the index so important anchors survive rebuilds.

Return evidence, not loose summaries.

Search, recent, show, bundle, memory, related, and resource commands expose source labels, session keys, event kinds, file paths, line numbers, snippets, and JSON output so another agent can inspect the receipt.

Make freshness visible.

The watcher avoids live-write churn with a quiet window, reports pending and waiting files, handles SQLite refresh locks, and exposes doctor/status output when the index is missing, stale, blocked, or healthy.

Product surface

The public surface is a CLI for humans and agents: readable grouped receipts by default, structured JSON when another tool needs to consume the result.

agent-recall
Agent Recall CLI view showing search receipts, memory objects, doctor freshness checks, SQLite FTS5, receipts, and local source labels.

What I built

A parser for real agent archives.

The parser reads JSONL line by line, accepts supported Codex, OMP, Pi, and Claude record shapes, extracts high-signal user, assistant, shell-command, and tool events, dedupes repeated content, and skips malformed records without aborting a full import.

SQLite as the retrieval layer.

The store keeps sessions, events, source-file state, FTS rows, memory objects, evidence rows, deltas, and resource records. Indexing skips unchanged files by source metadata and batches session writes for large archives.

Recall commands for agents.

Search supports repo, cwd, kind, date-window, phrase, NEAR, duplicate, and exclude-current filters. Memories, memory-show, delta, related, resources, and read-resource turn transcript history into addressable context objects.

Long-running local operations.

The watcher can run once or continuously, install a macOS LaunchAgent, scope refreshes by repo and date, wait for quiet files, retry transient SQLite locks, and fall back to a stale-index state when refresh is blocked.

Local handling for sensitive data.

The tool reads local source roots, writes local XDG-style data/state files, and runs best-effort secret redaction before indexing common token, key, DSN, cookie, authorization, bearer, and private-key patterns.

What shipped

Agent Recall handles a practical problem in AI-assisted engineering: useful memory needs local control, fast retrieval, and receipts strong enough for another agent to trust.

01

Local index

Transcript archives became searchable without becoming the database.

Agent Recall builds a disposable SQLite FTS5 index from local JSONL archives while keeping raw transcript files as the source of truth.

02

Agent sources

Recall works across more than one runtime.

The parser supports Codex, OMP, Pi, and Claude transcript roots with explicit source labels in search, recent, show, bundle, and related-context output.

03

Receipts

Search results point back to evidence.

Results group by session and carry the source kind, event kind, file path, line number, cwd, repo, and snippet needed to inspect the original transcript.

04

Memory objects

Memories are durable records, not loose summaries.

Indexing extracts deterministic decision, task, fact, open-question, and blocker objects with stable ids, evidence counts, resource URIs, and delta cursors.

05

Health checks

The tool reports freshness and index health.

The watcher, status, and doctor commands expose pending files, stale indexes, LaunchAgent status, SQLite checks, FTS integrity, and duplicate-source counts.

Verification

The repo includes CLI tests for indexing, search receipts, help output, LaunchAgent defaults, watcher behavior, recent/day views, pins, memories, deltas, resources, and missing-database behavior.

It also includes retrieval-quality fixtures that protect agent-workflow queries, plus redaction fixtures for bearer tokens, common API-key formats, private keys, webhook secrets, cookies, DSNs, and password-like values.

Public repo

The project is public and installable as a Rust CLI.

View GitHub repo

Tech Stack

RustSQLite FTS5rusqliteClapserde_jsonJSONLmacOS LaunchAgentGitHub Actionscrates.io

Have a workflow ready to become software?

I design and build internal tools, automations, dashboards, integrations, and AI-assisted workflows around the people who need to use them.