Commits and anchors
A git commit is a snapshot of your code at a point in time. It 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. The anchor is attached to a specific commit hash, so you can always trace back from a line of code to the conversation that produced it.| Field | What it stores |
|---|---|
commit_hash | The git commit this anchor is attached to |
message | Commit message |
author | Git author |
author_type | agent, assisted, human, or automated |
contributors | All participants (humans + AI tools with model info) |
branch | Branch name |
committed_at | Timestamp |
sessions | Array of linked AI session IDs (each with files_touched) |
files_changed | List of modified files |
added / deleted | Aggregate diff stats |
file_changes | Per-file breakdown: path, added/deleted, attribution (ai/human/mixed), agent |
ai_added / ai_deleted | Lines attributed to AI |
human_added / human_deleted | Lines attributed to human |
ai_percentage | AI contribution percentage (0–100) |
Author types
Oobo classifies every commit into one of four author types based on what was happening when the commit was created:| Type | When it applies |
|---|---|
agent | An AI agent made the commit autonomously (no human in the loop) |
assisted | A human committed while one or more AI sessions were active |
human | No AI session was active during the commit |
automated | Non-interactive commit (CI, scripts, bots) |
Where anchors are stored
Anchors are stored in two places:- Local SQLite at
~/.oobo/db/oobo.db. Always written, powers all queries and analytics. - Git orphan branch
oobo/anchors/v1. Always written on every intercepted commit (unless the project is ignored). This branch travels with the repo.
git log, git diff, or your working tree. It is a separate git ref that carries metadata alongside your code. The pre-push hook always pushes this branch if it exists. Teammates can run oobo sync to import the anchor history into their local database.
Sessions
A session represents a single AI coding conversation. Oobo discovers sessions by reading the local storage of each supported tool (Cursor’s SQLite databases, Claude Code’s JSONL files, Gemini’s JSON files, etc.).| Field | What it stores |
|---|---|
session_id | UUID (prefix-matchable: abc12 matches abc12def-...) |
name | Session title or first message |
source | Tool name (cursor, claude, gemini, etc.) |
mode | Interaction mode (composer, chat, agent, etc.) |
project_path | Associated project directory |
model | AI model used |
input_tokens / output_tokens | Token counts (native or estimated) |
duration_secs | How long the session lasted |
is_estimated | true if tokens are tiktoken estimates, false if native |
created_at / updated_at | Timestamps |
Token sources
Some tools store exact token counts in their local data (Claude Code, Gemini CLI, OpenCode, Codex CLI). For tools that don’t (Cursor, Copilot, Windsurf), oobo estimates tokens using tiktoken and marks them withis_estimated: true.
You can also configure API keys (oobo auth anthropic, oobo auth openai) to pull actual usage data from provider APIs, which gives you organization-level token numbers.
Session IDs
Every session has a UUID. You can reference sessions by their full ID or any unique prefix:oobo sessions) or JSON output (oobo sessions list --agent).
Transparency
Anchor metadata (sessions, attribution, stats) always syncs to the orphan branch on every intercepted commit. There is no opt-out for metadata — it is the core product behavior. To stop all oobo activity for a repo, useoobo ignore.
Transparency controls one thing: do redacted session transcripts also sync?
| Mode | What syncs to orphan branch |
|---|---|
off (default) | Anchor metadata only. Transcripts stay local. |
on | Anchor metadata + redacted session transcripts. |
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.toml and can be overridden per-project via the DB project_settings table.
Projects
A project is any git repository where oobo has discovered AI sessions. Projects are found automatically duringoobo scan by checking workspace metadata from each AI tool.
Projects are stored in the global SQLite database with their path, git remote, associated tools, session count, and aggregate token stats.
