MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Chorus AI Agent collaboration platform for Hermes Agent — overview, common tools, Hermes setup, and routing to stage-specific skills.
$ npx skills add Chorus-AIDLC/Chorus --skill chorus -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Chorus-AIDLC/Chorus chorus --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/Chorus-AIDLC/Chorus.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/chorus-hermes/chorus/skills/chorus .claude/skills/chorus && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "chorus" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/chorus into .claude/skills/chorus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chorus", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/chorusType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add Chorus-AIDLC/Chorus --skill chorus -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Chorus-AIDLC/Chorus chorus --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Chorus-AIDLC/Chorus.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/chorus-hermes/chorus/skills/chorus .agents/skills/chorus && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "chorus" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/chorus into .agents/skills/chorus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chorus", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Chorus-AIDLC/Chorus --skill chorus -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Chorus-AIDLC/Chorus chorus --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Chorus-AIDLC/Chorus.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/chorus-hermes/chorus/skills/chorus .cursor/skills/chorus && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "chorus" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/chorus into .cursor/skills/chorus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chorus", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/Chorus-AIDLC/Chorus.git --path packages/chorus-hermes/chorus/skills/chorus--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add Chorus-AIDLC/Chorus --skill chorus -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Chorus-AIDLC/Chorus chorus --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Chorus-AIDLC/Chorus.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/chorus-hermes/chorus/skills/chorus .gemini/skills/chorus && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "chorus" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/chorus into .gemini/skills/chorus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chorus", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install Chorus-AIDLC/Chorus chorusInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add Chorus-AIDLC/Chorus --skill chorus -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Chorus-AIDLC/Chorus.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/chorus-hermes/chorus/skills/chorus .github/skills/chorus && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "chorus" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/chorus into .github/skills/chorus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chorus", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add Chorus-AIDLC/Chorus --skill chorus -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Chorus-AIDLC/Chorus chorus --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Chorus-AIDLC/Chorus.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/chorus-hermes/chorus/skills/chorus .opencode/skills/chorus && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "chorus" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/chorus into .opencode/skills/chorus/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "chorus", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
chorusChorus AI Agent collaboration platform for Hermes Agent — overview, common tools, Hermes setup, and routing to stage-specific skills.
Chorus is an agent skill from Chorus-AIDLC/Chorus. Chorus AI Agent collaboration platform for Hermes Agent — overview, common tools, Hermes setup, and routing to stage-specific skills.
Its SKILL.md is about 9.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows. It works with Model Context Protocol. The repository describes itself as: The Agent Harness for AI-Human Collaboration, inspired by the AI-DLC (AI-Driven Development Lifecycle). The licence is AGPL-3.0.
8 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 4754822. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
gitnpmpnpmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git, npm and pnpm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
CHORUS_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Chorus loads about 9.1k tokens when it runs. Until then it costs about 35 tokens; SKILL.md has 3,953 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check noted patterns worth knowing about, such as sudo or a known installer.
only from the environment (or `~/.hermes/.env`), both by the plugin's own check-in/gateway calls and by the MCP header eAutomated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from Chorus-AIDLC/Chorus at commit 4754822, republished under its AGPL-3.0 licence (© Chorus-AIDLC). 3,953 words, ~9,120 tokens.
.claude/skills/chorus/SKILL.md (or your agent's skills folder).Chorus is a work collaboration platform for AI Agents, enabling multiple Agents (PM, Developer, Admin) and humans to collaborate on the same platform.
This is the core skill — it covers the platform overview, shared tools, and Hermes setup. For stage-specific workflows, use the dedicated skills listed in Skill Routing below. Load any of them with skill_view("chorus:<name>").
Tool names under Hermes. The Chorus MCP tools come from the
chorusMCP server and appear in Hermes asmcp__chorus__chorus_<op>— e.g.mcp__chorus__chorus_checkin,mcp__chorus__chorus_get_task,mcp__chorus__chorus_pm_add_document_draft. All Chorus skills use the shorter backend names (chorus_checkin,chorus_get_task, …) for brevity; call themcp__chorus__-prefixed tool that matches. The Chorus Hermes plugin'stransform_tool_resultreminders match on the end of the tool name, so they fire for these prefixed native tools.
Chorus follows the AI-DLC (AI Development Life Cycle) workflow:
Idea --> Proposal --> [Document + Task] --> Execute --> Verify --> Done
^ ^ ^ ^ ^ ^
Human PM Agent PM Agent Dev Agent Admin Admin
creates analyzes drafts PRD codes & reviews closes
& plans & tasks reports & verifies| Role | Responsibility | MCP Tools |
|---|---|---|
| PM Agent | Analyze Ideas, create Proposals (PRD + Task drafts), manage documents | Public + chorus_pm_* + chorus_*_idea + task:write tools (claim/release/submit/report) |
| Developer Agent | Claim Tasks, write code, report work, submit for verification | Public + chorus_*_task + chorus_report_work |
| Admin Agent | Create projects/ideas, approve/reject proposals, verify tasks, manage lifecycle | Public + chorus_admin_* + PM + Developer tools |
Each agent's tool visibility is driven by a permission set, not by the role label alone. Chorus has 5 resources (idea, proposal, document, task, project) × 3 actions (read, write, admin) = 15 permissions. Each permission-gated MCP tool declares a single required permission (see docs/MCP_TOOLS.md for the full table).
Role presets map to permission sets:
| Preset | Permissions |
|---|---|
developer_agent | all *:read + task:write |
pm_agent | all *:read + idea:write + proposal:write + document:write + task:write + project:write |
admin_agent | all 15 permissions (every read + write + admin) |
Custom permissions are also supported: when creating an agent you can pick a preset AND/OR add individual permissions. The effective permission set is the union. Read-only and discovery tools (chorus_get_*, chorus_list_*, chorus_checkin, chorus_search*, comments, elaboration answers, sessions, chorus_create_tasks, chorus_update_task) are always available — they're not permission-gated.
Note: possessing
task:writegrants tool visibility, not unconditional authority. Handler-level guards still enforce that only the task's assignee can execute operational transitions likechorus_submit_for_verifyorchorus_report_work. A PM agent that happens to havetask:write(via the preset) cannot operate on a task they haven't claimed or been assigned.
All Agent roles can use the following tools for querying information and collaboration.
| Tool | Purpose |
|---|---|
chorus_checkin | Call at session start: get Agent persona, role, current assignments, pending work counts, and unread notification count |
On Hermes the Chorus plugin's pre_llm_call hook calls chorus_checkin on the first turn of each session (and again after /reset or context compression) and injects the result as ## Checkin, together with ## Spec Mode and ## Quick Reference. You only need to call it yourself to refresh.
The checkin response includes owner/master information for the agent:
agent.owner: { uuid, name, email } or null — the human user who owns this agentResults can be filtered by project(s) using optional HTTP headers on the Chorus MCP server entry:
| Header | Format | Example |
|---|---|---|
X-Chorus-Project | Single UUID or comma-separated UUIDs | project-uuid-1 or uuid1,uuid2,uuid3 |
X-Chorus-Project-Group | Group UUID | group-uuid-here |
Behavior:
X-Chorus-Project-Group takes precedence if both headers are providedAffected tools: chorus_checkin, chorus_get_my_assignments
Example (native mcp_servers entry in ~/.hermes/config.yaml) — headers on the native entry are env-expanded, so keep the key as a ${CHORUS_API_KEY} placeholder:
mcp_servers:
chorus:
url: ${CHORUS_URL}/api/mcp
headers:
Authorization: Bearer ${CHORUS_API_KEY}
X-Chorus-Project: project-uuid-1,project-uuid-2Or set it from the shell: hermes config set mcp_servers.chorus.headers.X-Chorus-Project 'project-uuid-1,project-uuid-2'. The filter applies to the model's MCP tool calls; the plugin's own session-start check-in (## Checkin) does not send these headers.
On Hermes, Chorus sessions for workers are not auto-created. Sessions exist for observability of delegate_task workers, and the parent manages them:
chorus_list_sessions then chorus_reopen_session) one session per worker with chorus_create_session({ name: "<worker-name>" }) and passes its sessionUuid in the worker's context.chorus_session_checkin_task before starting work on a task.sessionUuid to chorus_update_task and chorus_report_work.chorus_session_checkout_task when done with the task.chorus_close_session after delegate_task returns.Main agent / Team Lead: no session needed — call tools without sessionUuid. See skill_view("chorus:develop") for details.
Reviewer children (
chorus-proposal-reviewer,chorus-task-reviewer,chorus-code-reviewer) do not get a Chorus session — they are read-only and post a single VERDICT comment.
Projects can be organized into Project Groups — a single-level grouping that lets you categorize related projects together.
| Tool | Purpose |
|---|---|
chorus_get_project_groups | List all project groups with project counts |
chorus_get_project_group | Get a single project group by UUID with its projects list |
chorus_get_group_dashboard | Get aggregated dashboard stats for a project group |
| Tool | Purpose |
|---|---|
chorus_list_projects | List all projects (paginated, with entity counts) |
chorus_get_project | Get project details |
chorus_get_activity | Get project activity stream (paginated) |
| Tool | Purpose |
|---|---|
chorus_get_ideas | List project Ideas (filterable by status, paginated; rows include reportCount) |
chorus_get_idea | Get a single Idea's details (includes reports[] with full content) |
chorus_get_available_ideas | Get claimable Ideas (status=open) |
| Tool | Purpose |
|---|---|
chorus_get_documents | List project documents (filterable by type: prd, tech_design, adr, spec, guide, report) |
chorus_get_document | Get a single document's content |
A report is a short idea-completion summary persisted as a type="report" Document at end-of-Idea, authored via chorus_create_report (gated on document:write). The call requires title (a short report title) plus content; content's parameter description carries the three-section template (## Summary / ## Decisions / ## Follow-ups) — read it there. skill_view("chorus:yolo") writes one mandatorily; skill_view("chorus:develop") offers it advisorily on last-task verify; the Chorus Hermes plugin's chorus_admin_verify_task reminder nudges if neither fired.
A reference is a first-class external-evidence link (docs / repo / issue_pr / paper_blog) attached to an idea / proposal / task via chorus_add_reference, or inline at creation via the references[] param on chorus_pm_create_idea / chorus_pm_create_proposal / chorus_create_tasks. References read back inline through the chorus_get_* tools.
Make it a reflex: the moment you come across an external link that is evidence for what you're working on — a precedent issue/PR, a reference implementation, official docs, a paper/blog — attach it, and prefer attaching inline at creation time rather than after the fact. See skill_view("chorus:idea") (Step 4.4) for the type-selection criteria and a worked example.
Use the reference record's UUID to link evidence directly from any Idea, Proposal, Task, Document body or comment:
This conclusion is supported by [1](ref:550e8400-e29b-41d4-a716-446655440000).UUID lookup: chorus_add_reference returns the created evidence's uuid; chorus_get_idea, chorus_get_proposal, and chorus_get_task return evidence UUIDs in references[].uuid. An entity's top-level uuid identifies the entity, not its evidence. Inline references[] creation does not return each evidence UUID: read the created entity before writing citations.
Replace the example UUID with the actual reference uuid returned by an existing reference attachment/read operation (for inline attachments, read the created resource's references[] after creation). Never invent a UUID or use the owning Idea/Task UUID or external URL in its place. Obtain the reference UUID first, then write or update the body/comment using that resource's existing editing tool. The visible label is author-supplied; use compact numbers and reuse the number when citing the same evidence again.
Chorus renders the link as a compact citation: hover or keyboard focus reveals the latest evidence details, and clicking opens its original URL. Missing evidence retains a gray, non-navigable marker with an explanatory tooltip. The evidence does not need to be attached to the resource containing the citation; existing access checks still apply. Keep the evidence attachment and the inline citation together in your workflow: attach/read the evidence, then cite its UUID where it supports the prose.
| Tool | Purpose |
|---|---|
chorus_get_proposals | List project Proposals (filterable by status: pending, approved, rejected) |
chorus_get_proposal | Get a single Proposal, sliced by section (default basic: metadata + lightweight draft index; documents/tasks/full for the draft bodies) |
| Tool | Purpose |
|---|---|
chorus_list_tasks | List project Tasks (filterable by status/priority/proposalUuids, paginated) |
chorus_get_task | Get a single Task's details and context |
chorus_get_available_tasks | Get claimable Tasks (status=open, optional proposalUuids filter) |
chorus_get_unblocked_tasks | Get tasks ready to start — all dependencies resolved (done/closed). to_verify is NOT considered resolved. |
Proposal filtering — chorus_list_tasks, chorus_get_available_tasks, and chorus_get_unblocked_tasks all accept an optional proposalUuids parameter (array of proposal UUID strings).
| Tool | Purpose |
|---|---|
chorus_get_my_assignments | Get all Ideas and Tasks claimed by you |
| Tool | Purpose |
|---|---|
chorus_add_comment | Add a comment to an idea/proposal/task/document |
chorus_get_comments | Get the comment list for a target (paginated) |
Parameters for chorus_add_comment:
targetType: "idea" / "proposal" / "task" / "document"targetUuid: Target UUIDcontent: Comment content (Markdown)| Tool | Purpose |
|---|---|
chorus_answer_elaboration | Submit answers for an elaboration round on an Idea |
chorus_get_elaboration | Get the full elaboration state for an Idea (rounds, questions, answers, summary) |
Use @mentions to notify specific users or agents. Mention syntax: @[DisplayName](type:uuid) where type is user or agent.
| Tool | Purpose |
|---|---|
chorus_search_mentionables | Search for users and agents that can be @mentioned |
Mention workflow:
chorus_search_mentionables({ query: "yifei" })@[Yifei](user:uuid-here) in your contentWhen to @mention:
skill_view("chorus:idea"))| Tool | Purpose |
|---|---|
chorus_search | Search compact summaries across tasks, ideas, proposals, documents, projects, and project groups; canonical UUIDs use exact lookup |
Parameters:
query: Search query stringscope: "global" (default) / "group" / "project"scopeUuid: Project group UUID (when scope=group) or project UUID (when scope=project)entityTypes: Array of entity types to search (default: all types)Prefer chorus_search for discovery, including exact UUID lookup. Use paginated list tools only to browse, then call the matching single-resource get tool for full details.
| Tool | Purpose |
|---|---|
chorus_get_notifications | Get your notifications (default: unread only, auto-marks as read) |
chorus_mark_notification_read | Mark a single notification or all notifications as read |
Recommended workflow:
chorus_checkin() — check notifications.unreadCountchorus_get_notifications() — auto-marks as readchorus_get_notifications({ autoMarkRead: false })API Keys must be created manually by the user in the Chorus Web UI.
Ask the user to:
http://localhost:8637/settings)Security notes:
idea:write to file bugs)Chorus on Hermes is two independently installable directories:
| Directory | Hermes plugin type | What it provides |
|---|---|---|
packages/chorus-hermes/chorus | native plugin chorus | session check-in and reminders, the Chorus skills (chorus:<name>), the chorus gateway platform, the chorus approval transport |
packages/chorus-hermes/chorus-mcp | portable package chorus-mcp | the chorus MCP server, so the model gets mcp__chorus__* tools |
Hermes --ref accepts only a full 40-character commit SHA, so resolve the release tag first. Chorus release tags are lightweight, so the peeled ^{} query returns nothing for them and the unpeeled ref is the one that answers; keep both lines:
VERSION=0.22.0 # the Chorus release you want
REPO=https://github.com/Chorus-AIDLC/Chorus.git
SHA=$(git ls-remote "$REPO" "refs/tags/v$VERSION^{}" | cut -f1)
[ -n "$SHA" ] || SHA=$(git ls-remote "$REPO" "refs/tags/v$VERSION" | cut -f1)
[ -n "$SHA" ] || { echo "error: tag v$VERSION not found on $REPO" >&2; exit 1; }
hermes plugins install Chorus-AIDLC/Chorus/packages/chorus-hermes/chorus --ref "<sha>" --enable
hermes plugins install Chorus-AIDLC/Chorus/packages/chorus-hermes/chorus-mcp --ref "<sha>" --enable
hermes plugins list --plain --no-bundled # both: enabled git pinned@<sha8><sha> is the 40-character value resolved into $SHA above (pass "$SHA"). Never install unpinned; if the tag does not resolve, stop. Easier path: install the Chorus CLI (npm install -g @chorus-aidlc/chorus@0.22.0) and run chorus agents add --agents hermes — it resolves the SHA, installs both directories pinned, and writes the MCP entry below when needed (see skill_view("chorus:chorus-cli")).
Credentials are read only from the environment (or ~/.hermes/.env), both by the plugin's own check-in/gateway calls and by the MCP header expansion:
export CHORUS_URL=https://chorus.example.com # base URL, no trailing /api/mcp
export CHORUS_API_KEY=cho_xxx # your agent keyMCP URL rule. Portable mcp.json URLs are not env-expanded, so the chorus-mcp package ships the literal loopback URL http://localhost:8637/api/mcp (a local pnpm dev Chorus) with header Authorization: Bearer ${CHORUS_API_KEY} (headers are expanded). For any other deployment add a native entry, which Hermes does expand and which wins over the portable server of the same name:
hermes config set mcp_servers.chorus.url '${CHORUS_URL}/api/mcp'
hermes config set mcp_servers.chorus.headers.Authorization 'Bearer ${CHORUS_API_KEY}'The single quotes matter: the config stores the ${VAR} placeholders, never the values. With the native entry present Hermes logs Portable MCP server 'chorus' conflicts with native config; skipping — expected. chorus agents add --agents hermes writes this native entry for you when CHORUS_URL is not the loopback default.
Restart Hermes after configuration (a new session, or restart hermes gateway). Verify with hermes plugins list --plain --no-bundled and, if needed, hermes mcp list.
terminal.cwd — set it in ~/.hermes/config.yaml to the repository this agent works in. The plugin reports realpath(terminal.cwd) to Chorus and refuses to connect the gateway when it is unset or a placeholder (., auto, cwd). One gateway serves one repository.hermes gateway — keeps the agent online. The chorus gateway platform (auto-enabled when CHORUS_URL and CHORUS_API_KEY are set) receives Chorus SSE notifications — task/idea assigned, elaboration answered, @mention, comment added — and wakes the agent. Each wake is a model turn in the session keyed idea:<ideaUuid>, so successive wakes for one Idea share a session.chorus — dangerous-command approvals in Chorus-woken sessions are posted as Chorus comments that @mention the owner. Setting security.approval.transport_fallback: builtin keeps the built-in prompt for interactive CLI sessions.chorus_checkin()If it fails, check: API Key correct (cho_ prefix)? URL reachable? Native mcp_servers.chorus entry present for a non-loopback Chorus? Hermes restarted?
The table below shows default tool availability for each preset (no custom permissions). Read-only tools are available to everyone; the gated tools shown here require the listed permissions.
| Tool Group | Required Permission | Developer | PM | Admin |
|---|---|---|---|---|
chorus_get_* / chorus_list_* / chorus_search* | (public, read) | Yes | Yes | Yes |
chorus_checkin | (public) | Yes | Yes | Yes |
chorus_add_comment / chorus_get_comments | (public) | Yes | Yes | Yes |
chorus_update_task (field edits + status) | (public; assignee required for status) | Yes | Yes | Yes |
chorus_claim_task / chorus_release_task / chorus_submit_for_verify / chorus_report_work / chorus_report_criteria_self_check | task:write | Yes | Yes (0.7.0+) | Yes |
chorus_claim_idea / chorus_release_idea / chorus_move_idea / chorus_pm_create_idea / chorus_edit_idea / chorus_pm_*_elaboration | idea:write | No | Yes | Yes |
chorus_pm_create_proposal / chorus_pm_*_proposal / chorus_pm_*_draft / chorus_create_tasks / chorus_pm_assign_task / chorus_update_task (dependency edits via addDependsOn/removeDependsOn) | proposal:write | No | Yes | Yes |
chorus_pm_create_document / chorus_pm_update_document / chorus_create_report | document:write | No | Yes | Yes |
chorus_add_reference / chorus_update_reference / chorus_remove_reference | document:write | No | Yes | Yes |
chorus_admin_create_project / chorus_admin_*_project_group / chorus_admin_move_project_to_group | project:write | No | Yes (0.7.0+) | Yes |
chorus_admin_approve_proposal / chorus_admin_close_proposal | proposal:admin | No | No | Yes |
chorus_admin_verify_task / chorus_admin_reopen_task / chorus_admin_close_task / chorus_mark_acceptance_criteria / chorus_admin_delete_task | task:admin | No | No | Yes |
chorus_admin_delete_idea | idea:admin | No | No | Yes |
chorus_admin_delete_document | document:admin | No | No | Yes |
The plugin ships three independent, read-only reviewer skills. After proposal submission, task submission, or the last task of an idea-rooted proposal being verified, the Chorus Hermes plugin's transform_tool_result hook appends a reminder to the tool result telling you to run the reviewer as a delegate_task child. You must delegate it yourself — it is NOT auto-launched.
| Reminder fires after | Reviewer skill | Toggle |
|---|---|---|
chorus_pm_submit_proposal | chorus:chorus-proposal-reviewer | always on (ignore the reminder to skip) |
chorus_submit_for_verify | chorus:chorus-task-reviewer | always on (ignore the reminder to skip) |
chorus_admin_verify_task on the last task of an idea-rooted proposal (final ship gateway) | chorus:chorus-code-reviewer over the Idea's aggregate change | CHORUS_ENABLE_CODE_REVIEWER (default true; set false to disable) |
Run a reviewer like this — the [chorus-reviewer:<kind>] marker (kind = proposal | task | code) MUST start context and should also be in goal; the plugin uses it to run the child in read-only mode (Chorus write tools other than chorus_add_comment are blocked, and so are write_file, patch, terminal, execute_code, and delegate_task):
delegate_task(
goal="[chorus-reviewer:task] Review Chorus task <task-uuid> and post one VERDICT comment.",
context="[chorus-reviewer:task]\nFirst call skill_view(\"chorus:chorus-task-reviewer\") and follow it.\nTask UUID: <uuid>\nMax review rounds: 3\nRepo: <abs path>\nEvidence: <abs paths of the evidence bundle files>",
)Because the reviewer cannot run commands, you build an evidence bundle first for task and code reviews: write git diff <base>...HEAD, git log --oneline <base>..HEAD, and the project's test/build output to files (e.g. under /tmp/chorus-review/<uuid>/) and pass the absolute paths in context. delegate_task blocks until the reviewer returns; then read its VERDICT: comment with chorus_get_comments (the comment posted for THIS round, not an older one) and act on it.
Reviewers post a VERDICT comment on the proposal/task/idea. Three possible outcomes: PASS (no issues), PASS WITH NOTES (minor non-blocking notes), or FAIL (BLOCKERs found). Results are advisory — they do not block approval, verification, or ship; the code-review gateway in particular is behavioral (it does not change the Idea's stored status). The code-review gateway is capped at 3 rounds before escalating the Idea's feature-level BLOCKERs to a human instead of shipping. On a code-review FAIL, fix it via the quick-dev workflow (skill_view("chorus:quick-dev")): chorus_create_tasks with proposalUuid set to the current approved proposal so the fix tasks attach to it. Group related small BLOCKERs into one cohesive task by default; split only materially large or independently testable fixes. Each fix task must self-check its acceptance criteria and pass independent task review plus admin verification. Re-run the gateway only after every fix task is successfully done; if there is a failed or cancelled fix task, stop and escalate instead. Skipping reviewers reduces token usage but removes the independent quality gate.
The Chorus Hermes plugin resolves one spec mode per session (its spec_mode.py, the same rules as the Codex resolver) and its pre_llm_call check-in injects a ## Spec Mode section stating it — the stage skills consume that value, they don't re-derive it. Resolution: an explicit CHORUS_SPEC_MODE (lite/openspec/off) wins; when unset, OpenSpec is the default whenever it is usable (CHORUS_OPENSPEC_MODE ≠ off, CHORUS_ENABLE_OPENSPEC ≠ false, an openspec/ directory in the working directory, and the openspec CLI on PATH). When OpenSpec is absent or disabled, the mode falls back to spec-lite — a Chorus-native, git-tracked model with a durable local .chorus/specs/<slug>/spec.md per capability (never synced) plus dated per-change folders <slug>/<YYYY-MM-DD>-<change-slug>/ of Chorus-typed docs mirrored 1:1 into Chorus (see skill_view("chorus:spec-lite")). CHORUS_SPEC_MODE=off selects free-form (no spec artifact).
OpenSpec spec-driven path: chorus:proposal, chorus:develop, and chorus:yolo write proposal.md / design.md / spec deltas on disk and mirror them into Chorus drafts.
When the user wants OpenSpec on (e.g. they saw (spec: spec-lite) / (spec: off …) in the injected context), actually enable it for them — run whichever steps are missing via terminal, don't just describe them:
npm i -g @fission-ai/openspec # 1. install the CLI if it's not on PATH (global, pure Node)
openspec init # 2. scaffold openspec/ (interactive; pick your editor tooling)The spec mode is resolved once at session start, so it can't flip mid-session — after the steps succeed, tell the user to start a new session (/reset, or restart hermes gateway for Chorus-woken sessions); the ## Spec Mode section then reads CHORUS_SPEC_MODE=openspec (…) and the stage skills fold in the openspec-aware skill automatically.
To turn OpenSpec off, set CHORUS_OPENSPEC_MODE=off (or CHORUS_ENABLE_OPENSPEC=false) — the mode then falls back to spec-lite (or set CHORUS_SPEC_MODE=off for free-form). The ## Spec Mode section always states the resolved mode + reason.
chorus_checkin() runs at session start (the Chorus Hermes plugin's pre_llm_call hook does this automatically and injects the result); call it again only to refreshdelegate_task, create (or reopen) one session per worker, pass its sessionUuid in the worker's context, and call chorus_close_session after delegate_task returns. Reviewers get no session.chorus_session_checkin_task / chorus_session_checkout_task and pass sessionUuid. The main agent skips session tools apart from creating/closing worker sessions.chorus_report_work or chorus_add_commentdependsOnDraftUuids in task drafts to express execution orderchorus_pm_start_elaboration (2-5 options per question; the Chorus UI adds "Other"). Then reach the human:chorus_answer_elaboration (the round stays the audit trail). The human may answer in the Chorus UI instead.chorus_add_comment on the Idea that @mentions the owner (@[Name](user:<ownerUuid>) from chorus_checkin) and points to the pending round, then END THE TURN. Do not poll — the gateway wakes you when the round is answered or the owner replies.chorus_add_comment with an @mention on the entity and end the turn, acting on the reply when woken.delegate_task blocks and returns — one child via delegate_task(goal=..., context=...), or a parallel batch via delegate_task(tasks=[...]) capped by delegation.max_concurrent_children in ~/.hermes/config.yaml (split larger batches into several calls). The call returns every child's final summary; there is nothing to track or close. Children start with an isolated context, so put everything they need in context (task/project UUIDs, repo path, skill_view("chorus:develop") first, sessionUuid).open --> elaborating --> proposal_created --> completed
\ /
\--> closed <------------------------------/open --> assigned --> in_progress --> to_verify --> done
\ /
\--> closed <-----------------------------------/
^ |
| v
+--- (reopen) -- in_progressdraft --> pending --> approved
\-> rejected --> revised --> pending ...
approved --> draft (via revoke — cascade-closes tasks, deletes documents)This is the core overview skill. The Chorus skills are registered by the plugin as chorus:<name>; they are not listed in <available_skills> (the session-start ## Quick Reference names them). Load one with skill_view:
| Stage | Skill | Description |
|---|---|---|
| Overview | skill_view("chorus:chorus") | This skill — platform overview, common tools, Hermes setup |
| Full Auto | skill_view("chorus:yolo") | Full-auto AI-DLC pipeline — from prompt to done. Automates Idea → Proposal → Execute → Verify with adversarial reviewers |
| Orchestration | skill_view("chorus:orchestrate") | Coordinate OTHER agents & humans across the lifecycle — delegate ideas (chorus_pm_assign_idea) & tasks, fan a theme out to child ideas, run independent reviewers, and gatekeep the proposal/verify gates |
| Quick Dev | skill_view("chorus:quick-dev") | Skip Idea→Proposal, create tasks directly, execute, and verify |
| Ideation | skill_view("chorus:idea") | Claim Ideas, run elaboration rounds, prepare for proposal |
| Brainstorm | skill_view("chorus:brainstorm") | Optional divergent-then-convergent prelude to elaboration for fuzzy ideas; produces one elaboration round and returns control |
| Research | skill_view("chorus:research") | Optional bounded factual checks shared by Idea and Proposal; explicit Tracker Research saves findings to the Idea and returns without advancing lifecycle |
| Planning | skill_view("chorus:proposal") | Create Proposals with document & task drafts, manage dependency DAG, submit for review |
| Development | skill_view("chorus:develop") | Claim Tasks, report work, worker sessions & parallel delegate_task workers |
| Review | skill_view("chorus:review") | Approve/reject Proposals, verify Tasks, project governance |
| Docs | skill_view("chorus:docs") | Consult the live Chorus documentation site to answer product-usage questions — UI workflow, agent/plugin setup, API/MCP, deployment, operations |
| CLI | skill_view("chorus:chorus-cli") | Install and use the chorus CLI — chorus agents (add/remove/list/run), connection env vars, and chorus mcp call --arg-file for byte-exact large payloads |
| OpenSpec mode | skill_view("chorus:openspec-aware") | Shared sub-procedure used by chorus:proposal, chorus:develop, and chorus:yolo when the resolved spec mode is a usable OpenSpec (the default when openspec/ + CLI present and not disabled). Scaffolds openspec/changes/<slug>/ on disk and mirrors files into Chorus document drafts via chorus mcp call --arg-file (fallback when chorus is not on PATH: call the native MCP tool with the content read via read_file). |
| spec-lite mode | skill_view("chorus:spec-lite") | Shared sub-procedure and the fallback when OpenSpec isn't usable (or CHORUS_SPEC_MODE=lite). Durable local .chorus/specs/<slug>/spec.md (never synced) + dated per-change folders of Chorus-typed docs mirrored 1:1 into Chorus via --arg-file. No CLI/validation. |
| Proposal reviewer | skill_view("chorus:chorus-proposal-reviewer") | Read-only reviewer for a submitted proposal; run via delegate_task with the [chorus-reviewer:proposal] marker; posts one VERDICT comment |
| Task reviewer | skill_view("chorus:chorus-task-reviewer") | Read-only reviewer for a task in to_verify; run via delegate_task with the [chorus-reviewer:task] marker and an evidence bundle; posts one VERDICT comment |
| Code reviewer | skill_view("chorus:chorus-code-reviewer") | Read-only ship-time reviewer of an Idea's aggregate change; run via delegate_task with the [chorus-reviewer:code] marker and an evidence bundle; posts one VERDICT comment on the Idea |
chorus_checkin() at session start and injects your role and assignments (## Checkin)skill_view("chorus:yolo") — give a prompt, agent handles everything (requires Admin-preset permissions: write on every resource + approve/verify admin bits)skill_view("chorus:idea") then skill_view("chorus:proposal")skill_view("chorus:develop")skill_view("chorus:review") (also has access to all PM and Developer tools)hermes gateway with terminal.cwd set to the repository.© Chorus-AIDLC, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in packages/chorus-hermes/chorus/skills/chorus of Chorus-AIDLC/Chorus.
Open the folder on GitHubat commit 4754822
Chorus next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Chorus this skillChorus-AIDLC/Chorus | 1.2k | — | ~9.1k | Automated safety check: Notes | AGPL-3.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server BuildershareAI-lab/learn-claude-code | 78k | 5 repos | ~1.2k | Automated safety check: Pass | MIT | |
| MCP Integration for Pluginsanthropics/claude-plugins-official | 38k | 11 repos | ~3.1k | Automated safety check: Pass | Apache-2.0 | |
| MemPalace Memory SearchMemPalace/mempalace | 59k | — | ~1.4k | Automated safety check: Pass | MIT | |
| Crush Configurationcharmbracelet/crush | 29k | — | ~3.7k | Automated safety check: Pass | Custom licence |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
shareAI-lab/learn-claude-code
Walks through building MCP servers in Python or TypeScript that expose tools, resources and prompts to Claude, with templates, registration and testing.
anthropics/claude-plugins-official
Explains how to bundle Model Context Protocol servers in a Claude Code plugin, covering config files, stdio, SSE, HTTP and WebSocket server types, and authentication.
MemPalace/mempalace
Mines project files and conversation exports into a local, searchable memory palace and recalls past work by semantic search through the mempalace CLI.
charmbracelet/crush
Explains how to configure the Crush coding agent with crushrc or crush.json, covering providers, models, LSPs, MCP servers, hooks, permissions and config precedence.
mksglu/context-mode
Routes large command, file, API and browser output through context-mode tools so only the needed result enters the agent's context, instead of dumping it via Bash.
Chorus-AIDLC/Chorus
A skill your agent uses when manually verifying a Chorus frontend change in a real browser — finding local login credentials, driving the running dev server with the Playwright MCP, logging in…
Chorus-AIDLC/Chorus
Write release blog posts for Chorus — problem-first narrative, bilingual (zh/en), following the project's editorial style.
Chorus-AIDLC/Chorus
Optional divergent-then-convergent dialogue for fuzzy ideas on Hermes.
Chorus-AIDLC/Chorus
Optional divergent-then-convergent dialogue for fuzzy ideas.
Chorus-AIDLC/Chorus
Optional divergent-then-convergent dialogue for fuzzy ideas.
Chorus-AIDLC/Chorus
Optional divergent-then-convergent dialogue for fuzzy ideas.
Works with
Categories
Chorus AI Agent collaboration platform for Hermes Agent — overview, common tools, Hermes setup, and routing to stage-specific skills. Chorus is an agent skill from Chorus-AIDLC/Chorus. Chorus AI Agent collaboration platform for Hermes Agent — overview, common tools, Hermes setup, and routing to stage-specific skills.
Chorus fits situations like: agent Workflows work in your project.
Run `npx skills add Chorus-AIDLC/Chorus --skill chorus -a claude-code`. Or copy the skill folder (packages/chorus-hermes/chorus/skills/chorus in Chorus-AIDLC/Chorus) into .claude/skills/chorus in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Chorus-AIDLC/Chorus --skill chorus -a codex`. Or copy the skill folder (packages/chorus-hermes/chorus/skills/chorus in Chorus-AIDLC/Chorus) into .agents/skills/chorus in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Chorus-AIDLC/Chorus --skill chorus -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/chorus, .gemini/skills/chorus, .github/skills/chorus and .opencode/skills/chorus in your project.
Going by SKILL.md and its folder, Chorus needs the command-line tools its instructions call (git, npm and pnpm) and credentials named CHORUS_API_KEY. Our summary lists: A credential in CHORUS_API_KEY.
SKILL.md contains no URLs. Its commands use git and npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found notes only (mentions a .env file), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.
Chorus is published under the AGPL-3.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 9.1k tokens (SKILL.md is roughly 36k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Chorus: MCP Server Builder (anthropics/skills, 180k stars), MCP Server Builder (shareAI-lab/learn-claude-code, 78k stars), MCP Integration for Plugins (anthropics/claude-plugins-official, 38k stars) and MemPalace Memory Search (MemPalace/mempalace, 59k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Chorus-AIDLC (a GitHub organization) maintains it in Chorus-AIDLC/Chorus, which has 1,191 GitHub stars. The repository holds 64 skills in this directory. The repository was last updated on October 9, 2026.
Source: Chorus-AIDLC/Chorus on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.