OpenSymphony 2.0.0 promotes Codex from prototype research into a supported local harness path.

The release adds a local Codex app-server integration so trusted local operators can route issue work through the installed Codex CLI while OpenSymphony keeps ownership of scheduling, workspace containment, run manifests, and operator-facing debugging.

What changed

  • codex_app_server is now a supported local harness kind.
  • OpenSymphony launches the installed Codex CLI with codex --dangerously-bypass-hook-trust app-server --stdio in the issue workspace.
  • initialize, thread/start, and turn/start are validated against the schema generated by the installed Codex CLI.
  • Workflow and launcher routing can select Codex with routing.harness: codex_app_server or OPENSYMPHONY_HARNESS=codex_app_server.
  • Gateway model settings report Codex CLI, app-server, and ChatGPT-login readiness.
  • Codex-backed runs record thread IDs so opensymphony debug <issue-key> can resume the matching Codex thread.
  • Token usage, event summaries, run-detail metrics, and desktop run-detail refreshes are clearer for Codex runs.

Configuration

routing:
  harness: codex_app_server
  model: gpt-5-codex
  model_profile: codex-chatgpt-local-keychain
OPENSYMPHONY_HARNESS=codex_app_server
OPENSYMPHONY_MODEL=gpt-5-codex
OPENSYMPHONY_MODEL_PROFILE=codex-chatgpt-local-keychain

Use opensymphony run --dry-run to preview routing before starting a model-backed worker.

Readiness and safety

OpenSymphony treats the local ChatGPT subscription as a Codex CLI login reference. Readiness is checked through safe operator commands: codex --version, codex app-server --help, and codex login status. Raw Codex OAuth material stays out of OpenSymphony workspaces, workflow files, logs, comments, and browser payloads.

This is a trusted local automation path. Hosted multi-tenant Codex worker pools remain out of scope, loopback WebSocket support remains experimental, and stdio JSON-RPC is the supported local transport.

Debugging Codex runs

When a Codex app-server worker starts a thread, OpenSymphony records the Codex thread ID in the issue workspace manifest. opensymphony debug <issue-key> resumes that thread with codex resume <thread-id> from the issue workspace, and opensymphony debug <issue-key> --app prints the matching codex://threads/<thread-id> deep link.

Read the implementation contract in the Codex app-server harness docs .