OpenSymphony 3.0.0 adds two independent routing choices. Project-set routing decides which repository receives an issue. ACP routing decides which local agent executes inside that issue’s checkout. Existing single-repository workflows and the OpenHands and Codex harnesses remain supported.

One project, several repositories

A central project set can connect one Linear project to several source repositories. Each terminal sub-issue carries exactly one repo:<alias> label. Its parent remains repository-neutral, waits for the child changes to merge, and then checks their combined result in a separate integration workspace.

OpenSymphony resolves the repository binding before creating a workspace. The child receives a verified checkout of the selected repository, and the run records its configuration and repository inventory generations. Recovery therefore cannot move an in-flight issue to a different repository without an explicit binding change.

After the child pull requests have provider-confirmed merges, the parent prepares contained worktrees from the retained child generations. It runs the project set’s integration checks and can open a repair pull request in one affected repository before checking the combined result again. The desktop and web task graphs expose repository bindings and parent blockers, while run detail shows checkout generation, integration state, and repair evidence.

ACP as a production harness

OpenSymphony can now launch a local Agent Client Protocol v1 agent through a named stdio profile:

routing:
  harness: acp
  harness_profile: cursor

The agent process runs inside the issue workspace. OpenSymphony continues to own scheduling, workspace lifecycle, retries, and operator decisions. The ACP session host negotiates live capabilities, retains compatible idle sessions for later turns, routes permission requests to the TUI, web, or desktop client, and persists enough state for guarded recovery.

Recovery uses session/load or session/resume only when the agent advertised that method. If a prompt may have been submitted before a disconnect, OpenSymphony fences the run for reconciliation instead of sending the prompt again. Optional models, modes, methods, and vendor extensions come from the negotiated session rather than assumptions based on the profile name.

ACP and multi-repository routing compose without depending on each other. An ACP profile can run a single-repository issue or a repository-bound child, and a multi-repository project can continue to use OpenHands or Codex.

Upgrade with an explicit route

OpenSymphony 3.0.0 requires Rust 1.97.1 or newer. Existing installations can keep legacy_single routing and their current harness. To prepare a central configuration, run the read-only migration preflight before applying it:

opensymphony migrate preflight --repo /path/to/target-repo \
  --output /absolute/path/to/config.yaml
opensymphony migrate apply --repo /path/to/target-repo \
  --output /absolute/path/to/config.yaml

Migration starts with the compatible single-repository route. Enable project_set only after the repository inventory, project set, issue labels, credentials, review profiles, and integration instructions are ready.

Read the 3.0.0 upgrade guide , multi-repository guide , and ACP harness guide . The source is available at the v3.0.0 tag , and the package is on crates.io .