arc is the command line tool for operating an ARC runtime instance. Every top-level command talks to one part of that runtime: afs is file system operations, did is identity and trust, vault is encrypted secrets, deploy handles deployment targets, dsl works with AUP DSL artifacts, and so on.
Version documented here: 2.0.0-beta.48 (5a5316bde), built 2026-09-10. arc --version always prints this three-field form — <semver> (<commit>) <build date> — because the same beta.N string gets reused across different builds; the commit is what actually pins the command surface. Run arc --version to check yours; commands and options can change between builds.
If arc is not on your PATH yet, start with Install.
arc worker manages ArcBlock's own Cloudflare deployments. It registers behind two gates that must both hold: a build-time flag that's off in any release build (so the binary you install with install.sh never has it), and a runtime check that the current working directory is inside a real ArcBlock/arc checkout, or ARC_WORKER_DIR is set explicitly (so even a debug build made from that checkout won't show arc worker when you run it from somewhere else). It isn't listed below.
arc space sync-bench is a hermetic benchmark driver for arc's own afs-rpc wire, not a product feature — there's nothing a third party would run it to accomplish with their own data. It registers behind the same build-time flag as arc worker (off in any release build), just without arc worker's extra checkout-location check. It isn't listed below either.
arc connect and arc explore were removed: both duplicated things the daemon already does (arc service start prints every endpoint including /explorer, so there's no separate step to start-and-open). Use arc service start instead.
Global options
Every command accepts the same flags:
--json: print structured JSON instead of the default text output--view <default|llm|human|json>: pick a rendering style;llmis tuned for feeding output back into an agent,humanfor a person reading a terminal,jsonis equivalent to--json--instance <name>/-i: which local ARC instance this command operates against (seearc service list). Omit for thedefaultinstance. This is the only name for that axis--home <dir>: instance root. Used byarc service start(create),--standalone(ad-hoc), andarc did init(identity). To pick which instance, use--instance
--json and --view only change how the result prints. They apply to command output, not to --help itself; help text is always plain text. --instance and --home change which instance the command talks to.
An unrecognized flag is rejected (ERROR: Unknown argument: <name>, exit code 5) — arc does not silently ignore a mistyped or removed option, and help/error text is always in English regardless of your system locale. --yaml was one such removed option (advertised on every command's --help but never implemented); use --json or --view json instead.
When you mistype a command
A misspelled top-level command is not simply rejected — arc names the commands you probably meant, and then prints the full command list (trimmed after the suggestion here):
$ arc serivce list
ERROR: Unknown command: "serivce"
Did you mean?
arc serve
arc serviceA near-tie offers every candidate rather than guessing between them: serivce is one edit away from both serve and service, so both are printed. Mistyping exits 5, like any other usage mistake — Exit Codes covers what each code means.
The same mechanism catches a misspelled subcommand or a misspelled option, one level down — always scoped to just that one command's own choices, and always still exit 5:
$ arc service strat
ERROR: Invalid values:
Argument: action, Given: "strat", Choices: list, start, stop, restart, status, delete, gc, url, logs
Did you mean?
arc service start
...
$ arc service start --instnace foo
ERROR: Unknown argument: instnace
Did you mean?
--instance
...Fix any of the three and the same command runs normally, exit 0:
$ arc service list --help
arc service list
List every local instance with its status, port and home
...Previewing a destructive command
--dry-run is not a global flag. Six commands take one — arc afs delete, arc blocklet build, arc deploy, arc service delete, arc space migrate, and arc space sync — and three take --yes to skip a confirmation prompt: arc afs delete, arc service delete, and arc did issuer reset (afs delete and service delete take both). arc space sync --dry-run reports the entire plan and writes nothing (trimmed here to the summary; the engine-selection and timing lines are omitted).
$ arc space sync --from ./src --to ./dst2 --dry-run
./src ⇢ (dry-run) ./dst2
Base path: /
Mode: additive
Added: 2
Modified: 0
Deleted: 0
Unchanged: 0
Transferred: 0 filesTransferred: 0 files is the point — the plan says two files would be added, and the destination is still empty afterwards. arc blocklet build --dry-run behaves the same way: it prints the manifest it would publish, and leaves no dist/ behind.
Every other command has neither a preview nor a confirmation prompt. arc space rm in particular has neither --dry-run nor --yes: it removes a file or directory inside a local app space as soon as you press enter. Look before you delete, with arc space tree <app-did>.
Command groups
afs
File system operations: ls, read, write, delete, stat, exec, explain, search, subscribe, and mount management.
did
Identity and trust: generate a DID, issue and verify credentials, manage trusted issuers.
vault
Encrypted secret storage: init, get, set, list, delete.
dsl
Validate, lint, format, generate, and inspect AUP DSL artifacts.
collections
Scan content/ and generate the collections: fragment for blocklet.yaml.
space
Manage local DID Space data: list, tree, path, rm, sync between two subtrees, folder-space claim and repair, folder-layout migration.
deploy
Register a blocklet with the local daemon, or publish it to a DID Space.
blocklet
Blocklet package and instance lifecycle: scaffold, build, check, deploy, fleet deploy.
service
Manage named AFS background instances: list, start, stop, restart, status, delete, gc, url, logs.
serve
Start a foreground AFS server over HTTP or MCP.
attach
Reverse-mount a local directory, or this host's HostFace, into a remote arc daemon.
drain
Long-running: watch the work ledger and dispatch ready work to an idle peer.
mcp
Bridge stdio to a running AFS daemon's MCP endpoint.
skill
Bundled how-to booklets: list, show, install into host agent skill dirs (not full skill package manager yet).
provider
Provider package operations: publish a provider's resources to CF Pages.
upgrade
Upgrade arc itself to the latest release, or a pinned version.
network
Diagnose outbound connectivity: proxy discovery, DNS, HTTPS and WebSocket, each reported separately.
completion
Print a bash, zsh, or fish tab-completion script to stdout: command names, subcommand names, instance names, and --recipe values.