Repository navigation
Callimachus v0.12.2
Patch Changes
-
a646b66: Memory that knows when a decision was reversed.
- Dated, sourced memory lines. Every line the SessionStart hook, the compaction refresher, the MCP
project_memorytool and.callimachus/memory.mdinject now says when its session happened (not when it was distilled) and where it came from, e.g.(2026-10-03, codex, thread 1234; replaces 2026-10-01); the committedAGENTS.md/CLAUDE.mdblock shows the date only. Memory is ordered by session time, so a backlog distilled newest first no longer ranks an old decision above its replacement. - Replaced decisions are history, not memory. A decision a later session reversed leaves injected memory and stays as history.
check_decision,cal checkand the recall tools return each decision with its date and status (current, disputed, flagged or superseded) and name what replaced a superseded one;recall_decisions,recall_gotchasandcal memorytakeinclude_superseded/--include-supersededto show them. Two decisions that disagree with nothing settled are marked disputed for you to settle. - The memory pass notices reversals. When memory is on, distilling a session now also shows the AI engine the project's current decisions and gotchas (the same engine and destination as the transcript), and records when the session replaces, disputes, reconfirms or retires one. It links only what a session states plainly, never by similarity, and it cannot replace a fact you pinned or edited: that pair is marked disputed instead.
- Agents can record a reversal.
record_decision/record_gotchatakereplaces(a fact id), and so doescal remember --replaces ID. One aimed at a fact you pinned or edited is stored as disputed instead, and so is an agent's sixth replacement in a project within a day, so a misled session cannot empty a project's memory. Over MCP, areplacesaimed at another repo's fact records nothing. - New MCP tool
flag_fact(23 tools now) marks a fact stale or wrong, with a reason, which keeps it out of memory until you review it. The agent gets the fact's id fromcheck_decisionor the recall tools;cal check,cal decisionsandcal gotchasnow print it too. Flags are capped at 10 unreviewed per project, reach only the repo the agent's session runs in (whatever project it names), and a fact you pinned or edited stays in memory, marked flagged. cal why, thethreads_for_filetool and the editor's Why This Line hover label a decision that was replaced or flagged, and name what replaced it.cal memory publishholds back facts that are flagged or whose replacement is not being published, so a teammate never imports them as current, and says so; the app's publish preview lists them.- Projects page. Each fact shows its session date and agent, and whether it replaces, disputes or was confirmed by other sessions. New Replaced and Flagged groups let you undo a replacement, keep a flagged fact or hide it, and an undo you make is remembered by later memory passes. Review conflicts shows both dates and offers Newer replaces older and Both stand.
- After a context compaction the SessionStart hook also re-sends your own prompts from that session (the first ones and the latest, about 2,000 characters), since a compaction summary loses the original request and its constraints. Tool output, system reminders and hook text are never included.
- Distilled facts must come from the session. Before a decision or gotcha reaches memory, every file path, identifier, error code or quoted literal it names is checked against the whole session (and the memory the engine was shown); a fact naming something the session never mentioned is dropped. No AI call is involved.
- Stronger redaction. Secrets hidden with zero-width characters or JSON escapes, keys at the start of a line in JSON-encoded tool output, passwords inside URLs (
postgres://user:pass@host, even with an@or#in the password), Google API keys and cut-off private keys are now redacted. Memory blocks, hook output, packed transcripts, MCP results (text and structured) and the human output ofcal search,cal memoryand the other query commands also lose terminal escape sequences, bidi overrides and other invisible control characters before an agent or a terminal sees them. cal memory publishand the app's publish preview say why each held-back fact is held (flagged, or replaced by a fact this publish leaves out).- Fences hold. Text inside a transcript can no longer close the
<reference_thread>wrapper (or the other wrappers) around packed sessions, snapshots, Open-in-agent seeds and injected memory. - The first launch after updating adds two small tables to the index (fact links and fact signals); as with every upgrade, keep the app,
calandcallimachus-mcpon the same release. - The callimachus.app MCP page lists the new tool and describes flagging.
- Dated, sourced memory lines. Every line the SessionStart hook, the compaction refresher, the MCP
Install: macOS .dmg (Apple Silicon), Windows .msi or -setup.exe, Linux .AppImage, .deb or .rpm (glibc 2.38+). Installed apps update themselves. The standalone cal-<target> and callimachus-mcp-<target> binaries are for CLI/MCP-only use; their SHA-256 sums are in SHA256SUMS.