ΛRC · Docs

New to Arc? Start with what it is and how an agent uses it. This page is the reference.

Quick start · Capture · Many agents & host mode · Relay sync · Purge · Narration · Feedback · Platforms

Quick start

C’mon, your agent will do this automatically, meatbag.

curl -fsSL https://arc.daystra.com/install.sh | sh
cd my-project
arc init

arc init starts capture and sets up the agent:

PathPurpose
.arc/Snapshot database and object store
.arcignoreDefault ignore patterns
.mcp.jsonMCP server config, auto-discovered by Claude Code
.claude/settings.local.jsonPre-authorizes mcp__arc__*, so Arc tools never trigger permission prompts
.claude/skills/arc-source-control/Teaches new agent sessions the Arc workflow

First commands:

arc status                            # is capture live?
arc snapshots                         # history
arc snapshot diff 20 25               # what changed between two points
arc reset 15                          # go back
arc intent declare "refactor auth"    # start a unit of work
arc intent complete                   # finish it

Joining a project that already lives on a relay takes one command, which creates the directory, pulls the full history, and writes the files:

arc clone /Volumes/backup/arc         # filesystem relay, no credential needed
arc clone --bundle invite.json        # R2 relay, from a read-only invite

If you already ran arc init in that directory, connect the relay instead: arc remote add <path-or-bundle> --pull, then arc sync pull --materialize. Materialize is a merge: it folds every live peer's work into your files, and any path changed on both sides is refused by name and left untouched, with its fix in the output.

How capture works

The timeline. A base timeline has worktree spurs. Declaring an intent forks an isolated physical copy of the project (an APFS clone on macOS; a btrfs reflink on Linux when the filesystem supports it, otherwise a full copy), and its snapshots form a separate chain tagged with the worktree, kept out of base until merge. A merge writes one new base snapshot. An abandoned spur stays in history for inspection and never reaches base. Nothing is rewritten.

base timeline integration target — where work lands after merge #810 #811 #812 #813 #814 (merge A) #815 (merge B) wt A · 1st wt A · last fork @ #811 worktree A — intent #27 abandoned ✕ worktree B — intent #25 (no merge) base snapshot merge snapshot worktree snapshot abandoned spur

Many agents, one project

Each agent session runs its own arc mcp-server process. All of them talk to one daemon per project (arc serve), which owns the file watcher and the capture pipeline. A kernel lock (flock on .arc/daemon.pid) enforces the one-daemon rule: a second daemon sees the lock and exits. If no daemon is running, the MCP server starts one.

Architecture diagram — agents → MCP → core → storage
Claude Code Primary integration Cursor / Windsurf MCP compatible Any MCP client MCP over stdio MCP Protocol (stdio) arc mcp-server (per session) → arc serve (daemon) arc_context arc_intent_merge arc_query_changes arc_intent_declare Arc Core Snapshots · Intents · Diffs · Config · Identity SQLite Metadata, events, intents Object Store BLAKE3 content Config & Keys TOML + Ed25519 all stored in .arc/ — single directory, no external dependencies
How it’s wired — sessions, sockets, and the lock
Claude Code Session A · Terminal 1 Claude Code Session B · Terminal 2 Claude Code Session C · Terminal 3 stdio · MCP arc mcp-server JSON-RPC client arc mcp-server JSON-RPC client arc mcp-server JSON-RPC client Unix socket · JSON-RPC · .arc/daemon.sock arc serve — daemon file watcher · capture pipeline · intent registry flock(LOCK_EX, .arc/daemon.pid) — one per project, kernel-enforced reads + writes .arc/state.db SQLite metadata .arc/objects/ BLAKE3 content .arc/daemon.sock RPC transport N sessions · N MCP servers · 1 daemon per project (or one arc host per machine)

A stopped daemon is usually dormant, not broken. A daemon stops itself after three idle days (daemon.idle_exit_after_secs, 0 = never). The next arc command or agent session restarts it, captures everything that changed while it was down, and records the gap. arc daemon status exits 3 for dormant and 1 only for a crash. Don’t keep a daemon alive just to avoid the dormant state; that state is by design.

Host mode (1.6, opt-in). Set [daemon] mode = "host" in ~/.arc/config.toml, and a single arc host process serves every project on the machine. On the developer’s machine, 24 projects run in one process of about 90 MB, instead of 24 processes at 8–10 MB each. Each project keeps its own lock, log and lifecycle, so a fault restarts that project alone. The arc daemon commands work unchanged and route to the host. arc host status reports JSON.

Persistence across logins (macOS). arc daemon install adds a launchd agent that starts the daemon at login and restarts it if it crashes. A supervised daemon does not idle-exit. In host mode, arc host install adds one agent for the whole machine: after a reboot or crash, the host comes back with every project it held, and it retires any per-project agents it finds. On Linux this is not implemented yet, so run arc serve under a supervisor you manage.


Relay sync

A relay is an off-machine copy of your substrate: every snapshot, intent and signed record. It serves as a backup, keeps a second machine current, and brings a fresh clone up to date. Pushes are incremental and deduplicated by hash. There are no force-pushes, no conflict markers, and no history rewrites.

arc remote add /Volumes/backup/arc                       # any mounted path: volume, NAS, server
arc relay provision --backend r2 --bucket my-arc --push  # Cloudflare R2: bucket, scoped token, wired
arc store add my-s3 --backend s3 --bucket my-arc --endpoint https://s3.example.com
arc relay add --store my-s3                              # any S3-compatible store (MinIO, RustFS, B2, ...)

arc relay invite --relay my-arc --out invite.json        # read-only invite; share it like a password
arc sync                                                 # where you stand, plus the one command to fix it
arc sync verify                                          # full parity verdict

Retroactive purge

Sometimes a leaked secret, a 33 GB build directory or a client file ends up in history. You declare what should never have been captured: the content leaves history and the relay, and the timeline stays. The machine you purge on keeps its local copy by design, as the backup.

arc purge preview "config/prod.env"                          # dry run: exactly what it hits
arc purge declare "config/prod.env" --reason "leaked credential"
arc purge remote 3 --relay my-arc --execute                  # expunge it from the relay too
arc purge list                                               # every purge is an audit record
arc purge restore 3                                          # reversible until GC

Narration

Narration is off by default, so nothing leaves your machine until you enable it. When it is on, each snapshot’s change context goes to the backend you pick: Anthropic, OpenAI, Gemini, Grok, any OpenAI-compatible endpoint, or local Ollama, which keeps everything on the machine. The API key is read from an environment variable, the Keychain, or sigil, and narration never prompts for it.

[narration]                              # ~/.arc/config.toml or .arc/config.toml
mode = "auto"
base_url = "http://localhost:11434/v1"   # Ollama
model = "llama3.2"

Feedback

Agents run Arc, so agents file the reports, without leaving the session, through the CLI or the arc_feedback MCP tool:

arc feedback --bug "what broke"
arc feedback --feature "what you want"
arc feedback --open                                              # what's unresolved
arc feedback --resolve <id> --resolved-in <version> --note "how"

Entries go to ~/.arc/feedback.md and to the Arc team (turn that off with arc config set feedback.remote false). Resolutions record the version that shipped the fix, so “is this fixed yet?” has an answer.

Update with arc update. To pin a version: VERSION=1.6.1 curl -fsSL https://arc.daystra.com/install.sh | sh.

Platforms and clients

Clients. Arc speaks standard MCP over stdio and doesn’t depend on any particular model or vendor.

Setup notes — permissions, paths, upgrades
Aside: the macOS Spotlight tax

On a Mac, Spotlight indexes build output and agent churn that nobody searches for. arc init drops a .metadata_never_index sentinel in .arc/, and arc doctor flags it if the sentinel goes missing. The sentinel only stops new indexing, so if Arc has been running for a while, clear the existing index once with mdutil -E /path/to/project/.arc. For other build directories, this script drops the same sentinel across a project.


macOS (Apple Silicon) · Linux (x86_64, early) · MIT License · Built by humans and agents, tracked by Arc

Copied to clipboard

A Cybercussion Interactive, LLC project