brainstormlisted
Install: claude install-skill taipt1504/claudehut
## Dispatch contract (read this FIRST)
Brainstorm runs as a **scan-and-return subagent**, not as an interactive
dialog inside the subagent. The runtime split is non-negotiable:
| Actor | Owns |
|-------|------|
| Subagent `claudehut-brainstormer` (opus) | Codebase scan, reuse-scan, conventions read, **draft** design doc on disk, list of `open_questions[]`. **Terminates after one turn.** |
| Main thread (orchestrator) | User dialog via `AskUserQuestion`, plan tracking, looping back into the subagent with the user's answers. |
The reason for this split is documented in Anthropic's runtime contract:
`AskUserQuestion`, `Agent`, `EnterPlanMode`, `ScheduleWakeup`, and
`WaitForMcpServers` are **not available in any subagent context**
(source: code.claude.com/docs/en/sub-agents §Available tools). A
subagent that tries to "ask the user 5 questions" stalls because the
runtime silently strips the tool — the symptom is exactly what users
have reported.
### The loop
```
1. main thread runs:
PROMPT=$( "$CLAUDE_PLUGIN_ROOT/skills/brainstorm/scripts/dispatch-prompt.sh" "$ARGUMENTS" )
Task(subagent_type="claudehut-brainstormer", prompt="$PROMPT")
2. subagent scans + reuse-scans + drafts → saves .claudehut/specs/<id>-design.md
subagent terminates with a fenced ```claudehut-brainstorm-return JSON block
containing: findings, open_questions[], blockers, next_action.
3. main thread parses the return block:
a. if next_action == "BLOCKED":
surface the blocker, e