Symphony

July 12, 2026 · View on GitHub

Symphony is a local orchestrator for running Harness stories. It discovers runnable work through the public Harness CLI protocol, prepares an isolated workspace, gives an agent an explicit run contract, validates its result, and keeps product changes and durable Harness changesets reviewable.

Symphony is a standalone product. It does not require a checkout of Harness, link Harness source, inspect Harness database tables, or copy a live SQLite database. The typed boundary is documented in docs/contracts/harness-runtime-v1.md.

Operator workflow

An operator runs a built Symphony executable against the repository that owns the stories. The repository can be different from the current directory.

The canonical standalone release is published from this repository. Version symphony-v0.1.0 established the five-platform artifact baseline; later releases retain protocol-v1 compatibility based on the discovered contract tuple rather than Harness patch-version ordering. Obtain an archive and its .sha256 sidecar from an approved GitHub release, then verify and install it without Cargo. Runtime checks the packaged resource manifest's paths and shape; the release verifier is the proof that its Web tree hash matches the packaged bytes.

On macOS or Linux, preserve the archive's bin/ and share/ relationship:

ARCHIVE=/absolute/path/to/harness-symphony-<target>.tar.gz
(cd "$(dirname "$ARCHIVE")" && shasum -a 256 -c "$(basename "$ARCHIVE").sha256")
INSTALL_ROOT="$HOME/.local"
mkdir -p "$INSTALL_ROOT"
tar -xzf "$ARCHIVE" -C "$INSTALL_ROOT"
SYMPHONY="$INSTALL_ROOT/bin/harness-symphony"
# Or point to an already unpacked verified archive:
SYMPHONY=/absolute/path/to/harness-symphony

On Windows, compare the archive against its checksum file before expanding it:

$Archive = "C:\absolute\path\to\harness-symphony-windows-x64.tar.gz"
$Expected = ((Get-Content "$Archive.sha256") -split '\s+')[0].ToLowerInvariant()
$Actual = (Get-FileHash -Algorithm SHA256 $Archive).Hash.ToLowerInvariant()
if ($Actual -ne $Expected) { throw "Symphony archive checksum mismatch" }
$InstallRoot = Join-Path $env:LOCALAPPDATA "Programs\Symphony"
New-Item -ItemType Directory -Force $InstallRoot | Out-Null
tar -xzf $Archive -C $InstallRoot
$Symphony = Join-Path $InstallRoot "bin\harness-symphony.exe"
# Or point to an already unpacked verified archive:
$Symphony = "C:\absolute\path\to\harness-symphony.exe"

Then select the target repository explicitly:

REPO=/absolute/path/to/your-harness-repository

"$SYMPHONY" --repo-root "$REPO" doctor
"$SYMPHONY" --repo-root "$REPO" work list
"$SYMPHONY" --repo-root "$REPO" run <story-id> --prepare-only
$Repo = "C:\absolute\path\to\your-harness-repository"

& $Symphony --repo-root $Repo doctor
& $Symphony --repo-root $Repo work list
& $Symphony --repo-root $Repo run <story-id> --prepare-only

The target repository must have a compatible Harness CLI and Harness database. doctor reports the resolved CLI and any corrective action. See the Quick Start for the complete run, review, PR, and sync loop. A configuration template is available at examples/symphony.yml; copy it to the target repository as .harness/symphony.yml only when defaults are insufficient.

Contributor workflow

The source workspace currently contains one Rust application and its Web UI:

crates/harness-symphony/          Rust application
crates/harness-symphony/web-ui/   React, Playwright, and Electron UI

Prerequisites are Rust 1.92.0 (pinned by rust-toolchain.toml) and Node.js 24.9.0 (pinned by .node-version). Build and exercise the source checkout from its repository root:

cargo build --locked -p harness-symphony
cargo run --locked -p harness-symphony -- --repo-root /path/to/target doctor
cargo run --locked -p harness-symphony -- --repo-root /path/to/target work list

npm --prefix crates/harness-symphony/web-ui ci
npm --prefix crates/harness-symphony/web-ui run build
npm --prefix crates/harness-symphony/web-ui run dev

Run the CI-equivalent checks before submitting a source change:

cargo metadata --locked --no-deps --format-version 1
cargo fmt --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace --locked
cargo build --workspace --release --locked

npm --prefix crates/harness-symphony/web-ui ci
npm --prefix crates/harness-symphony/web-ui exec -- playwright install chromium
npm --prefix crates/harness-symphony/web-ui run build
npm --prefix crates/harness-symphony/web-ui run e2e

FIXTURE=$(mktemp -d)
tests/compatibility/bootstrap-harness-fixture.sh --upgrade-cli \
  --story US-DESKTOP-SMOKE "$FIXTURE"
npm --prefix crates/harness-symphony/web-ui run desktop:smoke -- \
  --repo-root "$FIXTURE"
rm -rf "$FIXTURE"

On Linux CI, Playwright may use playwright install --with-deps chromium; that can require elevated privileges because it installs system packages.

Product contract

Symphony is available under the MIT License.