Skip to content

自动化

一次进程调用只跑一个用户回合,适合调用方是脚本、CI 或流水线。

cetas-run 是一次性入口:一次进程调用,只跑一个用户回合。它和终端、编辑器入口组合同一个内核,适合“调用方是脚本而不是人”的场景。

命令形状

cetas-run [--model <provider/model>] [--effort <level>] [--session <id>]
          [--yolo | --permission <readonly|workspace_write|interactive|auto>]
          [--stream] [--verbose] [--show-thinking] [--jsonl]
          [-- "<task>"]

任务写在 -- 之后。如果 argv 里没有任务,Cetas 会从 stdin 读恰好一行。另外两种形式:

cetas-run --login [provider]
cetas-run --help | -h | --version

help 和 version 不写配置、不读 stdin、不联系任何供应商。

输出契约

文本模式下,stdout 上只有答案,别的一律不掺。诊断按固定规则分流,这也是它能被管道处理的原因:

模式 stdout stderr
默认 最终答案 会话元数据、生命周期标记、审批提示
--stream 答案增量,边到边发 事件与标记
--verbose 答案 事件与标记(更啰嗦)
--show-thinking 答案 推理过程,然后是事件
--jsonl 结构化事件流 标记

--jsonl 优先于所有文本模式。

会话

不带 --session 时,每次调用都会新建一个会话 id,并在 stderr 上报出来。用 --session <id> 接着跑:

cetas-run -- "讲一下这个仓库"
cetas-run --session cetas-42 -- "现在把挂掉的测试修好"

这是同宿主内的续接,不代表一个对话能在不同入口之间搬 —— 见入口(Surfaces)。

权限

--permission 接受 readonly、workspace_write、interactive、auto。--yolo 是无人值守模式,不能和 --permission 同时用。

--model 和 --effort 是本次运行内的覆盖:不落盘,所以定时任务不会悄悄改掉下一个人打开终端时看到的配置。

退出码

码 含义
0 回合完成
1 跑完了但失败
2 启动、用法或登录失败

把 1 和 2 分开,是为了让管线能重试真正的失败,而不会把一个配置错误无限重试下去。

配置

供应商配置和凭据来自共享 home,通常是 <CETAS_HOME>/.cetas/;CETAS_HOME 覆盖的是平台 home(也就是 .cetas 的父目录,不是它本身)。凭据和其他入口共用:已经登录过了,那就直接跑。

机器上没有终端会话时,原生构建可以用 cetas-run --login 完成首次登录。

从 Mooncakes 运行

runner 同时以 Mooncakes 模块发布:

moonx colmugx/cetas-run -- -- "把挂掉的测试修好"
moonx colmugx/cetas-run -- --session <id> -- "继续"

在 CI 里

两条让自动化稳定运行的习惯:

  • 锁住装的版本(npm install -g @posoco/cetas@<version>),升版本是一个有意的动作 —— 升之前先读更新日志。
  • 审阅类、汇报类的任务用 --permission readonly;这样一次意外的写尝试会硬停,而不是悄悄变成一次提交。
Navigation

Type to search…

↑↓ navigate↵ selectEsc close