ideation
Idea-centric brainstorming on a per-topic SQLite logbook.
What it does
ideation runs idea-centric brainstorming against a per-topic SQLite logbook so ideas, frames, facts, lineage, assessments, and operator runs all persist across sessions. Atomic operators — generate, transform, evaluate, validate, decide — compose into playbooks covering brainstorming, naming, developing or combining ideas, stress-testing candidates, reframing problems, and picking final directions. Each topic lives at ./.logbooks/ideation/<topic-slug>/logbook.sqlite under the current repo root, so a follow-up prompt resumes the same authoritative state instead of restarting from a blank canvas. The plan a planner subagent produces for any single invocation is ephemeral; the ideas it touches are first-class.
Ideas are first-class. Operators are second-class. The plan is ephemeral.
—
SKILL.md:16
How it does it — operators + playbooks (not a fixed pipeline)
The operator library
frame.*
- context_scout
- discover
- historian
- reframe
generate.*
- seed
- fresh
transform.*
- scamper
- invert
- cross_domain
- hybridize
- john
- ratchet
- refine
evaluate.*
- hats
- tension
- taste_check
- criteria
- score
- brilliance
validate.*
- web_stress
- proof_search
decide.*
- shortlist
- compare
- converge
- export
- route
A playbook composes operators
A planner subagent picks an ordered list of operator calls from the library above. Here is what the default starter playbook actually does on a fresh topic:
1. frame.context_scout → writes 1 row to `frames`, marks active
2. generate.seed (×N) → writes ~20 rows to `ideas` with kind=seed, source=ideator
3. evaluate.criteria → writes per-idea rows to `assessments` (metric, score, rationale)
4. decide.compare → writes a markdown report to disk; no schema change
The full playbook catalog: starter, quick_seed, naming, deep_explore, followup_develop, hybridize_pair, stress_test_shortlist, reframe_and_regenerate, converge_existing, route (with flags --loop, --cheap, --with-criteria, --iterations N).
Every step writes to the logbook
Every operator writes its output into the same SQLite database, with provenance back to the run that produced it. Example — transform.scamper producing a child idea with a lineage edge:
-- transform.scamper produces a child idea with a lineage edge:
INSERT INTO ideas (idea_id, title, description, kind, source, parent_id)
VALUES (?, ?, ?, 'variant', 'transform.scamper', ?);
INSERT INTO lineage (parent_id, child_id, relation)
VALUES (?, ?, 'derived_from');
Operator runs are also rows: every call writes to operator_runs with params, cohort_ids, status, user_approved.
Schema overview
| Table | Purpose |
|---|---|
topic_meta |
Singleton — slug, description, owner, created_at |
frames |
Versioned problem-space context (problem_statement, root_causes, hmw_questions, triz_contradiction, ifr_statement); exactly one active=1 |
facts |
Citable context (claim, source_url, confidence, stance) |
ideas |
The spine (title, description, kind, tag, temperature_zone, status, evidence_state, next_action) |
lineage |
Directed parent→child edges (relation: derived_from / hybrid_of / refinement_of / counter_of) |
assessments |
Per-metric judgments as rows, not columns — adding a criterion = new metric value, not new column |
operator_runs |
Action log — every operator call writes one row |
Assessments are rows, not columns. A new criterion is a new metric value, not a new column. (ideation.logbook.md:36)