name: setup description: 搭建持久项目上下文 — 产品定义、技术栈和指南。通过访谈您的项目并生成所有Maestro代理参考的上下文文件。 argument-hint: “[–reset]” allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion disable-model-invocation: true
设置 — 项目上下文搭建
灵感来自 Conductor。适应于Maestro的架构。
通过访谈用户创建持久项目上下文文档,供所有Maestro代理参考以深入了解项目。
参数
$ARGUMENTS
--reset: 删除所有现有上下文文件并重新开始。- 默认(无参数):运行设置访谈。如果上下文已存在,提供更新或跳过选项。
步骤 1: 处理 --reset
如果 $ARGUMENTS 包含 --reset:
- 检查
.maestro/context/是否存在 - 如果存在,与用户确认:
AskUserQuestion( questions: [{ question: "这将删除 .maestro/context/ 中的所有项目上下文文件。确定吗?", header: "重置上下文", options: [ { label: "是,重置", description: "删除所有上下文文件并重新开始" }, { label: "取消", description: "保留现有上下文" } ], multiSelect: false }] ) - 如果确认:
rm -rf .maestro/context/并报告 “上下文已重置。运行/setup创建新上下文。” - 停止。
步骤 2: 检查现有上下文
Glob(pattern: ".maestro/context/*.md")
如果上下文文件已存在,询问用户:
AskUserQuestion(
questions: [{
question: "项目上下文已存在。您想做什么?",
header: "现有上下文",
options: [
{ label: "更新", description: "重新运行设置并覆盖现有文件" },
{ label: "查看", description: "显示当前上下文文件并退出" },
{ label: "取消", description: "保持现有上下文不变" }
],
multiSelect: false
}]
)
在查看时:读取并显示 .maestro/context/ 中的每个文件,然后停止。
在取消时:停止。
在更新时:继续到步骤 3。
步骤 3: 检测项目成熟度
将项目分类为 Brownfield(现有)或 Greenfield(新)。
Brownfield 指标(按顺序检查,第一个匹配即停):
package.json、pyproject.toml、Cargo.toml、go.mod、build.gradle、pom.xml存在src/、app/或lib/目录包含代码文件.git目录存在且有提交(git log --oneline -1成功)
Greenfield:未找到上述任何指标。
对于 Brownfield 项目:
- 宣布:“检测到现有项目。在提问前我会分析它。”
- 读取关键文件以推断上下文:
README.md(如果存在)— 项目目的package.json/pyproject.toml/Cargo.toml/go.mod— 依赖和技术栈CLAUDE.md(如果存在)— 现有约定
- 存储推断以供后续问题使用。
对于 Greenfield 项目:
- 宣布:“检测到新项目。我将帮助您从头定义项目上下文。”
步骤 4: 创建上下文目录
mkdir -p .maestro/context
步骤 5: 产品定义访谈
生成 product.md — 项目是什么、为谁服务以及做什么。
对于 Brownfield:从步骤 3 分析中预填答案。请用户确认或纠正。
依次提问(一次一个问题)。最多限制为 3 个问题。
问题 1 — 项目目的:
AskUserQuestion(
questions: [{
question: "这个项目做什么?(一句话)",
header: "产品定义",
options: [
{ label: "{推断的目的如果 brownfield}", description: "基于 README/package.json 分析" },
{ label: "其他", description: "输入您自己的描述" }
],
multiSelect: false
}]
)
对于 greenfield,省略推断选项 — 直接问开放式问题。
问题 2 — 目标用户:
AskUserQuestion(
questions: [{
question: "主要用户是谁?",
header: "目标用户",
options: [
{ label: "开发者", description: "库、CLI 工具或面向开发者的 API" },
{ label: "最终用户", description: "Web 应用、移动应用或面向消费者的产品" },
{ label: "内部团队", description: "内部工具、管理仪表板或运维工具" },
{ label: "其他", description: "输入您自己的" }
],
multiSelect: false
}]
)
问题 3 — 关键功能(可选 — 如果 brownfield 有清晰的 README 则跳过):
AskUserQuestion(
questions: [{
question: "2-3 个最重要的功能或能力是什么?",
header: "关键功能",
options: [
{ label: "从分析中自动生成", description: "我将从代码库中推断" },
{ label: "其他", description: "输入您自己的列表" }
],
multiSelect: false
}]
)
草稿并写入 product.md:
# 产品定义
## 目的
{用户对 Q1 的回答}
## 目标用户
{用户对 Q2 的回答}
## 关键功能
{用户对 Q3 的回答,或推断列表}
写入 .maestro/context/product.md。
步骤 6: 技术栈访谈
生成 tech-stack.md — 语言、框架、工具。
对于 Brownfield:从配置文件推断技术栈(步骤 3)。展示以供确认。
AskUserQuestion(
questions: [{
question: "这是您的技术栈吗?
{推断的栈摘要}",
header: "技术栈",
options: [
{ label: "是,正确", description: "使用检测到的技术栈" },
{ label: "需要更改", description: "让我更正或添加" },
{ label: "其他", description: "手动输入完整技术栈" }
],
multiSelect: false
}]
)
对于 Greenfield:直接询问:
AskUserQuestion(
questions: [{
question: "这个项目将使用什么技术栈?(语言、框架、数据库等)",
header: "技术栈",
options: [
{ label: "其他", description: "输入您的技术栈" }
],
multiSelect: false
}]
)
草稿并写入 tech-stack.md:
# 技术栈
## 语言
- {语言 1}
- {语言 2}
## 框架
- {框架 1}
- {框架 2}
## 工具与基础设施
- 包管理器:{管理器}
- 数据库:{数据库,如果适用}
- CI/CD:{ci,如果适用}
写入 .maestro/context/tech-stack.md。
步骤 7: 指南访谈
生成 guidelines.md — 编码约定、设计原则、非功能需求。
AskUserQuestion(
questions: [{
question: "这个项目有任何特定的指南或原则吗?",
header: "项目指南",
options: [
{ label: "从分析中自动生成", description: "我将从 CLAUDE.md、linter 配置和约定中推断" },
{ label: "TDD 优先", description: "测试驱动开发,高覆盖率" },
{ label: "快速行动", description: "快速发布,后续迭代" },
{ label: "安全优先", description: "输入验证、审计日志、安全默认值" },
{ label: "其他", description: "输入您自己的指南" }
],
multiSelect: true
}]
)
草稿并写入 guidelines.md:
# 项目指南
## 开发原则
- {选择的原则}
## 约定
- {从 CLAUDE.md 或用户输入推断}
## 非功能需求
- {性能、安全、可访问性等}
写入 .maestro/context/guidelines.md。
步骤 8: 总结与提交
- 显示所有生成文件的摘要:
## 项目上下文已创建
**文件**:
- `.maestro/context/product.md` — 产品定义
- `.maestro/context/tech-stack.md` — 技术栈
- `.maestro/context/guidelines.md` — 项目指南
这些文件将自动注入到所有 Maestro 代理上下文中。
更新:`/setup`
重置:`/setup --reset`
查看:`/setup` → 查看
- 提交上下文文件:
git add .maestro/context/
git commit -m "chore(setup): 搭建项目上下文文件"