Bootstrap a running ARC daemon so L1 paths (mounts, blocklets, MCP, UI/WM) become real.
Prefer
- Discover this catalog first:
arc skillorarc skill list - Load only the booklet you need:
arc skill show <name> - Prefer JSON for agents:
arc skill list --json(or global--jsonwhen supported)
Safe rules
- Prefer inspecting status before mutating:
arc service status. - Do not kill or force-stop a daemon you did not start unless the human explicitly asked.
- Never stop
purpose=observedaemons. Session end is not a stop. Killing observe is a contract break — the row stays in/dev/instancesas DOWN, it does not disappear. - Prefer attaching to an already-running daemon over spawning a second conflicting instance on the same
--home/port. - Discovery commands must be side-effect free. Do not probe by starting long-lived servers "just to see help".
- Optional isolation:
arc service start --instance <name> --home <dir>(seearc service start --help).
Typical flow
arc --help
arc skill list
arc service status
# Start when needed (check --help for flags)
arc service start
# or: arc service start --instance <name> --port <port> (named instance)
arc service status
# Then L1 — targets the instance you just started:
arc afs ls /
arc afs explain /
arc afs read /.knowledge
Started a named instance (arc service start --instance <name>) instead of the
default one? arc afs never guesses which world you mean — add
--instance <name> to every arc afs call in this booklet (bare arc afs
targets the default instance and fails closed, non-zero exit, if that one
has no daemon running). arc skill show afs covers this in depth.
arc service start registers this daemon in the machine instance catalog ($ARC_INSTANCES_DIR, default ~/.arc/instances). Clean arc service stop removes the row. Crash leftovers stay until GC.
Headless Linux / no D-Bus session? Read Headless vault below before arc service start — do not invent a vault key.
Headless vault (Linux / no GUI)
Linux OS keychain is Secret Service (secret-tool). A headless box often has no secret-tool and no D-Bus session. In that state the daemon will not invent a new master key (minting one would make existing vault.enc files undecryptable).
Working pattern: dbus-run-session + AFS_VAULT_KEY=<64 hex> on the daemon process (arc service start), not a later CLI client shell. Exporting the key only where you run arc afs does not reach vault bootstrap.
dbus-run-session -- env AFS_VAULT_KEY=<64-hex> arc service start
dbus-run-session -- env AFS_VAULT_KEY=<64-hex> arc service start --instance <name> --home <dir>
AFS_VAULT_KEY must be exactly 64 hex characters (32 bytes). First-run with no existing vaults: openssl rand -hex 32. Existing vaults need the original key, not a newly generated one.
Wrong length or format does not unlock the vault. You hit key already exists / refusing overwrite. Recovery: set the correct 64-hex AFS_VAULT_KEY on arc service start and restart the daemon. Do not overwrite the keychain entry.
Instance catalog (/dev/instances)
This is the local instance catalog, not AFS small-world and not /peers.
arc afs ls /dev/instances --instance <name>
arc afs read /dev/instances/<id> --instance <name>
- Default
lslistspurpose=observerows.purpose=evidence(short-lived ui-verify) is omitted from the default list; read by id still works. - Set purpose at start time:
arc service start --instance <name> --purpose observe|evidence(default observe). Invalid value fails closed before the instance is claimed.restartreuses whatever the instance was already recorded with —--purposeis refused there, same as--port/--host. ARC_INSTANCE_PURPOSEis retired — setting it prints a warning and is ignored; it is no longer a way to set purpose.- Do not invent a second discovery path. Do not scan ports. Do not stop observe instances to "clean up".
Stale registry files (dead pid) are catalog leftovers, not running daemons. Inspect, then GC:
arc service list
arc service gc
arc service gc (alias prune) drops dead registry rows only. It does not stop daemons. Do not arc service stop a purpose=observe instance to "clean up".
After daemon is up (L1)
Dynamic inventory lives in AFS, not in this booklet:
- Always start discovery with:
arc afs ls / --instance <name>,arc afs explain / --instance <name>,arc afs read /.knowledge --instance <name>(omit--instanceonly for the default instance) - Instance catalog:
arc afs ls /dev/instances --instance <name> - Multi web-terminal + WM:
arc skill show afs→ section WM / multi-terminal - MCP:
arc skill show mcp
Next skills after the daemon is up
arc skill show afs # paths, /.knowledge, WM panels
arc skill show site # create-site / themes — full website path
arc skill show space # DID Space — persist without DB+object store
arc skill show index # /modules/index — FTS / anchors / optional vectors
arc skill show blocklet # create / build / list blocklets
arc skill show site # create-site, serve vs build, :4900 vs web host vs *.localhost
arc skill install afs # optional: write SKILL.md into .agents/.claude
Related
- Catalog:
arc skill list - AFS ops:
arc skill show afs - Site / data plane / URLs:
arc skill show site(and livearc afs explain /web),arc skill show space,arc skill show index - Local Pages deploy:
arc skill show site— daemon envAFS_TEST_PAGES_LOCAL=1or deploy{ local: true } - Install:
arc skill install daemon(orinstall all)