任务选择器 select

这个技能用于在软件开发或任务管理中,自动选择任务源、分解为原子任务、调度并行执行并生成编排计划,支持多代理工作流。关键词:任务选择、并行调度、编排计划、自动化、项目管理、软件开发。

项目管理 0 次安装 0 次浏览 更新于 3/8/2026

name: select description: “群集就绪工作选择器:选择一个源(调用列表、SLICES.mdplan-N.md),将其细化为依赖感知的原子任务,并发出一个编排计划(波次 + 委派)加上可选管道。用于提示如 $selectuse $selectpick the next ready sliceorchestrate workers from SLICESwhat should run in parallel next。仅计划;无回写;编排无关。”

选择

意图

选择一个任务源,将其细化为依赖感知的原子任务,在安全时调度并行波次,并发出一个编排计划

这个技能是仅计划

  • 它不实施更改(无代码编辑;无运行工作者)。
  • 它不改变任务源(无 SLICES.md 写入,无 plan-N.md 写入);相反,它根据需要发出显式的手动回写步骤(例如,“标记 <id> 为 in_progress”)。
  • 它是编排无关的:输出是中性的计划模式(不绑定到特定执行器)。

它还可能发出一个小管道,用于将计划工件驱动到执行中(手动步骤;可选可循环)。

群集就绪规划

$select 针对并行多代理执行进行了优化,因此它偏好明确、分解和锁安全的计划。

  • 探索代码库(只读) 当需要时,以将任务基于真实路径/组件并设置严格的 scope 锁。
  • 提出澄清问题 当存在多个合理方法时;包括推荐的默认值。
  • 原子任务:每个任务应该可由单个工作者独立执行。
  • 工作流塑造:首先识别主要工作流,然后将原子任务映射到这些工作流中。
  • 角色感知塑造:当有用时使用角色标签(contractimplementationintegrationcheckpoint)以提高排序和审查质量。
  • 显式依赖:偏好显式边,而不是依赖通过重叠 scope 的隐式序列化。
  • 委派元数据:包括 scope(并行安全所需),加上 locationvalidation 尽可能。
  • 在产出前审查:运行一个单独的审查者模式传递以检查缺失依赖/顺序/锁重叠/验证间隙。

分解启发式(并行质量)

当选定的源是粗糙或线性时,在调度波次前细化任务结构:

  • 识别工作流,并尽可能将任务描述限定在一个工作流内。
  • 为解锁多个下游任务的API/模式/接口/配置决策创建显式 contract 任务。
  • 在并行分支后创建显式 checkpoint/integration 任务作为连接点。
  • 保持中等粒度:每个任务应该可独立PR。
  • 偏好显式依赖边以记录真实先决条件并避免意外序列化。

依赖语义(硬 vs 软)

使用两个具有不同含义的依赖通道:

  • depends_on:硬先决条件;贡献于DAG准备度和波次调度。
  • related_to:软排序/上下文边;从不限制准备度或波次资格。

如果排序不确定或建议性(“最好先做”、“减少返工”),偏好 related_to 而非 depends_on

调用指令(可选)

如果存在,从调用文本中解释这些指令:

  • mode: both|triage|new
    • both(默认):首先处理 in_progress;然后选择新工作。
    • triage:仅处理 in_progress 并推荐关闭/重新打开/继续。
    • new:跳过处理,选择新工作(仍警告 in_progress)。
  • max_tasks: auto|<int>
    • 如果省略:默认 1 对于 slices;否则 auto
    • 在处理决策后应用。
  • review: required|auto|off
    • required(默认):运行审查者传递并迭代直到通过(或如果阻塞则停止+询问)。
    • auto:运行一次审查者传递;修复能修复的;继续剩余警告。
    • off:跳过审查者传递。

源优先级

当多个源存在时,使用此优先级选择一个:

  1. 用户提供的调用文本中的显式任务列表。
  2. SLICES.md(如果存在且可解析)。
  3. plan-N.md(最高N,仓库根目录)。

如果最高优先级的源存在但没有可行任务,不要默认为空计划。

  • 首先尝试选择一个解锁器(一个被阻塞的叶任务,可以解锁未来准备就绪的工作)。
  • 仅当源为空/不可解析,或如果所有都关闭/不可调度时,停止+询问回退。

源检测 + 预检(如何)

在不改变源的情况下检测源:

  1. 调用任务列表:
    • 一个编号/项目符号列表,后跟显式短语如“Use $select” / “$select:”。
    • 如果存在,将其视为源且不看其他地方。
  2. SLICES.md
    • 存在于仓库根目录(SLICES.md)。
    • 可解析(每个切片部分包含恰好一个YAML映射)。
  3. plan-N.md
    • 在仓库根目录找到匹配 plan-(\d+).md 的文件并选择最高 N

预检(尽力而为):

  • 对于选定的源,收集候选任务 + 依赖边。
  • 如果依赖引用未知任务ID,将引用任务视为阻塞;仅在自动修复失败后警告。
  • 如果依赖图是循环/不可调度,调度循环外的工作(如果可能)并发出警告。
  • 如果源存在但不可解析/空,在回退前停止并询问。

警告自动修复(只读)

在发出警告前,尝试安全、确定性的修复,不改变源。

顺序(解决时停止):

  1. ID规范化 + 别名
    • 规范化ids/depends_on/related_to(修剪、小写、去掉前导 #)。
    • 如果 depends_on 未知,尝试通过数字后缀别名(例如,1 -> t-1sl-1)或精确规范匹配映射到唯一已知id。
    • 如果解决,用规范id替换依赖并抑制未知依赖警告。
  2. Scope规范化(安全)
    • 规范化每个 scope 条目:修剪空白;去掉前导 ./(规范化 ./.);折叠重复 /;去掉尾随 /(除了 /)。
    • 如果任何scope条目更改,记录为 auto_fix: scope_normalize
  3. Scope推断(保守)
    • 如果 scope 缺失,扫描 id/title/subtasks 以查找显式路径或glob令牌(包含 /** 或文件扩展名)。
    • 仅采用现有路径或明显glob的令牌;偏好最窄的非重叠集。
    • 如果推断,设置 scope 并抑制缺失scope警告。
  4. 编排器降级
    • 如果 agent: orchestrator 缺少 subtasks,降级为 worker
    • 这是一个语义更改;即使修复后仍发出警告。

在决策跟踪(auto_fix)中记录自动修复,并为未解决问题保留 warnings

源适配器(读一个;不即兴)

选择源类型后,读取并应用恰好一个适配器规范:

  • list: codex/skills/select/ADAPTER_LIST.md
  • slices: codex/skills/select/ADAPTER_SLICES.md
  • plan: codex/skills/select/ADAPTER_PLAN.md

回归测试用例位于 codex/skills/select/FIXTURES.md

并行规则(安全第一)

仅当任务提供足够元数据以使其有防御性时才调度并行波次。

  • 一个任务仅在具有非空 scope 列表时才符合并行波次资格。
  • 两个任务仅当它们的 scope 集不重叠时才共享一个波次。
    • scope 条目视为独占锁
    • 推荐锁样式:目录根或紧密文件glob。
    • 保守重叠检查:比较锁根,而非原始字符串。
      • 对于每个 scope 条目:规范化它(去掉前导 ./;折叠 /),去掉尾随 /**/**/*,然后取到第一个glob元字符(*?[)的前缀。
      • 如果任何锁根相等或一个锁根是另一个的路径前缀,则视为重叠。
  • 缺失 scope 的任务被视为与所有内容重叠,因此单独调度。
    • 仅当影响此计划的波次打包时警告 missing_scope
    • 提示:添加一个窄的 scope 列表(路径/glob)以解锁并行波次。
  • 具有过宽 scope 锁的任务被视为与所有内容重叠,因此单独调度。
    • 宽示例:""..//*****/*
    • 仅当影响此计划的波次打包时警告 broad_scope
  • 如果由于重叠锁根任务必须序列化,偏好显式 depends_on 边以使顺序有意。
    • 仅当锁根嵌套(严格前缀)、任务否则依赖无关(无DAG路径)且顺序由平局决胜/稳定顺序选择时警告 implicit_order

委派准备度(推荐)

并行波次仅当每个任务可由工作者独立执行时才有用。

  • 偏好包含以下的任务:
    • location:在哪里工作(路径/glob;仅导航;不影响调度)
    • validation:如何证明完成(命令/检查;不影响调度)
  • 如果发出任何具有2+任务的波次,且该波次包含至少一个具有 validation 的任务,为该波次中缺少 validation 的任务警告 missing_validation

认领选定工作(必需)

$select 选择要现在开始的工作(即,第一个调度波次 waves[0] 中的任务)时,它还必须发出一个认领,以便其他规划者/执行器不会同时选取相同工作。

  • 如果选定的源支持状态,认领是:使用源的拼写将选定任务设置为进行中状态。
    • 规范令牌:in_progress
    • 当读取/处理时,接受常见变体为等效:in progressin-progressin_progress
    • 当发出认领时,偏好源已使用的令牌;否则默认 in_progress
  • 如果源是 listplan,发出 claim: none

这仍是仅计划:$select 不执行回写;它拼写要更改的内容。

编排之编排

任务仅在用户提供 subtasks 时才委派给 agent: orchestrator。 如果 agent: orchestrator 设置但 subtasks 为空/缺失,降级为 agent: worker,记录自动修复,并警告。

输出:OrchPlan v1

发出一个包含规范计划的YAML块。

模式(YAML;尽力而为,省略未知键):

schema_version: 1
kind: OrchPlan

created_at: "<rfc3339>"

source:
  kind: list|slices|plan
  locator: "<自由格式;例如 'invocation', 'SLICES.md', 'plan-3.md'>"

# 可选。如果省略,视为“auto”(不受限制;波次由依赖/锁驱动)。
cap: auto

# 可选。仅人类/工作者上下文(不影响调度)。
prereqs: []
risks: []

tasks:
  - id: t-1
    title: "..."
    description: "..."          # 可选
    workstream: "..."           # 可选
    role: contract|implementation|integration|checkpoint  # 可选
    parallelism_impact: "unlocks <n> tasks"  # 可选尽力而为
    agent: worker|orchestrator
    scope: ["path/**"]
    location: ["path/file"]     # 可选
    validation: ["..."]         # 可选
    depends_on: []
    related_to: []              # 可选非门控链接
    subtasks: []

waves:
  - id: w1
    tasks: [t-1, t-2]
  - id: w2
    tasks: [t-3]

integration:
  boundary: patch-first
  order: [t-1, t-2, t-3]
  conflict_policy: rebase-author

warnings:
  - "..."

决策跟踪(必需)

在OrchPlan YAML后,发出一个简短的纯文本跟踪(紧凑且结构化):

  • source: 选定的源类型 + 定位器
  • mode: 解析的 mode + 解析的 max_tasks
  • triage: 如果看到任何 in_progress,状态:continue <id> OR recommend close <id> OR recommend reopen <id> OR none
  • claim: mark <in_progress token> <id,...> OR already <in_progress token> <id> OR none
  • counts: 选定源的总数(至少:叶、就绪、阻塞、in_progress)
  • pick: 选定任务id + 3-10字原因
  • next2: 下两个候选(或 none)+ 每个3-10字原因
  • waves: (推荐当任务被调度时)N + 紧凑波次列表(例如,w1[t-1,t-2]; w2[t-3]
  • review: pass|warn|skipped|blocked + 0-6字备注
  • warnings: 列表计数 + 前1-3键(例如,unknown_depsstatus_driftcyclebroad_scopeimplicit_ordermissing_validationlinear_graphmissing_rolemissing_checkpoint
  • auto_fix: 列表计数 + 前1-3键(例如,dep_aliasscope_normalizescope_infer

程序(高层)

  1. 解析调用指令(mode/max_tasks/cap)。
  2. 源检测(选择一个;不合并源)。
  3. 读取相应的适配器规范(上述)并提取任务。
  4. 如果任务太粗糙或缺少安全并行所需的元数据,细化它们:
    • 分解为具有显式 depends_on 的原子任务。
    • 识别工作流并注解 workstream 当有用时。
    • 插入 contract 任务当它们可以解锁并行实现分支时。
    • 插入 checkpoint/integration 任务作为跨分支的显式连接点。
    • 将软排序/上下文编码在 related_to 中而非 depends_on
    • 填充 scope 锁(紧密路径/glob),加上 locationvalidation 尽可能。
    • 保持每个任务可独立PR(中等粒度)。
    • 探索仓库(只读)并在需要时查阅权威文档。
    • 如果因模糊性阻塞,停止并询问目标问题。
  5. 规范化任务:确保 id;应用编排器规则;将未知依赖视为阻塞(待自动修复)。
  6. 运行警告自动修复(上述);最终化警告。
  7. 使用 depends_on + scope 锁调度波次。 7.5. 如果选择新工作,从 waves[0] 计算 claim 并发出指令以在源中标记这些任务为进行中(当源支持状态时)。
  8. 审查者传递(根据 review):检查依赖/顺序/锁/验证/委派间隙;根据需要修订。
    • 检测不必要的线性链并在安全时从 depends_on 降级建议边到 related_to
    • 在可行推断时要求多波次计划中的显式角色/工作流。
    • 当多个并行实现分支汇聚时要求检查点/集成连接。
    • 在审查者模式中:不扩展范围;不重新设计;仅关闭间隙和减少风险。
    • 如果 review=required:迭代直到 review: pass 或如果阻塞则停止+询问。
  9. 发出OrchPlan v1 YAML(总是)+ 决策跟踪(必需)。仅当有用时添加管道。

调度算法(并行第一)

使用依赖准备度和 scope 锁构建波次:

  1. 仅从 depends_on 边构建DAG(related_to 是非门控的并从DAG准备度中排除)。
  2. 维护 ready = 未调度任务其所有依赖都已调度。
  3. 当任务剩余时:
    • 将缺失 scope 视为与所有内容重叠(即,只能单独调度)。
    • 将过宽 scope 锁(""..//*****/*)视为与所有内容重叠。
    • 选择一个 ready 的最大子集其 scope 锁根不重叠(贪心即可)。
    • 如果 cap 是数字,限制波次到 cap 任务。
    • 从池中移除调度任务;进行到下一波次。

当必须在冲突任务(重叠范围或限制压力)之间选择时,使用平局决胜:

  1. 优先级(如果存在):0/P0第一。
  2. 类型顺序(如果存在):task > bug > feature > chore > epic > docs > question。
  3. 角色(如果存在):contract/checkpoint > integration > implementation。
  4. 解锁计数:在此计划中解锁更多其他任务的任务。
  5. 委派准备度:偏好更紧的 scope 和显式 validation
  6. 风险/难度/爆炸半径(如果存在):偏好更低风险、更小爆炸半径和更清晰范围。
  7. 稳定顺序:保持源顺序。

发出未解决警告(噪声控制;仅当影响此OrchPlan时警告):

  • missing_scope: 一个任务缺失 scope 阻止添加至少一个其他就绪任务到同一波次。
  • broad_scope: 一个任务具有过宽 scope 阻止添加至少一个其他就绪任务到同一波次。
  • implicit_order: 两个依赖无关任务具有嵌套锁根并同时就绪;顺序由平局决胜/稳定顺序选择。
  • missing_validation: 一个并行波次混合了具有和不具有 validation 的任务。
  • unknown_deps: 一个 depends_on 指向未知ID。
  • orchestrator_without_subtasks: 一个任务声明 agent=orchestrator 而无 subtasks
  • linear_graph: 依赖图大多是链状的,且安全拆分为工作流/合同/检查点似乎可能。
  • missing_role: 多波次计划缺少角色注解当它们对推理/审查需要时。
  • missing_checkpoint: 多个并行实现分支无显式集成/检查点连接。 如果警告被自动修复,从 warnings 中省略并在 auto_fix 下列出(除了编排器降级,必须仍警告)。

示例(合成)

示例A:干净并行波次(列表源)

schema_version: 1
kind: OrchPlan

created_at: "2026-02-02T00:00:00Z"

source:
  kind: list
  locator: "invocation"

cap: auto

tasks:
  - id: cfg
    title: "添加配置加载器"
    agent: worker
    scope: ["src/config/**"]
    location: ["src/config/loader.ts", "src/config/index.ts"]
    validation: ["npm test -w config"]
    depends_on: []
    subtasks: []
  - id: ui
    title: "更新设置UI"
    agent: worker
    scope: ["src/ui/**"]
    location: ["src/ui/Settings.tsx"]
    validation: ["npm test -w ui"]
    depends_on: []
    subtasks: []
  - id: wire
    title: "将配置连接到UI"
    agent: worker
    scope: ["src/app/**"]
    location: ["src/app/bootstrap.ts"]
    validation: ["npm test"]
    depends_on: [cfg, ui]
    subtasks: []

waves:
  - id: w1
    tasks: [cfg, ui]
  - id: w2
    tasks: [wire]

integration:
  boundary: patch-first
  order: [cfg, ui, wire]
  conflict_policy: rebase-author

warnings: []

决策跟踪:

  • source: list (invocation)
  • mode: both; max_tasks=auto
  • triage: none
  • claim: none
  • counts: leaf=3 ready=2 blocked=1 in_progress=0
  • pick: cfg; 解锁wire;并行安全范围
  • next2: ui; 并行就绪;不相交范围
  • waves: 2 w1[cfg,ui]; w2[wire]
  • review: pass
  • warnings: 0
  • auto_fix: 0

示例B:具有混合验证 + 宽范围的并行波次

schema_version: 1
kind: OrchPlan

created_at: "2026-02-02T00:00:00Z"

source:
  kind: list
  locator: "invocation"

cap: auto

tasks:
  - id: api
    title: "添加/health端点"
    agent: worker
    scope: ["src/api/**"]
    location: ["src/api/health.ts", "src/api/router.ts"]
    validation: ["npm test -w api"]
    depends_on: []
    subtasks: []
  - id: docs
    title: "文档/health端点"
    agent: worker
    scope: ["docs/**"]
    location: ["docs/api.md"]
    depends_on: []
    subtasks: []
  - id: big
    title: "仓库范围重命名OldName -> NewName"
    agent: worker
    scope: ["**"]
    location: ["."]
    validation: ["rg -n \"OldName\" . || true"]
    depends_on: []
    subtasks: []

waves:
  - id: w1
    tasks: [api, docs]
  - id: w2
    tasks: [big]

integration:
  boundary: patch-first
  order: [api, docs, big]
  conflict_policy: rebase-author

warnings:
  - "missing_validation: [docs]"
  - "broad_scope: [big]"

决策跟踪:

  • source: list (invocation)
  • mode: both; max_tasks=auto
  • triage: none
  • claim: none
  • counts: leaf=3 ready=3 blocked=0 in_progress=0
  • pick: api; 显式验证;紧范围
  • next2: docs; 并行就绪;缺失验证
  • waves: 2 w1[api,docs]; w2[big]
  • review: warn missing_validation,broad_scope
  • warnings: 2 missing_validation,broad_scope
  • auto_fix: 0

源适配器(仅提取)

适配器规范位于:

  • codex/skills/select/ADAPTER_LIST.md
  • codex/skills/select/ADAPTER_SLICES.md
  • codex/skills/select/ADAPTER_PLAN.md

管道

管道位于 codex/skills/select/PIPELINES.md

输出

  • 总是发出OrchPlan v1 YAML,然后决策跟踪。
  • 如果无可操作的源任务存在,偏好选择一个解锁器;仅然后发出空计划 + 警告。
  • 如果选定的源为空/不可行且存在回退源,在回退前停止并询问。