Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Chorus Proposal workflow — create proposals with document and task drafts, manage dependency DAG, validate and submit for review.
.claude/skills/chorus-aidlc-proposal-chorus/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 71% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 128% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 647% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 104% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 143% | 0% |
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 idea-chorus skill at <BASE_URL>/skill/idea-chorus/SKILL.md), 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 --> 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) | Manage dependencies between existing tasks (with cycle detection) | | chorus_add_reference / chorus_update_reference / chorus_remove_reference | Attach/edit/remove external-evidence web links (docs/repo/issue_pr/paper_blog) on an idea, proposal, or task; also attachable inline at creation via references[] on chorus_pm_create_idea / chorus_pm_create_proposal / chorus_create_tasks. No read tool — they come back inline on chorus_get_idea / chorus_get_proposal / chorus_get_task |
Shared tools (checkin, query, comment, search, notifications): see chorus skill at <BASE_URL>/skill/chorus/SKILL.md
It is generally best to create the proposal container first without any drafts, 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_proposal rejects any input idea with isContainer = true. Derive a child idea from the theme and write the proposal on the child instead. (See the theme-ideas section of the idea-chorus skill.)
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-empty acceptanceCriteriaItems to 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 review-chorus skill at <BASE_URL>/skill/review-chorus/SKILL.md).
Consider adding a comment explaining your reasoning:
chorus_add_comment({
targetType: "proposal",
targetUuid: "<proposal-uuid>",
content: "This proposal covers... Key decisions: ..."
})If the proposal is rejected, check the review note:
chorus_get_proposal({ proposalUuid: "<proposal-uuid>", section: "full" })
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })Revise the drafts and resubmit.
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 timemarkdown# 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.
markdown# 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 effortreview-chorus skill (<BASE_URL>/skill/review-chorus/SKILL.md)develop-chorus skill (<BASE_URL>/skill/develop-chorus/SKILL.md)idea-chorus skill (<BASE_URL>/skill/idea-chorus/SKILL.md)chorus skill (<BASE_URL>/skill/chorus/SKILL.md)Other measured skills in the registry, with their headline benchmark lift.