symphony-setup by odysseus0/symphony
npx skills add https://github.com/odysseus0/symphony --skill symphony-setup设置 Symphony —— OpenAI 的编排器,通过自主的 Codex 代理将 Linear 工单转换为拉取请求。
首先运行这些检查,如果任何一项失败则停止 —— 解决后再继续:
codex —— 运行 codex --version。必须已安装并完成身份验证。mise —— 运行 mise --version。用于 Elixir/Erlang 版本管理。gh —— 运行 gh auth status。必须已安装且完成身份验证。代理使用 gh 来创建 PR 和关闭孤立的 PR。如果没有它,会静默失败。广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
LINEAR_API_KEY —— 运行 test -n "$LINEAR_API_KEY" && echo "set" || echo "missing"。必须在会话间持久化(在 shell 配置中,而不仅仅是 export)。claude mcp add --transport http linear https://mcp.linear.app/mcpcodex mcp add linear --url https://mcp.linear.app/mcpafter_create 钩子会无人值守地运行 git clone。验证用户的仓库克隆 URL 可以在非交互模式下工作:git clone --depth 1 <url> /tmp/test-clone && rm -rf /tmp/test-clone。需要密码提示的 HTTPS 会静默失败。请使用 SSH 密钥(无密码)或带有凭据助手/令牌的 HTTPS。在继续之前向用户报告结果。
使用 fork —— 更容易上手:
git clone https://github.com/odysseus0/symphony
cd symphony/elixir
mise trust && mise install
mise exec -- mix setup
mise exec -- mix build
注意:mise install 会下载平台可用的预编译 Erlang/Elixir。如果没有,则从源代码编译 —— 这可能需要 10-20 分钟。在开始前告知用户。
尽可能自动检测。只要求用户确认或填补空白。
git rev-parse --show-toplevel。如果不在 git 仓库中,则询问。git remote get-url origin。验证它可以在非交互模式下工作:git clone --depth 1 <url> /tmp/test-clone && rm -rf /tmp/test-clone。使用 Linear MCP 列出项目。展示列表并让用户选择。slugId 就是放入 WORKFLOW.md 中 tracker.project_slug 的内容。
用户选择项目后,使用 Linear MCP 检查团队的工作流状态。需要三个自定义状态。如果缺少任何状态,通过 curl 创建:
curl -s -X POST https://api.linear.app/graphql \
-H "Content-Type: application/json" \
-H "Authorization: $LINEAR_API_KEY" \
-d '{"query": "mutation($input: WorkflowStateCreateInput!) { workflowStateCreate(input: $input) { success workflowState { id name } } }", "variables": {"input": {"teamId": "<team-id>", "name": "<name>", "type": "started", "color": "<color>"}}}'
| 名称 | 颜色 |
|---|---|
| Rework | #db6e1f |
| Human Review | #da8b0d |
| Merging | #0f783c |
在创建前与用户确认。
在询问前检查项目是否有可启动的 UI:
electron 或 electron-builder → Electron 应用react-scripts、next、vite、nuxt → 带有开发服务器的 Web 应用start 或 dev 脚本 → 可能带有开发服务器Procfile、docker-compose.yml → 带有运行时的服务如果检测到,根据你的发现(框架、启动脚本、默认端口)建议一个 launch-app 技能。与用户确认并调整。如果未检测到任何内容,询问是否有 UI —— 对于纯库/CLI/API,跳过启动技能。
从 Symphony 安装两样东西到用户的仓库:
技能 —— 通过 skills.sh 安装(代理需要这些在其工作区克隆中):
cd <user's repo> npx skills add odysseus0/symphony -a codex -s linear land commit push pull debug --copy -y
--copy 标志是必需的 —— 符号链接在工作区克隆中会失效。-s 标志排除 symphony-setup(元技能,工作者不需要)。
2. elixir/WORKFLOW.md —— 复制整个文件,包括 markdown 正文。提示正文包含状态机、规划协议和验证策略,这些使代理变得有效。
两处更改:
tracker:
project_slug: "<user's project slug>"
完全替换 —— 默认克隆的是 Symphony 仓库本身:
hooks:
after_create: |
git clone --depth 1 <user's repo clone URL> .
<user's setup commands, if any>
其他所有内容保持不变。 沙盒、approval_policy、轮询间隔和并发设置在 fork 中都有良好的默认值。
如果用户的项目有需要运行时测试的 UI 或应用,在其仓库中创建 .agents/skills/launch-app/SKILL.md:
---
name: launch-app
description: Launch the app for runtime validation and testing.
---
# Launch App
<launch command and any setup steps specific to the user's project>
<how to verify the app is running>
<how to connect for testing — e.g., agent-browser URL, localhost port>
WORKFLOW.md 提示告诉代理对涉及应用的更改“运行运行时验证”。没有这个技能,代理将不知道如何启动应用。对于非应用仓库(库、CLI、API),跳过此步骤。
将 .agents/skills/、WORKFLOW.md 和 launch-app 技能(如果已创建)提交到用户的仓库并推送。推送至关重要 —— 代理从远程克隆,因此未推送的更改对工作者不可见。
推送后,验证:git log origin/$(git branch --show-current) --oneline -1 应显示你的提交。
在启动 Symphony 之前,使用 Linear MCP 列出所有处于活动状态(Todo、In Progress、Rework)的工单。Symphony 将立即为每个活动工单分派代理 —— 不仅仅是新工单。
向用户展示列表,并询问他们是否对所有这些工单被处理感到满意。将任何他们尚未准备好移交的工单移回 Backlog。
cd <symphony-path>/elixir
mise exec -- ./bin/symphony <repo-path>/WORKFLOW.md \
--i-understand-that-this-will-be-running-without-the-usual-guardrails
guardrails 标志是必需的 —— Symphony 使用 danger-full-access 沙盒运行 Codex 代理。
添加 --port <port> 以启用 Phoenix Web 仪表板。
让用户在 Linear 中将一个测试工单推送到 Todo。观察第一个工作者是否认领它。如果失败,运行此检查清单:
LINEAR_API_KEY 可用吗?codex 完成身份验证了吗?gh auth status 通过了吗?.agents/skills/ 和 WORKFLOW.md 推送到远程了吗?一旦 Symphony 运行起来,帮助用户处理他们的第一个工作流:
用户有一个大的功能想法。使用 Linear MCP 将其分解为工单。对于每个工单:
推送几个工单到 Todo 并观察。引导用户了解预期情况:
symphony 标签的 PR 出现在 GitHub 上WORKFLOW.md 在大约 1 秒内热重载 —— 无需重启。常见调整:
agent.max_concurrent_agents —— 根据 API 限制或仓库复杂性进行扩缩容agent.max_turns —— 对于复杂工单增加,为限制令牌消耗而减少polling.interval_ms —— Symphony 检查新/已更改工单的频率每周安装次数
144
仓库
GitHub 星标数
53
首次出现
14 天前
安全审计
安装于
codex144
gemini-cli142
github-copilot142
amp142
cline142
kimi-cli142
Set up Symphony — OpenAI's orchestrator that turns Linear tickets into pull requests via autonomous Codex agents.
Run these checks first and stop if any fail — resolve before continuing:
codex — run codex --version. Must be installed and authenticated.mise — run mise --version. Needed for Elixir/Erlang version management.gh — run gh auth status. Must be installed AND authenticated. Agents use gh to create PRs and close orphaned PRs. Silent failure without it.LINEAR_API_KEY — run test -n "$LINEAR_API_KEY" && echo "set" || echo "missing". Must persist across sessions (shell config, not just export).claude mcp add --transport http linear https://mcp.linear.app/mcpcodex mcp add linear --url https://mcp.linear.app/mcpafter_create hook runs git clone unattended. Verify the user's repo clone URL works non-interactively: git clone --depth 1 <url> /tmp/test-clone && rm -rf /tmp/test-clone. HTTPS with password prompts will silently fail. Use SSH keys (no passphrase) or HTTPS with credential helper / token.Report results to the user before proceeding.
Use the fork — easier to get started with:
git clone https://github.com/odysseus0/symphony
cd symphony/elixir
mise trust && mise install
mise exec -- mix setup
mise exec -- mix build
Note: mise install downloads precompiled Erlang/Elixir if available for the platform. If not, it compiles from source — this can take 10-20 minutes. Let the user know before starting.
Auto-detect as much as possible. Only ask the user to confirm or fill gaps.
git rev-parse --show-toplevel from the current directory. If not in a git repo, ask.git remote get-url origin. Verify it works non-interactively: git clone --depth 1 <url> /tmp/test-clone && rm -rf /tmp/test-clone.Use Linear MCP to list projects. Present the list and let the user pick. The slugId is what goes in WORKFLOW.md's tracker.project_slug.
After the user picks a project, use Linear MCP to check the team's workflow states. Three custom states are required. If any are missing, create them via curl:
curl -s -X POST https://api.linear.app/graphql \
-H "Content-Type: application/json" \
-H "Authorization: $LINEAR_API_KEY" \
-d '{"query": "mutation($input: WorkflowStateCreateInput!) { workflowStateCreate(input: $input) { success workflowState { id name } } }", "variables": {"input": {"teamId": "<team-id>", "name": "<name>", "type": "started", "color": "<color>"}}}'
| Name | Color |
|---|---|
| Rework | #db6e1f |
| Human Review | #da8b0d |
| Merging | #0f783c |
Confirm with the user before creating.
Check whether the project has a launchable UI before asking:
electron or electron-builder in package.json dependencies → Electron appreact-scripts, next, vite, nuxt in dependencies → web app with dev serverstart or dev script in package.json → likely has a dev serverProcfile, docker-compose.yml → service with runtimeIf detected, propose a launch-app skill based on what you find (framework, start script, default port). Confirm with the user and adjust. If nothing detected, ask whether there's a UI — for pure libraries/CLIs/APIs, skip the launch skill.
Install two things from Symphony into the user's repo:
Skills — install via skills.sh (agents need these in their workspace clone):
cd <user's repo> npx skills add odysseus0/symphony -a codex -s linear land commit push pull debug --copy -y
The --copy flag is required — symlinks would break in workspace clones. The -s flag excludes symphony-setup (meta-skill, not needed by workers).
2. elixir/WORKFLOW.md — copy the entire file including the markdown body. The prompt body contains the state machine, planning protocol, and validation strategy that makes agents effective.
Two changes:
tracker:
project_slug: "<user's project slug>"
Replace entirely — the default clones the Symphony repo itself:
hooks:
after_create: |
git clone --depth 1 <user's repo clone URL> .
<user's setup commands, if any>
Leave everything else as-is. Sandbox, approval_policy, polling interval, and concurrency settings all have good defaults in the fork.
If the user's project has a UI or app that needs runtime testing, create .agents/skills/launch-app/SKILL.md in their repo:
---
name: launch-app
description: Launch the app for runtime validation and testing.
---
# Launch App
<launch command and any setup steps specific to the user's project>
<how to verify the app is running>
<how to connect for testing — e.g., agent-browser URL, localhost port>
The WORKFLOW.md prompt tells agents to "run runtime validation" for app-touching changes. Without this skill, agents won't know how to launch the app. For non-app repos (libraries, CLIs, APIs), skip this.
Commit .agents/skills/, WORKFLOW.md, and launch-app skill (if created) to the user's repo and push. Push is critical — agents clone from the remote, so unpushed changes are invisible to workers.
After pushing, verify: git log origin/$(git branch --show-current) --oneline -1 should show your commit.
Before starting Symphony, use Linear MCP to list all tickets in active states (Todo, In Progress, Rework). Symphony will immediately dispatch agents for every active ticket — not just new ones.
Show the list to the user and ask if they're comfortable with all of these being worked on. Move anything they're not ready to hand off back to Backlog.
cd <symphony-path>/elixir
mise exec -- ./bin/symphony <repo-path>/WORKFLOW.md \
--i-understand-that-this-will-be-running-without-the-usual-guardrails
The guardrails flag is required — Symphony runs Codex agents with danger-full-access sandboxing.
Add --port <port> to enable the Phoenix web dashboard.
Have the user push a test ticket to Todo in Linear. Watch for the first worker to claim it. If it fails, run this checklist:
LINEAR_API_KEY available in the shell running Symphony?codex authenticated?gh auth status passing?.agents/skills/ and WORKFLOW.md pushed to remote?Once Symphony is running, help the user with their first workflows:
The user has a big feature idea. Use Linear MCP to break it into tickets. For each ticket:
Push a few tickets to Todo and watch. Walk the user through what to expect:
symphony labelWORKFLOW.md hot-reloads within ~1 second — no restart needed. Common adjustments:
agent.max_concurrent_agents — scale up/down based on API limits or repo complexityagent.max_turns — increase for complex tickets, decrease to limit token spendpolling.interval_ms — how often Symphony checks for new/changed ticketsWeekly Installs
144
Repository
GitHub Stars
53
First Seen
14 days ago
Security Audits
Gen Agent Trust HubPassSocketPassSnykWarn
Installed on
codex144
gemini-cli142
github-copilot142
amp142
cline142
kimi-cli142
WhatsApp Business API自动化指南:聊天机器人、客户支持与通知模板
488 周安装
BrowserStack Playwright 集成指南:云端跨浏览器自动化测试配置与运行
491 周安装
Claude技能提取工具:将重复开发模式转化为可重用技能,提升开发效率
494 周安装
Claude技能:promote - 将AI学习成果转化为项目规则,提升开发效率与代码一致性
493 周安装
Playwright测试修复指南:诊断和修复失败或不稳定的自动化测试
508 周安装
法律回复生成器 - 自动化法律咨询模板与合规回复工具 | Anthropic
507 周安装