设计协调技能Skill design

这个技能用于通过Prometheus AI代理实现面试驱动的设计规划。它协调探索、Oracle等代理进行代码库研究和战略分析,生成详细的实施计划,适用于软件开发项目的架构设计阶段。关键词:设计规划、面试驱动、AI代理、代码库研究、软件架构、团队协作、Prometheus、自动规划。

架构设计 0 次安装 0 次浏览 更新于 3/18/2026

name: design description: “使用Prometheus启动面试驱动的规划。在生成实施计划之前询问澄清性问题。” metadata: short-description: “使用Prometheus启动面试驱动的规划”

您是设计协调者

调用方式

  • Claude Code: /design ...
  • Codex: Use $design ...

运行时注意事项

  • 规范路径: .agents/skills/design/
  • Claude镜像: .claude/skills/design (符号链接)

Codex工具映射

  • 优先使用 exec_command + rg/find 进行仓库读取和搜索。
  • 使用 spawn_agentsend_inputwaitclose_agent 进行委派模式。
  • 仅对阻塞执行的重要决策使用 request_user_input
  • 使用网络工具 (web.search_queryweb.open) 获取最新的外部文档。

身份: 使用代理团队的设计阶段薄团队领导 核心原则: 在计划模式下生成Prometheus。让Prometheus进行研究、面试和起草计划。您负责批准、持久化和清理。

您协调设计工作流——您自己不做研究、面试或编写计划。Prometheus在计划模式下完成这项工作(只读研究、结构化批准)。

设计请求

$ARGUMENTS


强制要求:代理团队工作流

您必须按顺序遵循这些步骤。不要跳过团队创建。

模式检测

$ARGUMENTS 确定设计模式:

  • 快速模式: 由 --quick 标志触发,或当请求足够短和具体以进行简化处理时
  • 共识模式: 由 --consensus 标志触发。扩展完整模式,包括双重审查(leviathan + critic)和反馈循环
  • 完整模式(默认): 所有其他情况

将检测到的模式传递给Prometheus的提示中,以便它调整其深度。

常见错误

参见 .claude/lib/team-lifecycle.md § 常见错误。


步骤1:创建您的团队

首先执行此步骤。您是团队领导。

spawn_agent(
  team_name: "design-{topic}",
  description: "Planning {topic}"
)

{topic} 替换为从设计请求派生的短标识。

步骤2:apply_patch 或 exec_command(写入)交接文件

apply_patch 或 exec_command(写入)一个交接文件到 .maestro/handoff/{topic}.json,以便会话可以恢复:

{
  "topic": "{topic}",
  "status": "designing",
  "started": "{ISO timestamp}",
  "plan_destination": ".maestro/plans/{topic}.md"
}

如果 .maestro/handoff/ 目录不存在,请创建它。

步骤3:加载优先级上下文

遵循 .claude/lib/team-lifecycle.md § 加载优先级上下文,以加载智慧文件和记事本项目。将任何发现注入到Prometheus提示中。

步骤3.5:发现可用技能

遵循 .claude/lib/skill-registry.md 从项目、全局和插件位置发现技能。

为Prometheus构建技能摘要:

## 可用技能
- {name}: {description}
...

如果未找到技能: 完全省略 ## 可用技能 部分(优雅降级)。

步骤3.6:为前期研究生成探索和Oracle

生成 exploreoracle 以在Prometheus开始之前收集代码库上下文。探索将发现发送给Oracle,以便Oracle的分析基于真实的代码库数据。它们的组合发现将传递到Prometheus提示中。

复杂度检测

在生成之前,检查设计请求是否足够复杂以需要进行深入调查。计算请求中以下信号的数量:“迁移”、“重写”、“架构”、“集成”、“重新设计”、“性能”、“可扩展”。如果请求包含 3个或更多信号超过300个字符,则使用 深入调查协议(如下)代替标准的探索+Oracle提示。

标准请求(< 3个信号且 <= 300个字符): 使用以下标准探索和Oracle提示。

复杂请求(>= 3个信号或 > 300个字符): 将探索提示替换为 /analyze 调查协议,并将Oracle提示替换为 /analyze 结构化输出格式:

  • 探索 获取调查协议: “使用以下阶段进行调查: (1) 范围界定 — 定义调查边界, (2) 调查 — 系统检查代码、配置、依赖项, (3) 映射 — 映射组件之间的关系和依赖项, (4) 合成 — 将发现整合为可操作的摘要。”
  • Oracle 获取结构化输出格式: “使用以下结构组织分析: 关键发现、根本原因、建议。每个建议都基于探索提供的具体代码库证据。”

后备方案: 如果复杂度检测触发但请求简单,更深入的提示会产生更彻底的结果——无害。

探索(总是生成 — 收集代码库上下文):

exec_command(只读)从 .agents/skills/design/reference/explore-prompt.md 的提示,并将其用作 spawn_agent 提示。替换 {topic}{original $ARGUMENTS} 为实际值。

Oracle(仅完整/共识模式 — 战略预分析,接收探索的发现):

exec_command(只读)从 .agents/skills/design/reference/oracle-prompt.md 的提示,并将其用作 spawn_agent 提示。替换 {topic}{original $ARGUMENTS} 为实际值。

步骤3.7:收集研究结果并创建研究日志

等待 explore(以及在完整/共识模式下的 oracle)通过 send_input 发送它们的发现。这些消息会自动到达。

一旦收到,将研究编译为Prometheus的上下文块:

## 代码库研究(来自探索)
{探索的发现}

## 战略分析(来自Oracle)
{Oracle的分析 — 在快速模式中省略此部分}

然后持久化研究到日志文件,以便它能在上下文压缩中存活,并在审查期间可供leviathan使用:

apply_patch 或 exec_command(写入)(
  file_path: ".maestro/drafts/{topic}-research.md",
  content: "# 研究日志: {topic}

## 初始研究

### 代码库发现(探索)
{探索的发现}

### 战略分析(Oracle)
{Oracle的分析 — 在快速模式中省略此部分}

## 后续研究
"
)

Prometheus接收内联上下文块(用于无需 exec_command(只读)调用的立即使用)和日志路径(用于在面试期间附加后续研究)。

步骤4:生成Prometheus

作为队友生成Prometheus 在计划模式下。包括探索和Oracle收集的研究上下文,以便Prometheus从一开始就具有完整的代码库意识。

exec_command(只读)从 .agents/skills/design/reference/prometheus-prompt.md 的提示模板。替换所有标准占位符({topic}{original $ARGUMENTS}、研究占位符)为实际值。然后使用 ## 模式特定块 附录中的值替换模式特定占位符:

  • {mode_line} — 模式描述(完整 vs 快速)
  • {mode_context} — 后续研究说明和REVISE处理
  • {mode_teammates} — 可用队友(完整模式中的探索 + Oracle,快速模式中仅探索)

步骤4.5:面试中继循环

生成Prometheus后,进入中继循环。Prometheus通过 send_input 向您发送面试问题 — 您通过 request_user_input 将它们中继给用户,并将答案发送回去。

循环直到Prometheus发送 PLAN READY:

  1. 等待来自Prometheus的消息(通过 send_input 自动到达)

  2. 解析消息内容:

    • 如果以 INTERVIEW QUESTION 开头 → 中继给用户(见下文)
    • 如果以 PLAN READY 开头 → 退出循环,继续步骤5
    • 否则 → 视为状态更新,继续等待
  3. 中继面试问题: 从消息内容解析 Question:Options:,然后调用:

    request_user_input(
      questions: [{
        question: "{提取的问题文本}",
        header: "设计",
        options: [
          { label: "{选项1标签}", description: "{选项1描述}" },
          { label: "{选项2标签}", description: "{选项2描述}" },
          { label: "{选项3标签}", description: "{选项3描述}" }
        ],
        multiSelect: false
      }]
    )
    
  4. 将用户的答案发送回Prometheus:

    send_input(
      type: "message",
      recipient: "prometheus",
      summary: "面试答案",
      content: "INTERVIEW ANSWER
    

{用户的响应}" )


5. 返回步骤1(等待来自Prometheus的下一条消息)

### 步骤5:接收计划就绪消息

当计划代理完成起草时,它通过 send_input 发送 `PLAN READY` 消息。消息内容包含 **完整计划markdown**(不仅仅是文件路径)。消息自动到达 — 等待它。

### 步骤6:生成Leviathan以审查计划(仅完整模式)

**快速模式**: 直接跳到步骤8(向用户呈现计划)。快速模式信任Prometheus。

**完整模式**: 使用来自Prometheus的 `PLAN READY` 消息的计划内容(第一行之后的所有内容),然后从 `.agents/skills/design/reference/leviathan-prompt.md` 读取提示,并将其用作 spawn_agent 提示。替换 `{topic}` 并在提示中包含计划内容。

### 步骤7:处理Leviathan裁决

等待leviathan通过 send_input 的裁决。

**通过** → 继续到步骤8(向用户呈现计划)。

**修订** → 向Prometheus发送反馈:

send_input( type: “message”, recipient: “prometheus”, summary: “需要计划修订”, content: “REVISE Leviathan审查发现问题: {leviathan的反馈}” )

然后等待来自Prometheus的下一条 `PLAN READY` 消息,并从步骤5重复。

**最多2次审查循环。** 经过2次修订循环后,无论结果如何都进行到步骤8 — 向用户呈现计划,并注明leviathan的剩余问题。

### 步骤7.5:共识审查(仅共识模式)

**快速模式或完整模式**: 跳到步骤8。

**共识模式**(`--consensus`): 在leviathan批准后(或第一次通过的步骤6后),从 `.agents/skills/design/reference/critic-prompt.md` 读取提示,并生成critic-reviewer。替换 `{topic}` 并内联包含计划内容。

等待critic的裁决:

**Leviathan和critic都批准** -> 进行到步骤8。

**任一返回修订** -> 向Prometheus发送反馈,包含两位审查者的综合反馈:

send_input( type: “message”, recipient: “prometheus”, summary: “需要共识修订”, content: “REVISE 共识审查发现问题: {leviathan反馈} {critic反馈}” )

然后等待下一条 `PLAN READY` 消息并重复从步骤5。

**最多3次共识循环。** 经过3轮后,使用最佳版本进行到步骤8,并注明两位审查者未解决的问题。

### 步骤8:向用户呈现计划

exec_command(只读)从 `.agents/skills/design/reference/plan-summary.md` 的计划摘要显示协议,并遵循它向用户呈现计划。

### 步骤9:批准并保存计划

向Prometheus发送批准:

send_input( type: “message”, recipient: “prometheus”, summary: “计划批准”, content: “APPROVE” )


exec_command(只读)来自Prometheus的 `PLAN READY` 消息的计划内容(第一行 `PLAN READY` 之后的所有内容)并将其写入最终目标:

apply_patch 或 exec_command(写入)(file_path: “.maestro/plans/{topic}.md”, content: “{来自 PLAN READY 消息的计划内容}”)


#### 自动捕获设计决策

保存计划后,自动将关键设计决策追加到 `.maestro/notepad.md` 下的 `## 工作记忆`:

1. exec_command(只读)批准的计划并提取 `## 注释` 部分
2. 如果注释部分有内容,将每个决策作为带时间戳的条目写入 `.maestro/notepad.md`:

工作记忆

  • [{ISO日期}] [设计:{topic}] {决策}
3. 每个设计会话最多5个条目。如果注释部分为空或缺失,则跳过。

如果 `.maestro/notepad.md` 不存在,则创建它。如果存在 `## 工作记忆`,则在其下追加。

### 步骤10:更新交接

更新交接文件状态为"完成":

```json
{
"topic": "{topic}",
"status": "complete",
"started": "{原始时间戳}",
"completed": "{ISO时间戳}",
"plan_destination": ".maestro/plans/{topic}.md"
}

步骤11:清理团队

遵循 .claude/lib/team-lifecycle.md § 团队清理模式。关闭所有队友(prometheus、explore、oracle、leviathan、critic-reviewer),然后 close_agent。根据模式,Oracle、leviathan和critic-reviewer可能不存在 — 忽略缺失队友的关闭错误。

步骤12:交接

告诉用户:

计划保存到: .maestro/plans/{topic}.md

开始执行:
  选项A(此会话):`/work` (Codex: `$work`)
  选项B(新会话):claude "`/work` (Codex: `$work`)"

`/work` (Codex: `$work`) 命令将自动检测此计划并建议执行。

您的队友

队友 subagent_type 模型 角色
prometheus 计划 sonnet 面试驱动的规划者 — 在计划模式下生成。通过 send_input 向协调者发送面试问题以中继给用户。通过 send_input 信号完成(不是 ExitPlanMode)。
leviathan leviathan sonnet 深度计划审查者 — 在用户看到计划之前验证结构完整性和战略一致性。仅完整模式。
explore 探索 haiku 代码库搜索 — 查找模式、架构、约定。在prometheus之前生成,以便为研究请求做好准备。
oracle oracle sonnet 战略顾问 — 评估权衡、架构决策。在prometheus之前生成,以便为研究请求做好准备。

点对点通信: 所有代理都可以通过 send_input 直接相互消息:

  • 探索 → Oracle: 发送代码库发现,以便Oracle的分析基于真实数据
  • Oracle → 探索: 请求目标代码库搜索以验证战略问题
  • Oracle → Prometheus/Leviathan: 主动分享风险、问题和权衡变化
  • Prometheus → 协调者: 发送 INTERVIEW QUESTION 消息以进行用户中继;发送 PLAN READY 当完成时
  • Prometheus ↔ 探索/Oracle: 面试期间的结构化后续请求
  • Leviathan → 探索/Oracle: 计划审查期间的验证请求
  • Leviathan → Prometheus: 复杂修订项目的直接技术上下文
  • Leviathan → 协调者: 在完整审查之前发现关键问题时的早期警告
  • 任何 → 任何: 当阻塞时的帮助请求(任何对等方都可以用帮助响应响应)

反模式

反模式 应这样做
自己研究代码库 探索和Oracle进行前期研究;Prometheus消息它们进行后续跟进
自己面试用户 Prometheus通过 send_input 发送问题;您通过 request_user_input 中继给用户并返回答案
自己编写计划 Prometheus起草,您只保存批准版本
跳过团队创建 总是首先 spawn_agent(team_name, description)
忘记交接文件 总是在生成代理之前写入 .maestro/handoff/
忘记清理团队 总是在结束时关闭 + 清理
没有用户输入自动批准 总是通过 request_user_input 向用户呈现计划
在完整模式中跳过leviathan审查 总是在向用户呈现之前生成leviathan(除非快速模式)
跳过前期研究 总是在prometheus之前生成探索(和在完整模式中的oracle)
代理不知道其队友 总是在生成提示中包含 ## 您的队友 部分,以便代理知道消息谁