ExecGo execgocli Adapter Skill(详细 SOP)
本技能描述如何在本仓库根目录(execgo 模块根)构建并使用 execgocli,通过 模式 A(adapter 翻译并执行)或 模式 B(直传 TaskGraph)驱动 ExecGo。不要在 skill 内重复实现 HTTP;只配置环境、拼 JSON、调用 CLI 或等价 HTTP。
1. 你在本仓库里要认出的东西
| 路径 | 作用 |
|---|---|
cmd/execgo |
控制面 HTTP 服务(/adapters/*, /tasks, /health) |
cmd/execgocli |
给 Codex / CC 用的薄 CLI,仅标准库 |
internal/execgocli |
CLI 的 HTTP/轮询/ensure 实现 |
pkg/adapter |
adapter.v1 与 AgentActionRequest 结构 |
docs/zh/reference/execgo-cli-contract.md |
CLI JSON 契约(中) |
docs/en/reference/execgo-cli-contract.md |
同上(英) |
docs/zh/integration/mode-a-cli.md |
模式 A 快速开始(中) |
docs/examples/execgocli-agent-wrappers.md |
薄封装思路 |
2. 前置条件
- Go 工具链可构建本仓库(见根目录
go.mod)。 - 运行
execgocli前,通常需要已可访问的 ExecGo 进程,除非你只用ensure-running去尝试本机docker compose拉起(见第 7 节)。
3. 构建
在仓库根(含 go.mod)执行:
go build -o execgocli ./cmd/execgocli
go build -o execgo ./cmd/execgo
将 execgocli 放入 PATH 或技能里写绝对路径。
4. 启动控制面(execgo)
./execgo
# 或指定端口
./execgo -addr :8080
- 环境变量以
pkg/config为准:常见EXECGO_ADDR、数据目录EXECGO_DATA_DIR等。 - 使用
runtime.*类 action 时,ExecGo 进程需能访问execgo-runtime:在运行 execgo 的 shell 中设置EXECGO_RUNTIME_URL(与下文 CLI 的EXECGO_RUNTIME_URL探活目标一致,常见本机为http://127.0.0.1:18080以免与 8080 控制面抢端口)。
5. 环境变量(execgocli)
| 变量 | 典型值 | 含义 |
|---|---|---|
EXECGO_URL |
http://127.0.0.1:8080 |
控制面基址,必填语义上强烈建议显式设置 |
EXECGO_RUNTIME_URL |
http://127.0.0.1:18080 |
仅 ensure-running -with-runtime 或文档默认;须与 execgo 进程内 runtime 地址一致 |
EXECGO_COMPOSE_DIR |
本仓库根绝对路径 | ensure-running 可尝试 docker compose -f docker-compose.yml up -d |
EXECGO_RUNTIME_IMAGE |
例如本地 build 的 tag | 非空时 ensure-running 或尝试 docker run 拉 runtime(见实现与文档) |
EXECGO_RUNTIME_SOURCE |
execgo-runtime 克隆路径 |
失败提示中的 cargo 说明会引用 |
6. 稳定 JSON 外壳(所有子命令 stdout)
成功:
{ "ok": true, "data": { } }
失败:
{ "ok": false, "error": { "message": "…", "status_code": 400, "body": "…" } }
解析规则: 先判断 ok;false 时向用户展示 error.message 与 error.body(若有)。
7. 子命令与 HTTP 映射(必背)
| CLI | HTTP |
|---|---|
execgocli capabilities |
GET /adapters/capabilities |
execgocli tools |
GET /adapters/tools |
execgocli act |
POST /adapters/actions;body 为 stdin 或 -file |
execgocli translate |
POST /adapters/translate |
execgocli submit |
POST /tasks(模式 B,TaskGraph JSON) |
execgocli wait -task-ids id1,id2 |
轮询 GET /tasks/{id} 直至终态 |
execgocli health |
GET /health |
execgocli ensure-running |
本地探活/可选 docker;--with-runtime 时探 {EXECGO_RUNTIME_URL}/readyz |
act / translate / submit 的 JSON 从 stdin 读:管道或 here-doc 均可。
8. 模式 A:推荐流水线(给代理逐步执行)
export EXECGO_URL=http://127.0.0.1:8080(或实际地址)。execgocli tools→ 从data.tools[]取action_kind/ 名称,生成 AgentAction。- 构造 AgentActionRequest(见本目录
reference-json-contract.md),action_id建议与任务 id 规则一致且唯一。 echo '<JSON>' \| execgocli act→ 从data.task_ids取 id。execgocli wait -task-ids <id> -timeout 2m→ 确认all_terminal为 true 或查data.tasks[].status(success/failed/skipped)。
9. 模式 B(简讯)
execgocli translate:只拿task_graph,不执行。execgocli submit:直传TaskGraph到POST /tasks。
10. 最小可运行 JSON 示例(act)
{
"adapter": "codex",
"agent_id": "agent-1",
"session_id": "sess-1",
"action_id": "demo-1",
"action": {
"kind": "os.noop",
"input": {}
},
"metadata": {
"source": "skill-example"
}
}
action_id 常映射为图内 task id,以便 wait 使用同一 id(与引擎行为一致,详见 adapter 与集成测试)。
11. 与 Codex / Claude Code 的接法(原则)
- 不要在 skill 里再写一版 REST 客户端。
- Skill 只做:设置
EXECGO_URL、把上述 JSON 交给execgocli act的 stdin、读 stdout 的 JSON、错误时回显、可选把translation_trace落盘。 - 具体命令行包装样本见同目录
integration-codex.md与integration-claude-code.md。
12. 验收脚本(本仓库)
./scripts/validate-execgo-cli.sh
# 对**已运行**的 ExecGo 可设置 EXECGO_URL 多跑一段 smoke
EXECGO_URL=http://127.0.0.1:8080 ./scripts/validate-execgo-cli.sh
13. 安全与治理(推广期默认)
os.shell使用白名单/允许列表为默认更安全的姿态;开放策略需显式环境开关(以仓库实现与docs/zh/reference/promotion-security.md为准)。- 请求中尽量带齐
agent_id/session_id/action_id/metadata以便审计与translation_trace对齐。 - 需更强隔离时用
runtime.command/runtime.script并保证execgo-runtime可达。
14. 退出码(execgocli)
0成功。wait在超时且未全终态时可能非 0(见reference-commands.md)。2用法/未知子命令。- 其他非零见参考页或
docs/.../execgo-cli-contract.md。
15. 故障排查速查
| 现象 | 处理 |
|---|---|
ok: false 且 4xx |
读 error.body;多为 JSON 字段或 action.kind 非法 |
connection refused |
ExecGo 未起或 EXECGO_URL 错 |
runtime 类一直 pending / 失败 |
检查 EXECGO_RUNTIME_URL 在 execgo 进程 与 runtime 实际监听 一致;curl …/readyz |
ensure-running 失败 |
看返回 JSON 的 manual_hints;无 Docker/无权限/端口占用 |
更细表见同目录 ../ 下可扩展的 troubleshooting(若你 fork 可自建);当前以主文档与上表为准。
Maintainers: 更新 CLI 行为时请同步修改 reference-commands.md 与本 SKILL 的表格;并更新 docs/en|zh/reference/execgo-cli-contract.md。