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