Skip to main content

Commits and Anchors

A git commit stores a diff, a message, an author, and a timestamp. It tells you what changed but says nothing about how the change was produced. An anchor extends a commit with AI context. It records which AI sessions were active, how many tokens were spent, and which lines came from AI vs. the developer.

Author Types

Where Anchors Are Stored

Anchors are stored on the git orphan branch oobo/anchors/v2. This branch:
  • Travels with the repo (pushed alongside your code)
  • Is invisible to normal git operations (git log, git diff, working tree)
  • Is created automatically on the first tracked commit
  • Is pushed via the pre-push hook
The orphan branch is the single source of truth for anchor data. There is no separate database or cloud service required.

Sessions

A session represents a single AI coding conversation. Oobo discovers sessions through agent lifecycle hooks (for tools that support them) and by reading the local storage of each supported tool (Cursor’s workspace state, Claude Code’s JSONL files, Gemini’s JSON files, etc.). When a session is linked to an anchor, additional data is stored in the SessionLink (on the orphan branch): See the full schema reference for all SessionLink fields including tool usage breakdown, bash commands, thinking time, and subagent details.

Token Sources

Some tools store exact token counts (Claude Code, Gemini CLI, OpenCode, Codex CLI, Zed). For tools that don’t (Cursor, Copilot), oobo estimates tokens using tiktoken and marks them with is_estimated: true.

Transparency

Transparency controls whether redacted session transcripts are written to the orphan branch alongside anchor metadata. Set via config:
When transparency is on, session transcripts are redacted (secrets removed via gitleaks patterns) before being written to the orphan branch. Transparency has a global default in ~/.oobo/config and can be overridden per-project in .oobo/config.

Turns

A turn is a single exchange within a session - one user prompt and the agent’s response. Oobo captures per-turn state through agent lifecycle hooks, recording tool calls, hook events, file edits, and workspace tree hashes. Turn snapshots are stored on git refs (refs/oobo/turns/v1/...) and enable oobo goto to restore exact workspace state at any point in a session.

Turn Snapshots

Each turn snapshot records:
  • Files changed during the turn (with pre/post blob hashes)
  • Tool calls and hook events observed
  • Model and token usage
  • Cross-repo file edits (when an agent modifies files outside the home repo)
  • Transcript path (when transparency is on)
Turn data feeds into anchors at commit time, providing per-turn provenance for every committed line.

Projects

A project is any git repository where oobo is enabled. Projects are found during oobo setup or normal command use. Run bare oobo outside a repo to see a project picker.

Disabling a Project

When a repo is disabled, hooks do not fire - no anchor creation, no orphan branch writes, no session discovery. On first use in a new repo, oobo prints a one-time notice: