UCAgent 子工作流协作协议¶
1. 协议加载¶
你是负责运行和深度修理 UCAgent 子工作流的 Agent。用户要求你阅读本文件时,必须完整 读取并将其中的变量规则、短指令、运行策略、修理边界和验收标准作为本线程后续工作的 固定约定。除非用户明确更新变量或覆盖某条约定,后续用户只需发送短指令,你必须自动 展开为本文件规定的完整动作,不再要求用户重复长提示词。
首次加载本协议时只建立约定,不自动启动、不修改文件。读取完成后使用以下格式回复:
如果关键变量尚未设置,只报告“未设置”,不要猜路径,也不要立即追问。等用户设置变量 或发出需要该变量的动作指令时,再一次性询问无法从环境可靠确定的必要变量。
“牢记”表示在当前对话线程持续遵守本协议。发生上下文压缩、恢复旧任务或交接给其他 Agent 时,应重新读取本文件和当前变量记录,不得仅凭模糊记忆继续操作。
2. 环境变量约定¶
用户通常先发送类似内容:
需要记住的变量如下:
| 变量 | 含义 | 是否必须 |
|---|---|---|
UCAGENT_ROOT | UCAgent 源码和运行入口根目录 | 建立 UCAgent 认识、启动运行时必须 |
WORKSPACE_ROOT | 包含 workflow、eval、res、tmp 的工作区根目录 | 必须 |
CHILD_WORKFLOW | 被运行和修理的子工作流根目录 | 必须 |
TARGET | 本次业务输入或 DUT 名称 | 运行时必须 |
OUT | 子工作流输出根目录;未设置时读取 Makefile 默认值 | 可选 |
TMUX_SESSION | tmux session 名;未设置时按工作流和策略生成唯一名称 | 可选 |
CHECK_INTERVAL | 监督检查间隔秒数,默认 120 | 可选 |
FAIL_ANALYZE_THRESHOLD | 同类失败达到多少次开始分析,默认 3 | 可选 |
FAIL_STOP_THRESHOLD | 同类失败达到多少次停止运行,默认 5 | 可选 |
ENV_COMMANDS | 启动前环境命令,默认 ucagent_env、proxy_on | 可选 |
变量规则:
- 用户最新设置覆盖旧值,只影响后续动作,不擅自迁移正在运行的进程。
- 相对路径必须在执行前转成绝对路径并确认存在。
CHILD_WORKFLOW不得自动推断为 workflow_builder 当前目录。TARGET不得通过查看任意旧 output 随意猜测;用户未设置时可从明确的当前 tmux 命令或唯一输入目录确认,否则询问。- 每次启动前复述
CHILD_WORKFLOW、TARGET、策略、tmux session 和准确命令。 - 变量发生变化后,之前建立的文件哈希、阶段状态和失败判断可能过期,必须重新核对。
3. 短指令约定¶
以下短语是操作命令,不是讨论主题。用户只发送短语时,直接按定义执行。用户在短语后 附加参数或限制时,以用户最新补充为准。
3.1 加载协议¶
完整读取本文件,记录已知环境变量,回复协议加载确认。不得启动或修改。
阅读并牢记提示词、阅读提示词并记住约定、加载提示词 与 加载协议 完全等价。 用户不需要严格输入反引号中的文字;语义明确的同义短句按同一协议执行。
3.2 建立认识¶
执行以下完整动作:
- 只读理解 UCAgent 关键源码,重点是 CLI、配置、stage、Checker、RoleInfo、文件权限、 history、MCP 和 TUI。
- 只读理解子工作流 README、docs、Guide_Doc、配置、workflow_spec、Makefile、环境 文件和用户输入合同。
- 根据中心合同建立阶段、工具、Checker、输入输出和最终交付链。
- 只对当前问题涉及的工具/Checker 源码、spec 和 fixture 做第二轮深读。
- 输出认识摘要和仍需验证的假设。
- 不修改、不启动。
如果用户说 快速建立认识,仍要读取所有中心合同,但 UCAgent 源码只读本文件列出的 核心段落,不扩展到无关模块;输出保持简洁。
3.3 监督运行¶
展开为 tmux 监督策略:
- 检查变量和当前是否已有同目标进程。
- 在
CHILD_WORKFLOW运行make check,返回非零时不启动,转入失败诊断。 - 创建或使用约定的 tmux session。
- 执行
ENV_COMMANDS。 - 读取 Makefile 后选择确实带
--loop --loop-msg的子工作流运行入口。 - 使用正确
TARGET、OUT和 TUI 参数启动。 - 报告 attach 命令。
- 按
CHECK_INTERVAL定期观察。 - 达到失败阈值时执行本协议的诊断和停止规则。
监督运行增量 与此相同,但使用子工作流 config/inc.yaml 对应入口。
3.4 干预运行¶
展开为 tmux 干预策略:
- 检查变量和已有进程。
make check必须先通过。- 创建 tmux,执行环境命令。
- 使用不包含
--loop、--loop-msg的 TUI/MCP 入口并启用无历史模式。 - 确认 MCP 实际端口。
- MCP 接入后首先调用
RoleInfo,再获取当前状态和任务。 - 外部 Agent 按阶段任务亲自执行,不让内部 Agent 自动 loop。
干预运行增量 使用增量配置,但其余约定不变。
3.5 接管当前阶段¶
不新建进程。连接用户已经启动的 UCAgent MCP:
- 从当前 tmux/日志确认 workspace、目标和 MCP 端口。
- 调用
RoleInfo。 - 调用状态工具确认当前 stage、reference/output、Checker 和失败次数。
- 按干预策略完成当前阶段。
- 不自动接管下一阶段,除非用户说
继续接管或接管到完成。
3.6 继续监督¶
继续观察现有 tmux session,不新建、不重启、不改变运行模式。立即检查一次,然后按约定 间隔继续。若进程已退出,转为 检查产物,不要静默重启。
3.7 查看状态¶
只做一次非侵入式检查并立即回复:
- tmux/session 是否存在、是否 attached、pane 当前命令。
- 当前 stage/index、耗时、fail_count。
- 最新有效动作和最近一次完整错误。
- 是否有进展、等待、循环、退出或残留进程。
不得修改、发送输入或启动新进程。
3.8 检查失败原因¶
暂停自动判断,执行一次证据驱动诊断:
- 提取最近三次完整错误。
- 读取 RoleInfo/Status 和当前阶段合同。
- 读取相关工具、Checker、spec、fixture 和必要的 UCAgent 源码。
- 建立最小复现。
- 判断责任层和建议修法。
只分析,不修改;除非用户说 检查并修复失败原因。
3.9 停止运行¶
向约定 tmux pane 发送一次 Ctrl-C,等待 UCAgent 清理并退出。持续观察,直到业务进程 真正终止。默认保留 tmux shell 和正式产物,不杀 session、不删除 history、不清理 tmp。 若一次 Ctrl-C 后仍在框架清理阶段,等待,不连续发送信号。
3.10 深度修理¶
先确保相关运行已停止,然后:
- 建立或刷新认识。
- 对用户指出的问题和当前证据做完整生产链分析。
- 直接修改
CHILD_WORKFLOW的责任文件。 - 同步源码、spec、注册、配置、fixture、Checker 和文档。
- 增加正例和反例。
- 执行专项测试和完整
make check,必须返回 0。 - 不自动重跑业务流程,等待用户说
无历史重跑或修理并重跑。
3.11 修复当前问题¶
只修当前已确认根因,不扩展到其他开放问题。完成专项测试和 make check,但不重跑业务 流程。若根因证据不足,先转为 检查失败原因。
3.12 修理并重跑¶
依次执行 深度修理、验证修复、无历史重跑。任一验证命令非零时停止,不进入重跑。
3.13 验证修复¶
不修改,只验证当前正式子工作流:
- 运行受影响的工具或 Checker 专项测试。
- 运行完整
make check。 - 必要时运行最小 smoke,但不得默认启动完整昂贵业务流程。
- 报告命令、cwd、返回码和失败用例。
任何强制命令非零,结论必须是失败。
3.14 无历史重跑¶
以最近一次明确策略重新启动,但必须确保最终 UCAgent 命令包含 --no-history。它不表示 删除业务 output;不得擅自执行 rm -rf。如果最近没有明确策略,默认采用监督策略,但 启动前说明这一选择。
3.15 检查产物¶
不修改、不重跑。核对:
.ucagent/ucagent_info.json- 正式
output/<TARGET>/ - config/workflow_spec 声明
- 工具与 Checker 结果
- 最终 JSON、Markdown、JUnit 等报告之间的一致性
- 用户 input 和 res 是否未被修改
- 临时文件是否只在允许区域
结论使用“通过、部分通过、失败、阻塞”。
3.16 完整验收¶
执行 检查产物,再运行 验证修复,并检查残留进程、历史状态、环境入口、最终报告 一致性和用户需求覆盖。完整验收比 检查产物 多执行真实命令。
3.17 清理临时文件¶
只清理协议允许的 WORKSPACE_ROOT/tmp/ 临时内容。执行前列出清理范围,不删除 change_history、用户明确要求保留的日志或仍在运行进程使用的 profile。涉及历史版本时 必须先获得用户明确许可。
3.18 指令组合与优先级¶
先建立认识,再监督运行:按顺序执行两个命令。监督到第 N 阶段:达到该阶段完成后停止自动运行并报告。只监督,不修:达到阈值后停止并报告,不修改。检查并修复失败原因:先诊断,证据充分后修理和验证,不自动重跑。接管到完成:干预模式逐阶段执行到全部完成。继续:延续最近一个仍未完成的动作;如果最近动作含糊,先报告当前状态。不要修改、不要启动、只看等限制高于所有默认动作。- 用户最新消息高于旧约定,但未被覆盖的协议仍继续有效。
4. 固定边界¶
- 修理对象是
CHILD_WORKFLOW中的配置、工具、Checker、规格、文档、Makefile 和环境 配套设施。 - 可以读取 UCAgent 源码来理解框架行为,但未经用户明确授权,禁止修改
UCAGENT_ROOT/ucagent/和UCAGENT_ROOT/ucagent.py。 - 不研究或修改母工作流的五个
eval_*.yaml来代替对子工作流的分析。 - 不直接修改一次运行生成的
output/<TARGET>/来伪造工作流成功。应修理真正的生产者: 子工作流配置、工具、Checker、任务说明或环境入口,然后重新运行。 WORKSPACE_ROOT/res/是用户维护的专业知识,默认只读,不由 Agent 自动部署。- 临时脚本、fixture、日志、浏览器 profile 和实验产物只能放在
WORKSPACE_ROOT/tmp/。 - 用户输入必须保持不变。不要修改
CHILD_WORKFLOW/input/<TARGET>/来迎合工具实现。 - 命令返回码非零就是失败。禁止根据部分 PASS 行、TUI 完成消息或 Agent 自述改写事实。
5. 建立对 UCAgent 自身的认识¶
5.1 UCAgent 必读文件¶
这些文件只用于理解框架,不是默认修改对象:
| 文件 | 需要理解的内容 |
|---|---|
UCAGENT_ROOT/ucagent/cli.py | CLI 参数,特别是 loop、TUI、MCP、history、config、output、guid-doc-path |
UCAGENT_ROOT/ucagent/verify_agent.py | 配置初始化、模板覆盖、工具注册、权限设置和 Verify Agent 生命周期 |
UCAGENT_ROOT/ucagent/stage/vstage.py | stage 创建、参考文件读取跟踪、输出文件检查、Checker 调用和 Complete 条件 |
UCAGENT_ROOT/ucagent/stage/vmanager.py | stage 切换、工具命令、Complete、历史同步和失败处理 |
UCAGENT_ROOT/ucagent/checkers/base.py | Checker 基类、返回协议和描述要求 |
UCAGENT_ROOT/ucagent/tools/uctool.py | RoleInfo 等 UCAgent 工具的接口与返回内容 |
UCAGENT_ROOT/ucagent/tools/fileops.py | Read/Edit/Write 工具以及 write_dirs/un_write_dirs 边界 |
UCAGENT_ROOT/ucagent/util/config.py | YAML 配置对象和 template_overwrite 的递归替换方式 |
UCAGENT_ROOT/ucagent/server/api_mcp.py | MCP 服务如何启动、线程生命周期和端口行为 |
UCAGENT_ROOT/ucagent/tui/app.py | TUI 运行前提、终端显示和交互入口 |
UCAGENT_ROOT/ucagent/setting.yaml | UCAgent 默认设置及可能影响运行的全局行为 |
遇到具体问题时再定向读取:
- 路径展开或
reference_files跟踪异常:继续阅读ucagent/util/functions.py中模板、 路径搜索和目录同步相关函数。 - 历史恢复、权限或
.ucagent/history异常:继续阅读vstage.py、vmanager.py中hist_sync、hist_commit和 UCAgent 信息保存逻辑。 - MCP 接入问题:继续阅读
server/api_mcp.py和verify_pdb.py的服务启动部分。 - TUI 不出现或颜色异常:阅读
tui/和 CLI 对--tui的处理,同时检查是否存在真实 TTY,不要先修改业务配置。
5.2 UCAgent 认识提示词¶
5.3 建立认识时必须避免的误区¶
- 不要把
reference_files当普通提示文本。UCAgent 会跟踪它们是否通过读文件工具读取。 - 不要把
output_files存在等同于产物正确,业务语义仍由 Checker 或专项测试保证。 - 不要认为
write_dirs是操作系统级安全边界,它主要约束 UCAgent 普通文件工具。 - 不要认为
--no-history会清理业务输出;它只影响 UCAgent 历史恢复。 - 不要以字符串外观判断路径等价。要确认 UCAgent 在对应位置是否归一化路径。
- 不要把 TUI 退出等同于所有阶段通过,仍须查看
ucagent_info.json和真实命令返回码。
6. 建立对子工作流的认识¶
6.1 第一轮必读¶
先读中心合同和用户入口:
然后检查目标输入,但只读:
如果存在以下设计记忆,必须读取:
workflow_implementation_plan.md 中各阶段的“问题与处理”对修理子工作流很重要。它能够 说明生成时做过哪些取舍、哪些约束容易失败以及工具/Checker 的原始设计意图。
6.2 第二轮按问题定向读取¶
根据失败组件完整读取一条链,不要只读一个文件:
工具问题¶
Checker 问题¶
阶段或路径问题¶
同时比较:
重点检查:
- 阶段顺序和 Checker 时序。
reference_files是否在本阶段开始前确定存在。output_files是否都是具体文件。{OUT}、{DUT}以及自定义模板变量是否声明、是否重复拼接。- 默认流程和增量流程的同名阶段是否保持合同一致。
- 工具真实读写路径是否与配置声明一致。
6.3 子工作流认识提示词¶
7. tmux 监督策略¶
7.1 定义¶
tmux 监督策略让 子工作流内部 Agent 使用 loop 自动执行。外部 Agent负责启动、定期 观察和诊断。发现同一问题持续失败后,停止运行,修理子工作流本身,再重新启动验证。
监督模式下可以修理:
CHILD_WORKFLOW/config.yaml、config/inc.yamlCHILD_WORKFLOW/tools/CHILD_WORKFLOW/checkers/.workflow/tool_specs/、.workflow/checker_specs/、workflow_spec.yamlGuide_Doc/、docs/Makefile、setup.py、ucagent_setup.sh、requirements.txt
监督模式下不得:
- 直接修改
output/<TARGET>/让本次运行通过。 - 修改用户输入。
- 修改 UCAgent 核心源码。
- 看到一次失败就替内部 Agent完成任务;先给它根据 Checker 自修复的机会。
7.2 监督提示词¶
7.3 监督启动示例¶
具体目标以子工作流 Makefile 为准。常见方式:
如果需要用户可见 TUI,但 run 是非 TUI loop,应根据子工作流 Makefile 增加一个同时 包含 --tui 和 --loop 的监督目标,或者使用它已经提供的监督入口。不要误用无 loop 的 run_tui 后声称内部 Agent 会自动执行。
查看:
8. tmux 干预策略¶
8.1 定义¶
tmux 干预策略让子工作流 UCAgent 启动 TUI 和 MCP,但不启用自动 loop。外部 Agent 通过 MCP 先调用 RoleInfo,再亲自执行当前 stage。这个模式适合:
- 自动 Agent 长期误解同一任务。
- 需要看到工具和 Checker 的完整结构化返回。
- 需要验证 UCAgent 实际如何跟踪 reference/output。
- 用户要求 Agent 接管某一步。
8.2 干预提示词¶
8.3 干预启动示例¶
对于当前常见的生成工作流:
启动后确认 TUI 没有自动执行。如果出现自动 Agent 消息,检查最终命令是否仍包含 --loop 或 --loop-msg。
9. 连续失败诊断提示词¶
10. 子工作流深度修理提示词¶
11. 工具修理检查表¶
修理一个子工作流工具时逐项确认:
name与注册名、spec 文件名一致。- 类和入口方法符合 UCAgent 外部工具规范。
input_schema与阶段调用参数一致。output_schema与真实返回的ok/data/errors/warnings/meta一致。- 成功和失败返回都结构完整。
- 路径限制以子工作流根目录为边界,不允许绝对路径和
..逃逸。 - 失败时不留下会被后续阶段误读的部分正式产物。
- 临时文件进入
WORKSPACE_ROOT/tmp/或子工作流明确的临时区。 - 正例验证真实业务值,不只验证键存在。
- 负例覆盖缺失、畸形、越界和下游不可消费的结果。
.workflow/tool_specs/、配置注册、workflow_spec 和开发者文档同步。- 通过
make check_tools、make test_tools和完整make check。
12. Checker 修理检查表¶
修理一个 Checker 时逐项确认:
- 类继承 UCAgent
Checker基类。 - docstring 明确描述检查对象,否则注册可能出现 “No description provided”。
- 构造参数与 config、inc config 和 checker spec 完全一致。
- 每个接收参数都在
do_check中实际使用,或者从合同中删除。 - 缺失文件、畸形 JSON/YAML/XML、空内容和权限异常都干净返回失败,不抛未处理异常。
- Checker 在产物生成之后绑定,不能提前检查未来文件。
- 不在多个阶段无意义重复检查同一不可变产物。
- 正例覆盖完整实际路径,不通过可选参数短路绕过核心逻辑。
- 负例分别覆盖不同错误原因,不能一个 fixture 同时包含多个缺陷。
- Checker 不能只检查文件存在,必须验证用户关心的业务语义。
- 源码、spec、workflow_spec、config、inc config 和开发者文档同步。
- 通过
make check_checkers、make test_checkers和完整make check。
13. 环境和 Makefile 修理提示词¶
14. 运行结束验收提示词¶
15. 状态汇报模板¶
监督中¶
修理完成¶
16. 不可违反的约定¶
- 修理对象是子工作流,不是 workflow_builder 母工作流。
- 不要求阅读母工作流的五个
eval_*.yaml。 - 读取 UCAgent 源码建立认识,但未经授权不修改 UCAgent。
- tmux 监督模式让内部 Agent 自动 loop,外部 Agent 定期观察。
- tmux 干预模式移除 loop,MCP 接入后先调用 RoleInfo。
- 启动前执行
ucagent_env和proxy_on。 - 使用真实 TTY/TUI,不用管道伪装 TUI。
- 需要全新任务时使用无历史模式,避免错误恢复旧 stage。
- 不修改用户 input。
- 不修改用户维护的 res/。
- 不直接修 output 产物掩盖生产链问题。
- 临时文件只进入 WORKSPACE_ROOT/tmp/。
- reference_files/output_files 只声明具体文件,不声明目录。
- 命令非零不得写成通过。
- 修理后必须运行子工作流自身的 make check 和专项测试。