Agent-Friendly CLI 规范
本文档定义 gitcode-cli 在面向 AI 代理、脚本和非交互环境时必须遵守的 CLI 契约。
职责
定义结构化输出、非 TTY 行为、错误模型、确认语义和命令发现能力。
适用场景
- 新增或修改命令输出
- 新增或修改交互式确认
- 调整错误输出或退出码
- 设计 schema / help / 机器可消费接口
必须
- 机器可消费输出必须提供稳定结构
- 非交互环境不得隐式阻塞等待输入
- 破坏性命令必须有统一确认策略
- 错误和退出码要有稳定语义
禁止
- 只为人工阅读优化而忽视自动化调用
- 在非 TTY 环境下静默等待输入
- 同类命令输出契约随意漂移
同步要求
- 行为变化时同步
docs/COMMANDS.md - AI 使用路径变化时同步
docs/AI-GUIDE.md、AGENTS.md、CLAUDE.md和相关 skills - 回归矩阵变化时同步
docs/REGRESSION.md
1. 目标
本规范的目标是让 gc 同时满足:
- 人类终端交互可读
- AI 代理和脚本可稳定消费
- 错误和确认行为可预测
- 新命令沿统一模板演进
2. 输出契约
2.1 文本输出
文本输出面向人工阅读,应满足:
- 主要数据输出到 stdout
- 结构尽量稳定
- 不把错误和警告混入 stdout
2.2 JSON 输出
对外暴露数据结构的命令,优先支持 --json。
当前执行基线:
- 高频只读命令应优先支持
--json - 高频写路径命令应逐步支持成功结果
--json - 同一命令同时支持
--json与--dry-run时,组合输出也应保持可解析 JSON,或明确返回用法错误 - JSON 输出必须只写 stdout
- JSON 字段名应直接映射现有 API / 领域模型,避免随意重命名
2.3 向后兼容
TTY 场景下默认文本输出可保留既有体验。新增 JSON 输出视为增强能力,不应无故破坏已有文本路径。
3. 非 TTY 与非交互行为
命令在非交互环境下必须满足:
- 不隐式等待人工输入
- 无法继续时立即报错
- 明确提示使用
--yes或等价参数
允许逐步推进的能力:
- 非 TTY 默认结构化输出
- 全局
--no-interactive
但在这些能力完全落地前,必须先满足“不可阻塞”的最低要求。
4. 破坏性命令确认
删除、覆盖、变更状态等高风险写操作必须遵守:
- 默认有确认保护
--yes明确跳过确认- 非 TTY 且未显式跳过确认时必须立即失败
- 命令不得直接绕过共享确认组件自行读取 stdin
5. Dry Run 与预检查
适合预演的写命令应优先支持 --dry-run 或等价预检查模式。
最低要求:
- dry-run 不执行真实写入
- 输出明确描述将发生的动作
- 文档写明哪些命令支持 dry-run,哪些仅支持预检查
6. 错误模型与退出码
命令应尽量把常见失败归一到稳定退出码:
0成功1通用错误2参数或用法错误3资源不存在4认证或权限错误5资源冲突
当错误无法精确分类时,允许回退到 1。
7. Help 与命令发现
--help 不只是人工文档,也是代理发现接口。
命令帮助至少应包含:
- 命令用途
- 核心示例
- 关键 flag 说明
- 是否支持
--json - 是否存在非交互限制或确认要求
如果命令支持 schema / metadata 查询,帮助中也应给出入口。
8. 命令开发要求
新增命令或大幅改动命令时,应优先复用共享能力:
- 统一输出辅助
- 统一认证获取
- 统一确认组件
- 统一错误类型
不应在每个命令里重复发明一套 I/O 和错误处理逻辑。
9. 当前执行基线
安装诊断与 npm 更新还必须满足:
doctor install --json完全离线、无需认证,stdout 只包含稳定诊断对象;不得读取认证配置或 Tokenupdate --check --json/update --json字段固定为status、distribution、current、latest、message- 后台更新摘要只写 stderr,不得污染业务命令 JSON stdout
CI=true、--no-interactive、--no-update-check、GC_NO_UPDATE_CHECK=1禁用隐式自动应用;显式update仍按用户请求执行- registry 超时、离线、权限失败、锁冲突和回滚不得改变已经完成的业务命令退出码,也不得产生交互式提权提示
当前阶段的最低基线是:
- 高频只读命令逐步补齐
--json - 高频写路径命令逐步补齐成功结果
--json - 删除类命令收口到统一确认策略
- CLI 退出码具有基本稳定语义
gc schema或等价元数据能力提供命令发现入口
下一步去看哪里
- 如果你在改门禁,继续看 code-quality-gates.md
- 如果你在改命令模板,继续看 command-template.md
- 如果你在改文档同步,继续看 ../governance/docs-governance.md