From hotl
Explores intent, requirements, and design before feature work. Produces HOTL contracts (intent, verification, governance) to guide implementation.
How this skill is triggered — by the user, by Claude, or both
Slash command
/hotl:brainstormingThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn ideas into designs with explicit HOTL contracts. Ask questions one at a time. Present design for approval before any implementation.
Turn ideas into designs with explicit HOTL contracts. Ask questions one at a time. Present design for approval before any implementation.
Do NOT write any implementation code until the design is approved and writing-plans has generated the executable workflow.Explore context (cheap preflight first)
Phase 1 — Cheap preflight (Glob only, current project directory):
docs/designs/*.mddocs/plans/*.mdREADME.md, .gitignore, LICENSE, and scaffolding boilerplate do not count.Phase 2 — Branch on result:
Hard rule: Never scan parent directories, sibling folders, or workspace-wide paths unless the user explicitly provides a path.
Determine scope — decide between feature, phase, or initiative before the clarifying-questions loop. Scope shapes every downstream step: output path, contract structure, depth of inquiry.
Scope choices:
feature — one feature, one bug fix, one refactor. Output: docs/designs/YYYY-MM-DD-<slug>-design.md (dated, tactical).phase — one slice of a multi-phase initiative. Same output family as feature: docs/designs/YYYY-MM-DD-phase-N-<slug>-design.md.initiative — a multi-phase project (v1/v2, platform migration, enterprise rebuild). Output: docs/designs/<topic>.md (undated, durable, strategic).Default: feature. If the user's initial message clearly describes a feature, proceed with feature scope without blocking for input. Optionally acknowledge in one line ("Treating as feature scope; say so if this should be a phase or initiative"). Do not pause the flow.
Ask the scope question explicitly when the request is ambiguous or multi-phase (e.g., "migrate v1 to v2", "platform rebuild", "rework across services"). Present the three choices with feature as the pre-filled default and wait for the user's answer before continuing.
For initiative scope, load the strategic-design template once at session start. Resolve adapters/strategic-design.template.md in this order (same pattern used for document-lint.sh and hotl-config.sh — see skills/document-review/SKILL.md):
hotl-plugin repo itself, use adapters/strategic-design.template.md~/.codex/hotl/adapters/strategic-design.template.md~/.codex/plugins/hotl-source/adapters/strategic-design.template.md~/.codex/plugins/cache/codex-plugins/hotl/*/adapters/strategic-design.template.md~/.cline/hotl/adapters/strategic-design.template.md~/.claude/plugins/hotl/adapters/strategic-design.template.mdRead the resolved template once at session start — its section structure (problem, vision, non-goals, stakeholders, architecture, phase breakdown, risks) becomes the skeleton of the design doc you produce. Do not assume adapters/strategic-design.template.md exists in the repo being worked on.
For initiative scope, resolve the output directory via hotl-config-resolve.sh:
bash <resolved-hotl-config-resolve.sh> get designs_dir --default=docs/designs
Resolve hotl-config-resolve.sh via the same six-location order. The default is docs/designs when no .hotl/config.yml is present; opted-in projects may override via that config.
Ask clarifying questions — one at a time, understand purpose/constraints/success criteria. Prefer multiple-choice when the likely answer space is known (e.g., "Which constraints apply? (a) Must not break existing API (b) Backward-compatible (c) Performance-sensitive (d) Other"). Fall back to open-ended only when the problem is unusual or exploratory.
Propose 2-3 approaches — with trade-offs and recommendation
Present design in sections — get approval after each section
Define HOTL contracts — always include all three:
intent: [one sentence goal]
constraints: [what must not change/break]
success_criteria: [how we know it's done]
risk_level: low | medium | high
verify_steps:
- run tests: [test command]
- check: [what to inspect]
- confirm: [success signal]
approval_gates: [list of steps requiring human review]
rollback: [how to undo if something goes wrong]
ownership: [who is accountable]
Write design doc — path depends on scope:
feature scope: save to docs/designs/YYYY-MM-DD-<slug>-design.md (dated, tactical).phase scope: save to docs/designs/YYYY-MM-DD-phase-N-<slug>-design.md (dated, tactical).initiative scope: save to <designs_dir>/<topic>.md (undated, durable). <designs_dir> is the value returned by the step-2 resolver (default docs/designs). Follow the section structure of the strategic template loaded in step 2.Always write YAML frontmatter with the HOTL marker. Every saved design doc MUST start with frontmatter declaring at minimum:
---
design_type: <feature|phase|initiative> # match the scope chosen in step 2
created_at: YYYY-MM-DD
---
The design_type field is the deterministic signal that opts the doc into HOTL strict lint (document-lint.sh SKIPs unmarked docs). Without it, the doc is treated as non-HOTL and routes through generic AI review only.
Self-check the design doc — before presenting for human approval, review the saved design doc for: missing constraints, vague success criteria, contract mismatches (do verification steps actually test the intent?), risk_level appropriateness, and scope creep. Fix any issues found. Lightweight: 1-2 passes by default, max 3 only if real issues are found. Do not ask the user to review — this is an internal quality pass.
Run document-lint on the saved design doc as part of this self-check. Resolve scripts/document-lint.sh via the standard six-location order, then:
bash <resolved-document-lint.sh> <saved-design-path>
The lint emits two stable warning shapes for feature/phase docs:
category=structure severity=warning design_type=<resolved>
message="missing required section: ## <name>"
category=implementation-leakage severity=warning design_type=<resolved> line=<n>
message="<short description>"
Apply the 5-step self-check behavior to surfaced warnings:
document-lint.sh on the saved design doc.> Example: ...) or a section whose heading includes the word Example. All other findings must be fixed.Loop bound: This 5-step procedure runs at most once per self-check pass; the parent self-check (step 8) caps the total at 3 passes before stopping.
Lint exits 0 even when these warnings are emitted (warning-only contract this pass). Initiative / architecture / contract / reference docs receive neither check; the lint emits no category=structure or category=implementation-leakage lines for them.
Invoke writing-plans — transition to implementation planning (feature/phase scope only; initiative designs decompose into child phase plans that each go through their own brainstorming → writing-plans cycle).
For design_type ∈ {feature, phase} docs, write the body using these seven required sections in fixed order. Phase 1 lint enforces presence only; out-of-order or extra sections are not flagged this pass but the prose order below is the canonical convention:
## Intent Contract## Verification Contract## Governance Contract## Scope (in / out, table form preferred)## Decisions (# / decision / choice / rejected alternatives, table form preferred)## Surface (APIs / storage / components / files-touched, paragraph each)## Risks & Open QuestionsInitiative / architecture / contract / reference docs are durable references; they may legitimately include deeper technical shape. The lint defers any rules for them this pass.
A design doc says shape; the workflow file and the code say exact bytes. The following patterns belong in writing-plans output (or in code itself), not in the design — the lint warns when they appear in feature/phase design bodies:
| Pattern | Example | Why it doesn't belong in design |
|---|---|---|
| File:line references | cli.py:16, auth.ts:204 | Line numbers rot the moment code moves; pin to workflow steps instead. |
| Long fenced code blocks (>10 content lines) | a 30-line Python snippet | Design shows shape; full implementation goes in workflow tasks or code. |
Dense flag lines (≥6 -- tokens) | docker run --network=none --cap-drop=ALL --read-only --tmpfs /tmp ... | Argv assertions go in workflow steps and tests, not design surface. |
When a design doc must reference one of these (e.g., as an illustrative example), the warning is acceptable and the agent should justify it during the self-check (step 8) rather than rewrite the design.
design_type: (one of feature | phase | initiative | architecture | contract | reference) or hotl_managed: true. The brainstorming skill always writes the marker; ad-hoc docs in docs/designs/ are treated as non-HOTL by default.YYYY-MM-DD-*-design.md is the conventional pattern for HOTL-authored docs, but the lint still requires a frontmatter marker before applying HOTL rules. Without a marker, document-lint.sh SKIPs cleanly with a clear message and exits 0.hotl:document-review runs a generic-rubric AI review on them; document-lint.sh skips them. To opt a hand-authored doc into HOTL strict review, add design_type: <recognized-value> or hotl_managed: true to its frontmatter.risk_level: high = security, auth, privacy, billing (always human-gated)npx claudepluginhub yimwoo/hotl-plugin --plugin hotlGuides a disciplined Socratic brainstorming loop before any creative or implementation work: clarifying questions, pushback, trade-off analysis, design doc, user approval, then handoff to implementation.
Orchestrates design workflow from idea to docs: context gathering, clarification, brainstorming, design documentation, planning handoff. Use when starting any design process.
Guides structured brainstorming before any creative work: explores user intent, requirements, and design before implementation. Prevents wasted effort from unexamined assumptions.