From odin
Generates divergent, grounded ideas from the codebase, critiques them via a reject-by-default gate, and writes surviving candidates plus rejection rationale to docs/ideation/.
How this skill is triggered — by the user, by Claude, or both
Slash command
/odin:ideateThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
`ideate` turns a vague subject into a bounded set of candidate directions that survived critique, with the rejected candidates kept and explained rather than dropped. Flow: ground the subject in the real codebase (dispatch-first), generate many candidates across parallel generators, critique all, then write the survivors plus the rejection rationale for the losers. It writes one surface by defa...
ideate turns a vague subject into a bounded set of candidate directions that survived critique, with the rejected candidates kept and explained rather than dropped. Flow: ground the subject in the real codebase (dispatch-first), generate many candidates across parallel generators, critique all, then write the survivors plus the rejection rationale for the losers. It writes one surface by default: the operating repo's docs/ideation/<slug>.md, markdown — always the canonical surface. The opt-in format:html flag additionally renders a human-reading HTML view derived from that markdown (references/html-rendering.md); it never replaces the markdown and never changes the default output. Idea selection is reject-by-default — a candidate earns a place by surviving the critique, never by default.
Op: of an ideate run is extend — a new ideation doc is a load-bearing capability added to the repo's decision record.
<auto_invoke> <trigger_phrases>
/ideate. The reject-by-default critique below still decides which candidates earn a place in the doc — auto-firing is permission to evaluate behind that gate, not permission to fabricate ideas to look productive. If the subject is unidentifiable, ask one clarifying question (or hand off to askme) and stop; do not generate against an unknown subject.
<manual_override>/ideate [subject] runs immediately without waiting for a trigger phrase. The remainder of $ARGUMENTS after stripping any leading flag is the subject. ideate format:html [subject] additionally renders the opt-in HTML view; the default stays markdown-only.</manual_override>
</auto_invoke>/ideate on a subject.askme's territory: it clarifies intent via Verbalized Sampling, it does not generate directions.strategy's territory; ideate diverges within an anchor, it does not set one.plan. ideate stops at survivors plus an askme handoff; it never plans.Don't bulk-load at start. Read at the step that needs it; pass the relevant content into any subagent you spawn.
references/ideation-method.md — the generate → critique → survivor-rationale method: the axis × frame divergence matrix, the verbatim generator and critic agent prompts, the survivor/rejection output schema, and the docs/ideation/<slug>.md section structure. Read at Phase 2 and Phase 5.references/divergent-ideation.md — the fleet dispatch, six frames, per-idea output contract, and post-merge synthesis for Phase 2. Read at Phase 2 before building dispatch prompts.references/ideation-sections.md — the section contract for the ideation artifact: metadata, Grounding Context, Topic Axes, Ranked Ideas, Rejection Summary. Read at Phase 5.references/post-ideation-workflow.md — adversarial filtering, auto-write, concise summary, and the askme handoff. Read after Phase 2 completes.references/web-research-cache.md — session-scoped web research cache for reuse across runs. Read at Phase 1.references/html-rendering.md — how to render the canonical markdown to a self-contained HTML view. Read only when a run carries format:html.Ungrounded ideation is fabrication. Before generating, ground the subject in the real codebase. Defer to ODIN's Dispatch-First protocol — escalate Explore agents by scope: 1 for a single known concern, 3 for multiple concerns or unknown scope, 5 for a cross-module or architectural survey. Auto-skip to direct reads only for a single file under 50 LOC. Seed the grounding scope with STRATEGY.md: the grounding Explore agent(s) read it (when present at the repo root) as optional upstream grounding so candidates stay on-anchor, and fold its diagnosis/guiding-policy into the returned summary; if absent, note that in one line and proceed — strategy grounding never blocks. (In an auto-skip run, the orchestrator reads it directly.)
Read references/web-research-cache.md to check for cached web research from prior runs in this session before dispatching any web research.
Explore agents are read-only and return architecture / pattern / constraint summaries with file:line cites. Use token-efficient discovery only: fd -e <ext> --max-results 50, ast-grep run -p 'PATTERN' -l <lang> -C 1 or git --no-pager grep -n -C 2 'pattern', preview with bat -P -p -n -r START:END file, structure with eza --tree --level=2. The output is a grounding summary every later candidate must cite against. If the scan cannot identify the subject, route to askme and stop.
Read references/ideation-method.md and references/divergent-ideation.md. Dispatch the generator subagents in one tool-call message, each seeded with the grounding summary and a distinct axis × frame assignment so they diverge instead of converging on the one salient reading. Each generator returns ~6–8 raw candidates, every candidate carrying a basis (file:line or external:<source>). Generators write nothing. Sequential dispatch invalidates the divergence contract.
Dispatch a critic over the full raw candidate pool. Every candidate is rejected by default; it survives only by clearing the critique filters — grounded (the cited basis holds), feasible (buildable in this repo), non-duplicate (not a restatement of a peer survivor), load-bearing (the direction would change a decision). The critic tags each candidate survive | reject with a one-line reason. A rejection without a reason is invalid output.
Dispatch a Reviewer subagent to audit the critic's verdicts against completeness / consistency / accuracy / scope. The Reviewer's output is the adjudicated set: the survivors and the rejection rationale for the losers. The Reviewer is the single adjudication authority — the orchestrator applies its set, does not rescue a rejected candidate, and does not re-litigate an accepted one.
docs/ideation/<slug>.md per the section structure in references/ideation-method.md and references/ideation-sections.md: subject + grounding summary, Survivors (each: idea, rationale, evidence cite), Rejected (each: idea + one-line rejection rationale — losers are explained, never silently dropped), and the next step. Markdown is the canonical surface, always written. Slug is the sanitized subject.mkdir -p docs/ideation/, then write docs/ideation/<slug>.md.format:html. Read references/html-rendering.md and render docs/ideation/<slug>.html as a self-contained view derived from the markdown read back in step 3; read it back and verify content parity with the markdown. Default (no flag) runs skip this step — the output is markdown only.git add docs/ideation/<slug>.md (and docs/ideation/<slug>.html when format:html). Never git add -A. Commit with an Op: extend trailer. Read-back precedes staging.Hand the survivors to askme to clarify intent on the chosen direction(s) before any planning. ideate ends here. Do not jump to plan — the chosen direction needs intent-clarification first.
extend. Every commit body carries Op: extend.file:line or external:<source>); a candidate with no basis is dropped before critique.docs/ideation/<slug>.md is written every run and is the source of truth the askme handoff reads. HTML is opt-in via format:html and only ever a view derived from that markdown — it never replaces it and never changes the default output.git add docs/ideation/<slug>.md (plus docs/ideation/<slug>.html when format:html), never git add -A, and only after reading each file back.askme, never straight to plan. If any rule here conflicts with ~/.claude/claude/system-prompt-baseline.md, the baseline wins.| Gate | Pass Criteria | Blocking |
|---|---|---|
| Subject identified | Phase 1 scan grounded the subject; a basis exists | Yes — else route to askme and stop |
| Strategy grounding | STRATEGY.md folded into the grounding scope if present; absence noted in one line; never blocked | No |
| Grounding dispatched | Explore agent(s) per the 1/3/5 escalation returned summaries | Yes |
| Single-message generation | All generator subagents launched in one tool-call message | Yes |
| Every candidate grounded | Each carries a file:line or external: basis | Yes — ungrounded candidates dropped |
| Critique applied to all | Every candidate has a survive | reject verdict + reason | Yes |
| Reviewer audit | Survivor set + rejection rationale audited before write | Yes |
| Canonical markdown written | docs/ideation/<slug>.md written every run, regardless of flag | Yes |
| HTML view parity | If format:html: <slug>.html derived from the markdown, single self-contained file, content parity | Yes when format:html |
| Doc read back | Each written file re-read after write to confirm it landed | Yes |
| Stage scope | Only this run's docs/ideation/<slug>.{md,html} staged; no git add -A | Yes |
One ideation doc per commit, Op: extend trailer in the body (a load-bearing addition to the repo's decision record). Stage only what ideate wrote — git add docs/ideation/<slug>.md (and docs/ideation/<slug>.html when format:html), never other dirty files, never git add -A. Read each file back before staging. Publish by the operating repo's normal flow.
plan. ideate ends at a survivor set handed to askme, not an implementation plan.git add -A. Stages unrelated dirty files. Stage what this run wrote by path.format:html) and always a view derived from the markdown; anything in the view but not the markdown is drift.askme — askme clarifies intent on a direction already in hand (Verbalized Sampling questions); it does not generate directions. ideate generates the candidate directions and routes its survivors to askme for intent-clarification before planning.strategy — strategy sets the anchor (the diagnosis and guiding policy the repo steers by); it is upstream grounding ideate reads, not a generator. ideate diverges within that anchor; strategy decides the anchor.plan — plan turns a chosen, clarified direction into implementation units. ideate never plans; it stops at survivors plus the askme handoff.ideate writes one surface by default: the operating repo's docs/ideation/<slug>.md (markdown, the canonical surface). With format:html it additionally writes docs/ideation/<slug>.html, a view derived from that markdown. Everywhere else it is read-only — Explore, generator, critic, and Reviewer subagents write nothing. Staging is scoped to the file(s) this run wrote; no writes to undefined or doubly-owned locations.
npx claudepluginhub outlinedriven/odin-claude-plugin --plugin odinGenerate and critically evaluate grounded improvement ideas for the current project by scanning the codebase. Use for 'what to improve', 'give ideas', or proactive project direction suggestions.
Generates grounded, ranked improvement ideas by scanning the codebase first, then critiquing them to surface the strongest directions before committing to planning.
Brainstorm future features and improvements based on the current codebase. This is the ideation step BEFORE writing specs (/writing-specs). Use when user asks to brainstorm ideas, generate feature ideas, explore improvements, or mentions 브레인스톰, 아이디어, 기능 제안, 개선 아이디어, 뭐 만들까, 앞으로 뭐 하지. Also trigger for cleanup requests like 브레인스톰 정리, 구현된 아이디어 정리. Proactively trigger when the user wants creative exploration of what COULD be built.