这份文档面向想在本地 demo 之外运行 Maestro 的人。
核心原则:
先本地体验 -> 再接一个真实系统 -> 观察结果 -> 逐步增加权限。
Maestro 可以让 AI Agent 处理真实项目任务和真实 Git 仓库。能力越强,越需要谨慎处理凭据、仓库写入、项目系统更新和日志。
| 模式 | 使用内容 | 适合场景 |
|---|---|---|
| 本地 demo | 本地模拟任务 + mock agent | 第一次体验和学习 |
| 可信评估 | 测试项目/测试仓库 + 真实 Agent | 验证流程 |
| 团队试点 | 真实项目流程 + 人工 review | 小范围团队使用 |
| 生产运行 | 凭据、监控、审批、清理策略齐全 | 长期运行 |
不要从本地 demo 直接跳到无限制生产运行。
- 任务来自 TAPD、Linear 还是本地模拟数据?
- 目标 Git 仓库在哪里?使用 GitHub、CNB 还是本地模拟代码平台?
- 使用 Codex、Claude Code、OpenCode 还是 mock?
- Agent 是否可以修改仓库或推送分支?
- Agent 是否可以更新项目系统中的状态、评论或链接?
- 独立工作区创建在哪里?
- 谁来 review 结果?
- 如何停止、清理和复盘一次运行?
如果答案不明确,先使用 memory/no_repo/mock。
使用 mise 安装固定版本的 Erlang/Elixir:
cd elixir
mise trust
mise install
mise exec -- elixir --version常用主机工具:
bashgitgh,用于 GitHub PR workflow- 选中的 Agent CLI,例如 Codex、Claude Code、OpenCode
./bin/symphony或SYMPHONY_CLI
provider 细节见:
elixir/docs/agent_providers/
对外项目名是 Maestro。
当前运行时仍使用一些兼容命名:
symphonyCLISymphonyElixir模块名.symphony目录SYMPHONY_*环境变量
实际配置和运行时请继续使用这些名称。
只提供当前模板需要的凭据。
TAPD:
export TAPD_API_USER=...
export TAPD_API_PASSWORD=...
export TAPD_WORKSPACE_ID=...Linear:
export LINEAR_API_KEY=...
export LINEAR_PROJECT_SLUG=...GitHub:
gh auth status
export SOURCE_REPO_PROVIDER_REPOSITORY=owner/repoCNB:
export CNB_TOKEN=...仓库输入:
export SOURCE_REPO_URL=https://github.com/owner/repo.git
export SOURCE_REPO_BASE_BRANCH=main
export SOURCE_REPO_PROVIDER_REPOSITORY=owner/repo尽量使用最小权限凭据,避免把高权限个人 token 用于长期无人值守运行。
每个任务都应该有独立工作区。
接入真实系统前,设置:
export SYMPHONY_WORKSPACE_ROOT=/path/to/isolated/maestro-workspaces工作区创建在 Maestro 的运行环境中,可以是本机目录、SSH 主机目录或 worker 环境目录。它不是创建在 TAPD、Linear、GitHub 或 CNB 里。
好的工作区做法:
- 使用专用目录;
- 不放在重要本地项目内;
- 每个任务有独立目录和仓库副本;
- 方便查看;
- 方便删除;
- 不和其他自动化混用。
独立工作区的价值:
- 多个任务可以并行执行;
- 不同任务的代码副本、日志和临时文件不会互相影响;
- 失败后可以单独查看和清理;
- reviewer 更容易复盘一次 Agent 执行。
./bin/symphony \
--i-understand-that-this-will-be-running-without-the-usual-guardrails \
--template memory/no_repo/mock \
--port 4000目标:确认 runtime、dashboard 和本地任务流程正常。
先使用 smoke test 或一次性任务。
mix tracker.smoke --template memory/no_repo/mock --issue local-memory-1 --json目标:在不影响真实用户的前提下验证配置。
使用测试项目、测试仓库或明确批准的 sandbox。
目标:验证真实集成的端到端行为。
限制任务范围、review 人、凭据权限和并发量。
目标:了解失败模式,优化模板和 prompt。
增加审批、监控、凭据轮换、清理策略和故障处理流程。
使用 --port 或 server.port 开启。
| 路径 | 用途 |
|---|---|
/ |
Dashboard |
/issues/:issue_identifier |
任务详情页 |
/api/v1/state |
运行状态 JSON |
/api/v1/<issue_identifier> |
任务详情 JSON |
/api/v1/refresh |
刷新接口 |
Dashboard 可用于查看:
- 哪些任务正在运行;
- 使用哪个 Agent;
- 最近事件;
- 工作区和 session 状态;
- 最终结果。
一次运行应该能回答:
- Maestro 为什么启动这个任务?
- 任务来自哪个项目系统?
- 使用了哪个 Git 仓库和分支?
- 使用了哪个模板和 Agent?
- 仓库发生了什么变化?
- Agent 调用了什么工具?
- 是否创建了分支或 PR?
- 哪里失败了?
- 人接下来应该 review 什么?
详细日志和脱敏行为见:
elixir/docs/logging.md
Repo-backed workflow 可能 clone 仓库、创建分支、推送 commit、打开 PR、检查 checks 或观察合入状态。
开启仓库写入前,请确认:
- 先使用一次性仓库测试;
- base branch 和分支命名正确;
- 仓库权限合适;
- PR 或关键变更需要人工 review;
- 初期不要跳过测试、评审或发布判断。
更多细节见:
elixir/docs/repo_provider.md
Maestro 需要知道哪些任务状态可以执行,哪些状态应该停止。
| 概念 | 含义 |
|---|---|
| Active state | Maestro 可以接手这个任务 |
| Terminal state | Maestro 应该停止或清理这个任务 |
| Route state | workflow 的下一步,例如 planning 或 review |
| Human review state | 需要人检查结果的状态 |
TAPD 的原始 API 状态可能和人看到的流程名不同,需要谨慎配置映射,并先在一次性任务上测试。
有些 workflow 可以把 Agent 运行在 SSH host 或 worker 服务上,而不是本机。
建议等本地和单机路径稳定后再启用。
启用远程 worker 前,确认:
- SSH 可以无交互认证;
- host key 策略明确;
- workspace root 隔离;
- cleanup 经过测试;
- 并发限制已设置;
- operator 能看到日志和错误。
运行真实任务前,应该知道如何:
- 停止 Maestro 进程;
- 找到对应任务的工作区;
- 查看日志和 dashboard;
- 撤销或删除测试分支;
- 清理临时工作区;
- 回滚项目系统里的测试状态或评论。