Shell wrapper for creating project-specific Symphony workflows and launching them against Linear-backed projects with support for multiple AI adapters. Supports claude/codex/minimax integration.
Latest version includes auto-update! Run symphony update to update.
Refer to my forked version of symphony for Claude/Codex/MiniMax integration: https://github.com/philipdaquin/symphony
Choose between claude/codex integration
git clone https://github.com/philipdaquin/symphony.git
or the original codex only integration
git clone https://github.com/openai/symphony.git
symphony.sh:
- stores project mappings in
~/.symphony/projects.conf - copies your base Symphony workflow from
$SYMPHONY_BIN/WORKFLOW.md - patches the copied workflow with project slug, repo URL, workspace path, and agent config
- auto-builds the Symphony escript when source files change
- starts Symphony with the generated workflow
- Symphony installed locally
misegit- a valid
LINEAR_API_KEY
Optional:
MINIMAX_API_KEYfor MiniMax routingSYMPHONY_BINif your Symphony checkout is not at the default path
Default Symphony path: $HOME/symphony/elixir
Override it if needed:
export SYMPHONY_BIN=/path/to/symphony/elixirExport your API keys before running the script:
export LINEAR_API_KEY=your_linear_api_key
export MINIMAX_API_KEY=your_minimax_api_key # optional, for MiniMax routingMake the script executable:
chmod +x symphony.shThe script supports three adapter modes:
| Flag | Adapter | Description |
|---|---|---|
--codex |
Codex | Uses OpenAI Codex agent (default) |
--claude |
Claude | Uses Anthropic Claude adapter |
--minimax |
Claude + MiniMax | Routes Claude through MiniMax M2.7 |
When using --minimax, the script exports these env vars:
ANTHROPIC_BASE_URL="https://api.minimax.io/anthropic"
ANTHROPIC_AUTH_TOKEN="$MINIMAX_API_KEY"
API_TIMEOUT_MS="3000000"
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
ANTHROPIC_MODEL="MiniMax-M2.7"
ANTHROPIC_DEFAULT_SONNET_MODEL="MiniMax-M2.7"
ANTHROPIC_DEFAULT_OPUS_MODEL="MiniMax-M2.7"
ANTHROPIC_DEFAULT_HAIKU_MODEL="MiniMax-M2.7"./symphony.sh add <name> <linear-project-slug> <git-repo-url> [--codex|--claude|--minimax]Examples:
./symphony.sh add rizz-ai symphony-abc git@github.com:org/repo.git
./symphony.sh add rizz-ai symphony-abc git@github.com:org/repo.git --claude
./symphony.sh add rizz-ai symphony-abc git@github.com:org/repo.git --minimaxThe adapter preference is saved in projects.conf and reused on start unless overridden.
./symphony.sh list./symphony.sh start <name> [--codex|--claude|--minimax]Examples:
./symphony.sh start rizz-ai
./symphony.sh start rizz-ai --minimaxStarting a project:
- Loads adapter preference from
projects.conf(if no flag passed) - Patches the workflow file with the agent config (
adapter,max_concurrent_agents: 10,max_turns: 20) - Exports MiniMax env vars if
--minimaxwas used - Builds the Symphony escript if needed (rebuilds if source files are newer)
- Launches Symphony with the workflow
./symphony.sh install # Install symphony to ~/bin/symphony (or ~/.local/bin/symphony)
./symphony.sh update # Update to latest version from GitHub
./symphony.sh update --check # Check if update available without installing
./symphony.sh version # Show current versionExamples:
./symphony.sh install # First-time installation
./symphony.sh update # Update to the latest version
./symphony.sh update --check # Check for updatesThe update command fetches from GitHub main branch and auto-updates if a newer version is available.
When you run add, the script:
- checks that
$SYMPHONY_BIN/WORKFLOW.mdexists - copies it to
~/.symphony/workflows/WORKFLOW_<name>.md - updates:
project_slug- the
git cloneline - the workspace root under
~/code/symphony-workspaces/<name>
- patches the agent block with adapter and concurrency settings
- stores the project in
~/.symphony/projects.conf
When you run start, the script:
- loads saved project config
- patches the workflow with current adapter settings
- exports MiniMax env vars if needed
- checks if the escript needs rebuilding (rebuilds if sources are newer)
- launches Symphony with
--logs-rootset to~/.symphony
symphony.sh: wrapper script~/.symphony/projects.conf: stored project mappings (format:name|slug|repo|adapter|use_minimax)~/.symphony/workflows/WORKFLOW_<name>.md: generated per-project workflows$SYMPHONY_BIN/WORKFLOW.md: base workflow template$SYMPHONY_BIN/bin/symphony: built escript (auto-built on demand)
LINEAR_API_KEYis required or the script exits immediately.MINIMAX_API_KEYis required when using--minimax.- The in-place
sed -i ''commands are written for macOS/BSDsed.