codex configuration section controls how Symphony launches and interacts with the Codex app-server for agent execution.
Configuration
WORKFLOW.md
Fields
Shell command to launch the Codex app-server process.The runtime launches this command via Required: Must be non-empty after trimming. Validated on startup and before each dispatch.
bash -lc <command> in the workspace directory.Common patterns:Codex To inspect supported values for your Codex version:
AskForApproval policy for command/file approval requests.Supported values depend on your Codex app-server version. Common options:"never": Auto-approve all requests"always": Require approval for every action (blocks unattended runs)- Object form for fine-grained control:
For unattended orchestration, use
"never" or an auto-approve policy. Symphony does not implement approval UI.Codex
SandboxMode for the app-server thread.Common values:"workspace-write": Allow writes within workspace directory"full-access": No filesystem restrictions"read-only": Read-only filesystem access
Codex Symphony automatically injects the workspace path into
SandboxPolicy for each turn execution.Defines filesystem, network, and process isolation for agent tool execution.Common structure:writableRoots when type: workspaceWrite.Default policy from source:Maximum duration for a single Codex turn in milliseconds (1 hour default).If a turn exceeds this timeout, the worker exits with a timeout error and schedules a retry.Example values:
1800000= 30 minutes3600000= 1 hour (default)7200000= 2 hours
Timeout for synchronous request/response messages during session startup (5 seconds default).Applies to:
initializerequestthread/startrequest- Other startup handshake messages
turn_timeout_ms instead).Maximum idle time before a running agent is considered stalled (5 minutes default).The orchestrator tracks the last Codex event timestamp for each running session. If no events arrive within this window, the session is terminated and retried.Set to
0 or negative to disable stall detection.From source:App-Server Protocol
Symphony communicates with Codex using the app-server JSON-RPC protocol over stdio.Session Startup Handshake
Turn Streaming
The agent runner reads line-delimited JSON messages from stdout:turn/completed→ Success, check issue state for continuationturn/failed→ Failure, schedule retryturn/cancelled→ Failure, schedule retry- Other events → Update orchestrator state (tokens, rate limits)
Continuation Turns
After a successful turn, if the issue is still active:threadId is reused, so the agent has full context from prior turns.
Sandboxing Strategies
Workspace-Write (Recommended)
Allow writes only within the issue workspace:Full Access (High Trust)
No filesystem restrictions:Custom Writable Roots
Allow writes to specific directories:Approval Handling
Symphony auto-approves requests whenapproval_policy: never:
Configuration Reloading
Codex configuration changes are applied dynamically:command: Affects newly launched agent processesapproval_policy,thread_sandbox,turn_sandbox_policy: Affect new sessions- Timeout values: Affect new turns and reconciliation cycles