Linear Brasa — Brainstorm (Design Document → Refined)
Take an existing brasa Linear issue and produce a reviewed design spec stored as a Document
titled Design attached to the issue. Sequences brainstorm → grill → synthesize so the final
artifact is adversarially stress-tested before being written.
Announce at start: "I'm using the linear-brasa-brainstorm skill to design WIL-X."
Always use the Linear MCP tools (mcp__plugin_linear_linear__*) — never gh or raw HTTP.
Workspace constants:
- Team:
Wilsonfreitas—6c3534b0-9f98-476c-a1d6-3f99119e9f88 - Project:
brasa—700095cc-dd63-405b-b285-1895aabce09d - Labels:
Idea·Bug·Improvement·Feature
Shared Convention A — Document upsert (never create duplicates)
MCP cannot delete a Document. Always upsert:
1. get_issue(id=WIL-X) → read documents: [{id, title}, ...]
2. Find the entry whose title EXACTLY equals "Design".
3. If found: save_document(id=<that id>, content=<new content>) # update in place
If not found: save_document(issue=WIL-X, title="Design", content=...) # create once
4. NEVER call save_document(issue=...) when "Design" already exists in documents.
Shared Convention B — Status transition (read-back verified, never on abort)
1. Only after the skill's main work succeeded:
save_issue(id=WIL-X, state="<Target>") # state, NOT status
2. Read the returned JSON; confirm "status":"<Target>" before announcing.
3. If the skill aborts/errs before completing, do NOT move the status.
Phase 1 — Preconditions
- Require the user to provide a
WIL-Xidentifier. If missing, ask once: "Which issue? (e.g., WIL-42)". - Fetch the issue via
mcp__plugin_linear_linear__get_issue. Read title, description, current label, and thedocumentsarray. - Look in
documentsfor an entry with title exactlyDesign:- If found: call
get_document(id=<that id>), show its content verbatim to the user, then ask: "Issue already has a Design Document. Re-brainstorm and overwrite it? (y/n)". Exit on decline. - If not found: proceed.
- If found: call
- Briefly summarize the issue title + description (one or two sentences) so both of you share context.
Phase 2 — Brainstorm → Grill → Synthesize
2a — Brainstorm (diverge)
Invoke the superpowers:brainstorming skill. Follow its flow for exploration and candidate
generation:
- Explore project context (files, docs, recent commits).
- Clarifying questions, one at a time.
- 2–3 candidate approaches with trade-offs and a recommendation.
Stop brainstorming before its "Write design doc" step. Do not write to docs/superpowers/specs/.
The brainstorm's job ends when the user picks a candidate approach.
2b — Grill (stress-test)
Invoke the superpowers:grilling skill on the chosen approach. Grill adversarially — one question
at a time — until both parties share a solid understanding of the design and its failure modes.
Grilling writes nothing. Its output is shared understanding only, not a document.
2c — Synthesis (mandatory write step)
After grilling, write the agreed design into the Design Document using Convention A:
- Call
get_issue(WIL-X)to get the currentdocumentslist. - Apply Convention A (upsert) with target title
Designand the synthesized content. - Announce: "Design Document saved."
This synthesis step is the only place the Design artifact is produced — brainstorm and grill produce no persistent output.
Phase 3 — Spec Self-Review
After saving the Document:
- Call
get_document(id=<Design doc id>)to read back exactly what was saved. - Scan for: TBD · TODO · placeholder text · internal contradictions · ambiguous requirements.
- Fix any issues found via
save_document(id=<Design doc id>, content=<corrected>).
Success condition: a Design Document exists on WIL-X with approved, reviewed content.
Nothing has been written to docs/superpowers/specs/ or to the issue description.
Phase 4 — User Review Gate
Tell the user:
"Design Document saved on WIL-X. Review it in Linear and let me know if you want changes."
Wait for their response:
- If they request changes:
get_document(Design id), edit the content,save_document(id=...), re-run Phase 3 self-review, ask for approval again. - If they approve: proceed to Phase 5.
Phase 5 — Label Conversion
- Check the issue's current label (from the last
get_issuecall). - If label is
Idea:- Ask: "What label should this become now — Feature, Improvement, or Bug?"
- Call
save_issue(id=WIL-X, labels=[chosen_label]).
- If label is already
Feature,Improvement, orBug: leave it unchanged.
Confirm to the user: "Label updated to [label]."
Phase 6 — Status Transition to Refined
Apply Convention B with state="Refined":
- Call
save_issue(id=WIL-X, state="Refined"). - Read the returned JSON; confirm
"status":"Refined"before announcing. - If the call fails or returns a different status, report the error and do NOT announce Refined.
Close out with exactly:
✅ Design finalized in WIL-X (status: Refined). When you're ready to create the plan, ask.
Share the issue URL.
General Notes
- Write issue content in English, even if the user speaks Portuguese.
- Keep markdown clean — no raw HTML, no escape sequences.
- If the user interrupts mid-brainstorm or mid-grill, pause, answer, and resume only on their confirmation. Note the interruption in context but do not write it to the Document.
- If the design exceeds what fits comfortably in a single issue, flag it to the user rather than splitting silently — they may want to decompose into sub-projects (separate issues).