Skip to main content

AI Agent Integration

Atomic is the first version control system designed for AI-assisted development. Agent identity, provenance, and attestation are core concepts — not bolted-on metadata flags.

How It Works

When you enable agent hooks, Atomic automatically records every agent turn as a change with full metadata. No manual flags, no wrapper scripts, no environment variables.

You prompt the agent → agent modifies files → Atomic records the turn

├── Change: "Turn 3: Fix the auth bug"
├── Provenance: anthropic/claude-sonnet-4-5, session, turn #3
├── Envelope: timing, files touched, model info
├── Provenance Graph: goal → explorations → commitments → verification
└── Attestation: session cost, token breakdown, model usage (at session end)

The Agent Lifecycle

Each agent session follows a well-defined lifecycle managed by the TurnOrchestrator:

┌─────────────────────────────────────────────────────────────────────┐
│ Agent Session │
│ │
│ session-start │
│ ├── Create isolated agent view (Draft, parent: current) │
│ ├── Initialize provenance accumulator │
│ └── Switch working copy to agent view │
│ │
│ Turn 1: │
│ ├── user-prompt → Goal node in provenance graph │
│ ├── after-tool → Exploration/Commitment/Verification nodes │
│ ├── after-tool → (more tool nodes...) │
│ └── stop → record change → PatchProposal node │
│ → save ProvenanceGraph to repository │
│ │
│ Turn 2: │
│ ├── user-prompt → New goal node (chains to previous) │
│ ├── after-tool → ... │
│ └── stop → record change → save ProvenanceGraph │
│ │
│ session-end │
│ ├── Create Attestation (enriched with model/cost/token data) │
│ ├── Switch back to user's original view │
│ └── Clean up session state │
│ │
└─────────────────────────────────────────────────────────────────────┘

Setup

1. Install an Integration

Choose the adapter for your agent and install it into the agent's normal configuration:

IntegrationAgent
atomic-claudeClaude Code
atomic-codexCodex
atomic-clineCline
atomic-piPi
atomic-copilotGitHub Copilot
atomic-cursorCursor
atomic-opencodeOpenCode

Some adapters are global hooks or plugins. Others also require repo-local instruction files so the agent follows the Atomic intent workflow in each project.

Installing Agent Integrations

2. Work Normally

Use your agent as you always do. Atomic hooks fire automatically on each lifecycle event.

3. Review What Happened

# See the recorded changes
atomic log

# Check session status
atomic agent status --verbose

# Inspect attestations (cost, tokens, model breakdown)
atomic agent attest

# Generate reasoning summaries
atomic agent explain <session-id> --all --save

What Gets Recorded

Every agent turn produces an Atomic change containing:

DataWhereDescription
Change headerhashed.headerMessage, author, timestamp
Provenancehashed.provenanceModel, provider, session ID, turn number, token usage, cost
Session envelopehashed.metadataTurn timing, files touched, agent identity
Graph operationshashed.atomsThe actual content changes (vertices + edges)
Semantic operationshashed.file_opsLine and token-level operations for human-readable diffs
TranscriptunhashedCondensed conversation (redactable, doesn't affect hash)

Because provenance and the session envelope are in the hashed section, they are part of the change's cryptographic identity. Tampering with attribution changes the hash — it's tamper-evident by construction.

Agent Identity

Agent changes are attributed using Ed25519 signatures with a +tag email format that links back to the human developer:

User identity:    Lee Faus <lee@atomic.dev>
Agent author: claude+60f5 <lee@atomic.dev>

The +tag is a short hash of the session ID — every agent turn traces back to a specific session and a specific human.

AgentExample Author
Claude Codeclaude+60f5 <lee@atomic.dev>
Gemini CLIgemini+abcd <lee@atomic.dev>
OpenCodeopencode+9876 <lee@atomic.dev>

Agent Isolation with Views

When a session starts, Atomic automatically creates an isolated agent view (Draft, parent: current view). All agent work happens on this view:

# Before session: you're on "dev"
# Session starts: Atomic creates "agent-ses_3781fc..." (Draft, parent: dev)
# Agent works on its isolated view
# Session ends: Atomic switches back to "dev"

Agent views use the single canonical graph with view filters:

  • All edges are written directly to GRAPH (single source of truth)
  • The agent view's filter chain (agent → dev → main) determines which edges are visible
  • The agent sees the full project context plus its own isolated changes

When you're done, insert changes into the parent and delete the agent view:

# Insert specific changes from the agent view
atomic insert <change-hash> --to dev

# Delete the agent view — removes VIEW_CHANGES entries, orphaned edges cleaned by GC
atomic view delete agent-ses_3781fc...

Supported Agent Integrations

IntegrationAgentHook or Extension ModelRecording Boundary
atomic-claudeClaude CodeNative Claude Code hooksTurn end
atomic-codexCodexCodex hooksTurn end, with current hook limitations
atomic-clineClineExecutable hook scriptsTask completion
atomic-piPiPi extensionTurn end
atomic-copilotGitHub CopilotRepository hook manifestSession end
atomic-cursorCursorCursor hooksTurn end
atomic-opencodeOpenCodeOpenCode pluginSession idle / turn end

All integrations share the same Rust-side orchestrator. The only difference is how hooks are installed and how events are parsed — the adapter normalizes agent-specific events into common TurnEvent values before the orchestrator processes them.

Key Concepts

Provenance Graphs

Every agent session builds a causal decision DAG — not just what changed, but why. Tool calls are classified into node types (Exploration, Commitment, Verification) with causal edges inferred automatically.

Learn more about Provenance Graphs

Attestations

When a session ends, Atomic creates an attestation — a graph-level audit node summarizing cost, token usage, model breakdown, and which changes are covered.

Learn more about Attestations

Next Steps