$ director emit
Sessions record as they work: decision · open-item · handoff · note. Four kinds, one append-only NDJSON log per repo, lossless under concurrent writers.
▸ Director: director-main-aaa5961e ·
Save the work, not the chat: a small local log your agent writes as it works (decisions, open loops, handoffs), loaded into every new session as ground truth.
one shared log across Claude Code · Codex · OpenCode · Copilot CLI: build in one, resume or review in another
Memory tools answer “what does the agent know?”
Director answers “what is the state of the work?”
The session is long past its best. You keep pushing it anyway:
it holds everything you accumulated on the way here, the decisions, the dead
ends, the loose ends, where you were going. Director removes the fear of
losing that context. /clear the moment a session degrades; park
a repo, come back whenever. The state of the work lives in the log, not in
the chat. You never write a status update. You direct.
curl -fsSL https://raw.githubusercontent.com/colinsurprenant/director/main/install.sh | sh
downloads a verified binary and wires Claude Code (pass --codex for Codex, --opencode for OpenCode, --copilot for Copilot CLI, --all for all four) · macOS, Linux, WSL · go install and prebuilt binaries also available
$ claude
… deep into the pagination rework …
▸ decision recorded · cursor pagination, not offset; offsets break under deletes
…
▸ open-item recorded · timezone edge case before the backfill merges
… later …
▸ handoff parked · cursor rework done · next: the backfill script · watch the p99
──────────── session ends ────────────
$ codex
> where were we?
▸ Director: acme-api-main-7c21e9d4 · 1 open-item(s), 1 need-you
## open-items
01KWJ4X2… open-item timezone edge case before the backfill merges [risk:escalate]
## handoffs
01KWJ9RM… handoff cursor rework done · next: the backfill script · watch the p99
## decisions
01KWJ4W8… decision cursor pagination, not offset; offsets break under deletes
how it works
Sessions record as they work: decision · open-item · handoff · note. Four kinds, one append-only NDJSON log per repo, lossless under concurrent writers.
Loops close consciously. An open item stays visible until someone resolves it; nothing scrolls away, nothing silently vanishes.
The log collapses deterministically into the machine digest, the human brief, and the fleet cockpit. Every session and the human read the same picture, byte-identical, verifiable.
Every new session starts from the injected CHARTER + digest: ground truth pushed at session start, not recalled by similarity. A cold re-entry starts from your parked handoff.
across harnesses
Build in Claude Code with Codex, OpenCode, and Copilot CLI reviewing the same repo. Every harness opens on the same injected ground truth, and a review verdict lands back in the log for the next session to pick up.
Hit a usage limit mid-task? Open another harness on the same repo: it starts from the same digest. The wall costs you the tool, not the thread.
The state of the work lives in a plain NDJSON log on your machine, not in any vendor’s session format. Different vendors, different models, one state of the work.
Same boundary commands, same ground-truth injection at the top of every session, on all four. Wire one agent or all of them; they read and write the same log, live.
where it fits