Doc Coauthoring
aws-samples/sample-strands-agent-with-agentcore
Guide users through a structured workflow for co-authoring documentation.
Chorus Proposal workflow on Hermes — create proposals with document and task drafts, manage dependency DAG, validate, submit, and run the read-only proposal reviewer via delegatetask.
$ npx skills add Chorus-AIDLC/Chorus --skill proposal -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Chorus-AIDLC/Chorus proposal --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/proposal .claude/skills/proposal && 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 "proposal" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/proposal into .claude/skills/proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proposal", 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/proposalType 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 proposal -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Chorus-AIDLC/Chorus proposal --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/proposal .agents/skills/proposal && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "proposal" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/proposal into .agents/skills/proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proposal", 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 proposal -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Chorus-AIDLC/Chorus proposal --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/proposal .cursor/skills/proposal && 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 "proposal" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/proposal into .cursor/skills/proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proposal", 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/proposal--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 proposal -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Chorus-AIDLC/Chorus proposal --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/proposal .gemini/skills/proposal && 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 "proposal" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/proposal into .gemini/skills/proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proposal", 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 proposalInstalls 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 proposal -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/proposal .github/skills/proposal && 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 "proposal" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/proposal into .github/skills/proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proposal", 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 proposal -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 proposal --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/proposal .opencode/skills/proposal && 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 "proposal" agent skill from https://github.com/Chorus-AIDLC/Chorus/tree/main/packages/chorus-hermes/chorus/skills/proposal into .opencode/skills/proposal/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "proposal", 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.
proposalChorus Proposal workflow on Hermes — create proposals with document and task drafts, manage dependency DAG, validate, submit, and run the read-only proposal reviewer via delegatetask.
Proposal is an agent skill from Chorus-AIDLC/Chorus. Chorus Proposal workflow on Hermes — create proposals with document and task drafts, manage dependency DAG, validate, submit, and run the read-only proposal reviewer via delegatetask.
Its SKILL.md is about 5.5k 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 Sales & Support, covering Proposals and quotes. 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.
12 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are markdown).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Proposal loads about 5.5k tokens when it runs. Until then it costs about 48 tokens; SKILL.md has 2,068 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 found no risky patterns in SKILL.md.
Automated 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). 2,068 words, ~5,490 tokens.
.claude/skills/proposal/SKILL.md (or your agent's skills folder).This skill covers the Planning stage of the AI-DLC workflow: creating Proposals that contain document drafts (PRD, tech design) and task drafts with dependency DAGs, then submitting them for Admin review.
After an Idea's elaboration is resolved (see the idea skill, skill_view("chorus:idea")), the PM Agent creates a Proposal — a container that holds document drafts and task drafts. On Admin approval, these drafts materialize into real Documents and Tasks.
Elaboration resolved --> Create Proposal --> Add drafts --> Validate --> Submit --> Reviewer --> Admin reviewProposal Management:
| Tool | Purpose |
|---|---|
chorus_pm_create_proposal | Create empty proposal container |
chorus_pm_validate_proposal | Validate proposal completeness (returns errors, warnings, info) |
chorus_pm_submit_proposal | Submit proposal for Admin approval (draft -> pending) |
Document Drafts:
| Tool | Purpose |
|---|---|
chorus_pm_add_document_draft | Add document draft to proposal |
chorus_pm_update_document_draft | Update document draft content |
chorus_pm_remove_document_draft | Remove document draft from proposal |
Task Drafts:
| Tool | Purpose |
|---|---|
chorus_pm_add_task_draft | Add task draft (returns draftUuid for dependency chaining) |
chorus_pm_update_task_draft | Update task draft |
chorus_pm_remove_task_draft | Remove task draft from proposal |
Post-Approval (tasks exist):
| Tool | Purpose |
|---|---|
chorus_create_tasks | Batch create tasks (supports intra-batch dependencies via draftUuid) |
chorus_pm_assign_task | Assign a task to a Developer Agent |
chorus_pm_create_document | Create standalone document |
chorus_pm_update_document | Update document content (increments version) |
chorus_update_task (with addDependsOn / removeDependsOn) | Add or remove task dependencies (with cycle detection) |
Shared tools (checkin, query, comment, search, notifications): see the overview skill (skill_view("chorus:chorus"))
Read the confirmed input Idea(s) or Documents, current specifications, References and recent context before drafting. Reuse existing findings first; invoke the research skill (skill_view("chorus:research"), shared rules) only for a new factual design gap or explicit user request, subject to explicit skip. Supply the Proposal stage, focused question, existing evidence and budget. Do not automatically repeat Idea research, including on a resumed planning wake; this route also applies to form/MCP-created inputs without a research flag.
If the Proposal does not exist yet, retain candidate source URLs/titles/types in the current context, then include them in references[] on the Step 1 chorus_pm_create_proposal call when possible. Read chorus_get_proposal afterward to obtain actual references[].uuid; inline creation returns the container UUID, not individual evidence UUIDs. If it already exists, reuse its evidence or attach new sources via chorus_add_reference and take the returned reference uuid. Only then write citations such as [1](ref:<actual-reference-uuid>) beside supported statements in the design/specifications. Never invent UUIDs or substitute the Proposal UUID.
In OpenSpec/spec-lite modes, resolve the existing spec mode and locator as below, update authoritative local files with findings and real citations, then mirror file bytes using chorus mcp call … --arg-file content=<file> via terminal (or, when chorus is not on PATH, the native MCP tool with content set to the exact file contents read via read_file). No hand-typed MCP document content; spec-lite's durable spec.md remains local-only. Free-form mode keeps its normal draft-saving path. Empty/partial results preserve unknowns and continue preparation. Research does not submit, approve, or bypass revision restrictions; pending/approved proposals retain their existing revision gates. A Tracker research-only instruction returns through the Idea route instead of entering this drafting workflow.
Resolve the spec mode (Step 1.5) BEFORE this create. In OpenSpec and spec-lite modes the container's description MUST carry a locator line (OpenSpec change slug: <slug> or Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/), and description can only be set at creation — decide the mode + slug/dated-path first and include that line in this single call. Do NOT create a bare container and then realize you needed it. Free-form mode omits any locator line.
Recommended approach: Create the proposal container first (with the mode's locator line in description when applicable), then incrementally add document and task drafts one by one.
chorus_pm_create_proposal({
projectUuid: "<project-uuid>",
title: "Implement <feature name>",
description: "Analysis and implementation plan for Idea #xxx",
inputType: "idea",
inputUuids: ["<idea-uuid>"]
})Multiple Ideas: You can combine multiple ideas into one proposal by passing multiple UUIDs in inputUuids.
A theme cannot be a proposal input —
chorus_pm_create_proposalrejects any input idea withisContainer = true. Derive a child idea from the theme and write the proposal on the child instead. (See the theme-ideas section of the idea skill,skill_view("chorus:idea").)
The spec mode is already computed for you by the Chorus Hermes plugin — do NOT re-derive it. Its pre_llm_call check-in (first turn of each session, and again after /reset or context compression) resolves the mode with the plugin's spec_mode.py (explicit CHORUS_SPEC_MODE wins; otherwise openspec when an openspec/ directory and the openspec CLI are both present in the working directory; otherwise lite) and injects it as the ## Spec Mode section of your context: it states CHORUS_SPEC_MODE=<lite|openspec|off> + a routing note. (No ## Spec Mode in context, e.g. you are a delegate_task child? See openspec-aware §1 manual fallback via skill_view("chorus:openspec-aware") — never hand-roll the rule.) Act on that value:
If the section says the mode cannot be honored (explicit CHORUS_SPEC_MODE=openspec but OpenSpec unusable — config-conflict or install-hint reason), halt and surface it; do not fall back.
Otherwise branch on the resolved mode:
resolved = spec-lite → load the spec-lite skill (skill_view("chorus:spec-lite")) and follow it: pick $SLUG (a capability, not one change). Ensure the durable .chorus/specs/<slug>/spec.md exists (local-only, no Chorus ids; use the spec-lite skill's inline durable-spec template) and update it in place. Create this change's dated folder .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/ with its synced Chorus-typed docs (prd.md primary, optional tech_design.md…; use the spec-lite skill's inline dated-folder document template). Put the literal locator line Spec-lite: .chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/ in the Step 1 create description, then mirror each dated-folder <type>.md to its persistent Document (chorus_pm_add_document_draft --arg-file first time, chorus_pm_update_document --arg-file after) via chorus mcp call … --arg-file content=.chorus/specs/<slug>/<YYYY-MM-DD>-<change-slug>/<type>.md (run through terminal; see skill_view("chorus:chorus-cli")). spec.md is never mirrored. Skip Step 2 below. (Tasks via chorus_pm_add_task_draft; no tasks.md.)
resolved = OpenSpec (the ## Spec Mode section shows CHORUS_OPENSPEC_ACTIVE=1 — i.e. CHORUS_SPEC_MODE=openspec or unset, with OpenSpec usable) → follow the openspec-aware skill §3 (skill_view("chorus:openspec-aware")). Pick $SLUG, scaffold openspec/changes/<slug>/, author proposal.md / design.md / specs/<capability>/spec.md locally, then put the literal line OpenSpec change slug: <slug> in the Step 1 create description, and mirror each local file into a document draft.
⛔ Mandatory in OpenSpec mode: mirror calls fill
contentfrom the local file — preferchorus mcp call … --arg-file content=<file>run viaterminal; whenchorusis not onPATH, fall back to calling the native MCP tool (mcp__chorus__chorus_pm_add_document_draft/mcp__chorus__chorus_pm_update_document_draft) withcontentset to the exact bytes of the file as returned byread_file— seeopenspec-aware§3.6. Do not callchorus_pm_add_document_draftwith a hand-typed or paraphrasedcontentfield. Re-typing thousands of lines burns 20k+ content tokens per proposal and breaks byte-equality (openspec-aware§2 Rule 1). Skip Step 2 when in OpenSpec mode — the file-fill flow replaces it for documents.
resolved = free-form (explicit CHORUS_SPEC_MODE=off) → proceed with Step 2 unchanged. Author drafts inline as free-form Markdown via direct MCP chorus_pm_add_document_draft.
Add document drafts one at a time:
# Add PRD
chorus_pm_add_document_draft({
proposalUuid: "<proposal-uuid>",
type: "prd",
title: "PRD: <Feature Name>",
content: "# PRD: <Feature Name>\n\n## Background\n...\n## Requirements\n..."
})
# Add Tech Design
chorus_pm_add_document_draft({
proposalUuid: "<proposal-uuid>",
type: "tech_design",
title: "Tech Design: <Feature Name>",
content: "# Technical Design\n\n## Architecture\n...\n## Implementation\n..."
})Document types: prd, tech_design, adr, spec, guide
Add task drafts one at a time. The response returns the new draft's draftUuid — use it directly for dependsOnDraftUuids in subsequent drafts.
acceptanceCriteriaItems is required — every task draft must include at least one item with a non-blank description, or the call is rejected. Use the structured acceptanceCriteriaItems array (the legacy acceptanceCriteria Markdown string does not satisfy the requirement).
# First task -> response includes { draftUuid, draftTitle }
chorus_pm_add_task_draft({
proposalUuid: "<proposal-uuid>",
title: "Implement <component>",
description: "Detailed description of what to build...",
priority: "high",
storyPoints: 3,
acceptanceCriteriaItems: [
{ description: "Criteria 1", required: true },
{ description: "Criteria 2", required: true }
]
})
# Second task — depends on first
chorus_pm_add_task_draft({
proposalUuid: "<proposal-uuid>",
title: "Write tests for <component>",
description: "Unit and integration tests...",
priority: "medium",
storyPoints: 2,
acceptanceCriteriaItems: [
{ description: "Test coverage > 80%", required: true }
],
dependsOnDraftUuids: ["<draftUuid-from-first-task>"]
})To edit a draft's criteria later via
chorus_pm_update_task_draft, pass a non-emptyacceptanceCriteriaItemsto replace them; omit the field to leave them unchanged. The field cannot be used to clear criteria.
Task priority: low, medium, high
# Review current state. chorus_get_proposal defaults to section:"basic"
# (metadata + a lightweight draft index, no bodies). Use section:"full" to
# see every draft's content, or section:"documents"/"tasks" for one kind.
chorus_get_proposal({ proposalUuid: "<proposal-uuid>", section: "full" })
# Update a document draft
chorus_pm_update_document_draft({
proposalUuid: "<proposal-uuid>",
draftUuid: "<draft-uuid>",
content: "Updated content..."
})
# Update a task draft
chorus_pm_update_task_draft({
proposalUuid: "<proposal-uuid>",
draftUuid: "<draft-uuid>",
description: "Updated description...",
dependsOnDraftUuids: ["<other-draft-uuid>"]
})
# Remove a draft
chorus_pm_remove_task_draft({
proposalUuid: "<proposal-uuid>",
draftUuid: "<draft-uuid>"
})Before submitting, validate to preview issues:
chorus_pm_validate_proposal({ proposalUuid: "<proposal-uuid>" })Returns { valid, issues } with error, warning, and info levels. Fix errors before submitting.
When validation passes:
chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })This changes the status from draft to pending. An Admin will review it (see skill_view("chorus:review")).
Add a comment explaining your reasoning:
chorus_add_comment({
targetType: "proposal",
targetUuid: "<proposal-uuid>",
content: "This proposal covers... Key decisions: ..."
})The Chorus Hermes plugin's transform_tool_result hook appends a reminder to the chorus_pm_submit_proposal result: run the independent, read-only chorus-proposal-reviewer before admin approval. Run it as a delegate_task child:
delegate_task(
goal="[chorus-reviewer:proposal] Review Chorus proposal <proposal-uuid> and post one VERDICT comment.",
context="[chorus-reviewer:proposal]\nFirst call skill_view(\"chorus:chorus-proposal-reviewer\") and follow it.\nProposal UUID: <proposal-uuid>\nProject UUID: <project-uuid>\nMax review rounds: 3\nFirst read existing comments to determine the round number; post VERDICT as a comment.\nRepo: <abs path>"
)[chorus-reviewer:proposal] MUST be the first line of context (keep it in goal too). The plugin uses it to run the child under the read-only reviewer guard: Chorus write tools other than chorus_add_comment are blocked, as are write_file, patch, terminal, execute_code, and delegate_task.read_file) in context.delegate_task blocks until the reviewer finishes and returns its summary; nothing needs tracking or closing.After it returns, read the comments with chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" }) and find THIS round's VERDICT: line — the comment posted after you dispatched the reviewer, not an older round's:
chorus_admin_approve_proposal (if you hold proposal:admin and the human has delegated approval to you; otherwise leave it for the Admin).chorus_pm_reject_proposal, fix, resubmit (Step 6), and run the reviewer again — up to the 3-round cap.After submission, the chorus-proposal-reviewer (Step 5.5) posts a VERDICT comment. If the VERDICT is FAIL, or an Admin rejects the proposal, you need to revise and resubmit.
IMPORTANT: A proposal in pending status cannot be edited. You must reject it first to return it to draft status before editing any drafts.
Read feedback:
chorus_get_proposal({ proposalUuid: "<proposal-uuid>", section: "full" })
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })Identify BLOCKERs from the reviewer VERDICT or rejection note.
Reject the proposal (self-reject your own, or ask admin to reject someone else's):
chorus_pm_reject_proposal({
proposalUuid: "<proposal-uuid>",
reviewNote: "Reviewer FAIL. Fixing BLOCKERs: <list>"
})This returns the proposal to draft status. PM agents can only reject their own proposals; admin agents can reject any proposal.
Revise the drafts:
chorus_pm_update_document_draft({ proposalUuid: "<proposal-uuid>", draftUuid: "<uuid>", content: "..." })
chorus_pm_update_task_draft({ proposalUuid: "<proposal-uuid>", draftUuid: "<uuid>", ... })Resubmit:
chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })Then run the reviewer again (Step 5.5) for the next round.
When the Admin approves:
open, ready for developers)After tasks are created, you can manage dependencies:
Batch create tasks with intra-batch dependencies:
chorus_create_tasks({
projectUuid: "<project-uuid>",
tasks: [
{ draftUuid: "draft-db", title: "Create database schema", priority: "high", storyPoints: 2 },
{ draftUuid: "draft-api", title: "Implement API endpoints", priority: "high", storyPoints: 4, dependsOnDraftUuids: ["draft-db"] },
{ title: "Write integration tests", priority: "medium", storyPoints: 2, dependsOnDraftUuids: ["draft-api"] }
]
})Add/remove dependencies on existing tasks:
chorus_update_task({ taskUuid: "<task-B-uuid>", addDependsOn: ["<task-A-uuid>"] })
chorus_update_task({ taskUuid: "<task-B-uuid>", removeDependsOn: ["<task-A-uuid>"] })Dependencies are validated: same project, no self-dependency, no cycles (DFS detection).
chorus_pm_assign_task({ taskUuid: "<task-uuid>", agentUuid: "<developer-agent-uuid>" })
# Optional: pin the task to a specific (agent, host, cwd) AgentInstance
chorus_pm_assign_task({ taskUuid: "<task-uuid>", agentUuid: "<developer-agent-uuid>", instanceUuid: "<agent-instance-uuid>" })open or assignedtask: ["write"] permissioninstanceUuid to pin the task to a specific online instance (assigns as agent_instance); omit it for a plain agent assignment that inherits the root idea's pinned instance at wake time# PRD: <Feature Name>
## Background
Why this feature is needed.
## Requirements
### Functional Requirements
- FR-1: ...
### Non-Functional Requirements
- NFR-1: ...
## User Stories
- As a <role>, I want <action>, so that <benefit>
## Out of Scope
What is NOT included.# Technical Design: <Feature Name>
## Overview
High-level approach.
## Architecture
System design, component interactions.
## Data Model
Schema changes, new tables.
## API Design
New/modified endpoints.
## Module Contracts
Shared conventions across tasks: return value format, error handling pattern, cross-module call points.
## Implementation Plan
Step-by-step implementation order.
## Risks & Mitigations
Potential issues and how to address them.Good tasks are:
dependsOnDraftUuids / dependsOnTaskUuids to express execution orderEach task should correspond to an independently runnable and testable functional module — not a single function, file, or API endpoint. Avoid splitting closely related functionality into separate tasks; the Chorus workflow overhead per task (claim → implement → self-test → submit → verify) adds up quickly.
Bad → Good examples:
Book Search + Book CRUD (2 tasks) → Good: Book Management (1 task covering CRUD + Search for the same entity)Chart Rendering + Statistics Calculation (2 tasks) → Good: Data Analytics (1 task covering stats + visualization as one module)storyPoints to help prioritize and estimate effortskill_view("chorus:review"))skill_view("chorus:develop"))skill_view("chorus:idea")skill_view("chorus:chorus")© 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/proposal of Chorus-AIDLC/Chorus.
Open the folder on GitHubat commit 4754822
Proposal 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 |
|---|---|---|---|---|---|---|
| Proposal this skillChorus-AIDLC/Chorus | 1.2k | — | ~5.5k | Automated safety check: Pass | AGPL-3.0 | |
| Doc Coauthoringaws-samples/sample-strands-agent-with-agentcore | 195 | 40 repos | ~3.2k | Automated safety check: Pass | MIT | |
| Audit Onboarding Proposalhoangnb24/repository-harness | 1.2k | — | ~4k | Automated safety check: Pass | MIT | |
| No Negative EchoLB623/no-negative-echo | 897 | — | ~965 | Automated safety check: Pass | MIT | |
| GEO Service Proposal Generatorzubair-trabzada/geo-seo-claude | 11k | — | ~3k | Automated safety check: Notes | MIT | |
| Architectural ProposalsFritzAndFriends/SharpSite | 145 | 2 repos | ~1.6k | Automated safety check: Pass | MIT |
aws-samples/sample-strands-agent-with-agentcore
Guide users through a structured workflow for co-authoring documentation.
hoangnb24/repository-harness
Use only when the user explicitly invokes $audit-onboarding-proposal.
LB623/no-negative-echo
Prevent 此地无银三百两式 residue: finalize artifacts without echoing rejected session-only alternatives into labels, metadata, commits, PRs, or handoffs.
zubair-trabzada/geo-seo-claude
Builds a client-ready AI-search-optimization proposal from an existing GEO audit, with pricing tiers, an ROI estimate and a markdown document ready to send.
FritzAndFriends/SharpSite
How to write comprehensive architectural proposals that drive alignment before code is written
techwolf-ai/ai-first-toolkit
Mine the user's Claude Code + Cowork session history into a structured task profile, what they do with AI, how often, how successfully where friction lives, then propose atomic skills that would…
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.
Categories
Chorus Proposal workflow on Hermes — create proposals with document and task drafts, manage dependency DAG, validate, submit, and run the read-only proposal reviewer via delegatetask. Proposal is an agent skill from Chorus-AIDLC/Chorus. Chorus Proposal workflow on Hermes — create proposals with document and task drafts, manage dependency DAG, validate, submit, and run the read-only proposal reviewer via delegatetask.
Proposal fits situations like: tasks that involve Proposals and quotes.
Run `npx skills add Chorus-AIDLC/Chorus --skill proposal -a claude-code`. Or copy the skill folder (packages/chorus-hermes/chorus/skills/proposal in Chorus-AIDLC/Chorus) into .claude/skills/proposal in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Chorus-AIDLC/Chorus --skill proposal -a codex`. Or copy the skill folder (packages/chorus-hermes/chorus/skills/proposal in Chorus-AIDLC/Chorus) into .agents/skills/proposal 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 proposal -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/proposal, .gemini/skills/proposal, .github/skills/proposal and .opencode/skills/proposal in your project.
SKILL.md names no scripts, command-line tools or credentials: Proposal is instructions for the agent only.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Proposal 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 5.5k tokens (SKILL.md is roughly 22k 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 Proposal: Doc Coauthoring (aws-samples/sample-strands-agent-with-agentcore, 195 stars), Audit Onboarding Proposal (hoangnb24/repository-harness, 1.2k stars), No Negative Echo (LB623/no-negative-echo, 897 stars) and GEO Service Proposal Generator (zubair-trabzada/geo-seo-claude, 11k 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,192 GitHub stars. The repository holds 64 skills in this directory. The repository was last updated on October 7, 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.