Skip to content

Callimachus v0.12.2

Choose a tag to compare

@github-actions github-actions released this 09 Nov 18:58
· 5 commits to main since this release
504465e

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_memory tool and .callimachus/memory.md inject 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 committed AGENTS.md / CLAUDE.md block 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 check and 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_gotchas and cal memory take include_superseded / --include-superseded to 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_gotcha take replaces (a fact id), and so does cal 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, a replaces aimed 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 from check_decision or the recall tools; cal check, cal decisions and cal gotchas now 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, the threads_for_file tool and the editor's Why This Line hover label a decision that was replaced or flagged, and name what replaced it.
    • cal memory publish holds 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 of cal search, cal memory and 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 publish and 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, cal and callimachus-mcp on the same release.
    • The callimachus.app MCP page lists the new tool and describes flagging.

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.