WORKFLOW.md file that combines YAML frontmatter for settings with a Markdown body for the agent prompt template.
Starting the Service
Pass a custom workflow file path when starting Symphony:./WORKFLOW.md in the current directory.
Command-Line Flags
Directory where Symphony writes log files for each agent session
Enable the HTTP observability service on the specified port. When set, exposes:
/- Dashboard UI/api/v1/state- Full system state as JSON/api/v1/<issue_identifier>- Issue-specific state/api/v1/refresh- Force state refresh
Required acknowledgement flag. Symphony runs Codex without typical safety guardrails.
Configuration Sections
tracker
Defines the issue tracking system and project scope.Tracker type. Currently supports
"linear" or "memory" (for testing).Linear project slug. Find this by right-clicking your project in Linear and copying the URL.
Linear API token. Defaults to reading from the
LINEAR_API_KEY environment variable.Linear GraphQL API endpoint. Rarely needs customization.
Filter issues by assignee. Use
"me" to match the API token owner, or a specific Linear user ID.Linear states that Symphony considers “active” and will poll for.
States that trigger workspace cleanup and agent termination.
polling
Controls how frequently Symphony checks Linear for new issues.Milliseconds between Linear API polls.
workspace
Defines where Symphony creates isolated workspaces for each issue.Parent directory for issue workspaces. Supports
~ expansion and $VAR environment variables.agent
Controls agent concurrency and turn limits.Maximum number of agents running simultaneously across all states.
Maximum back-to-back Codex turns per agent invocation when the issue remains active.
Maximum backoff delay in milliseconds when retrying failed agent runs.
State-specific concurrency limits. Overrides
max_concurrent_agents for specific states.codex
Configures Codex app-server invocation and sandboxing.Shell command to launch Codex. Supports environment variable expansion.
Codex approval policy. String values:
"untrusted", "on-failure", "on-request", "never". Object form uses reject structure.Thread-level sandbox mode. Options:
"read-only", "workspace-write", "danger-full-access".Turn-level sandbox policy. Defaults to Supported
workspaceWrite rooted at the issue workspace.type values:dangerFullAccessreadOnlyexternalSandboxworkspaceWrite
Maximum milliseconds for a single Codex turn (1 hour default).
Read timeout for Codex stdio communication.
Stall detection timeout. Terminates if no progress for this duration.
hooks
Lifecycle hooks for workspace management.Shell script executed after workspace creation. Typically clones your repository.
Executed before each agent run.
Executed after each agent run completes.
Cleanup script before workspace deletion.
Timeout for each hook execution in milliseconds.
observability
Controls the terminal dashboard display.Enable/disable the terminal dashboard.
Dashboard state refresh interval in milliseconds.
Dashboard render framerate (~60 FPS at 16ms).
server
Optional HTTP API server configuration.HTTP server port. Enables JSON API and dashboard when set.
HTTP server bind address.
Configuration Validation
Symphony validates configuration on startup:- Missing or invalid
WORKFLOW.mdhalts startup tracker.kindmust be"linear"or"memory"- Linear mode requires
api_keyandproject_slug - Path values resolve
~and$VARreferences - Codex runtime settings must be valid
Environment Variable Expansion
For
workspace.root, $VAR is resolved before path expansion. For codex.command, variables are expanded by the launched shell.Minimal Example
The smallest valid configuration:{{ issue.identifier }}, {{ issue.title }}, and {{ issue.description }}.