Three stages
Memory isn't a log file. Raw events on their own aren't useful to an agent starting a new session — there are too many of them and they're too noisy. Termyte refines raw events into something searchable through three stages:
- Traces — the raw, immutable events. Every tool call, file touch, shell command, and response as it happened.
- Observations — small, LLM-extracted facts pulled from batches of related traces. Each one links back to the traces that produced it.
- Memories — consolidated knowledge, embedded and searchable, that aggregates observations across one or more sessions.
# Run synthesis in the background
termyte synth
# Preview without writing
termyte synth --dry-run
Why three stages
A single "event → memory" jump loses provenance. You can't tell which interaction produced a memory, or why. The observation stage keeps that link. Every memory points back to its source observations, and every observation points back to its source traces. You can always trace a memory back to the exact moment it was created.
Bounded by default
Synthesis is powerful, so it's capped. By default: 50 invocations per day, an estimated $0.50 per day, a per-batch timeout, and a 50-trace batch cap. The synthesis cannot eat your quota or run forever. Adjust every limit with environment variables.
What gets recorded
Captured: tool calls, file reads and writes, shell commands, user prompts, and the assistant's final responses. The file paths touched are stored too, so search can boost results relevant to the files you're working on.
Not searchable: the raw JSON of tool input/output. The synthesis LLM sees it, but the embeddings model doesn't, and it isn't returned by search. It stays in the traces table for debugging.