arc 是操作 ARC 运行时实例的命令行工具。每个顶层命令对应运行时的一部分:afs 管文件系统操作,did 管身份与信任,vault 管加密密钥存储,deploy 管部署目标,dsl 管 AUP DSL 相关操作,等等。
本文档对应版本:2.0.0-beta.48 (5a5316bde),构建于 2026-09-10。arc --version 固定打印这个三段式——<semver> (<commit>) <构建日期>——因为同一个 beta.N 字符串会在不同构建之间复用,真正钉住命令面的是 commit。用 arc --version 查你自己的版本,不同构建之间命令和参数可能有变化。
如果 arc 还不在 PATH 上,先看 安装。
arc worker 管理的是 ArcBlock 自己的 Cloudflare 部署。它要同时过两道闸才会注册:一是编译期开关,任何 release 构建都是关的(所以 install.sh 装的那个二进制永远没有它);二是运行期检查,要求当前工作目录在一个真实的 ArcBlock/arc checkout 里面,或者显式设了 ARC_WORKER_DIR——所以即便是从那个 checkout 构建出来的 debug 版本,只要在 checkout 外面跑,也一样看不到 arc worker。下面没有列出来。
arc space sync-bench 是 arc 自己 afs-rpc 链路的一个 hermetic 压测驱动器,不是一个产品特性——没有第三方会拿它去对自己的数据做什么事。它挂在和 arc worker 同一个编译期开关后面(release 构建里是关的),只是少了 arc worker 那道额外的 checkout 路径检查。下面也没有把它列出来。
arc connect 和 arc explore 已被删除:两者都在重复 daemon 已经提供的能力(arc service start 会打印全部 endpoint,包括 /explorer,不需要单独一步"启动并打开")。改用 arc service start。
全局选项
每个命令都接受同样几个选项:
--json:输出结构化 JSON,不是默认的文本--view <default|llm|human|json>:选择渲染风格,llm是为了把输出喂回给 agent 用的,human是给人在终端里读的,json等价于--json--instance <name>/-i:这条命令作用在哪个本地 ARC 实例(见arc service list)。省略即default实例。这根轴只有这一个名字--home <dir>:实例根。用于arc service start(创建)、--standalone(ad-hoc)、arc did init(身份)。要指定作用在哪个实例,用--instance
--json 和 --view 只改变结果怎么打印。它们作用于命令的输出,不影响 --help 本身,帮助文本永远是纯文本。--instance 和 --home 决定命令作用在哪个实例上。
未识别的参数会被拒绝(ERROR: Unknown argument: <name>,退出码 5)——arc 不会静默忽略一个拼错或已删除的选项,且帮助/报错文本永远是英文,不随你系统的 locale 变化。--yaml 就是这样一个已删除的选项(曾经在每个命令的 --help 里宣传,但从未真正实现);改用 --json 或 --view json。
命令拼错的时候
顶层命令拼错不会只是被拒绝——arc 会点名你多半想输的那几条命令,然后打印完整的命令列表(这里在建议之后就截断了):
$ arc serivce list
ERROR: Unknown command: "serivce"
Did you mean?
arc serve
arc service候选接近时它会把每个都列出来,而不是替你猜:serivce 距离 serve 和 service 都只差一次编辑,所以两条都打印出来。拼错的退出码是 5,跟其它用法错误一样——每个码分别是什么意思,见退出码。
同一套机制往下一层,也能抓住子命令名或选项名的拼错——都只在那一条命令自己的候选范围内比对,退出码同样是 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
...把三处里任意一处改对,同一条命令就正常跑起来,exit 0:
$ arc service list --help
arc service list
List every local instance with its status, port and home
...预览一条破坏性命令
--dry-run 不是全局选项。有六条命令带它——arc afs delete、arc blocklet build、arc deploy、arc service delete、arc space migrate、arc space sync;有三条带 --yes 跳过确认提示——arc afs delete、arc service delete、arc did issuer reset(afs delete 和 service delete 两个都带)。arc space sync --dry-run 会把整个计划报告出来,什么都不写(这里只截取到汇总部分,省略了引擎选择和耗时那几行)。
$ 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 files关键在 Transferred: 0 files——计划说会新增两个文件,而跑完之后目标目录仍然是空的。arc blocklet build --dry-run 也是一样:它打印出它将要发布的 manifest,不留下任何 dist/。
除这几条之外,既没有预览,也没有确认提示。特别注意:arc space rm 既没有 --dry-run 也没有 --yes,你一按回车,它就把本地 app space 里的那个文件或目录删掉了。删之前先用 arc space tree <app-did> 看清楚。
命令组
afs
文件系统操作:ls、read、write、delete、stat、exec、explain、search、subscribe,以及挂载管理。
did
身份与信任:生成 DID、签发和验证凭证、管理受信任的签发方。
vault
加密密钥存储:init、get、set、list、delete。
dsl
校验、检查、格式化、生成、检视 AUP DSL 产物。
collections
扫描 content/,为 blocklet.yaml 生成 collections: 片段。
space
管理本地 DID Space 数据:list、tree、path、rm、在两棵子树之间同步、文件夹形态的认领与修复、文件夹布局迁移。
deploy
把一个 blocklet 注册到本地 daemon,或者发布到 DID Space。
blocklet
blocklet 包和实例的生命周期:脚手架、构建、检查、部署、舰队部署。
service
管理具名 AFS 后台实例:list、start、stop、restart、status、delete、gc、url、logs。
serve
通过 HTTP 或 MCP 启动一个前台 AFS 服务。
attach
把本地目录、或者这台主机的 HostFace,反向挂载进远程 arc daemon。
drain
长驻进程:盯着工作台账,把就绪的工作派给一个空闲 peer。
mcp
把 stdio 桥接到运行中 AFS daemon 的 MCP endpoint。
skill
内置 how-to booklet:list / show / 装进宿主 skill 目录(尚非完整 skill 包管理)。
provider
provider 包相关操作:把一个 provider 的资源发布到 CF Pages。
upgrade
把 arc 本身升级到最新版本,或者指定的固定版本。
network
诊断出站连通性:代理发现、DNS、HTTPS、WebSocket,每一项单独报告。
completion
把 bash / zsh / fish 的 tab 补全脚本打到 stdout:命令名、子命令名、实例名,以及 --recipe 取值。