Skip to content
/

Chorus

chorus · Chorus-AIDLC/Chorus · ★ 915 · last commit 2026-05-25

Full-stack agent harness with Reversed Conversation philosophy — AI proposes, humans verify — enforced via a permission-gated MCP server and production web UI

Best whenHuman approval should be enforced at the API permission level, not via prompt instructions
Skip ifHand-typing JSON content for document MCP calls in OpenSpec mode, Custom Codex agent_type names (only default/explorer/worker supported)
vs seeds
claude-conductoris a zero-server markdown template b…
Primitive shape 75 total
Commands 9 Skills 10 Subagents 2 Hooks 4 MCP tools 50
00

Summary

Chorus — Summary

Chorus is an agent harness for AI-human collaboration built around the AI-DLC (AI-Driven Development Lifecycle) methodology, described as infrastructure that wraps around LLM agents to manage session lifecycle, task state, sub-agent orchestration, observability, and failure recovery. It operates as a full-stack Next.js web application with a PostgreSQL backend (or embedded PGlite for single-user deployments) that provides a Kanban board, Task DAG visualization, proposal approval flows, and an MCP server (50+ tools) that AI agents connect to. The core philosophy is "Reversed Conversation" — AI proposes, humans verify — embodied in a 5-resource × 3-action permission matrix that controls what agents can do at each lifecycle stage. The framework includes a chorus CLI binary, lifecycle hooks via a Claude Code plugin, a Codex CLI plugin, and an OpenSpec-aware mode that auto-activates when an openspec/ directory is present.

Compared to seeds, Chorus is closest to claude-conductor in being a markdown-scaffold collaboration layer, but differs fundamentally: where claude-conductor is a minimal template bundle with no server, Chorus is a full production web application with PostgreSQL, Redis, a 50+-tool MCP server, real-time presence indicators, Kanban/DAG views, and a permission model — making it the most infrastructure-heavy framework in this batch.

01

Overview

Chorus — Overview

Origin

Developed by Chorus-AIDLC. Current version: 0.9.0. Inspired by AWS's AI-Driven Development Lifecycle (AI-DLC) methodology.

Core Philosophy

From the README:

"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."

Reversed Conversation principle: "AI proposes, humans verify" — the agent generates proposals, humans approve or reject, and only approved proposals materialize into real entities.

AI-DLC Workflow

Idea ──> Proposal ──> [Document + Task DAG] ──> Execute ──> Verify ──> Done
  ^          ^               ^                     ^          ^         ^
Human     idea:write     proposal:write         task:write   *:admin    *:admin
creates   + elaborate    + drafts                + reports   + verifies + closes

Permission Model

5 resources × 3 actions grid: idea, proposal, task, document, and * (admin) — each with read, write, and admin permissions. Any combination possible via "Custom" option.

OpenSpec Integration

v0.8.0 introduced OpenSpec-aware mode: auto-activates when both an openspec/ directory and the openspec CLI are present, adding /opsx/{explore,propose,apply,archive} commands and a post-verify archive hook.

Tech Stack

Component Technology
Framework Next.js 15 (App Router, Turbopack)
Language TypeScript 5 (strict)
Frontend React 19, Tailwind CSS 4, shadcn/ui
ORM Prisma 7
Database PostgreSQL 16 (or embedded PGlite)
Cache/Pub-Sub Redis 7 (optional)
Agent Integration MCP SDK 1.26 (HTTP Streamable Transport)
02

Architecture

Chorus — Architecture

Distribution

  • Type: npm package (@chorus-aidlc/chorus) + Docker image
  • Version analyzed: 0.9.0
  • License: AGPL-3.0
  • Install options:
    • npm install -g @chorus-aidlc/chorus && chorus (embedded PGlite, no external deps)
    • docker compose -f docker-compose.local.yml up (standalone Docker)
    • docker compose up (full stack: PostgreSQL + Redis + Chorus)
    • AWS CDK deployment via packages/chorus-cdk
  • Default port: 8637

Repository Layout

src/                        # Next.js App Router application
├── app/api/mcp/            # MCP streaming endpoint (50+ tools)
├── app/api/*/              # REST API endpoints
└── ...

plugins/chorus/             # Claude Code + Codex plugin
├── hooks.json              # SessionStart, PostToolUse lifecycle hooks
├── hooks/
│   ├── on-session-start.sh     # Checkin + OpenSpec detection
│   ├── on-post-submit-proposal.sh
│   ├── on-post-submit-for-verify.sh
│   ├── on-post-verify-task.sh
│   └── chorus-mcp-call.sh  # MCP tool invocation helper
├── skills/                 # Chorus workflow skills

.claude/                    # Claude Code integration
├── settings.json           # Plugin enablement
├── commands/               # Slash commands
│   ├── opsx/               # OpenSpec-aware commands
│   ├── openspec-*/         # OpenSpec workflow
│   └── ...
└── skills/                 # Chorus skills

openspec/                   # Optional OpenSpec integration directory
packages/
├── chorus-cdk/             # AWS CDK deployment package
├── openclaw-plugin/        # OpenClaw persistent SSE + MCP bridge
└── landing/                # Marketing landing page

prisma/                     # Prisma ORM schema + migrations

Config Files

  • docker-compose.yml / docker-compose.local.yml — Docker deployment
  • prisma/schema.prisma — database schema
  • Environment variables: DATABASE_URL, CHORUS_URL, CHORUS_API_KEY, DEFAULT_USER, DEFAULT_PASSWORD

Required Runtime

  • Node.js + pnpm (for development)
  • Docker (for production deployment)
  • PostgreSQL 16 (external) or PGlite (embedded)
  • Redis 7 (optional, for Pub/Sub notifications)
03

Components

Chorus — Components

CLI Binary: chorus

The npm package ships a chorus binary (chorus.mjs):

  • chorus — start the server (with embedded PGlite)
  • chorus --port 3000 — custom port
  • chorus --data-dir /path/to/data — custom data directory
  • With DATABASE_URL=... env var — use external PostgreSQL

Web UI Features

  • Kanban board — real-time task flow with Worker badges and agent presence
  • Task DAG — dependency visualization with cycle detection
  • Proposal approval — PM Agent drafts, Admin approves/rejects
  • Idea elaboration — structured Q&A rounds before proposal creation
  • Pixel workspace — pixel characters showing each agent's real-time working status
  • Activity stream — full audit trail with session attribution
  • Universal Search — Cmd+K across 6 entity types (Tasks, Ideas, Proposals, Documents, Projects, Project Groups)
  • Notifications — in-app + SSE push + Redis Pub/Sub with per-user preferences
  • @Mention — Tiptap autocomplete, permission-scoped search

MCP Tools (50+)

The /api/mcp endpoint exposes 50+ tools, permission-gated:

  • chorus_checkin — session check-in
  • chorus_create_session, chorus_close_session — session management
  • chorus_pm_submit_proposal — PM agent submits proposal
  • chorus_submit_for_verify — developer submits task for verification
  • chorus_admin_verify_task — admin verifies a task
  • chorus_pm_add_document_draft, chorus_pm_update_document_draft, chorus_pm_update_document — document management
  • chorus_get_notifications — fetch notifications
  • chorus_search — universal search
  • And 40+ more task/idea/proposal/document CRUD tools

Claude Code Plugin (in plugins/chorus/)

Hooks (hooks.json)

  • SessionStarton-session-start.sh: calls chorus_checkin, injects context, detects OpenSpec mode
  • PostToolUse (matcher: chorus_pm_submit_proposal) — on-post-submit-proposal.sh: triggers proposal review agent
  • PostToolUse (matcher: chorus_submit_for_verify) — on-post-submit-for-verify.sh: triggers task reviewer
  • PostToolUse (matcher: chorus_admin_verify_task) — on-post-verify-task.sh: handles verification completion

Skills (.claude/skills/)

Skill Purpose
oidc-login OIDC authentication automation for testing
openspec-apply-change Apply an OpenSpec change
openspec-archive-change Archive a completed OpenSpec change
openspec-explore Explore OpenSpec changes
openspec-propose Create new OpenSpec change
pr-workflow PR management workflow
plugin-maintenance Plugin maintenance procedures
blog Blog post workflow
release Release workflow
opsx OpenSpec-aware sub-skills

AWS CDK Package

packages/chorus-cdk — infrastructure-as-code for deploying Chorus to AWS (ECS, RDS, ElastiCache).

OpenClaw Plugin

packages/openclaw-plugin — connects OpenClaw AI to Chorus via persistent SSE + MCP bridge.

05

Prompts

Chorus — Prompts

Excerpt 1: on-session-start.sh — Context Injection (verbatim excerpt)

CTX="# Chorus Plugin — Active (Codex port)

Chorus is connected at ${CHORUS_URL}. MCP tools are available under the \`chorus\` server.

## Checkin

${CHECKIN}

## OpenSpec Mode

CHORUS_OPENSPEC_ACTIVE=${CHORUS_OPENSPEC_ACTIVE} (${OPENSPEC_REASON})"

# When OpenSpec is active:
CTX="${CTX}

OpenSpec mode is **active** for this session. When the proposal / develop / yolo skills reach
an OpenSpec-aware step, load the openspec-aware skill at
\`~/.codex/skills/openspec-aware/SKILL.md\` and follow §3 (OpenSpec authoring) — do NOT
re-run the §1 detection block, the answer is already known.

Critical rule (openspec-aware §2 Rule 1): document mirror calls
(\`chorus_pm_add_document_draft\` / \`chorus_pm_update_document_draft\` /
\`chorus_pm_update_document\`) MUST go through \`chorus-mcp-call.sh\` with \`content\`
produced by \`json_encode_file\`. Do NOT invoke these MCP tools directly with hand-typed
\`content\` in OpenSpec mode."

Prompting technique: Dynamic context injection via SessionStart hook. Includes current checkin state, OpenSpec mode detection result, and critical usage rules injected as a developer message before the session begins. Uses conditional injection based on filesystem state (presence of openspec/ dir and openspec CLI).

Excerpt 2: oidc-login.md skill (verbatim)

# OIDC Login Test Skill

Use this skill to automatically log in via OIDC for testing purposes.

## Instructions

1. Read credentials from `.testdata/credentials.json`
2. Use Playwright MCP to automate the login flow:
   - Navigate to http://localhost:8637/login
   - Enter the email address
   - Click continue to trigger OIDC redirect
   - On Cognito login page, enter email and password
   - Complete the login flow
3. Verify login success by checking redirect to /projects

Prompting technique: Step-by-step task instruction skill. References specific MCP tool names and provides numbered procedural steps with verification criteria.

Prompting Architecture

  • Session context: dynamically assembled by on-session-start.sh from MCP checkin response
  • Skills: markdown files describing workflow stages (loaded on demand)
  • Hook-triggered actions: shell scripts that call MCP tools and inject results as additionalContext
  • OpenSpec-aware mode: conditional branching based on filesystem state detection at session start
09

Uniqueness

Chorus — Uniqueness

Differs from Seeds

Chorus is most adjacent to claude-conductor among the seeds in providing a human-AI collaboration layer with structured task tracking. However, where claude-conductor is a minimal markdown scaffold bundle with zero server infrastructure, Chorus is a full production web application: PostgreSQL/PGlite, Redis pub/sub, 50+ MCP tools, real-time Kanban and Task DAG UI, proposal approval flows, and a 5×3 permission matrix enforced at the API level. The "Reversed Conversation" (AI proposes, humans verify) philosophy is a direct inversion of most other frameworks in the batch where humans initiate work. Compared to taskmaster-ai (MCP-anchored, file-based tasks), Chorus uses a relational database and provides a web UI, making it the only framework in this batch with a full-stack production-grade deployment story.

Distinctive Position

  1. Only framework with a web dashboard (beyond monitoring) — the UI is the primary human control plane, not an afterthought
  2. Permission matrix enforced server-side — the 5×3 resource × action grid prevents agents from exceeding authorized actions at the API level, not via prompt instructions
  3. Task DAG with cycle detection — dependency-aware task scheduling in a relational store
  4. Reversed Conversation: AI proposes, humans verify — the only framework in this batch where human approval is the design center rather than an optional gate
  5. OpenSpec-aware mode: native integration with the openspec CLI detected at session start

Explicit Anti-Patterns

  • Hand-typing JSON content for document mirror MCP calls in OpenSpec mode (must use json_encode_file)
  • Creating sub-agents with custom agent_type names (rejected by Codex 0.125 which only has default/explorer/worker)
  • Not closing agents after wait_agent (completed ≠ closed; 6 concurrent max)

Observable Failure Modes

  • AGPL-3.0 license: copyleft requirements may block proprietary adoption
  • PGlite single-instance limit: not suitable for concurrent multi-agent/multi-user without external PostgreSQL
  • Session heartbeat expiry: silent agents lose their session (must be handled at the agent skill level)
  • Proposal-reviewer spawning via Codex is complex (6-agent cap, specific API constraints documented in hook)

Inspired By

AWS AI-DLC (AI-Driven Development Lifecycle) methodology, OpenSpec.

04

Workflow

Chorus — Workflow

AI-DLC Phases

Phase Actor Permission Required Artifact
1. Idea creation Human Idea record
2. Elaboration PM Agent idea:write + idea:elaborate Q&A rounds, category tags
3. Proposal drafting PM Agent proposal:write + proposal:drafts PRD document + Task DAG draft
4. Proposal review Admin (human or agent) proposal:admin Approved or rejected proposal
5. Task execution Developer Agent task:write + task:reports Code changes, task reports
6. Self-verification Developer Agent Per-acceptance-criteria evidence
7. Admin verification Admin *:admin + *:verifies Verified task, acceptance criteria marked
8. Project completion Admin *:admin + *:closes Completed idea + summary/decisions/follow-ups

Approval Gates

  1. Proposal approval: PM Agent submits → Admin reviews and approves or rejects
  2. Task verification: Developer Agent submits for verify → Admin verifies each acceptance criterion independently
  3. Idea completion: Admin marks idea done with Decisions/Follow-ups writeup

/yolo Skill

v0.6.1 introduced /yolo: full-auto AI-DLC pipeline (Idea → Proposal → Execute → Verify) with Agent Team parallel execution. Skips human approval gates.

OpenSpec Integration

When OpenSpec mode is active (openspec/ dir + openspec CLI present):

  1. /opsx/explore — explore existing changes
  2. /opsx/propose — create a new OpenSpec change (adds OpenSpec change slug: to proposal description)
  3. /opsx/apply — apply the change
  4. /opsx/archive — archive on verify completion (triggered by PostToolUse hook on chorus_admin_verify_task)

Session Lifecycle

  • SessionStart hook: calls chorus_checkin, gets assigned tasks, injects active session context
  • Agents send heartbeats during work (auto-expiry if silent)
  • chorus_close_session on work completion
  • Activity stream maintains full audit trail with session attribution
06

Memory Context

Chorus — Memory and Context

Primary State Store

  • PostgreSQL (external) or PGlite (embedded single-process PostgreSQL)
  • Prisma 7 ORM with migrations
  • Stores: ideas, proposals, tasks, documents, sessions, projects, project groups, users
  • Task DAG: dependency graph stored in the database with cycle detection

Session State

  • chorus_checkin at SessionStart: returns current session state, assigned tasks, active proposals
  • Session heartbeats during execution; auto-expiry on silence
  • Session attribution: all activity is tagged with the creating session
  • Stateless MCP: the /api/mcp endpoint is stateless (v0.6.2); session context comes from the auth token

Cross-Session Memory

  • The Chorus database is the persistent memory — all ideas, proposals, tasks, and documents survive across sessions
  • chorus_get_notifications() auto-marks read, preventing re-processing
  • Activity stream provides full audit trail with timestamps and session attribution

Real-Time Pub/Sub

  • Redis 7 (optional) — powers SSE (Server-Sent Events) push for real-time presence indicators
  • Without Redis: polling fallback
  • Kanban board and proposal panels update in real time as agents work

Document Management

  • Documents are first-class entities: PM Agent creates document drafts, admin can export as MD/PDF/Word (v0.6.6)
  • Document mirror calls in OpenSpec mode must use json_encode_file (enforced via skill rule)

Context Injection at Session Start

The on-session-start.sh hook assembles context from:

  1. chorus_checkin response (current tasks, project state)
  2. Filesystem detection (OpenSpec mode)
  3. Configuration (CHORUS_URL, CHORUS_API_KEY) This context is injected as a developerMessage into the session before the user's first prompt.
07

Orchestration

Chorus — Orchestration

Multi-Agent Pattern

Chorus supports parallel-fan-out via Claude Code Agent Teams (Swarm Mode):

  • v0.6.0 introduced independent review agents (proposal-reviewer + task-reviewer)
  • v0.6.1 introduced /yolo skill: full-auto AI-DLC pipeline with Agent Team parallel execution
  • The on-session-start.sh hook documents how to spawn reviewer sub-agents via spawn_agent with agent_type="default" and a chorus skill mounted

From the hook script (verbatim):

Reviewer sub-agents: mount the reviewer skill into a default sub-agent —
spawn_agent(agent_type="default", items=[{type:"skill", path:"chorus:chorus-proposal-reviewer"},
{type:"text", text:"Review proposal <uuid>."}]) after chorus_pm_submit_proposal;
same pattern with chorus:chorus-task-reviewer after chorus_submit_for_verify.
Codex 0.125 only ships three built-in roles (default / explorer / worker) —
custom agent_types like chorus-proposal-reviewer will be rejected.
Remember close_agent after wait_agent; completed ≠ closed, 6 concurrent max.

Permission-Gated Actions

The MCP server enforces the 5×3 permission matrix at the API level. Agents cannot perform actions their token does not authorize, providing runtime access control rather than prompt-level restriction.

Execution Mode

event-driven — agents are triggered by session lifecycle events (checkin, task assignment, proposal submission) and react via MCP tool calls. The web UI provides the human-facing control plane.

Sub-Agent Spawning

Via Codex CLI's spawn_agent API. Each sub-agent gets a role mount from Chorus skills. Maximum 6 concurrent agents (Codex CLI limit).

Multi-Model

Not configured at the Chorus level. Each AI client connecting to the Chorus MCP server uses its own model. Chorus is model-agnostic; it provides the harness infrastructure, not the model routing.

Isolation Mechanism

No git worktrees or container isolation. Isolation is provided by Chorus's permission model — agents cannot exceed their granted permissions.

Audit Trail

Full activity stream with session attribution. All proposals, task state changes, and document updates are logged in the PostgreSQL database with timestamps.

08

Ui Cli Surface

Chorus — UI/CLI Surface

CLI Binary: chorus

  • Binary name: chorus (via chorus.mjs)
  • Install: npm install -g @chorus-aidlc/chorus && chorus
  • Port: 8637 (default)
  • Mode options: --port, --data-dir, DEFAULT_USER=..., DATABASE_URL=...
  • Is thin wrapper: No — it is a full Next.js application server

Web Dashboard

  • Type: web-dashboard
  • Port: 8637
  • Tech stack: Next.js 15 (App Router), React 19, Tailwind CSS 4, shadcn/ui, Radix UI, Tiptap
  • Features:
    • Kanban board with real-time task flow and agent presence indicators
    • Task DAG visualization with dependency ordering
    • Proposal approval panel with streaming AI generation
    • Pixel workspace — pixel characters showing each agent's real-time working status
    • Idea elaboration (structured Q&A rounds)
    • Document management (create/export MD/PDF/Word)
    • Universal Search (Cmd+K, 6 entity types, 3 scope levels)
    • Activity stream with full audit trail
    • @Mention with Tiptap autocomplete
    • In-app notifications with SSE push

Claude Code + Codex Integration

  • plugins/chorus/ — plugin directory with hooks.json, shell hook scripts, and skills
  • SessionStart hook auto-injects Chorus context and OpenSpec mode status
  • .claude/settings.json enables the plugin
  • .codex-plugin/ directory for Codex CLI integration

Deployment Surfaces

  • Embedded (PGlite): single npm install -g && chorus command
  • Docker Compose: standalone or full stack with PostgreSQL + Redis
  • AWS CDK: packages/chorus-cdk for ECS/RDS/ElastiCache deployment
  • Docker Hub image: chorusaidlc/chorus-app

OIDC / Auth

Supports OIDC + PKCE, API Key, and SuperAdmin auth modes.

Related frameworks

same archetype · same primary tool · same memory type

Claude-Flow / Ruflo ★ 55k

Eliminates single-agent context limits and sequential bottlenecks by orchestrating fault-tolerant swarms of specialized AI agents…

Hermes Agent (NousResearch) ★ 168k

Self-improving personal AI agent with closed learning loop, 7 terminal backends, and messaging gateway — not tied to any AI…

OpenCode ★ 165k

Terminal-first AI coding agent with multi-model routing, native desktop app, and a typed .opencode/ configuration system for…

OpenHands ★ 75k

Open-source AI software development platform (open-source Devin alternative) with Docker sandbox isolation, 77.6% SWE-bench…

DeerFlow ★ 70k

Long-horizon superagent that researches, codes, and creates by orchestrating parallel sub-agents with isolated contexts in Docker…

oh-my-openagent (omo) ★ 60k

Multi-provider AI agent orchestration for OpenCode: escape vendor lock-in by routing Sisyphus (Claude/Kimi/GLM) and Hephaestus…