@chorus-aidlc/chorus-pi 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +90 -0
- package/agents/chorus-code-reviewer.md +168 -0
- package/agents/chorus-proposal-reviewer.md +137 -0
- package/agents/chorus-task-reviewer.md +160 -0
- package/bin/chorus-mcp-call.sh +182 -0
- package/extensions/chorus.ts +452 -0
- package/extensions/subagent/agents.ts +180 -0
- package/extensions/subagent/index.ts +1038 -0
- package/lib/lib.ts +409 -0
- package/package.json +62 -0
- package/skills/brainstorm/SKILL.md +166 -0
- package/skills/chorus/SKILL.md +432 -0
- package/skills/chorus-cli/SKILL.md +57 -0
- package/skills/develop/SKILL.md +444 -0
- package/skills/docs/SKILL.md +68 -0
- package/skills/idea/SKILL.md +349 -0
- package/skills/openspec-aware/SKILL.md +493 -0
- package/skills/orchestrate/SKILL.md +127 -0
- package/skills/proposal/SKILL.md +386 -0
- package/skills/quick-dev/SKILL.md +197 -0
- package/skills/review/SKILL.md +363 -0
- package/skills/yolo/SKILL.md +549 -0
|
@@ -0,0 +1,386 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: proposal
|
|
3
|
+
description: Chorus Proposal workflow — create proposals with document and task drafts, manage dependency DAG, validate and submit for review.
|
|
4
|
+
license: AGPL-3.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.17.0"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Proposal Skill
|
|
13
|
+
|
|
14
|
+
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.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
After an Idea's elaboration is resolved (see `/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.
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
Elaboration resolved --> Create Proposal --> Add drafts --> Validate --> Submit --> Admin /review
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## Tools
|
|
29
|
+
|
|
30
|
+
**Proposal Management:**
|
|
31
|
+
|
|
32
|
+
| Tool | Purpose |
|
|
33
|
+
|------|---------|
|
|
34
|
+
| `chorus_pm_create_proposal` | Create empty proposal container |
|
|
35
|
+
| `chorus_pm_validate_proposal` | Validate proposal completeness (returns errors, warnings, info) |
|
|
36
|
+
| `chorus_pm_submit_proposal` | Submit proposal for Admin approval (draft -> pending) |
|
|
37
|
+
|
|
38
|
+
**Document Drafts:**
|
|
39
|
+
|
|
40
|
+
| Tool | Purpose |
|
|
41
|
+
|------|---------|
|
|
42
|
+
| `chorus_pm_add_document_draft` | Add document draft to proposal |
|
|
43
|
+
| `chorus_pm_update_document_draft` | Update document draft content |
|
|
44
|
+
| `chorus_pm_remove_document_draft` | Remove document draft from proposal |
|
|
45
|
+
|
|
46
|
+
**Task Drafts:**
|
|
47
|
+
|
|
48
|
+
| Tool | Purpose |
|
|
49
|
+
|------|---------|
|
|
50
|
+
| `chorus_pm_add_task_draft` | Add task draft (returns draftUuid for dependency chaining) |
|
|
51
|
+
| `chorus_pm_update_task_draft` | Update task draft |
|
|
52
|
+
| `chorus_pm_remove_task_draft` | Remove task draft from proposal |
|
|
53
|
+
|
|
54
|
+
**Post-Approval (tasks exist):**
|
|
55
|
+
|
|
56
|
+
| Tool | Purpose |
|
|
57
|
+
|------|---------|
|
|
58
|
+
| `chorus_create_tasks` | Batch create tasks (supports intra-batch dependencies via draftUuid) |
|
|
59
|
+
| `chorus_pm_assign_task` | Assign a task to a Developer Agent |
|
|
60
|
+
| `chorus_pm_create_document` | Create standalone document |
|
|
61
|
+
| `chorus_pm_update_document` | Update document content (increments version) |
|
|
62
|
+
| `chorus_update_task` (with `addDependsOn` / `removeDependsOn`) | Add or remove task dependencies (with cycle detection) |
|
|
63
|
+
|
|
64
|
+
**Shared tools** (checkin, query, comment, search, notifications): see `/chorus`
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Workflow
|
|
69
|
+
|
|
70
|
+
### Step 1: Create an Empty Proposal
|
|
71
|
+
|
|
72
|
+
**Recommended approach:** Create the proposal container first without any drafts, then incrementally add document and task drafts one by one.
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
chorus_pm_create_proposal({
|
|
76
|
+
projectUuid: "<project-uuid>",
|
|
77
|
+
title: "Implement <feature name>",
|
|
78
|
+
description: "Analysis and implementation plan for Idea #xxx",
|
|
79
|
+
inputType: "idea",
|
|
80
|
+
inputUuids: ["<idea-uuid>"]
|
|
81
|
+
})
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**Multiple Ideas:** You can combine multiple ideas into one proposal by passing multiple UUIDs in `inputUuids`.
|
|
85
|
+
|
|
86
|
+
> **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` skill.)
|
|
87
|
+
|
|
88
|
+
### Step 1.5: Detect OpenSpec mode
|
|
89
|
+
|
|
90
|
+
Before authoring document drafts, **load the `openspec-aware` skill at `skills/openspec-aware/SKILL.md`** and run its §1 detection contract. Branch on the result:
|
|
91
|
+
|
|
92
|
+
- **`CHORUS_OPENSPEC_ACTIVE=1`** → follow `openspec-aware` §3. Pick `$SLUG`, scaffold `openspec/changes/<slug>/`, author `proposal.md` / `design.md` / `specs/<capability>/spec.md` locally, then create the proposal container (Step 1 above) with the literal line `OpenSpec change slug: <slug>` in `description`, and mirror each local file into a document draft.
|
|
93
|
+
|
|
94
|
+
> **⛔ Mandatory in OpenSpec mode:** mirror calls fill `content` from the local file — prefer `chorus mcp call … --arg-file content=<file>`, falling back to the `chorus-mcp-call.sh` wrapper with `json_encode_file` when `chorus` is not on `PATH` — see `openspec-aware` §3.6. Do **not** call `chorus_pm_add_document_draft` directly from the MCP harness with a hand-typed `content` field. Re-typing thousands of lines through the LLM burns 20k+ content tokens per proposal and breaks byte-equality with the local source of truth (`openspec-aware` §2 Rule 1 explains the full reasoning). Skip Step 2 below when in OpenSpec mode — the file-fill flow in `openspec-aware` §3.6 replaces it for documents.
|
|
95
|
+
|
|
96
|
+
- **`CHORUS_OPENSPEC_ACTIVE=0`** (CLI absent or `CHORUS_OPENSPEC_MODE=off`) → proceed with Step 2 unchanged. Author drafts inline as free-form Markdown via direct MCP `chorus_pm_add_document_draft`.
|
|
97
|
+
|
|
98
|
+
### Step 2: Add Document Drafts
|
|
99
|
+
|
|
100
|
+
Add document drafts one at a time:
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
# Add PRD
|
|
104
|
+
chorus_pm_add_document_draft({
|
|
105
|
+
proposalUuid: "<proposal-uuid>",
|
|
106
|
+
type: "prd",
|
|
107
|
+
title: "PRD: <Feature Name>",
|
|
108
|
+
content: "# PRD: <Feature Name>\n\n## Background\n...\n## Requirements\n..."
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
# Add Tech Design
|
|
112
|
+
chorus_pm_add_document_draft({
|
|
113
|
+
proposalUuid: "<proposal-uuid>",
|
|
114
|
+
type: "tech_design",
|
|
115
|
+
title: "Tech Design: <Feature Name>",
|
|
116
|
+
content: "# Technical Design\n\n## Architecture\n...\n## Implementation\n..."
|
|
117
|
+
})
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
**Document types:** `prd`, `tech_design`, `adr`, `spec`, `guide`
|
|
121
|
+
|
|
122
|
+
### Step 3: Add Task Drafts
|
|
123
|
+
|
|
124
|
+
Add task drafts one at a time. The response returns the new draft's `draftUuid` — use it directly for `dependsOnDraftUuids` in subsequent drafts.
|
|
125
|
+
|
|
126
|
+
**`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).
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
# First task -> response includes { draftUuid, draftTitle }
|
|
130
|
+
chorus_pm_add_task_draft({
|
|
131
|
+
proposalUuid: "<proposal-uuid>",
|
|
132
|
+
title: "Implement <component>",
|
|
133
|
+
description: "Detailed description of what to build...",
|
|
134
|
+
priority: "high",
|
|
135
|
+
storyPoints: 3,
|
|
136
|
+
acceptanceCriteriaItems: [
|
|
137
|
+
{ description: "Criteria 1", required: true },
|
|
138
|
+
{ description: "Criteria 2", required: true }
|
|
139
|
+
]
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
# Second task — depends on first
|
|
143
|
+
chorus_pm_add_task_draft({
|
|
144
|
+
proposalUuid: "<proposal-uuid>",
|
|
145
|
+
title: "Write tests for <component>",
|
|
146
|
+
description: "Unit and integration tests...",
|
|
147
|
+
priority: "medium",
|
|
148
|
+
storyPoints: 2,
|
|
149
|
+
acceptanceCriteriaItems: [
|
|
150
|
+
{ description: "Test coverage > 80%", required: true }
|
|
151
|
+
],
|
|
152
|
+
dependsOnDraftUuids: ["<draftUuid-from-first-task>"]
|
|
153
|
+
})
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
> 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.
|
|
157
|
+
|
|
158
|
+
**Task priority:** `low`, `medium`, `high`
|
|
159
|
+
|
|
160
|
+
### Step 4: Review and Refine Drafts
|
|
161
|
+
|
|
162
|
+
```
|
|
163
|
+
# Review current state. chorus_get_proposal defaults to section:"basic"
|
|
164
|
+
# (metadata + a lightweight draft index, no bodies). Use section:"full" to
|
|
165
|
+
# see every draft's content, or section:"documents"/"tasks" for one kind.
|
|
166
|
+
chorus_get_proposal({ proposalUuid: "<proposal-uuid>", section: "full" })
|
|
167
|
+
|
|
168
|
+
# Update a document draft
|
|
169
|
+
chorus_pm_update_document_draft({
|
|
170
|
+
proposalUuid: "<proposal-uuid>",
|
|
171
|
+
draftUuid: "<draft-uuid>",
|
|
172
|
+
content: "Updated content..."
|
|
173
|
+
})
|
|
174
|
+
|
|
175
|
+
# Update a task draft
|
|
176
|
+
chorus_pm_update_task_draft({
|
|
177
|
+
proposalUuid: "<proposal-uuid>",
|
|
178
|
+
draftUuid: "<draft-uuid>",
|
|
179
|
+
description: "Updated description...",
|
|
180
|
+
dependsOnDraftUuids: ["<other-draft-uuid>"]
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
# Remove a draft
|
|
184
|
+
chorus_pm_remove_task_draft({
|
|
185
|
+
proposalUuid: "<proposal-uuid>",
|
|
186
|
+
draftUuid: "<draft-uuid>"
|
|
187
|
+
})
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Step 5: Validate and Submit
|
|
191
|
+
|
|
192
|
+
Before submitting, validate to preview issues:
|
|
193
|
+
|
|
194
|
+
```
|
|
195
|
+
chorus_pm_validate_proposal({ proposalUuid: "<proposal-uuid>" })
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Returns `{ valid, issues }` with error, warning, and info levels. Fix errors before submitting.
|
|
199
|
+
|
|
200
|
+
When validation passes:
|
|
201
|
+
|
|
202
|
+
```
|
|
203
|
+
chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
This changes the status from `draft` to `pending`. An Admin will review it (see `/review`).
|
|
207
|
+
|
|
208
|
+
Add a comment explaining your reasoning:
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
chorus_add_comment({
|
|
212
|
+
targetType: "proposal",
|
|
213
|
+
targetUuid: "<proposal-uuid>",
|
|
214
|
+
content: "This proposal covers... Key decisions: ..."
|
|
215
|
+
})
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
### Step 6: Handle Feedback
|
|
219
|
+
|
|
220
|
+
After submission, a `chorus-proposal-reviewer` may run and post a VERDICT comment. If the VERDICT is **FAIL**, or an Admin rejects the proposal, you need to revise and resubmit.
|
|
221
|
+
|
|
222
|
+
**IMPORTANT:** A proposal in `pending` status cannot be edited. You **must** reject it first to return it to `draft` status before editing any drafts.
|
|
223
|
+
|
|
224
|
+
1. **Read feedback:**
|
|
225
|
+
```
|
|
226
|
+
chorus_get_proposal({ proposalUuid: "<proposal-uuid>", section: "full" })
|
|
227
|
+
chorus_get_comments({ targetType: "proposal", targetUuid: "<proposal-uuid>" })
|
|
228
|
+
```
|
|
229
|
+
Identify BLOCKERs from the reviewer VERDICT or rejection note.
|
|
230
|
+
|
|
231
|
+
2. **Reject the proposal** (self-reject your own, or ask admin to reject someone else's):
|
|
232
|
+
```
|
|
233
|
+
chorus_pm_reject_proposal({
|
|
234
|
+
proposalUuid: "<proposal-uuid>",
|
|
235
|
+
reviewNote: "Reviewer FAIL. Fixing BLOCKERs: <list>"
|
|
236
|
+
})
|
|
237
|
+
```
|
|
238
|
+
This returns the proposal to `draft` status. PM agents can only reject their own proposals; admin agents can reject any proposal.
|
|
239
|
+
|
|
240
|
+
3. **Revise the drafts:**
|
|
241
|
+
```
|
|
242
|
+
chorus_pm_update_document_draft({ proposalUuid: "<proposal-uuid>", draftUuid: "<uuid>", content: "..." })
|
|
243
|
+
chorus_pm_update_task_draft({ proposalUuid: "<proposal-uuid>", draftUuid: "<uuid>", ... })
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
4. **Resubmit:**
|
|
247
|
+
```
|
|
248
|
+
chorus_pm_submit_proposal({ proposalUuid: "<proposal-uuid>" })
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Step 7: Post-Approval
|
|
252
|
+
|
|
253
|
+
When the Admin approves:
|
|
254
|
+
- Document drafts become real Documents
|
|
255
|
+
- Task drafts become real Tasks (status: `open`, ready for developers)
|
|
256
|
+
- The Idea's displayed status is automatically derived from Proposal and Task progress -- no manual update needed
|
|
257
|
+
|
|
258
|
+
### Step 8: Manage Task Dependencies (Optional)
|
|
259
|
+
|
|
260
|
+
After tasks are created, you can manage dependencies:
|
|
261
|
+
|
|
262
|
+
**Batch create tasks with intra-batch dependencies:**
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
chorus_create_tasks({
|
|
266
|
+
projectUuid: "<project-uuid>",
|
|
267
|
+
tasks: [
|
|
268
|
+
{ draftUuid: "draft-db", title: "Create database schema", priority: "high", storyPoints: 2 },
|
|
269
|
+
{ draftUuid: "draft-api", title: "Implement API endpoints", priority: "high", storyPoints: 4, dependsOnDraftUuids: ["draft-db"] },
|
|
270
|
+
{ title: "Write integration tests", priority: "medium", storyPoints: 2, dependsOnDraftUuids: ["draft-api"] }
|
|
271
|
+
]
|
|
272
|
+
})
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Add/remove dependencies on existing tasks:**
|
|
276
|
+
|
|
277
|
+
```
|
|
278
|
+
chorus_update_task({ taskUuid: "<task-B-uuid>", addDependsOn: ["<task-A-uuid>"] })
|
|
279
|
+
chorus_update_task({ taskUuid: "<task-B-uuid>", removeDependsOn: ["<task-A-uuid>"] })
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
Dependencies are validated: same project, no self-dependency, no cycles (DFS detection).
|
|
283
|
+
|
|
284
|
+
### Step 9: Assign Tasks to Developer Agents (Optional)
|
|
285
|
+
|
|
286
|
+
```
|
|
287
|
+
chorus_pm_assign_task({ taskUuid: "<task-uuid>", agentUuid: "<developer-agent-uuid>" })
|
|
288
|
+
|
|
289
|
+
# Optional: pin the task to a specific (agent, host, cwd) AgentInstance
|
|
290
|
+
chorus_pm_assign_task({ taskUuid: "<task-uuid>", agentUuid: "<developer-agent-uuid>", instanceUuid: "<agent-instance-uuid>" })
|
|
291
|
+
```
|
|
292
|
+
|
|
293
|
+
- Task must be `open` or `assigned`
|
|
294
|
+
- Target agent must have `task: ["write"]` permission
|
|
295
|
+
- Pass `instanceUuid` 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
|
|
296
|
+
|
|
297
|
+
---
|
|
298
|
+
|
|
299
|
+
## Document Writing Guidelines
|
|
300
|
+
|
|
301
|
+
### PRD Structure
|
|
302
|
+
```markdown
|
|
303
|
+
# PRD: <Feature Name>
|
|
304
|
+
|
|
305
|
+
## Background
|
|
306
|
+
Why this feature is needed.
|
|
307
|
+
|
|
308
|
+
## Requirements
|
|
309
|
+
### Functional Requirements
|
|
310
|
+
- FR-1: ...
|
|
311
|
+
|
|
312
|
+
### Non-Functional Requirements
|
|
313
|
+
- NFR-1: ...
|
|
314
|
+
|
|
315
|
+
## User Stories
|
|
316
|
+
- As a <role>, I want <action>, so that <benefit>
|
|
317
|
+
|
|
318
|
+
## Out of Scope
|
|
319
|
+
What is NOT included.
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
### Tech Design Structure
|
|
323
|
+
```markdown
|
|
324
|
+
# Technical Design: <Feature Name>
|
|
325
|
+
|
|
326
|
+
## Overview
|
|
327
|
+
High-level approach.
|
|
328
|
+
|
|
329
|
+
## Architecture
|
|
330
|
+
System design, component interactions.
|
|
331
|
+
|
|
332
|
+
## Data Model
|
|
333
|
+
Schema changes, new tables.
|
|
334
|
+
|
|
335
|
+
## API Design
|
|
336
|
+
New/modified endpoints.
|
|
337
|
+
|
|
338
|
+
## Module Contracts
|
|
339
|
+
Shared conventions across tasks: return value format, error handling pattern, cross-module call points.
|
|
340
|
+
|
|
341
|
+
## Implementation Plan
|
|
342
|
+
Step-by-step implementation order.
|
|
343
|
+
|
|
344
|
+
## Risks & Mitigations
|
|
345
|
+
Potential issues and how to address them.
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Task Writing Guidelines
|
|
349
|
+
|
|
350
|
+
Good tasks are:
|
|
351
|
+
- **Module-scoped** — One cohesive functional module per task, not a single function or file
|
|
352
|
+
- **Testable** — Clear, cohesive acceptance criteria are **required** on every task (at least one non-blank item; max 6; group related checks into one criterion but list key coverage, e.g. "All tests pass: service layer unit tests, API integration tests, edge case handling")
|
|
353
|
+
- **Sized** — 1-8 story points (hours of agent work)
|
|
354
|
+
- **Ordered** — Use `dependsOnDraftUuids` / `dependsOnTaskUuids` to express execution order
|
|
355
|
+
- **Descriptive** — Include enough context for a developer agent to start without questions. For tasks with cross-module dependencies, reference the tech design's Module Contracts in the AC
|
|
356
|
+
- **Integration checkpoints** — For DAGs with 4+ tasks, include at least one integration checkpoint task at a convergence point whose AC requires end-to-end execution of preceding modules together
|
|
357
|
+
- **Hallucination-aware** — When tasks involve external dependencies, note in the task description that developers should verify specifics (API signatures, CLI flags, config keys, model IDs, etc.) against official docs rather than relying on LLM memory
|
|
358
|
+
|
|
359
|
+
### Task Granularity
|
|
360
|
+
|
|
361
|
+
Each 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.
|
|
362
|
+
|
|
363
|
+
**Bad → Good examples:**
|
|
364
|
+
- Bad: `Book Search` + `Book CRUD` (2 tasks) → Good: `Book Management` (1 task covering CRUD + Search for the same entity)
|
|
365
|
+
- Bad: `Chart Rendering` + `Statistics Calculation` (2 tasks) → Good: `Data Analytics` (1 task covering stats + visualization as one module)
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## Tips
|
|
370
|
+
|
|
371
|
+
- Keep PRD focused on *what* and *why*; tech design focused on *how*
|
|
372
|
+
- Break large features into cohesive module-scoped tasks — but avoid over-splitting related functionality into too many tiny tasks
|
|
373
|
+
- Add `storyPoints` to help prioritize and estimate effort
|
|
374
|
+
- Keep acceptance criteria cohesive — group related verifications into one item rather than listing each check separately
|
|
375
|
+
- Always set up task dependency DAG — tasks without dependencies are assumed parallelizable
|
|
376
|
+
- When multiple tasks share data formats or call each other, define contracts in the tech design before writing task AC
|
|
377
|
+
- When combining multiple ideas, explain how they relate in the proposal description
|
|
378
|
+
|
|
379
|
+
---
|
|
380
|
+
|
|
381
|
+
## Next
|
|
382
|
+
|
|
383
|
+
- After submission, an Admin will review using `/review`
|
|
384
|
+
- After approval, Developers claim tasks using `/develop`
|
|
385
|
+
- For Idea elaboration, see `/idea`
|
|
386
|
+
- For platform overview, see `/chorus`
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: quick-dev
|
|
3
|
+
description: Quick Task workflow — skip Idea→Proposal, create tasks directly, execute, and verify.
|
|
4
|
+
license: AGPL-3.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: chorus
|
|
7
|
+
version: "0.17.0"
|
|
8
|
+
category: project-management
|
|
9
|
+
mcp_server: chorus
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Quick Dev Skill
|
|
13
|
+
|
|
14
|
+
Skip the full AI-DLC pipeline (Idea → Elaboration → Proposal → Approval) and create tasks directly. Ideal for small, well-understood work. The goal is for agents to **autonomously record their development work and verify task completion** through structured acceptance criteria.
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## Overview
|
|
19
|
+
|
|
20
|
+
The standard AI-DLC flow ensures quality through structured planning, but adds overhead that slows down small tasks. Quick Dev provides a lightweight alternative:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
check explicit task:admin permission → create/claim → implement → self-check AC → submit → independent task review → verify or hand off
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Use Quick Dev when:**
|
|
27
|
+
- Bug fixes with clear reproduction steps
|
|
28
|
+
- Small features (< 2 story points)
|
|
29
|
+
- Post-delivery patches and gap-filling after a proposal's tasks are done
|
|
30
|
+
- Prototype or exploratory tasks
|
|
31
|
+
- Urgent hotfixes that can't wait for proposal review
|
|
32
|
+
|
|
33
|
+
**Do NOT use Quick Dev when:**
|
|
34
|
+
- The feature needs a PRD or tech design document
|
|
35
|
+
- Multiple interdependent tasks require upfront planning
|
|
36
|
+
- Stakeholder elaboration is needed to clarify requirements
|
|
37
|
+
- The work impacts architecture or shared components significantly
|
|
38
|
+
|
|
39
|
+
For complex work, use `/idea` + `/proposal` instead.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Pre-Flight: Permission Check
|
|
44
|
+
|
|
45
|
+
Call `chorus_checkin` and inspect the active agent's effective permissions. Set `canVerifyTask` to true **only** when `chorus_checkin().agent.permissions.task` explicitly contains `"admin"` (the `task:admin` permission).
|
|
46
|
+
|
|
47
|
+
Never infer verification authority from the agent's name, persona, preset/role label, task ownership, or tool availability. Do not ask whether to self-verify: the explicit permission determines the terminal path.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Tools
|
|
52
|
+
|
|
53
|
+
| Tool | Purpose |
|
|
54
|
+
|------|---------|
|
|
55
|
+
| `chorus_create_tasks` | Create task(s) — omit `proposalUuid` for standalone Quick Task, or pass it to attach to an existing proposal |
|
|
56
|
+
| `chorus_update_task` | Edit task fields (title, description, priority, AC, dependencies) or change status |
|
|
57
|
+
| `chorus_claim_task` | Claim a task (open → assigned) |
|
|
58
|
+
| `chorus_report_work` | Report progress with optional status update |
|
|
59
|
+
| `chorus_report_criteria_self_check` | Self-check acceptance criteria before submitting |
|
|
60
|
+
| `chorus_submit_for_verify` | Submit for admin verification |
|
|
61
|
+
| `chorus_admin_verify_task` | **(admin only)** Verify task — use when self-verification is approved |
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Workflow
|
|
66
|
+
|
|
67
|
+
### Step 1: Create a Quick Task
|
|
68
|
+
|
|
69
|
+
**`acceptanceCriteriaItems` is required** — `chorus_create_tasks` rejects any task without at least one non-blank criterion (and rejects the whole batch if any task is missing them). These are also the foundation for self-checking in Step 6. Write specific, testable criteria that you can objectively verify after development. Vague AC like "works correctly" defeats the purpose; prefer "returns 200 on GET /api/foo with valid token".
|
|
70
|
+
|
|
71
|
+
```
|
|
72
|
+
chorus_create_tasks({
|
|
73
|
+
projectUuid: "<project-uuid>",
|
|
74
|
+
tasks: [{
|
|
75
|
+
title: "Fix login redirect loop on Safari",
|
|
76
|
+
description: "Safari loses session cookie after redirect...",
|
|
77
|
+
priority: "high",
|
|
78
|
+
storyPoints: 1,
|
|
79
|
+
acceptanceCriteriaItems: [
|
|
80
|
+
{ description: "Login works on Safari 17+", required: true },
|
|
81
|
+
{ description: "Existing Chrome/Firefox behavior unchanged", required: true }
|
|
82
|
+
]
|
|
83
|
+
}]
|
|
84
|
+
})
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**`proposalUuid` is optional:**
|
|
88
|
+
- **Omit** for standalone quick tasks (bug fixes, hotfixes, exploratory work)
|
|
89
|
+
- **Pass** to attach the task to an existing proposal — useful for gap-filling, follow-up patches, or continuing work after a proposal's initial tasks are delivered
|
|
90
|
+
|
|
91
|
+
### Step 2: Claim the Task
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
chorus_claim_task({ taskUuid: "<task-uuid>" })
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Step 3: Edit Details (if needed)
|
|
98
|
+
|
|
99
|
+
Use `chorus_update_task` to refine the task after creation. Tasks always have AC (creation requires them), but **update them when your understanding changes during development**. Passing `acceptanceCriteriaItems` **replaces** the task's criteria with the provided non-empty set; omit the field to leave them unchanged (it cannot be used to clear AC).
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
chorus_update_task({
|
|
103
|
+
taskUuid: "<task-uuid>",
|
|
104
|
+
description: "Updated with more details...",
|
|
105
|
+
acceptanceCriteriaItems: [
|
|
106
|
+
{ description: "Login works on Safari 17+", required: true },
|
|
107
|
+
{ description: "Added CSRF token handling", required: true }
|
|
108
|
+
],
|
|
109
|
+
addDependsOn: ["<other-task-uuid>"]
|
|
110
|
+
})
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### Step 4: Start Working
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
chorus_update_task({ taskUuid: "<task-uuid>", status: "in_progress" })
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Sub-agents:** pass `sessionUuid` for attribution:
|
|
120
|
+
```
|
|
121
|
+
chorus_update_task({ taskUuid: "<task-uuid>", status: "in_progress", sessionUuid: "<session-uuid>" })
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Step 5: Report Progress
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
chorus_report_work({
|
|
128
|
+
taskUuid: "<task-uuid>",
|
|
129
|
+
report: "Fixed Safari cookie issue:\n- Root cause: SameSite=Strict incompatible with redirect\n- Changed to SameSite=Lax\n- Commit: abc1234",
|
|
130
|
+
sessionUuid: "<session-uuid>"
|
|
131
|
+
})
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Step 6: Self-Check Acceptance Criteria
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
chorus_report_criteria_self_check({
|
|
138
|
+
taskUuid: "<task-uuid>",
|
|
139
|
+
criteria: [
|
|
140
|
+
{ uuid: "<ac-uuid-1>", devStatus: "passed", devEvidence: "Tested on Safari 17.2" },
|
|
141
|
+
{ uuid: "<ac-uuid-2>", devStatus: "passed", devEvidence: "Chrome/Firefox regression tests pass" }
|
|
142
|
+
]
|
|
143
|
+
})
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Step 7: Submit and Run Independent Review
|
|
147
|
+
|
|
148
|
+
```
|
|
149
|
+
chorus_submit_for_verify({
|
|
150
|
+
taskUuid: "<task-uuid>",
|
|
151
|
+
summary: "Fixed Safari login redirect loop. Changed SameSite cookie policy. All AC passed."
|
|
152
|
+
})
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Submitting is not final verification. Spawn the required task-reviewer agent with `subagent_spawn` as described in `/skill:develop`, wait for it, and read the newest `VERDICT:` Task comment. `PASS` and `PASS WITH NOTES` continue. On `FAIL`, do not verify or hand off: fix every unresolved BLOCKER, repeat AC self-check and submission, then run a fresh independent task review.
|
|
156
|
+
|
|
157
|
+
### Step 8: Permission-Aware Verification
|
|
158
|
+
|
|
159
|
+
With explicit `task:admin`, after every required AC self-check passes and independent review has no unresolved BLOCKER, verify and continue autonomously:
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
chorus_admin_verify_task({ taskUuid: "<task-uuid>" })
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
Without explicit `task:admin`, do not call the admin tool. Post an evidence-rich comment on the Task containing AC results, test evidence, the latest independent-review verdict, and the exact requested action. @mention the responsible human (prefer `chorus_checkin().agent.owner`) to perform admin verification, then end the current turn.
|
|
166
|
+
|
|
167
|
+
This handoff applies in interactive and headless daemon sessions. Do not use an interactive prompt, poll for the human response, or rely only on generic notifications.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## Session Integration
|
|
172
|
+
|
|
173
|
+
Quick Tasks work with Pi subagents just like proposal-based tasks:
|
|
174
|
+
|
|
175
|
+
- **Team Lead**: create quick tasks, then assign to sub-agents via task UUIDs
|
|
176
|
+
- **Sub-agents**: the Chorus extension auto-injects session context — just pass `sessionUuid` to `chorus_update_task` and `chorus_report_work`
|
|
177
|
+
- **Session lifecycle** is fully automated by the extension
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Tips
|
|
182
|
+
|
|
183
|
+
- Keep Quick Tasks small — if you need more than 2-3 tasks, consider using `/proposal`
|
|
184
|
+
- **Acceptance criteria are required at creation time** — `chorus_create_tasks` rejects tasks without them. They are your self-check contract; specific, testable AC enables autonomous verification and makes the entire workflow self-contained
|
|
185
|
+
- Use `chorus_update_task` to refine tasks (including AC) after creation rather than deleting and recreating
|
|
186
|
+
- Pass `proposalUuid` to attach follow-up or gap-filling tasks to an existing proposal — this keeps related work grouped in the same project context and DAG
|
|
187
|
+
- Quick Tasks show up in the same project task list and DAG as proposal-based tasks
|
|
188
|
+
- Agents with explicit `task:admin` continue autonomously after AC and independent review pass; all others use the evidence-rich asynchronous human handoff
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Next
|
|
193
|
+
|
|
194
|
+
- For full task lifecycle details, see `/develop`
|
|
195
|
+
- For admin verification, see `/review`
|
|
196
|
+
- For the standard planning flow, see `/idea` and `/proposal`
|
|
197
|
+
- For platform overview, see `/chorus`
|