跳到主要内容

概览

arc 是操作 ARC 运行时实例的命令行工具:AFS 文件系统、身份与信任、密钥、部署、AUP DSL,都通过它来管理。

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 connectarc 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 会点名你多半想输的那几条命令,然后打印完整的命令列表(这里在建议之后就截断了):

bash
$ arc serivce list
ERROR: Unknown command: "serivce"

Did you mean?
  arc serve
  arc service

候选接近时它会把每个都列出来,而不是替你猜:serivce 距离 serveservice 都只差一次编辑,所以两条都打印出来。拼错的退出码是 5,跟其它用法错误一样——每个码分别是什么意思,见退出码

同一套机制往下一层,也能抓住子命令名或选项名的拼错——都只在那一条命令自己的候选范围内比对,退出码同样是 5

bash
$ 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

bash
$ arc service list --help
arc service list

List every local instance with its status, port and home
...

预览一条破坏性命令

--dry-run 不是全局选项。有六条命令带它——arc afs deletearc blocklet buildarc deployarc service deletearc space migratearc space sync;有三条带 --yes 跳过确认提示——arc afs deletearc service deletearc did issuer resetafs deleteservice delete 两个都带)。arc space sync --dry-run 会把整个计划报告出来,什么都不写(这里只截取到汇总部分,省略了引擎选择和耗时那几行)。

bash
$ 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 取值。