kxen-agent 不绑定某一种 trigger 或托管平台。调用方准备 Workspace、task、credential、runtime policy 和 durable state,再消费 JSONL event、result 与 exit code。
trigger or queue -> prepare Workspace/task -> kxen-agent -> JSONL/result
|
+-> file, shell, MCP, LSP, web toolsGitHub Actions、GitLab CI、Webhook handler、queue worker、kxen server 和本地 shell 都可以调用同一个 CLI。GitHub repository access 是完整自动修复场景需要的 capability,但 GitHub、Issue、PR、branch 和 comment 不进入 DCP 或 DCPAgent schema。它们可以由 MCP、普通 CLI、内置 tool 或受控宿主调用提供,不需要被统一改造成某种 adapter。
通用 worker contract
- 使用独立 checkout 或 worktree,避免多个 run 共享可变文件。
- 为并发工作单元选择独立 state directory;恢复同一 Session 时依赖 run lease 串行化。
- 通过 Kxen config 配置 MRM roles。没有 tool subprocess 的 worker 可以使用 auth file 或受支持的 provider API key 环境变量;启用 Shell 或 MCP subprocess 的 worker 必须使用显式的 private one-shot auth file 和
--consume-auth-file。 - 使用 policy 限制 capability、turn、wall clock、Shell、MCP 和工具可见 env。
- 保存 JSONL 日志。需要跨 ephemeral runner 恢复时同时保存 Session bundle 或完整 state artifact。
- 只把显式需要的外部 token 传给对应 capability;provider credential 不进入普通工具环境。
进程 exit code 为 0 只表示 DCPRun completed。failed、canceled、input_required、policy drift、Workspace mismatch 和存储错误都返回非零。
仓库内 GitHub Issue 自动修复
仓库提供可直接启用的 Kxen Issue Autofix workflow,以及三份独立的 DCPAgent definitions 与 runtime policies。这个 workflow 是 GitHub 场景实现,不是 kxen-agent 的产品身份。
执行链路如下:
| 阶段 | 可用能力 | Credential 边界 |
|---|---|---|
| Issue input | 可信 gh step 读取一个 Issue 并生成结构化 task |
只在该 step 使用 read token;模型尚未启动 |
| Issue context | 只分析结构化 task;仅能 read 一个空的隔离 Workspace | 没有 GitHub token |
| Repository fixer | Workspace read、search、edit、write、exec 和 LSP | 没有 GitHub token;one-shot provider file 在任何 exec 前消费 |
| Reviewer | Workspace read、search 和 exec,不提供 edit/write | 没有 GitHub token;one-shot credential 已 unlink |
| Host publisher | 全新 runner 中受控的 git 和 gh 调用 |
只有三角色 PASS、diff gate PASS 后才获得 GitHub write token |
context、fixer、reviewer 和 publisher 使用相互隔离的 jobs。三个模型 jobs 还分别运行在独立的 Ubuntu job container 中,不共享 host PID namespace;container 不挂载 Docker socket,并显式移除 SYS_PTRACE。fixer 只能导出 text patch,reviewer 从 immutable artifact 在全新 checkout 中重建候选;publisher 再次从可信 main checkout 验证 artifact、远端 parent commit 和完整 diff。模型运行过的 runner 永远不会获得 GitHub write token。
每个模型 job 用一个只执行可信 jq 的独立 step 把 Environment secret 写成 0600 one-shot auth file。下一 step 不再注入 XAI_API_KEY,kxen-agent --consume-auth-file 在启动 tool runtime 前读取并 unlink 文件;初始化失败时专用 cleanup step 也会清除它。启用 Shell 或 MCP subprocess 的 runtime 如果发现持久 auth credential、provider credential 环境变量、错误 owner、group/other 权限、symlink 或多个 hardlink,会 fail closed。Linux agent 进程同时设为 non-dumpable,macOS 使用 PT_DENY_ATTACH 限制 debugger attach;其他 OS 上 credentialed tool subprocess 会 fail closed。GitHub 场景的 host process 隔离由 job container 提供。JSONL、Session、tool journal 和 workflow artifacts 不保存 auth store。
publisher 还会确定性拒绝空 diff、超过 20 个文件或 1200 行的 diff、binary 文件,以及对 workflow、DCPAgent policy、GitHub Action、CODEOWNERS 和自身 publisher script 等信任边界的修改。通过后只创建或更新 kxen-agent/issue-<number> 分支和 draft PR,不自动合并。
启用步骤
在仓库创建名为 agent-automation 的 GitHub Environment,并配置:
- Environment secret
XAI_API_KEY。 - Environment variable
XAI_MODEL,值为当前验证过的 xAI model ID。 - Environment variable
KXEN_AGENT_VERSION,值为要运行的稳定 Kxen SemVer tag,例如v0.1.12。
为仓库创建 kxen:fix label。Issue 必须同时带有 bug 和 kxen:fix,而且 kxen:fix 必须由具有 write、maintain 或 admin 权限的 actor 添加。也可以从 Actions 页面用已有 Issue number 手动执行;相同权限与 label gate 仍然生效。
bug + kxen:fix
-> authorized actor gate
-> trusted Issue input
-> GitHub-credential-free context verifier
-> repository fixer
-> independent reviewer
-> deterministic diff gate
-> topic branch + draft PR + Issue comment每个 run 以 Issue number 做 concurrency key,不会取消同一 Issue 的在途执行。分阶段 workflow artifacts 保存三个角色的 JSONL、结构化结果、candidate patch 和 durable state 14 天。state 不含 provider credential 或 one-shot auth file,但包含 Issue 内容、工具输出和代码上下文,应按私有执行证据管理。
恢复与分支
Git topic branch 保存代码候选,DCP Session 保存 agent 的执行连续性,两者不是同一个对象。下载 state artifact 后,可以查看或恢复其中的 Session:
export KXEN_AGENT_STATE_DIR=/path/to/restored/kxen-agent-state
kxen-agent session list
kxen-agent --resume ses_xxx需要跨 runner 迁移单个 Session 时,使用 session export、session import 和 --resume。完整的 Workspace identity、Conversation branch、Git worktree、bundle 与 UNKNOWN recovery 语义见 Session、branch 与 recovery。
其他运行环境
同一套 verifier、fixer 和 reviewer definitions 可以由 GitLab pipeline、queue worker、本地 cron 或服务进程调用。外部系统读写既可以使用 MCP,也可以使用相应 CLI 或宿主 SDK。关键约束是 capability 最小化、credential 只到需要它的进程、可变代码与发布权限分离,以及每次副作用都有可持久化的 outcome。