The Agent Harness for AI-Human Collaboration
Chorus is an agent harness — the infrastructure that wraps around LLM agents to manage session lifecycle, task state, sub-agent orchestration, observability, and failure recovery. It lets multiple AI Agents (with fine-grained, configurable permissions) and humans collaborate through the full workflow from requirements to delivery.
Inspired by the AI-DLC (AI-Driven Development Lifecycle) methodology. Core philosophy: Reversed Conversation — AI proposes, humans verify.
Idea ──> Proposal ──> [Document + Task DAG] ──> Execute ──> Verify ──> Done
^ ^ ^ ^ ^ ^
Human PM Agent PM Agent Dev Agent Admin Admin
creates analyzes drafts PRD codes & reviews closes
& plans & tasks reports & verifies
v0.7.0 — Fine-grained agent permissions: 5 resources × 3 actions grid replaces the PM/Developer/Admin three-way choice, with presets + a Custom option for free combination.
v0.6.7 — Chorus plugin for Codex CLI (one-command installer), workspace picker when one email belongs to multiple Companies, per-client connect guides.
v0.6.6 — npm one-click install (npx @chorus-aidlc/chorus), document export (MD/PDF/Word), proposal revoke, faster agent checkin with work status at a glance.
v0.6.2 — Embedded PGlite mode (zero-dependency deployment), structured logging with Pino, stateless MCP for horizontal scaling, default port changed to 8637.
v0.6.1 — /yolo skill: full-auto AI-DLC pipeline (Idea → Proposal → Execute → Verify) with Agent Team parallel execution.
v0.6.0 — IdeaTracker dashboard, independent review agents (proposal-reviewer + task-reviewer), real-time agent presence indicators, cross-column Kanban animation.
v0.5.1 — New user onboarding wizard, UI animation system, quick-dev skill (skip-proposal workflow).
v0.5.0 — Universal search (Cmd+K across 6 entity types), rich claim/assign response.
Full changelog: CHANGELOG.md
Run Chorus locally with two commands — no database, no Docker, no config files needed.
npm install -g @chorus-aidlc/chorus
chorusThat's it. Chorus starts with an embedded PostgreSQL (PGlite), runs migrations automatically, and opens at http://localhost:8637.
Note: PGlite is an embedded, single-process PostgreSQL — great for local single-user usage, but its connection handling has limits under concurrent load. If you plan to run multiple agents or users simultaneously, use an external PostgreSQL via
DATABASE_URL=postgresql://...or the full Docker Compose stack.
Default login: admin@chorus.local / chorus
# Custom port
chorus --port 3000
# Custom data directory (default: ~/.chorus-data)
chorus --data-dir /path/to/data
# Custom credentials
DEFAULT_USER=me@example.com DEFAULT_PASSWORD=secret chorus
# Use an external PostgreSQL instead of embedded PGlite
DATABASE_URL=postgresql://user:pass@host:5432/chorus chorus| Method | Command |
|---|---|
| npm (simplest) | npm i -g @chorus-aidlc/chorus && chorus |
| Docker (standalone) | docker compose -f docker-compose.local.yml up |
| Docker (full stack) | docker compose up (PostgreSQL + Redis + Chorus) |
| AWS CDK | Deploy to AWS |
Watch a PM Agent analyze requirements and generate a proposal with PRD and task DAG — with real-time presence indicators showing agent activity.
The left panel is a pixel workspace where pixel characters represent each Agent's real-time working status; the right panel shows live Agent terminal output.
The Kanban board updates automatically as Agents work, with task cards flowing between To Do → In Progress → To Verify in real time. Agent presence indicators highlight which resources are being worked on.
Kanban board for task status tracking alongside a dependency DAG showing execution order and parallel paths.
PM Agents clarify requirements through structured Q&A rounds before creating Proposals. The panel shows idea details alongside completed elaboration rounds with answers and category tags.
Proposals generated by the PM Agent contain document drafts and task DAG drafts. Admins review and approve or reject on this panel.
Dev Agent self-checks and Admin reviews each acceptance criterion independently, with structured pass/fail evidence for every item.
A Cmd+K command palette for searching across all 6 entity types (Tasks, Ideas, Proposals, Documents, Projects, Project Groups). Supports scope filtering (Global / Group / Project), filter tabs per entity type, and keyboard navigation. Both the Web UI and AI agents (via chorus_search MCP tool) share the same search backend.
- Session Lifecycle — Persistent sessions with heartbeats, auto-expiry, and failure recovery
- Task DAG — Dependency modeling, cycle detection, and interactive visualization
- Kanban — Real-time task flow with Worker badges and agent presence
- Multi-Agent Collaboration — Claude Code Agent Teams (Swarm Mode) for parallel execution
- Fine-Grained Agent Permissions — 5 resources × 3 actions grid with preset + custom combinations (details)
- Chorus Plugin — Lifecycle hooks automate session create/close, heartbeats, and context injection
- Requirements Elaboration — Structured Q&A rounds before proposal creation
- Proposal Approval Flow — PM drafts, Admin approves, drafts materialize into real entities
- Notifications — In-app + SSE push + Redis Pub/Sub with per-user preferences (design doc)
- @Mention — Tiptap autocomplete, permission-scoped search, mention notifications (design doc)
- Activity Stream — Full audit trail with session attribution
- Universal Search — Cmd+K across 6 entity types, 3 scope levels, snippet generation (design doc)
┌──────────────────────────────────────────────────────────────────┐
│ Chorus — Agent Harness (:8637) │
│ │
│ ┌── Harness Capabilities ───────────────────────────────────┐ │
│ │ Session Lifecycle │ Task State Machine │ Context Inject │ │
│ │ Sub-Agent Orchestration │ Observability │ Failure Recovery│ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌── Chorus Plugin (lifecycle hooks) ────────────────────────┐ │
│ │ SubagentStart/Stop │ Heartbeat │ Skill & Context Inject │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌── API Layer ──────────────────────────────────────────────┐ │
│ │ /api/mcp — MCP Streaming (50+ tools, permission-gated) │ │
│ │ /api/* — REST API (Web UI + SSE push) │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌── Service Layer ──────────────────────────────────────────┐ │
│ │ AI-DLC Workflow │ UUID-first │ Multi-tenant │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌── Web UI (React 19 + Tailwind + shadcn/ui) ──────────────┐ │
│ │ Kanban │ Task DAG │ Proposals │ Activity │ Sessions │ │
│ └───────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
↑ ↑ ↑ ↑
Agent w/ Agent w/ Agent w/ Human
PM perms Developer perms Admin perms (Browser)
(LLM) (LLM) (LLM)
│
┌──────────▼──────────┐ ┌─────────────────────┐
│ PostgreSQL + Prisma │ │ Redis (optional) │
└─────────────────────┘ │ Pub/Sub for SSE │
└─────────────────────┘
| Package | Description |
|---|---|
packages/openclaw-plugin |
OpenClaw Plugin — Connects OpenClaw to Chorus via persistent SSE + MCP bridge. |
packages/chorus-cdk |
AWS CDK — Infrastructure-as-code for deploying Chorus to AWS. |
| Component | Technology |
|---|---|
| Framework | Next.js 15 (App Router, Turbopack) |
| Language | TypeScript 5 (strict mode) |
| Frontend | React 19, Tailwind CSS 4, shadcn/ui (Radix UI) |
| ORM | Prisma 7 |
| Database | PostgreSQL 16 |
| Cache/Pub-Sub | Redis 7 (ioredis) — optional |
| Agent Integration | MCP SDK 1.26 (HTTP Streamable Transport) |
| Auth | OIDC + PKCE / API Key / SuperAdmin |
| i18n | next-intl (en, zh) |
| Deployment | Docker Hub / Docker Compose / AWS CDK |
No build tools or external databases required. The image bundles PGlite (embedded PostgreSQL):
git clone https://github.com/Chorus-AIDLC/chorus.git
cd chorus
DEFAULT_USER=admin@example.com DEFAULT_PASSWORD=changeme \
docker compose -f docker-compose.local.yml up -dOpen http://localhost:8637 and log in with the credentials above.
Data is persisted in a Docker volume. The embedded mode is single-instance only (no Redis).
For production with multiple replicas:
DEFAULT_USER=admin@example.com DEFAULT_PASSWORD=changeme \
docker compose up -dSee Docker Documentation for all environment variables and configuration options.
Prerequisites: Node.js 22+, pnpm 9+, Docker (for PostgreSQL/Redis)
cp .env.example .env
pnpm docker:db
pnpm install
pnpm db:migrate:dev
pnpm dev
# Open http://localhost:8637Prerequisites: Node.js 22+, pnpm 9+
cp .env.example .env
pnpm install
pnpm dev:local # Dev server on http://localhost:8637PGlite runs embedded PostgreSQL on port 5433. Data stored in .pglite/ — delete to reset.
./install.shThe interactive installer provisions VPC, Aurora Serverless v2, ElastiCache Serverless, ECS Fargate, and ALB with HTTPS. Configuration saved to default_deploy.sh for re-deploys.
The fastest path is the in-app setup wizard: open the Web UI, go to Settings → Setup Guide → Open setup guide, and follow the step-by-step instructions for your client (Claude Code, Codex, OpenCode, OpenClaw, or other agents). The wizard creates the API key for you, shows the exact commands, and walks through verifying the connection.
If you'd rather read the full docs:
| Client | Guide |
|---|---|
| Claude Code | CONNECT_CLAUDE_CODE.md |
| Codex CLI | CONNECT_CODEX.md |
| OpenCode † | CONNECT_OPENCODE.md |
| Other MCP agents (Cursor, Continue, custom, …) | CONNECT_OTHER_AGENTS.md |
† OpenCode support is provided by the community-maintained opencode-chorus plugin (npm: opencode-chorus), authored by @etnperlong. Thanks!
Create API Keys in the Web UI under Settings → Agents → Create API Key. Keys start with cho_ and are shown only once.
| Method | Location | Use Case |
|---|---|---|
| Plugin-embedded | public/chorus-plugin/skills/chorus/ |
Claude Code + Plugin, automated Sessions |
| Standalone | public/skill/ (served at /skill/) |
Any Agent, manual Session management |
PM agents that have the OpenSpec
CLI installed can author proposals in a structured proposal.md +
design.md + specs/<capability>/spec.md layout. Local files are the
working copy and Chorus documentDrafts are the mirror; reviewers see a
predictable shape (## ADDED Requirements, ### Requirement:,
#### Scenario:) instead of free-form Markdown. The mode is opt-in: when
openspec is not installed, behavior is unchanged. To turn it off
explicitly, set CHORUS_OPENSPEC_MODE=off. No new MCP tools or schema
changes ship in 0.8.0; the canonical skill reuses the existing
chorus_pm_* draft and document tools. See
OPENSPEC_MODE.md for the full guide.
| Document | Description |
|---|---|
| PRD | Product Requirements Document |
| Architecture | Technical Architecture Document |
| MCP Tools | MCP Tools Reference |
| Chorus Plugin | Plugin Design & Hook Documentation |
| OpenSpec Mode | Opt-in OpenSpec authoring mode for PM agents (0.8.0+) |
| Search | Global Search Technical Design |
| AI-DLC Gap Analysis | AI-DLC Methodology Gap Analysis |
| AIG Implementation Plan | Agent transparency roadmap |
| Presence Design | Real-time agent presence system |
| Docker | Docker image usage & deployment |
| Logging | Structured logging architecture |
| CLAUDE.md | Development Guide |
AGPL-3.0 — see LICENSE.txt









