Design interview
Run a two-phase design-elicitation interview to fill or deepen a repo's DESIGN.md — Phase 1 elicits facts that can't be inferred from code and banks proto-principles; Phase 2 formalizes and stress-tests principles (IP/GP). Use when the user wants to articulate a repo's design, purpose, contract boundary, conventions, or guiding/inviolable principles, run a design interview, or enrich a thin DESIGN.md.From its SKILL.md
npx -y skills add jmgirard/cairn --skill design-interviewAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
8.6 KB, as published. Nobody here has run it
/design-interview — elicit design, then principles
Read ${CLAUDE_PLUGIN_ROOT}/skills/shared/tracking-rules.md first and obey
it (especially: question gates, contextual chip construction, the DESIGN.md
ownership boundary, and IP/GP numbering).
Phase header: # Design interview → ## Facts / ## Principles.
Chapter markers: mark a chapter at each phase transition (session start implicit).
This skill does what code-reading cannot: it interviews the human for the
intent behind the repo and writes it into cairn/DESIGN.md. It runs in two
phases with an explicit seam. Facts before principles is a one-way
dependency — commitments made before the fact base exists get reworked
once it does — so Phase 1 never asks the user to commit a principle; it only
banks proto-principles for Phase 2.
Run this on Fable. The interview is markedly better on Fable than on Opus — its questions land in plain language and its Phase-2 judgment is stronger (openac pilot, 2026-07-11; D-014). If the session is not already on Fable, recommend switching before starting; then proceed. This is the user's per-instance model choice (no cairn-spawned Fable subagent, so D-004 is unaffected), not a standing elevation.
Session start
Require cairn/DESIGN.md to exist; if there is no cairn/, stop and route
to /cairn-init (scaffold first, interview second). Read the current
DESIGN.md, cairn/DECISIONS.md, and — so every option can be grounded in
evidence — the repo itself: DESCRIPTION/manifest, the exported surface,
Imports/dependencies, installer/platform coverage, and recent git log.
For a repo spanning many files, fan out [S]-tagged Explore subagents with
specific focuses and require file:line citations. Draft your grounded
option sets internally before asking anything.
Also check for a migration-preserved numbered-principles file — a
note-and-leave doc at a cairn/ path (e.g. cairn/PRINCIPLES.md) kept with
numbering and basename intact because package code cites it by number; the
migration ledger and the DESIGN seed point to it. When present, announce
that this run will ingest it — see "Ingesting a note-and-leave principles
file" below.
Phase 1 — Facts
Elicit what cannot be inferred from the repo; do not classify anything. Run a series of batched AskUserQuestion rounds (2–5 questions each, every option carrying a marked recommendation). Five disciplines, all mandatory:
- Elicit, don't classify. Ask for intent the code can't show: who the package is for; where its job ends (the contract boundary); which platforms are commitments vs. best-effort; what bar a new capability must clear to earn a place; distribution ambition; API-stability posture; dependency posture.
- Chain rounds on prior answers. Each round consumes the last — e.g. "You said the roster grows opportunistically; what should the bar be?" Batch only what is mutually independent within a round.
- Ground every option in repo evidence. Cite real files, functions,
Imports, installer coverage, recent commits in the option text
(e.g. "
os_fix_csvis the seed of this family"). - Options are hypotheses that do work. Each option states an implication or consequence ("this sets the API-stability bar"), never a generic label.
- Ask the wart question. "What warts or fragilities do you know about that code-reading wouldn't reveal?" — with options that are evidence-based guesses (recent fixes, unmaintained upstreams, platform-biased testing).
Bank, don't decide. When an answer implies a principle, name it and add it to a running banked-candidates ledger ("sounds like a principle — banking it for the principles round"); never ask for the commitment now.
The seam
At the phase boundary: summarize what was heard; write the DESIGN draft (Purpose & Scope, contract boundary, conventions) plus the banked-candidates ledger to disk; checkpoint-commit (stop points are commit points, so a later session resumes statelessly); then a continue/stop decision chip —
- Continue into principles → Phase 2 (recommended)
- Pause here — stop; resume statelessly later
Continuous by default, pausable without loss. Both phases run in one session — best on Fable (see the note at the top).
Phase 2 — Principles
Formalize and pressure-test. Sources for candidates: the banked ledger, plus two the interview must add itself —
- Mine git history for implicit principles. Generalize ad-hoc fixes into candidates (a "skip files without audio" fix → "resilient batches").
- Derive candidates from the domain, not just the code. State forward consequences (irreplaceable recordings → inputs-sacrosanct; IRB/consent → local-only processing, which constrains future remote-inference wrappers).
Then propose and test:
- Every candidate arrives classified. Proposed strength — IP (inviolable) / GP (guiding) / skip — with a marked recommendation, and adjacent-but-separate matters fenced off explicitly ("output-overwrite defaults are a separate, tradeable matter") so each question stays decidable.
- Stress-test the adopted set against phase-1 decisions. Surface collisions between separately-endorsed commitments ("thin wrappers" vs. a "tidy outputs" choice → where's the line?).
- Separate essence from accident. Ask whether a principle is the capability or the current idiom, citing recorded decisions as leverage.
- Probe the scope of each IP. Offer extend / keep / downgrade for every inviolable.
Write-out. Record the settled principles in cairn/DESIGN.md under
Design Principles: the IP block first, then GPs; numbers run within each
type and are never reused or renumbered (retiring one takes a D-entry).
A genuine cross-cutting choice with rationale (not a deferral) becomes a
cairn/DECISIONS.md D-entry. Deferred candidates become ROADMAP
candidate rows — nothing the user surfaced is silently dropped.
Ingesting a note-and-leave principles file
A Lineage A migration may have preserved a numbered-principles doc at a
cairn/ path with numbering and basename intact, because in-code citations
(PRINCIPLES.md #N — 70× across 29 files in the M41 intraclass pilot) make
folding it into DESIGN's IP/GP a renumbering that strands every ref (the
migration protocol's forced note-and-leave). When session start found one,
run these additions on top of the normal two phases:
- Every numbered principle enters Phase 2 as a candidate. Each arrives
classified like any other candidate (proposed IP / GP / skip with a marked
recommendation) and carries its
#Nlineage in the option text, so the user always sees which preserved principle is being formalized. The banked ledger, history mining, and domain derivation still run — ingestion adds candidates, it never replaces the other sources. - Conservation: no ingested principle is silently dropped. Every
#Nends the interview with an explicit disposition — formalized as an IP or GP, merged into another candidate, or retired at the user's say-so (IP3). A#Nwith no disposition is an unfinished interview, not a skip. - Write-out records the lineage map. Under Design Principles in the
target
cairn/DESIGN.md, record an old-#N→ new-id mapping table (#N → IPn | GPn | retired | merged into …) alongside the principles, so every in-code citation has a written bridge to its formalized successor. - The preserved file stays intact. Its numbering and basename are never edited, renumbered, or deleted by this interview (IP4) — in-code citations must keep resolving against it until the repoint ships.
- Bank the repoint; never touch code. The eventual in-code repoint
(
PRINCIPLES.md #N→DESIGN.md IPn/GPn) is a target-repo code milestone: bank it as a candidate row in that repo's ROADMAP at write-out. The interview itself performs no code edits.
Routing
Close with the close block (tracking-rules "Question gates and phase
closes") composed from what was produced — recap, status line, fenced next
command(s) with plain labels (e.g. /milestone-plan to plan the first
milestone, /milestone for a health check), and the adjust-or-/clear
safety line; no chip.