Repository navigation
The main agent can now check on its subagents instead of taking their word for it, and profile memory sits behind one Store interface so it can live somewhere other than local files later.
Read a subagent's chat (#128)
zoom("<run id>") returns a subagent's chat so far: its task, replies, tool calls, tool results and what it was told. Tool calls and results are cut to their first and last ~500 characters, so one page covers many steps; pages are 25,000 characters. Every subagent report now ends with Full chat: zoom("<id>"), so the main agent can verify a claim like "CI green, 198 tests pass" against what the child actually ran. Works on running children too. Thanks to @aaaxn for the review that shaped this.
Know which subagents are running (#132)
While at least one subagent is running, each new input to the main agent (your message, a report, a tell_parent, the restart note) ends with one line:
[OptChat status] Agents at work now: 8f28e694 "Review PR #123 carefully", …
It is never stored, never sent while nothing runs, and sits after the cache marks so it costs nothing. Along the way this fixed a real cache bug: Pi ends Anthropic requests with an empty system message, and the turn's cache mark could land on the wrong block.
Memory behind a Store seam (#133)
Every durable memory read and write now goes through Store (src/store.ts). The only store is FileStore, which is the old code moved: the files on disk are byte-identical, so upgrading changes nothing. A store may write asynchronously (Memory keeps order and awaits on close) and may optionally provide a cross-machine lease; without one, the machine-local lock runs as before. This is the groundwork for a store shared between machines (for example Postgres); no discovery or settings yet. Import records stay per machine.
Small
- Deleting a finished agent is now remembered in memory as
[id] deleted by the user(#134). Running agents already report when stopped, so nothing is duplicated.
228+ tests pass on macOS, Linux and Windows.