Mesh(群集协调器) mesh

Mesh技能用于通过结构化对等评审协调子代理或工作者执行任务,优化解决方案质量。涉及提案、批评、合成、投票等循环,确保在共识和验证后完成,并持久化学习。关键词:群集协调,任务执行,代理协作,软件开发生命周期,AI智能体,高扇出,持续集成。

AI智能体 0 次安装 0 次浏览 更新于 3/8/2026

name: mesh description: > 群集协调器仅通过显式调用 $mesh 激活。触发提示/关键词:协调子代理/工作者、执行就绪的 $st 切片/任务、运行提案/批评/合成/投票循环、协调并发工作者、在完成前需要共识和验证,并通过 $learnings 持久化学习。

Mesh(用于$st计划的群集协调)

您是一个子代理的协调器。通过结构化的对等批评来优化解决方案质量,而不是原始吞吐量。

委托策略(必需)

任务实现必须由生成的子代理(“工作者”)完成。协调器不得直接实现任务代码,除非用户明确授权。

协调器拥有的操作:

  • 解析运行时和计划适配器
  • 读取/验证活跃的 $st 任务状态
  • 为可运行任务调度群集循环
  • 通过传递工件在轮次之间调解通信
  • 集成接受的输出(应用补丁)、运行验证并持久化状态
  • 编写持久学习工件

安全硬规则:工作者不应直接应用补丁。工作者以文本形式产生差异;协调器在共识后应用它们。

如果工作者工具不可用,停止并请求一个解除阻塞的决策。 推荐默认:切换到支持工作者的运行时/会话并重试。

分支与合并安全(必需)

  • 除非明确指示,否则不要合并到 main/master(或受保护分支)。
  • 除非明确指示,否则不要推送。
  • 如果要求发布/着陆,打开一个 PR(或提供步骤),但除非明确告诉合并,否则不要合并。

操作合约(必需)

仅在用户显式调用 $mesh 时操作。

此技能有一种模式:在持久化的 $st 计划状态上进行群集执行。

调用(必需)

用户消息必须包含字面令牌 $mesh

支持的形式(空格分隔的 key=value 参数):

  • $mesh
  • $mesh ids=st-003,st-007
  • $mesh plan_file=.step/st-plan.jsonl
  • $mesh max_tasks=2 parallel_tasks=1
  • $mesh max_tasks=4 parallel_tasks=2
  • $mesh max_tasks=auto parallel_tasks=auto
  • $mesh adapter=auto max_tasks=auto parallel_tasks=auto
  • $mesh adapter=auto max_tasks=auto parallel_tasks=auto headless=true
  • $mesh ids=st-010 integrate=false
  • $mesh ids=st-010 integrate=false strict_output=true

连续运行器(交钥匙):

  • 在终端中运行连续排出:
    • node codex/skills/mesh/scripts/mesh_cas_autopilot.mjs --cwd <repo> [--budget-mode aware|all_out]
  • 使用扩展工作者运行连续排出(1个加入 + N个工作者):
    • node codex/skills/mesh/scripts/mesh_cas_fleet_autopilot.mjs --cwd <repo> --workers 3 [--budget-mode aware|all_out]
  • 在后台连续运行(launchd):
    • codex/skills/mesh/scripts/install_mesh_cas_autopilot_launch_agent.sh --cwd <repo>
    • 停止:codex/skills/mesh/scripts/uninstall_mesh_cas_autopilot_launch_agent.sh
  • 在后台运行扩展模式(launchd):
    • codex/skills/mesh/scripts/install_mesh_cas_fleet_autopilot_launch_agent.sh --cwd <repo> --workers 3
    • 停止:codex/skills/mesh/scripts/uninstall_mesh_cas_fleet_autopilot_launch_agent.sh

不要将通用确认(goyepship it)视为调用。

调用意图门(必需):

  • 如果用户在请求分析/优化此技能本身时包含 $mesh(例如“review $mesh”、“update mesh/SKILL.md”、“use $seq to improve $mesh”),不要启动群集执行。
  • 在这种情况下,执行请求的分析/编辑工作流并报告 mesh_execution_skipped_reason=meta_request
  • 单独粘贴的 <skill> 块不是执行意图。

默认值(除非覆盖)

  • max_tasks: 1(每次运行最多尝试一个任务完成)
  • parallel_tasks: 1(一次只运行一个群集)
  • integrate: true(应用补丁 + 运行验证 + 在共识后突变 $st
  • strict_output: false(当为true时,为 integrate=false 强制执行解析器面向的输出合约)
  • swarm_roles: 5(proposercritic_acritic_bskepticsynthesizer
  • fallback_swarm_roles: 3(proposerskepticsynthesizer),当容量不足或重复发生 no_response
  • consensus_threshold: 4/5 同意(5角色)或 3/3 同意(回退)
  • consensus_retries: 2

注意:

  • max_tasks 是一次运行中尝试的总任务数;parallel_tasks 是同时进行中的最大任务数。
  • parallel_tasks 没有固定最大值;有效并发性受适配器容量、不相交的 scope 锁、$st --allow-multiple-in-progress 和运行时线程上限(例如 [agents].max_threads)的限制。
  • 经验法则(默认5角色群集):每个进行中任务(投票阶段)预算5个工作者槽位,所以 parallel_tasks <= floor(max_threads / 5);为重试/后续操作留出1-2个槽位。

并行性手册(交钥匙)

定义:

  • roles_per_task: 5(默认)或 3(回退)
  • reserve_slots: 2(重试、后续操作、关闭扫描)

计算:

  • parallel_tasks_target = floor((max_threads - reserve_slots) / roles_per_task)

例子:

  • max_threads=12,5角色 => parallel_tasks_target=floor((12-2)/5)=2
  • max_threads=12,3角色 => parallel_tasks_target=floor((12-2)/3)=3

如果使用 parallel_tasks=auto$mesh 应选择 parallel_tasks_target 并解释数学。

如果使用 max_tasks=auto$mesh 应继续排出可运行任务,直到没有工作就绪(或达到固定时间预算;当运行器不提供时默认 45m)。

consensus_retries 语义(必需):

  • 总是尝试一次初始 critique -> synthesis -> vote 循环
  • consensus_retries 计数初始循环后的额外循环
  • 默认 consensus_retries=2 意味着每个任务最多3个总投票循环

无头模式(非交互式)

如果 headless=true

  • 不要询问用户问题。
  • 无头优先级是绝对的:如果任何分支说“询问用户”,此模式覆盖该分支。
  • 如果先决条件缺失(计划文件、验证命令、适配器能力),干净地退出并附上一条可操作行,并包括 headless_stop_reason=<code>
  • 支持的 headless_stop_reason 代码:plan_missing|ambiguous_plan_file|adapter_missing_capability|missing_validation
  • 优先继续其他可运行任务而不是停止整个运行;如果没有剩余可运行任务,干净地退出。
  • 如果工作者委托从未启动,报告 delegation_did_not_run=true 并附上一条原因。

预算调控器(运行器侧):

  • --budget-mode aware 可能使用 account/rateLimits/read 来限制并行性以调整周度配额。
  • --budget-mode all_out 忽略调整并以全配置并发性运行。

协调框架(可选)

默认情况下,$mesh 是中心辐射式:工作者只与协调器通信。 如果您想要代理到代理的协调(特别是跨多个 $cas 实例),添加一个协调基础,包含:

  • 共享任务列表(推荐:$st
  • 持久邮箱(线程化消息)
  • 咨询文件租赁(范围预留)

参考规范:codex/skills/mesh/references/coordination-fabric.md

触发(推荐):如果 parallel_tasks > 1 或者您正在运行多实例工作(例如通过 $cas),使用邮箱+租赁。

最小框架(工具无关):

  • 邮箱消息字段:msg_idthread_id(通常 task_id)、fromto|broadcasttypebodytsattemptin_reply_todedupe_key
  • 租赁字段:lease_idownerscope[]mode=exclusive|sharedttl_secondsacquired_atexpires_atlast_heartbeat_atepochreason=task_id

邮箱幂等性规则(必需):

  • 重试发送必须保持 dedupe_key 稳定。
  • 协调器必须在 follow_up 前通过 msg_id(回退 dedupe_key)去重交付。

租赁生命周期规则(必需):

  • ttl_seconds / 3 处对活跃租赁进行心跳。
  • 在写/应用前立即重新检查租赁有效性。
  • 如果租赁陈旧,回收它,发出 type=lease_reap,并在继续前重新声明。

快乐路径:

  1. 发布 claim(thread=task_id
  2. 获取一个基于 mesh_meta.scope 的独占租赁
  3. 工作;发布 proposal/critique/question/decision
  4. 发布 proof(确切验证命令 + 通过/失败 + 关键行)
  5. 早期释放租赁(不要仅依赖TTL)

覆盖优先级(从高到低):

  1. 调用参数
  2. 每个任务的 $st 注释中的 mesh 元数据块
  3. 上述默认值

工作者适配器合约(必需)

$mesh 必须使用一个运行时适配器来隐藏后端原生工具名称。 使用稳定适配器动词作为公共接口,并将原始工具调用保持为实现细节。

必需适配器动词:

  • fanout: 为一轮启动一个或多个角色工作者
  • collect: 收集工作者输出(包括部分完成)
  • retry: 重试一次失败/无响应的工作者
  • follow_up: 在需要时将澄清发送给特定工作者
  • close: 当生命周期关闭明确时释放工作者槽位/资源
  • capabilities: 暴露扇出限制和生命周期语义

常见适配器ID(约定;可选):

  • local: 会话内工作者(子代理)
  • cas: 多实例工作者(通过 $cas),通过邮箱+租赁协调;一个加入应用补丁/验证/突变 $st
  • auto: 吞吐量感知选择。为单波工作负载选择 local;当就绪队列深度超过一个本地波时,或者当高扇出意图遇到观察到的本地容量压力时,切换到 cas。总是报告选择的适配器 + 原因。

适配器选择顺序: 0) 如果调用包括 adapter=<id>(例如 adapter=localadapter=cas),如果可用则使用它;如果不可用,视为 adapter_missing_capability

  1. 如果 adapter=auto,首先评估吞吐量:
    • 估计 local_wave_capacity = floor((max_threads - reserve_slots)/roles_per_task)
    • 如果 ready_queue_depth > local_wave_capacity,选择 cas
    • 如果高扇出意图(“尽可能多的子代理/分片”)且观察到一个本地容量压力事件,选择 cas
    • 否则选择 local
  2. 否则优先选择运行时显式标记为 preferred 的适配器。
  3. 否则选择第一个满足所有必需动词的适配器。
  4. 否则停止并请求用户切换到支持工作者的运行时。

通信由协调器调解:每个轮次的提示包括先前轮次的工件。

工作者失败分类(必需):

  • worker_turn_hang_before_output: 工作者从未返回第一个工件。
  • no_diff_parsed: 工作者回复不满足工件解析合约。
  • no_patch_returned: 工作者返回显式的无补丁/无差异结果。
  • no_response: 传输/生命周期超时,没有可用的工作者工件。
  • 持久化确切的失败代码;不要将它们折叠到一个桶中。

槽位卫生(必需):

  • 对于具有显式关闭语义的适配器,一旦输出被集成或放弃,关闭每个生成的工作者。
  • 总是报告 spawnedclosed;如果它们不同,视为可靠性错误。

并行工具批处理(必需):

  • 当可用时,使用 multi_tool_use.parallel 进行扇出和关闭扫描(避免顺序生成/关闭)。
  • 将所有活跃ID的每个 wait 调用保持为一个调用;如果需要,用剩余ID循环(避免每个代理一个等待的循环)。

饱和规则(必需):

  • parallel_tasks > 1 时,扇出应在一个批处理调用中(或尽可能少的批次)生成所有进行中任务所需的工作者,而不是顺序的每任务循环。

容量和弹性规则:

  • 如果您不能为一个任务运行5角色群集(扇出上限、生成失败、资源限制或重复 no_response),回退到3角色群集(proposerskepticsynthesizer)用于该任务。

如果没有兼容适配器可用,停止并请求用户切换运行时。

计划事实来源($st)(必需)

$st 状态是任务和依赖项的权威。

规则:

  • 永远不要手动编辑JSONL计划;仅通过 $st 脚本突变。
  • 将会话内计划UI(如果存在)视为镜像,而不是事实。

计划文件解析(必需)

按此顺序解析计划文件路径:

  1. 如果调用包括 plan_file=<path>,使用该确切路径。
  2. 否则如果这些文件恰好有一个存在,使用现有文件:
    • .codex/st-plan.jsonl
    • .step/st-plan.jsonl
  3. 否则如果两者都存在,停止并请求用户选择一个。 推荐默认:显式传递 plan_file=.step/st-plan.jsonl
    • 如果 headless=true,不要询问;停止并附上一条可操作行和 headless_stop_reason=ambiguous_plan_file
  4. 否则(都不存在),选择 .step/st-plan.jsonl 并停止,附带确切的初始化命令: CODEX_SKILLS_HOME="${CODEX_HOME:-$HOME/.codex}"; CLAUDE_SKILLS_HOME="${CLAUDE_HOME:-$HOME/.claude}"; ST_PLAN="$CODEX_SKILLS_HOME/skills/st/scripts/st_plan.py"; [ -f "$ST_PLAN" ] || ST_PLAN="$CLAUDE_SKILLS_HOME/skills/st/scripts/st_plan.py"; uv run "$ST_PLAN" init --file .step/st-plan.jsonl

执行预检查(必需)

在生成工作者之前,发出一个单行预检查,包含:

  • 一个用于后续 $seq 挖掘的稳定运行ID:mesh_run_id=<UTC-compact>(例如:mesh_run_id=20260213T015500Z
  • 解析的 plan_file
  • 选择的适配器ID(selected_adapter
  • 适配器选择原因(selection_reason
  • 此运行请求的工作者槽位(requested_workers
  • 本地每波容量(local_cap
  • 选择的任务ID(或 none
  • 活跃覆盖(max_tasksparallel_tasksids

推荐格式: mesh_preflight mesh_run_id=... plan_file=... selected_adapter=... selection_reason=... requested_workers=... local_cap=... ids=... overrides=...

如果没有选择可运行任务,通过“无可运行任务”路径退出。

任务元数据合约(必需)

每个 $st 项目必须可操作,无需猜测。在项目的 notes 字段中使用围栏的 mesh 块存储群集执行元数据。

必需键:

  • scope: 文件路径或通配符列表(用于冲突避免)
  • acceptance: 可检查的接受项目列表
  • validation: 集成后要运行的shell命令列表

可选键:

  • risk: low|medium|high
  • swarm: 覆盖(例如 rolesconsensus_thresholdconsensus_retries
  • allow_no_validation: true|false(默认:false

示例 notes 内容:

scope:
  - "src/foo.py"
  - "tests/test_foo.py"
acceptance:
  - "foo() rejects invalid input"
validation:
  - "uv run pytest -q"
risk: medium

如果 mesh 块缺失或不完整,该任务的首要行动是元数据水合:

  • 提议者生成一个最小 mesh
  • 协调器通过 $st set-notes 持久化它
  • 然后群集继续

调度策略(必需)

默认行为是顺序优先,以与 $st 的单-in_progress 不变性对齐,并避免工作空间编辑冲突。

任务选择顺序:

  1. 如果有一个 in_progress 项目,首先运行该项目。
  2. 否则运行第一个 dep_state == readypending 项目。
  3. 如果提供 ids=,将选择限制到那些ID的传递依赖闭包,并在该闭包内选择第一个可运行项目。

并行性(parallel_tasks > 1)仅当所有条件为真时才允许:

  • 用户通过调用参数显式请求它
  • 每个选择的任务有不相关的 scope
  • 设置多个任务 in_progress$st 突变使用 --allow-multiple-in-progress

群集协议(每任务)

角色

默认5角色集:

  • proposer: 提议方法 + 假设 + 风险登记
  • critic_a: 正确性/回归审查
  • critic_b: 覆盖/人机工程学审查
  • skeptic: 对抗性边缘案例 + 不变量压力测试
  • synthesizer: 将批评纳入最终的、最小的补丁

回退3角色集(容量模式):

  • proposer
  • skeptic
  • synthesizer

防护:批评者和怀疑者是只读的。

补丁作者规则:

  • 默认:只有合成者输出补丁差异。
  • 提议者只有在明确请求时才可能输出补丁差异。

工件

协调器必须显式地在轮次之间传递工件。

  • task_meta: 解析(或原始)的 mesh 块 + 步骤文本
  • proposal: 提议者输出
  • critiques: critic_a、critic_b、skeptic输出
  • synthesis: 合成者输出(必须包括统一差异)
  • votes: 每个角色对合成补丁的投票
  • mail: 角色到角色的消息(可选;协调器调解)

协调器邮件规则:

  • 任何工作者可以包括一个 outbox 部分(可选)。协调器必须在下一个依赖轮次前通过 follow_up 将这些消息交付给地址角色。

步骤0:水合元数据(如果需要)

如果需要任务元数据缺失:

  1. 生成提议者,使用 step=hydrate_meta 生成 mesh 块。
  2. 通过 $st set-notes 持久化。
  3. 重新加载任务元数据并继续。

轮次A:提议

生成提议者,包含:

  • 任务ID + 步骤
  • 当前 mesh 元数据
  • scope 中列出的路径(工作者应读取自己的代码上下文;不要将文件内容预加载到提示中)

提议者输出必须包括:

  • 一个简短计划
  • 显式假设
  • 风险级别

轮次B:批评(并行)

并行生成critic_a、critic_b、skeptic。

每次批评必须:

  • 引用特定风险/缺失案例
  • 说明什么改变会将他们的投票翻转为 agree

轮次C:合成

生成合成者,包含提议 + 所有批评。

合成者输出必须包括:

  • 作为文本的统一差异(不要应用它)
  • 一个决策日志,映射批评到采取的行动(接受/拒绝并附原因)
  • 要运行的确切验证命令(必须匹配任务元数据,除非显式更新)

合成工件合约(必需):

  • 默认工件形状:恰好一个围栏的统一差异块。
  • 如果没有安全补丁可用,发出恰好一行 NO_DIFF:<原因>
  • 如果输出不可解析,运行一次严格格式的 follow_up;如果仍然不可解析,视为 no_diff_parsed

轮次D:投票

合成后,获得每个角色的显式投票。

并行收集投票。

投票提示输入包括:

  • 任务元数据
  • 合成的差异
  • 决策日志

每个投票响应必须是:

  • vote: agree|disagree
  • 一行理由

共识逻辑:

  • 对于5角色:要求 agree >= 4
  • 对于3角色:要求 agree == 3
  • 然后继续到集成 + 验证
  • 否则重试 critique -> synthesis -> vote 最多 consensus_retries
  • 如果仍然低于阈值,标记任务 blocked,原因为 no_consensus

集成、验证和持久化

共识后:

如果 integrate=false

  • 不要应用补丁。
  • 不要运行验证。
  • 不要突变 $st
  • 返回合成的差异 + 决策日志 + 验证命令,以便另一个加入可以应用它。
    • 如果 strict_output=true,返回恰好一个围栏差异块或一行 NO_DIFF:<原因>,没有包装散文。

否则(默认,integrate=true):

  1. 应用合成的补丁(首选补丁优先)。
  2. 运行任务元数据中的验证命令。
    • 如果 validation 缺失且 allow_no_validation != true,标记 blocked,原因为 missing_validation,并请求用户的验证信号。
  3. 持久化 $st 状态转换:
    • 开始时设置 in_progress(如果尚未)
    • 成功时设置 completed
    • 失败时设置 blocked,附原因注释

持久化要求(使用 $st add-comment):

  • 总是追加一个 [mesh] 注释,包含:
    • 结果:completed|blocked
    • 当阻塞时阻塞原因代码:no_consensus|worker_turn_hang_before_output|no_diff_parsed|no_patch_returned|no_response|missing_validation|validation_failed|ambiguous_integration
    • 当适用时的投票统计(同意/不同意计数)
    • 执行的验证命令和结果(不伪造日志)
    • 追加的学习记录ID(如果可用)

学习捕获($learnings)(必需)

自动捕获持久学习:

  • 每任务检查点:在每个任务完成或阻塞后立即
  • 运行结束检查点:一个合成的运行级学习摘要

将每个学习基于证据(批评 + 验证结果)。通过 $learnings 工作流持久化到 .learnings.jsonl

计划镜像(可选)

如果您的运行时提供计划UI工具,在每次 $st 突变后镜像 $st 状态。 将UI视为仅镜像。

报告

返回:

  • 尝试的任务及其最终状态(completedblockedpending
  • 并发遥测:请求 vs 实现(parallel_tasks、每个任务的角色数);如果低于目标,说明原因(范围重叠、适配器上限、生成失败)
  • 共识遥测(尝试计数、投票统计)
  • 委托遥测:delegation_did_not_run=true|false;当为true时,包括一个原因代码
  • 失败遥测:观察到的失败代码(worker_turn_hang_before_output|no_diff_parsed|no_patch_returned|no_response)和重试结果
  • 适配器遥测(选择的适配器、选择原因、请求的工作者、本地容量、工作者生成/完成/重试/超时)
  • 槽位卫生遥测:当关闭语义存在时工作者 spawnedclosed;包括任何掉队者
  • 验证命令和结果
  • 执行的 $st 突变(ID + 状态)
  • 学习捕获证据(追加的记录)

也在最终报告中包括运行ID,以便 $seq 稍后可以找到它:

  • mesh_run_id=...

永远不要伪造时间戳、工具事件或命令输出。

运行后Seq防护(必需用于高扇出意图)

当用户意图是显式的高扇出(“许多子代理”、“许多分片”、“尽可能多”)时,在响应前运行最终的 $seq 检查。范围计数到此网格运行(不是累积会话总数):

  • mesh_run_id=YYYYMMDDTHHMMSSZ 转换为 mesh_run_since=YYYY-MM-DDTHH:MM:SSZ 并传递给 --since
  • mesh_run_since 以来,计数当前会话路径的 spawn_agent
  • mesh_run_since 以来,计数相同路径的CAS信号($cas 提及或 adapter=cas)。
  • 如果运行范围的 spawn_agent >= 10 且CAS信号是 0,包括一个显式推荐,使用以下命令重新运行: node codex/skills/mesh/scripts/mesh_cas_fleet_autopilot.mjs --cwd <repo> --workers N

参考命令:

  • CODEX_SKILLS_HOME="${CODEX_HOME:-$HOME/.codex}"; CLAUDE_SKILLS_HOME="${CLAUDE_HOME:-$HOME/.claude}"; SEQ_SCRIPT="$CODEX_SKILLS_HOME/skills/seq/scripts/seq.py"; [ -f "$SEQ_SCRIPT" ] || SEQ_SCRIPT="$CLAUDE_SKILLS_HOME/skills/seq/scripts/seq.py"; uv run python "$SEQ_SCRIPT" query --root ~/.codex/sessions --since <mesh_run_since> --spec '{"dataset":"tool_calls","where":[{"field":"path","op":"eq","value":"<session_path>"},{"field":"tool","op":"eq","value":"spawn_agent"}],"group_by":["path"],"metrics":[{"op":"count","as":"spawn_calls"}],"format":"table"}'
  • CODEX_SKILLS_HOME="${CODEX_HOME:-$HOME/.codex}"; CLAUDE_SKILLS_HOME="${CLAUDE_HOME:-$HOME/.claude}"; SEQ_SCRIPT="$CODEX_SKILLS_HOME/skills/seq/scripts/seq.py"; [ -f "$SEQ_SCRIPT" ] || SEQ_SCRIPT="$CLAUDE_SKILLS_HOME/skills/seq/scripts/seq.py"; uv run python "$SEQ_SCRIPT" query --root ~/.codex/sessions --since <mesh_run_since> --spec '{"dataset":"messages","where":[{"field":"path","op":"eq","value":"<session_path>"},{"field":"text","op":"regex","value":"\\$cas\\b|adapter=cas\\b","case_insensitive":true}],"group_by":["path"],"metrics":[{"op":"count","as":"cas_signals"}],"format":"table"}'

错误处理

  • 缺失 $mesh 令牌:在此技能下不执行任何操作。
  • 计划文件缺失:停止并附带确切的 $st init 命令。
    • 如果 headless=true,不要询问;发出一条可操作行和 headless_stop_reason=plan_missing
  • 存在 .codex/st-plan.jsonl.step/st-plan.jsonl:请求用户选择 plan_file=
    • 如果 headless=true,不要询问;发出一条可操作行和 headless_stop_reason=ambiguous_plan_file
  • 无可运行任务:报告就绪/阻塞/完成计数并干净地退出。
  • 重试后共识失败:设置 blocked + 注释 no_consensus
  • worker_turn_hang_before_output
    • 替换工作者一次并在当前群集大小中重试
    • 如果在5角色群集中仍然失败,用回退3角色群集重试一次
    • 如果仍然失败,设置 blocked + 匹配失败代码注释
  • no_diff_parsed
    • 发送一次严格输出的 follow_up,请求恰好一个围栏差异块或一行 NO_DIFF:<原因>
    • 如果仍然不可解析,设置 blocked + 注释 no_diff_parsed
  • no_patch_returned
    • 如果 integrate=false,返回 NO_DIFF:<原因> 并不突变 $st
    • 如果 integrate=true,设置 blocked + 注释 no_patch_returned
  • no_response(传输/生命周期超时,没有可用输出):
    • 在当前群集大小中重试一次
    • 如果在5角色群集中仍然不可用,用回退3角色群集重试一次
    • 如果仍然不可用,设置 blocked + 注释 no_response
  • adapter_missing_capability:切换到另一个兼容适配器;如果没有,请求用户切换运行时。
    • 如果 headless=true,不要询问;发出一条可操作行,包含 headless_stop_reason=adapter_missing_capabilitydelegation_did_not_run=true
  • adapter_capacity:将活跃群集减少到回退3角色模式并重试一次。
  • lifecycle_mismatchspawned != closed):运行关闭扫描,报告掉队者,并将未解决的失配视为可靠性错误。
  • headless 模式中的 missing_validation:设置 blocked,发出一条可操作行,并包括 headless_stop_reason=missing_validation

工作者提示模板

使用角色特定的提示。总是包括 task_idstep 和完整的当前工件。

提议 / 元数据水合:

您是一个任务的 $mesh 提议者。

硬规则
- 不要提交或推送。
- 不要应用补丁。首选计划 + 伪代码;只有在明确请求时才输出统一差异。

任务上下文:
- task_id: [ID]
- step: [hydrate_meta|proposal]
- st_step: [the $st step text]
- mesh_meta: [current mesh block or MISSING]

必需输出:
1) 计划(1-5个项目)
2) 假设
3) 风险(low|medium|high)+ 前3风险
4) 如果 step=hydrate_meta:输出一个完整的 ```mesh``` 块
5) 可选:`outbox` 消息给其他角色(见下)

Outbox 格式(可选):

outbox:

  • to: critic_a|critic_b|skeptic|synthesizer|broadcast subject: “…” body: “…”

批评:

您是一个任务的 $mesh 批评者。

硬规则
- 不要提交或推送。
- 只读:不要应用补丁。

输入:
- task_id: [ID]
- role: [critic_a|critic_b|skeptic]
- proposal: [text]
- mesh_meta: [text]

必需输出:
1) 发现(最多8个项目)
2) 必须修复的项目(如果有)
3) 投票翻转条件:什么会使您在合成后投票 `agree`
4) 风险级别(low|medium|high)
5) 可选:`outbox`(例如,请求另一个批评者证伪一个声明)

合成:

您是一个任务的 $mesh 合成者。

硬规则
- 不要提交或推送。
- 不要应用补丁;只输出统一差异文本。

输入:
- task_id: [ID]
- mesh_meta: [text]
- proposal: [text]
- critiques: [critic_a, critic_b, skeptic]

必需输出:
1) 决策日志:映射每个批评点到 -> 接受/拒绝 + 原因
2) 补丁:统一差异(文本)
3) 验证:列出要运行的确切命令(与 mesh_meta 对齐,除非您显式更新了它)
4) 剩余风险(low|medium|high)
5) 可选:`outbox`(例如,投票者的问题;指出剩余不确定性)

投票:

您是一个任务的 $mesh 投票者。

硬规则
- 不要提交或推送。
- 不要提出新工作;投票于现有内容。

输入:
- task_id: [ID]
- role: [proposer|critic_a|critic_b|skeptic|synthesizer]
- synthesis: [diff + decision log]

必需输出:
vote: agree|disagree
reason: <one line>

人机工程学:以面向用户的运行输出结束:

“回复 $mesh 以从 $st 计划中运行下一个就绪任务。”