Skip to main content

Overview

Oobo is designed to be used by AI agents, not just humans. Every command supports two structured output modes, and oobo ships with a skill file that agents can read to discover its capabilities.

Output modes

Two global flags control structured output. They work on every command and are mutually exclusive.
FlagFormatUse when
--agentCompact text — pipe-delimited rows for lists, key: value for single objectsDefault for agents. Minimal token cost.
--jsonFull JSONYou need the complete object graph (messages, file attribution, etc.)
Prefer --agent. Fall back to --json when compact output lacks a field you need (e.g. sessions show --agent omits messages; sessions show --json includes them).

—agent examples

Lists start with a schema header, then one record per line:
# scope: project
# session_id | name | source | model | in_tokens | out_tokens | updated
abc123 | Fix auth bug | Cursor | claude-sonnet-4 | 12.5K | 28.1K | 2026-03-22
Single-object commands print key-value pairs:
version: 0.1.10
config: /Users/dev/.oobo/config.toml
tools: cursor, claude, gemini
sessions: 42

Skill file

Oobo installs a skill file at ~/.oobo/skills/oobo/SKILL.md during oobo setup, with symlinks in:
  • ~/.agents/skills/oobo/ (universal — always created)
  • ~/.claude/skills/oobo/, ~/.codex/skills/oobo/, ~/.cursor/skills/oobo/, ~/.gemini/skills/oobo/ (created when the tool is already installed)
The skill file tells agents how to check if oobo is installed, how to install it, every available command, output field descriptions, and recommended configuration.
oobo agent    # print the skill file
SettingValueWhy
transparency.modeonMetadata + redacted transcripts sync
git.alias_enabledtrueAutomatic enrichment on every commit
server.synctrueAuto-push anchor data to backend
--agent flagAlwaysCompact output, minimal token cost

Agent lifecycle hooks

For tools that support it (Cursor, Claude Code, Gemini CLI, OpenCode), oobo installs hooks that track session start/end, tool calls, subagent spawns, and thinking events. This enables real-time session linking during commits.
echo '{"session_id":"<id>","agent":"cursor","model":"claude-opus-4"}' | oobo hooks agent session-start
echo '{"session_id":"<id>"}' | oobo hooks agent session-end
Session state files live at .git/oobo-sessions/<id>.json. Oobo reads them at commit time to link sessions to anchors. For tools without hook support (Aider, Copilot, Windsurf, Zed, Trae, Codex), oobo discovers sessions from tool storage after the fact via time-window correlation.

Agent-first setup

Installation

curl -fsSL https://oobo.ai/install.sh | bash -s -- --agent
# → {"status":"ok","version":"...","binary":"...","platform":"..."}

Non-interactive configuration

mkdir -p ~/.oobo
cat > ~/.oobo/config.toml << 'EOF'
[git]
alias_enabled = true

[transparency]
mode = "on"
EOF
oobo alias install
oobo scan

JSON field reference

These are the fields returned by --json. The --agent flag returns the same data in compact text. anchors: commit_hash, message, author, author_type, branch, committed_at, contributors[], files_changed[], added, deleted, file_changes[], ai_percentage, sessions[] (each with session_id, agent, model, link_type, files_touched[], parent_session_id?, subagent_type?, peer_session_ids[]), transparency_mode, file_interactions[]? sessions list: session_id, name, source, mode, project_path, created_at, updated_at, model, input_tokens, output_tokens, duration_secs, is_estimated, files_touched, tool_calls, parent_session_id?, subagent_type?, peer_session_ids[]? sessions show: All list fields plus messages[] (role, text, timestamp_ms), message_count stats: sessions, input_tokens, output_tokens, total_tokens, per_tool[], per_model[], ai_code, productivity, daily[] share: session_id, source, model, messages[], stats, shared_at, oobo_version