What OAK records

Transcript, store & hook

The transcript and the hook-fed store are the two token-free sources everything derives from.

Everything OAK shows is derived from two sources, and it writes to neither of them without your say-so. The transcript the agent already keeps, and the store the capture hook appends to. Both cost no tokens and are invisible to the agent.

Transcript

The transcript is the event log the agent itself writes for a session: prompts, tool calls, results, reasoning, and plan updates, one JSON record per line. The observatory reads it as evidence and never writes to it. Because the reading happens outside the model loop, it costs no tokens and is invisible to the agent.

Store

The store is the observatory's own record: a per-session, append-only log of edit records, plus content-addressed snapshots of each file before and after a change. It is independent of git, holds every review decision, and can be handed to a teammate as a self-contained account of what the agent did and what you decided.

ℹ
Where it lives

The store sits under your config directory, one folder per session. oak store prints its location; every session's edits, snapshots, and derived caches live there. It is git-independent, so nothing you review touches your working tree until you decide.

Hook

A hook is the local capture point. Claude Code invokes it before and after each file-changing tool call, and after one that fails; the hook snapshots the file and appends an edit record to the store. It prints nothing and returns immediately, so the agent's behavior and context are unchanged.

oak init installs Claude Code capture hooks, and native Codex hooks too when codex is on the PATH; oak init --codex installs the Codex hooks alone. herdr manages terminals while OAK reads the captured store and native transcripts.

⚠︎
Not everything is worth recording

Lockfiles, dist/, generated clients — a .observatoryignore tells the hook what never to capture, in .gitignore syntax.