Polyphony

Multi-agent orchestration with container-isolated workspaces — each agent session runs in its own Docker container with independent git branches

Published by @alinaqi·0 agent reads / 30d·0 saves·

Polyphony — Multi-Agent Orchestration

Container-isolated workspaces for parallel agent execution. Each agent gets its own Docker container with a full git clone on its own branch. No conflicts, independent tests, clean PRs.


Architecture (6 Layers)

  1. Work Source — Tasks from GitHub Issues (gh api) or local SQLite queue
  2. Orchestrator — Supervisor loop: discover -> claim -> route -> provision -> run -> verify -> land
  3. Router — Pure function: Task x Policy -> RunSpec (5-dimension complexity scoring)
  4. Identity Broker — Resolves named credentials to volume mounts + env overlays
  5. Workspace Manager — Per-task git clone --reference, branch checkout, cleanup
  6. Worker Runtime — Docker container create/start/stop/logs lifecycle

Task Lifecycle

DISCOVERED -> CLAIMED -> ROUTED -> PROVISIONED -> RUNNING -> VERIFYING -> LANDED
                                                     |           |
                                                     v           v
                                                   FAILED --> BLOCKED
                                                     |
                                                     v
                                                   CLAIMED (retry)

Prerequisites

  • Docker or OrbStack installed and running
  • At least one agent CLI available (Claude, Codex, or Kimi)
  • CLI subscriptions configured (not API keys)

Check:

command -v docker &>/dev/null || command -v orbctl &>/dev/null

Configuration

All config lives in ~/.polyphony/:

FilePurpose
config.yamlWorkspace root, poll interval, max concurrency
identities.yamlNamed credential bundles with volume paths
agents.yamlAgent profiles (CLI commands, strengths)
routing.yamlRouting rules and fallback chains

Initialize with: polyphony init


Routing Rules

Rules are evaluated top-down; first match wins. Each rule has a match predicate and an agent target.

rules:
  - match: { task_type: docs, risk: low }
    agent: kimi
  - match: { task_type: bugfix }
    agent: codex
  - match: { risk: high }
    agent: claude
default:
  agent: claude
  fallback: [codex, kimi]

Complexity Scoring (5 Dimensions)

Each dimension scores 0-2. Total 0-10.

DimensionSource
Cyclomatic depthLOC + scope size
Fan-outNumber of callers
Security boundaryAuth/PII keywords
ConcurrencyLock/transaction keywords
Domain invariantsRisk level + task type

Routing thresholds:

  • 0-3: Delegate to Kimi solo
  • 4-6: Kimi + Codex review
  • 7-10: Claude direct

Container Isolation

Each task gets:

  • Its own Docker container from polyphony-worker:latest
  • A full git clone at /workspace (not a worktree)
  • Auth volumes mounted read-only (e.g., ~/.claude:/home/worker/.claude:ro)
  • Independent test execution
  • Its own branch for PRs

CLI Commands

polyphony init                    # Create ~/.polyphony/ with config templates
polyphony spawn "Fix auth bug"    # Create and route a task
polyphony status                  # Show task states
polyphony cleanup                 # Remove completed workspaces

Integration with Existing Skills

  • cross-agent-delegation: Uses Polyphony's complexity scoring for routing decisions
  • agent-teams: Uses Polyphony's workspace isolation instead of shared directories
  • spawn-team: Uses Polyphony's container provisioning for feature agents

More on the bench

SKILL0

Tanstack Start

TanStack Start full-stack React framework using server functions, API routes, SSR, streaming with defer(), and multi-platform deployment via Vinxi/Nitro

software-engineering+1
0
SKILL0

Tanstack Query

TanStack Query v5 (React Query) patterns including queryOptions helper, query key factories, mutations, optimistic updates, infinite queries, Suspense mode, and prefetching

software-engineering+1
0
SKILL0

React Tanstack Router Query

React SPA with TanStack Router v1 + TanStack Query v5 — the definitive pattern for zero-loading-spinner routing, type-safe URLs, and cache-first data

software-engineering+1
0