Set up Symphony — OpenAI's orchestrator that turns Linear tickets into pull requests via autonomous Codex agents.
Works with
AI-first code editor with Composer
Before installing skills in Cursor, ensure your development environment meets these requirements:
node --versionsymphony-setupExecute the skills CLI command in your project's root directory to begin installation:
Fetches symphony-setup from odysseus0/symphony and configures it for Cursor.
The CLI shows a list of agents. Use arrow keys and space to select Cursor:
Confirm successful installation by checking the skill directory location:
Restart Cursor to activate symphony-setup. Access via /symphony-setup in your agent's command palette.
We perform automated surface-level scans (Gen AI Scanner, Socket, Snyk) during installation. These checks detect common vulnerabilities but do not guarantee complete security. Always review skill source code and verify the publisher's reputation before production use.
Skills execute code in your environment. Always review source, verify the publisher, and test in isolation before production.
Submit your Claude Code skill and start earning
Create detailed user stories, acceptance criteria, and feature specs
Example
Generate user stories for 'password reset feature' with acceptance criteria, edge cases, and test scenarios
Reduce spec writing time by 50%, ensure comprehensive coverage
Research competitors, compare features, identify gaps
Example
Analyze 5 competitor products, create feature comparison matrix, suggest differentiation opportunities
Complete competitive research in 2 hours instead of 2 days
Evaluate features using frameworks (RICE, ICE, Kano) and create prioritized backlogs
Example
Score 20 feature ideas using RICE framework, generate prioritized roadmap with rationale
2
total installs
2
this week
56
GitHub stars
0
upvotes
Run in your terminal
2
installs
2
this week
56
stars
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:
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).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 ticketsMake data-driven prioritization decisions faster
Draft PRDs, status updates, and stakeholder presentations
Example
Create executive summary of Q3 roadmap, monthly progress report, feature launch announcement
Save 3-5 hours/week on communication overhead
Prerequisites
Time Estimate
30-60 minutes to see productivity improvements
Steps
Common Pitfalls
✓ Do
✗ Don't
💡 Pro Tips
✓ Use when
Use for user story writing, competitive research, roadmap prioritization, stakeholder communication, and PRD drafting. Best for reducing repetitive documentation and research work.
✗ Avoid when
Avoid for strategic product vision (requires deep customer empathy), pricing decisions (needs market and financial expertise), or when face-to-face customer discovery is more valuable than speed.
mattpocock/skills
parcadei/continuous-claude-v3
cursor/plugins
ailabs-393/ai-labs-claude-skills
pproenca/dot-skills
mattpocock/skills
symphony-setup is among the better-maintained entries we tried; worth keeping pinned for repeat workflows.
Solid pick for teams standardizing on skills: symphony-setup is focused, and the summary matches what you get after install.
Registry listing for symphony-setup matched our evaluation — installs cleanly and behaves as described in the markdown.
symphony-setup has been reliable in day-to-day use. Documentation quality is above average for community skills.
Useful defaults in symphony-setup — fewer surprises than typical one-off scripts, and it plays nicely with `npx skills` flows.
symphony-setup fits our agent workflows well — practical, well scoped, and easy to wire into existing repos.
I recommend symphony-setup for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
I recommend symphony-setup for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
I recommend symphony-setup for anyone iterating fast on agent tooling; clear intent and a small, reviewable surface area.
symphony-setup reduced setup friction for our internal harness; good balance of opinion and flexibility.
showing 1-10 of 73