CLI 契约清单

本清单按 src/main.rs 记录 Holon 当前的 CLI 接口,并对照 target/debug/holon --help(holon 0.39.0)核验。 它是稳定性规划文档,不代表清单中的每条命令都已稳定。

当前实现把 CLI 收在一个 Rust 二进制中:

稳定性级别

这些标签背后的面向用户支持策略见 CLI 稳定性策略。

级别含义变更策略
stable面向公众的预期接口,用户和脚本可以合理依赖。避免破坏性变更;需要发布说明和迁移路径。
experimental公开可达,但仍在成型。1.0 前可能变化;移除前优先提供警告或别名。
internal调试、运行时或本地开发接口。不面向外部自动化;内部实现变化时可能改变。
deprecated为兼容而保留,但已被其他接口取代。记录替代方案,仅通过明确的废弃计划移除。

跨领域 CLI 契约

接口当前行为初始稳定性备注
命令解析器由 Clap 派生的命令树,根级带 --help 和 --version。stable命令名和标志名是价值最高的 CLI 契约。
帮助文本人类可读的 Clap 输出。experimental对用户有用;不应把确切的间距和措辞当作机器可读。
错误由二进制运行时渲染的 Clap 校验错误或 anyhow 错误。experimental在宣布稳定前,退出码形态需要明确的测试。
JSON 输出面向脚本的 JSON 命令通过共享的 print_json 路径向 stdout 打印美化 JSON。experimentalJSON 字段形态通常来自运行时/控制平面结构体,需要与 API 清册对齐。
人类输出run、solve、serve、debug latency、debug prompt 以及部分 debug/export 命令向 stdout 输出人类文本。experimental除非命令有意面向脚本,否则不要对完整措辞做快照。
stderrtracing 日志、Clap 错误、凭据提示以及部分 provider/运行时诊断。experimental凭据提示有意写到 stderr。
stdin目前只有 config credentials set --stdin 从 stdin 读取。stable 候选交互细节需要专门的测试。
配置/环境变量大多数命令加载 AppConfig;配置命令用 $HOLON_HOME 定位离线配置路径。experimental更广的环境变量范围见配置参考。

命令清单

根命令

命令参数选项输出初始稳定性备注
holon --helpnone-h, --help, -V, --version向 stdout 输出人类帮助stable 候选应由命令树快照测试覆盖。
holon <COMMAND> --help取决于命令取决于命令向 stdout 输出人类帮助形态为 stable 候选;措辞为 experimental命令形态变化时重新生成 cli.md。

服务器与守护进程

命令参数选项输出初始稳定性备注
holon servenone--access <local|tunnel|lan|tailnet> 默认 local;--host <HOST>;--listen <LISTEN>;--port <PORT>;--advertise <ADVERTISE>;--token <TOKEN>;--token-file <TOKEN_FILE>长期运行的服务器;启动摘要在 stdout;日志/tracing 在 stderrexperimental非 loopback/tailnet/lan 访问需要通过标志、文件或 HOLON_CONTROL_TOKEN 提供控制令牌。
holon daemon startnone与 serve 相同的 ServeOptionsJSON 守护进程生命周期响应stable 候选内联令牌通过环境变量传给子进程,而非 argv。
holon daemon stopnonenoneJSON 守护进程生命周期响应stable 候选使用本地守护进程生命周期辅助函数。
holon daemon statusnonenoneJSON 守护进程状态响应stable 候选重要的本地检查接口。
holon daemon restartnone与 serve 相同的 ServeOptionsJSON 守护进程生命周期响应stable 候选与 serve 相同的访问/令牌校验。
holon daemon logsnone--tail <TAIL> 默认 80JSON 守护进程日志响应stable 候选daemon logs 被记录为本地故障排查接口。

离线配置

这些命令直接操作持久化配置或凭据文件,不要求守护进程运行。

命令参数选项输出初始稳定性备注
holon config get<KEY>none该键的 JSON 值stable 候选可达时优先使用守护进程运行时配置 API,保持 stdout 形态;键集来自配置契约。
holon config set<KEY> <VALUE>none写入后的 JSON 值stable 候选可达时优先使用守护进程运行时配置 API,否则回退到离线模式,并在 stderr 报告 applied_via;守护进程的拒绝会透出原因。
holon config unset<KEY>noneJSON { "key": ..., "status": "unset" }stable 候选可达时优先使用守护进程运行时配置 API,否则回退到离线模式,并在 stderr 报告 applied_via;若脚本依赖该状态字符串,应将其锁定。
holon config listnonenone完整的持久化配置 JSONexperimental可达时优先使用守护进程运行时配置 API,保持 stdout 形态;会暴露较广的配置文件形态。
holon config schemanonenoneJSON 配置 schema/元数据stable JSON由 tests/cli_json_contract.rs 锁定;条目对象暴露 key、kind、description、default 以及可选的 allowed_values。
holon config doctornonenoneJSON provider/系统诊断experimental诊断形态可能随 provider 变化。
holon config models listnonenoneJSON 模型可用性列表experimentalProvider 目录和可用性细节仍在演进。

Provider 配置

命令参数选项输出初始稳定性备注
holon config providers set<PROVIDER>--transport <TRANSPORT>;--base-url <BASE_URL>;--credential-source <SOURCE> 默认 none;--credential-kind <KIND> 默认 none;--credential-env <ENV>;--credential-profile <PROFILE>;--credential-external <COMMAND>JSON { "applied_via": "offline_store", "provider": ... }命令形态为 stable 候选;provider 对象为 experimental内置 provider 可能拒绝不兼容的 transport 覆盖。
holon config providers get<PROVIDER>noneJSON provider 视图experimental输出使用运行时 provider 视图。
holon config providers listnonenoneprovider 视图的 JSON 数组/对象experimental输出形态应与 API/配置清册对齐。
holon config providers remove<PROVIDER>noneJSON { "applied_via": "offline_store", "provider": ..., "status": "removed|not_configured" }stable JSON由 tests/cli_json_contract.rs 锁定;状态字符串面向脚本。
holon config providers doctor<PROVIDER>noneJSON provider 视图加模型链诊断experimental诊断细节可能变化。

凭据配置

命令参数选项输出初始稳定性备注
holon config credentials set<PROFILE>必填 --kind <KIND>;--stdin 或 --material <MATERIAL> 二选一JSON { "applied_via": "offline_store", "credential": { "profile": ..., "kind": ..., "configured": true } }stable JSON由 tests/cli_json_contract.rs 锁定;--stdin 提示写到 stderr;raw --material 有意不推荐用于机密。
holon config credentials listnonenone带 profile、kind 和 configured 的 JSON 凭据 profile 列表;绝不包含凭据材料stable JSON由 tests/cli_json_contract.rs 锁定;绝不能暴露凭据材料。
holon config credentials remove<PROFILE>noneJSON { "applied_via": "offline_store", "credential": { "profile": ..., "kind": ..., "configured": false } }stable JSON由 tests/cli_json_contract.rs 锁定;不存在的 profile 返回 kind: "unknown" 和 configured: false。

Agent 交互与检查

除非另有说明,这些命令要求本地控制平面可达。

命令参数选项输出初始稳定性备注
holon prompt<TEXT>--agent <AGENT>JSON 控制平面 prompt 响应experimental轻量 prompt 路径;响应形态属于控制平面 API 清册。
holon tailnone--limit <LIMIT> 默认 20;--agent <AGENT>JSON 近期 brief/日志尾部stable 候选结果形态应与 brief/输出契约对齐。
holon transcriptnone--limit <LIMIT> 默认 50;--agent <AGENT>JSON transcript 条目stable 候选transcript 条目的稳定性需要 API 清册。
holon task run<SUMMARY>必填 --cmd <CMD>;--workdir <WORKDIR>;--shell <SHELL>;--login <true|false>;--tty;--yield-time-ms <MS>;--max-output-tokens <N>;--agent <AGENT>美化 JSON 控制平面响应experimental通过控制平面创建命令任务。
holon task status<TASK_ID>--agent <AGENT>美化 JSON TaskStatusSnapshotexperimental通过任务状态 API 读取任务生命周期状态。
holon task output<TASK_ID>--block;--timeout-ms <MS>;--agent <AGENT>美化 JSON TaskOutputResultexperimental输出预览长度遵循任务创建时的 --max-output-tokens;本命令只控制就绪等待。
holon task input<TASK_ID>必填 --text <TEXT>;--agent <AGENT>美化 JSON TaskInputResultexperimental向命令任务 stdin/TTY 或受监督子 Agent 的后续输入发送可信操作者文本。
holon task stop<TASK_ID>--agent <AGENT>美化 JSON TaskStopResultexperimental通过控制平面请求取消受管任务。
holon work-item listnone--limit <LIMIT> 默认 50;--agent <AGENT>WorkItemRecord 的美化 JSON 数组experimentalJSON schema 归属为 HTTP/API WorkItemRecord 读模型,由 /agents/:agent_id/work-items 返回。
holon work-item get<WORK_ITEM_ID>--agent <AGENT>美化 JSON WorkItemRecordexperimental通过 /agents/:agent_id/work-items/:work_item_id 读取单个工作项;create、pick、update、complete 子命令已存在,但其变更 API 契约仍在稳定中。
holon timernone旧式创建语法:必填 --after-ms <MS>;--every-ms <MS>;--summary <SUMMARY>;--agent <AGENT>美化 JSON TimerRecordexperimentalholon timer create 的向后兼容别名。
holon timer createnone必填 --after-ms <MS>;--every-ms <MS>;--summary <SUMMARY>;--agent <AGENT>美化 JSON TimerRecordexperimental通过控制平面创建一次性或重复定时器。
holon timer listnone--limit <LIMIT> 默认 50;--agent <AGENT>TimerRecord 的美化 JSON 数组experimental通过 agent 定时器 API 读取近期定时器。
holon timer cancel<TIMER_ID>--agent <AGENT>美化 JSON TimerRecordexperimental取消活跃定时器;已取消的定时器操作幂等。

Agent 生命周期与模型选择

命令参数选项输出初始稳定性备注
holon agent / holon agents可选子命令none默认为 agent list JSONstable 候选agents 是别名。
holon agent listnonenoneJSON agent 条目stable 候选公开的多 Agent 检查接口。
holon agent status可选 [AGENT_ID]noneJSON agent 状态stable 候选位置参数 agent id;默认为配置的默认 agent。
holon agent create<AGENT_ID>--template <TEMPLATE>美化 JSON 控制平面响应stable 候选模板标识符契约应与 Agent 初始化文档对齐。
holon agent repair<AGENT_ID>none美化 JSON AgentDetailexperimental重试未完成的创建后引导步骤,而不重建 Agent。
holon agent start可选 [AGENT_ID]noneJSON 生命周期控制响应stable 候选已废弃 control start 的替代。
holon agent stop可选 [AGENT_ID]noneJSON 生命周期控制响应stable 候选已废弃 control stop 的替代。
holon agent abort可选 [AGENT_ID]none美化 JSON 控制平面响应stable 候选已废弃 control abort 的替代;与 start/stop 共用生命周期 JSON 输出路径。
holon agent model get可选 [AGENT_ID]noneJSON 模型覆盖/状态片段stable 候选从 agent 状态读取 summary.model。
holon agent model set<MODEL> [AGENT_ID]noneJSON 模型覆盖响应stable 候选位置参数 AGENT_ID 已测试。
holon agent model clear可选 [AGENT_ID]noneJSON 模型覆盖响应stable 候选应与 set/get 共享契约。
holon control<start|stop|abort>--agent <AGENT>美化 JSON 生命周期响应deprecated使用 `holon agent start

已废弃的 holon control 兼容性记录在 CLI 稳定性策略。 新自动化应使用 holon agent ... 生命周期命令。

Skills

技能管理分为库操作和 Agent 启用两部分:

命令参数选项输出初始稳定性备注
holon skills catalognonenoneJSON catalog 响应experimental列出本地 Skill Library 中的所有技能。
holon skills refreshnonenoneJSON catalog 响应experimental重新扫描本地技能根目录以刷新运行时 catalog。不与锁文件对账,也不拉取远程更新。
holon skills add<SOURCE>--remote;--skill <SKILL>;--copy美化 JSON 控制平面响应experimental向本地 Skill Library 添加技能。本地路径为目录时相对 cwd 解析。
holon skills remove<NAME>none美化 JSON 控制平面响应experimental从本地 Skill Library 移除技能。
holon skills check[NAME]none美化 JSON 控制平面响应experimental对照 .skill-lock.json 检查 Skill Library 一致性。
holon skills reconcile[NAME]none美化 JSON 控制平面响应experimental将库条目与锁文件对账。
holon skills listnone--agent <AGENT>JSON agent 技能响应experimental列出某 agent 已启用/生效的技能。
holon skills enable<NAME>--agent <AGENT>;--copy美化 JSON 控制平面响应experimental为 agent 启用本地已知技能。
holon skills disable<NAME>--agent <AGENT>美化 JSON 控制平面响应experimental为 agent 禁用技能。
holon skills install<NAME_OR_PATH>--remote;--skill <SKILL>;--copy;--agent <AGENT>美化 JSON 控制平面响应deprecated兼容别名。库操作用 skills add,agent 用 skills enable。
holon skills uninstall<NAME>--agent <AGENT>美化 JSON 控制平面响应deprecated兼容别名。库操作用 skills remove,agent 用 skills disable。

一次性与 solve 工作流

命令参数选项输出初始稳定性备注
holon run<TEXT>--authority-class <AUTHORITY_CLASS> 默认 operator-instruction;--json;--agent <AGENT>;--create-agent;--template <TEMPLATE>;--max-turns <N>;--no-wait-for-tasks;--home <HOME>;--workspace-root <PATH>;--cwd <PATH>默认人类 render_text();带 --json 时为美化 JSON命令形态为 stable 候选;输出为 experimental核心用户入口。JSON 响应形态应在给出稳定自动化指引前锁定。
holon solve<REF>--repo <REPO>;--base <BASE>;--goal <GOAL>;--role <ROLE>;--agent <AGENT>;--template <TEMPLATE>;--model <MODEL>;--max-turns <N>;--authority-class <AUTHORITY_CLASS> 默认 operator-instruction;--json;--home <HOME>;--workspace <PATH>;--workspace-root <PATH>;--cwd <PATH>;--input <INPUT>;--output <OUTPUT>默认人类 render_text();带 --json 时为美化 JSONexperimentalGitHub/任务工作流接口。--workspace 与 --workspace-root 目前被合并。

Workspace

命令参数选项输出初始稳定性备注
holon workspace attach<PATH>--agent <AGENT>JSON attach 响应stable 候选Workspace 身份/投影契约是运行时稳定性的核心。
holon workspace exitnone--agent <AGENT>JSON exit 响应stable 候选应与 workspace 绑定 RFC 对齐。
holon workspace detach<WORKSPACE_ID>--agent <AGENT>JSON detach 响应stable 候选WORKSPACE_ID 的稳定性属于 API/运行时清册。

TUI

命令参数选项输出初始稳定性备注
holon tuinone--no-alt-screen;--connect <URL>;--token <TOKEN>;--token-file <PATH>;--token-profile <PROFILE>交互式终端 UIexperimental--connect 要求且仅要求一个令牌来源。TUI 不是主要的稳定运行时契约。

调试工具

命令参数选项输出初始稳定性备注
holon debug prompt<TEXT>--agent <AGENT>;--authority-class <AUTHORITY_CLASS> 默认 operator-instruction人类 prompt dumpinternal仅用于调试的 prompt 检查。
holon debug latencynone--agent <AGENT>;--limit <LIMIT> 默认 10;--events-limit <EVENTS_LIMIT> 默认 5000人类延迟报告internal有用的诊断;措辞不应作为机器契约。
holon debug scheduler-fixturenone--agent <AGENT>;必填 --output <OUTPUT>写出 JSON/JSONL fixture 文件;打印导出摘要internalFixture 文件形态对测试可能有用,但若稳定化应单独记录。
holon debug scheduler-recoverynone--agent <AGENT>;--json;--apply;--no-backup(要求 --apply)只读的规范化恢复诊断;可选的类型化 apply 结果internal默认只读。它是当前二进制中唯一允许打开紧邻的上一版 scheduler schema 而不迁移的命令,因此被阻塞的清理迁移仍可恢复。--json 输出 `{ "report": ..., "apply": null

CLI 触及的环境与配置输入

这不是完整的配置清册;它只列出在调用命令时明显影响 CLI 行为的环境变量。

输入使用方当前行为初始稳定性
HOLON_HOME配置/凭据与运行时配置加载选择 Holon home/配置/凭据路径。stable 候选
HOLON_HTTP_ADDR运行时/控制平面命令在加载 AppConfig 时选择本地控制平面 HTTP 地址。stable 候选
HOLON_CALLBACK_BASE_URLserve、运行时配置设置回调 base URL 默认值。experimental
HOLON_SOCKET_PATHdaemon/serve选择本地控制 socket 路径。experimental
HOLON_WORKSPACE_DIR运行时命令设置默认 workspace 目录。experimental
HOLON_AGENT_ID带可选 --agent / [AGENT_ID] 的命令设置默认 agent id。stable 候选
HOLON_CONTROL_TOKENserve、daemon、控制平面客户端配置提供 bearer token/控制认证。stable 候选
HOLON_CONTROL_AUTH_MODE控制平面配置解析 auto、required 或 disabled。experimental
HOLON_MODELrun、solve、provider 配置设置默认模型;solve --model 会为该进程写入此环境变量。stable 候选
Provider API-key 环境变量由 provider 支撑的命令例如 OPENAI_API_KEY、ANTHROPIC_AUTH_TOKEN,以及配置的自定义环境变量名。已记录的 provider 环境变量为 stable 候选
RUST_LOG 与 tracing 环境过滤器所有命令控制输出到 stderr 的 tracing。internal

输出契约缺口

  1. 面向脚本的命令现在共用规范化的 stdout 路径。 剩余的输出工作是给每个响应形态指定 schema 归属和稳定性级别。
  2. 退出码现在有基线进程契约。 见 CLI 退出码。把特定命令的业务状态提升为非零退出仍是有意选择加入的,必须逐命令记录。
  3. 机器可读输出需要 schema 归属。 CLI JSON 常镜像控制平面/运行时结构体。API 清册应决定哪些字段是稳定的、诊断的或内部的。
  4. 人类输出与运维摘要混在一起。 serve、run、solve 和 debug 命令应明确说明其 stdout 是否脚本安全。
  5. 已废弃的 control 仍可达。 在记录移除计划前应保持兼容。
  6. 帮助快照是手工的。 docs/website/reference/cli.md 声称由 holon --help 重新生成,但仓库中没有生成器或快照测试。

跟踪 issue

Milestone 8 的初始 CLI/API 稳定性后续工作已完成。第 2 阶段工作仍由 CLI/API Stability Contracts 里程碑通过 #1444 跟踪:

优先级Issue范围
1#1437在 Milestone 8 完成后刷新 API/CLI 契约清册。
1#1442为稳定命令添加 JSON 输出 schema 和 golden 测试。
2#1438将 OpenAPI 基线迁移到 aide 路由/类型元数据。
2#1439为稳定读模型收紧 OpenAPI DTO schema。
2#1440添加 WorkItem 变更 HTTP 生命周期端点。
2#1441添加 Timer 取消生命周期端点。
3#1443定义稳定的面向操作者事件负载子集。

建议的下一批契约测试

优先级测试目的
1归一化空白后的 Clap 命令树/帮助快照检测意外的命令/标志漂移。
1针对稳定候选位置参数和别名的解析测试锁定高价值 CLI 形态,而不过度快照措辞。
1用假 provider 或 fixture 对 run/solve 做 --json 冒烟测试确认机器可读模式仍可解析。
2get、set、unset、schema、provider remove、credential list/remove 的配置命令 golden JSON锁定离线脚本接口。
2daemon/status/log JSON 形态测试锁定本地运维接口。
2更多缺失令牌和命令特定业务状态的错误行为测试在命令把领域失败提升为进程失败处扩展基线退出码契约。
3规范或记录原始 HTTP-body 命令(task、timer、agent create/abort、skills add/remove/enable/disable)减少输出契约漂移。

后续清册范围

本 CLI 清册评审通过后,按以下顺序继续:

  1. 稳定候选命令的 CLI JSON 输出 schema (#1442)。
  2. CLI task/work-item/timer 命令使用的控制平面 DTO schema (#1439)。
  3. tail、transcript、replay 和 SSE 使用的运行时事件负载子集 (#1443)。
  4. Rust crate 公开 API,如果它打算供外部使用。