Interview me about why this project is built on the technologies it is — language, runtime,
framework, meta-framework, and the load-bearing services/vendors — in one TUI question card, until I
could explain each choice to someone else. This is a different axis from grill-me-code-style
(which is how we write code here); this is why this stack, and how it works.
Read TEACH.md first (dedup). It's my growing learning record. Whatever decision or glossary
term is already in it, I already learned — do not re-teach or re-write it. Only grill me on, and
only append, what's genuinely new. If there's no TEACH.md yet, this is where it starts.
For each decision, the point is active recall + honest tradeoffs, never a sales pitch:
- Teach the tradeoff space in plain terms — what each option costs, and what you'd gain for
paying that cost. Concede the real strengths of the option we don't pick (Go really is great for
CLIs — just not here). A choice I can't argue against the alternative to, I don't understand.
- Make me pick, and WAIT on the card. Recommend one with your reasoning, but the call is mine. High friction.
- Then explain how it works — the mechanism of the thing we chose (what runs it, in what order),
concretely enough that I picture it.
Fire every unsettled stack decision in one AskUserQuestion (the host TUI question card).
Teach the tradeoff space in each option's detail. Recommended option first, marked (Recommended).
Do not drip questions one-by-one. A second card is only for questions that could not exist until
these answers landed.
Write only after I've decided. After the card returns, append each resolved decision to TEACH.md per
TEACH-FORMAT.md: a lean decision-record on top + a self-closing,
cited glossary below (every term explained, every term used inside a term also explained, one
short code snippet each). Skip anything already in TEACH.md.
What counts as a "stack decision" worth grilling
Walk these in dependency order inside one card (language first, then runtime, then framework, then vendors); skip any already settled in TEACH.md:
- Language — why this one, vs the obvious alternatives for this domain (TS vs Python vs Go vs
bash…). The deciding lens is usually substrate fit: what ground does the code already run on?
- Runtime / host — where it executes (Node · edge/worker · browser · native · a specific
vendor's runtime) and why that constrains everything above it.
- Framework & meta-framework — the "why a framework at all", then the specific pick and its
sibling (React vs Next vs Remix; Express vs Hono; Expo vs bare RN). Name what the meta-framework
adds over the base and whether this project needs it.
- Key services / vendors — the load-bearing external choices (DB, auth, hosting, queue, AI
provider…). Why this vendor, what it's traded against, and the lock-in cost.
Only the load-bearing decisions — the ones a new contributor would ask "why did they pick that?".
Don't grill me on every transitive dependency; a minor lib is a grill-me-code-style "how to use it"
concern, not a stack decision.
The loop — per decision
- Locate & dedup. Is this already in
TEACH.md? If yes, skip it (mention it's covered). Ground
the framing in PROJECT.md/CONTEXT.md — what is this project actually for? — so the tradeoff is
judged against our needs, not a generic benchmark.
- Teach the tradeoff space (KISS). 2–4 candidates, one honest line each: its strength, its cost
here, and what you'd gain for that cost. Never trust memory for a factual claim (a version, a
limit, "X doesn't support Y") — verify with WebSearch and cite the official doc.
- Recommend + show alternatives via one
AskUserQuestion. Put the real tradeoff in each option's
detail. Concede the rejected option's genuine strengths. Unsettled decisions share this card.
- Make me pick — and WAIT on the card. Don't write until I answer. If I'm unsure, teach a bit more, re-offer.
- Explain how the chosen thing works — the mechanism (what executes it, the order it runs in),
concrete enough to picture. Offer to hand a real deep-dive to the
teach skill (which builds
cited, multi-session lessons) — this skill teaches the decision, teach teaches the concept.
- Append to
TEACH.md per TEACH-FORMAT.md — lean decision + self-closing
cited glossary (code snippet per term), skipping terms already defined there.
The principle to keep surfacing: substrate fit
Most language/runtime decisions collapse to one question — what ground does the code already run
on? Match the language/tool to that ground before arguing syntax or speed. It's the through-line
that explains "why TS not Go/Python/bash" for a Node-hosted tool, and it flips cleanly when the ground
changes (data/ML → Python; a standalone perf-critical binary with no host → Go). Teach the principle,
not just the verdict, so I can re-derive the next decision myself.
Boundaries — three docs, three jobs
TEACH.md ← this skill writes here. My personal learning record: why-this-stack decisions +
a beginner-safe, self-closing glossary of general tech terms. Grows over time; deduped.
LANGUAGE.md ← leave it alone. It's the human↔agent bridge for domain vocabulary (the
project's ubiquitous language). Only touch it if a genuinely domain term surfaces — general tech
literacy ("what's an interpreter") is not domain language and belongs in TEACH.md.
- ADR (
docs/adr/) ← optional, only if I ask. The formal, maintainer-facing "why" for the repo.
When I want it too, write the decision there as well (terse, ADR-format); TEACH.md stays the
human-friendly teaching version.
Never
- Never sell a choice — teach the tradeoff and concede the alternative's real strengths, or I can't
trust the verdict.
- Never state a factual claim (version, limit, capability) from memory — verify and cite the official
doc.
- Never re-teach or re-write a decision/term already in
TEACH.md — read it first, append only what's
new.
- Never leave a term undefined inside another term's explanation — the glossary must close over itself.
- Never write to
TEACH.md before I've made the decision; never write general tech terms into
LANGUAGE.md (that doc is domain-only).
- Never write the code before I've confirmed the direction on a judgment decision.
1---2name: grill-me-stack3description: Grill the user on the TECHNOLOGY choices of a project — language, runtime, framework/meta-framework (e.g. React vs Next), and the key services/vendors — in one TUI question card, so they can EXPLAIN why, not just accept it. For each: teach the tradeoff space in plain terms (honest cost vs gain, alternatives conceded), make them pick, then explain how that piece's architecture actually works. Writes each outcome to TEACH.md as a lean decision-record + a self-closing, officially-cited glossary with a code snippet per term — deduped against what's already there. Leaves LANGUAGE.md for shared domain vocabulary and hands deep multi-session concept mastery to the `teach` skill. Use when the user asks "why this stack/framework/language/service and not the other", wants to understand or be able to explain their own tech choices, or says "grill me on the stack", "why TS not Python", "why React not Next", "teach me why we chose X". For code-style conventions use grill-me-code-style.4---56<what-to-do>78Interview me about **why this project is built on the technologies it is** — language, runtime,9framework, meta-framework, and the load-bearing services/vendors — in one TUI question card, until I10could **explain each choice to someone else**. This is a different axis from `grill-me-code-style`11(which is *how we write code here*); this is ***why this stack, and how it works***.1213**Read `TEACH.md` first (dedup).** It's my growing learning record. Whatever decision or glossary14term is already in it, I already learned — **do not re-teach or re-write it.** Only grill me on, and15only append, what's genuinely new. If there's no `TEACH.md` yet, this is where it starts.1617For each decision, the point is **active recall + honest tradeoffs**, never a sales pitch:18- **Teach the tradeoff space in plain terms** — what each option costs, and what you'd *gain* for19 paying that cost. Concede the real strengths of the option we *don't* pick (Go really is great for20 CLIs — just not here). A choice I can't argue against the alternative to, I don't understand.21- **Make me pick, and WAIT on the card.** Recommend one with your reasoning, but the call is mine. High friction.22- **Then explain how it works** — the mechanism of the thing we chose (what runs it, in what order),23 concretely enough that I picture it.2425Fire every unsettled stack decision in **one** `AskUserQuestion` (the host TUI question card).26Teach the tradeoff space in each option's detail. Recommended option first, marked `(Recommended)`.27Do not drip questions one-by-one. A second card is only for questions that could not exist until28these answers landed.2930**Write only after I've decided.** After the card returns, append each resolved decision to `TEACH.md` per31**[TEACH-FORMAT.md](TEACH-FORMAT.md)**: a **lean decision-record** on top + a **self-closing,32cited glossary** below (every term explained, every term *used inside* a term also explained, one33short code snippet each). Skip anything already in `TEACH.md`.3435</what-to-do>3637<supporting-info>3839## What counts as a "stack decision" worth grilling4041Walk these in dependency order inside **one** card (language first, then runtime, then framework, then vendors); skip any already settled in `TEACH.md`:42431. **Language** — why this one, vs the obvious alternatives for this domain (TS vs Python vs Go vs44 bash…). The deciding lens is usually **substrate fit**: what ground does the code already run on?452. **Runtime / host** — where it executes (Node · edge/worker · browser · native · a specific46 vendor's runtime) and why that constrains everything above it.473. **Framework & meta-framework** — the "why a framework at all", then the specific pick and its48 sibling (React vs Next vs Remix; Express vs Hono; Expo vs bare RN). Name what the meta-framework49 *adds* over the base and whether this project needs it.504. **Key services / vendors** — the load-bearing external choices (DB, auth, hosting, queue, AI51 provider…). Why this vendor, what it's traded against, and the lock-in cost.5253Only the **load-bearing** decisions — the ones a new contributor would ask "why did they pick that?".54Don't grill me on every transitive dependency; a minor lib is a `grill-me-code-style` "how to use it"55concern, not a stack decision.5657## The loop — per decision58591. **Locate & dedup.** Is this already in `TEACH.md`? If yes, skip it (mention it's covered). Ground60 the framing in `PROJECT.md`/`CONTEXT.md` — what is this project actually for? — so the tradeoff is61 judged against *our* needs, not a generic benchmark.622. **Teach the tradeoff space (KISS).** 2–4 candidates, one honest line each: its strength, its cost63 *here*, and what you'd gain for that cost. Never trust memory for a factual claim (a version, a64 limit, "X doesn't support Y") — **verify with WebSearch and cite the official doc.**653. **Recommend + show alternatives via one `AskUserQuestion`.** Put the real tradeoff in each option's66 detail. Concede the rejected option's genuine strengths. Unsettled decisions share this card.674. **Make me pick — and WAIT on the card.** Don't write until I answer. If I'm unsure, teach a bit more, re-offer.685. **Explain how the chosen thing works** — the mechanism (what executes it, the order it runs in),69 concrete enough to picture. Offer to hand a real deep-dive to the **`teach`** skill (which builds70 cited, multi-session lessons) — this skill teaches the *decision*, `teach` teaches the *concept*.716. **Append to `TEACH.md`** per [TEACH-FORMAT.md](TEACH-FORMAT.md) — lean decision + self-closing72 cited glossary (code snippet per term), skipping terms already defined there.7374## The principle to keep surfacing: substrate fit7576Most language/runtime decisions collapse to one question — **what ground does the code already run77on?** Match the language/tool to that ground before arguing syntax or speed. It's the through-line78that explains "why TS not Go/Python/bash" for a Node-hosted tool, and it flips cleanly when the ground79changes (data/ML → Python; a standalone perf-critical binary with no host → Go). Teach the principle,80not just the verdict, so I can re-derive the next decision myself.8182## Boundaries — three docs, three jobs8384- **`TEACH.md`** ← *this skill writes here.* My personal learning record: why-this-stack decisions +85 a beginner-safe, self-closing glossary of **general** tech terms. Grows over time; deduped.86- **`LANGUAGE.md`** ← *leave it alone.* It's the human↔agent bridge for **domain** vocabulary (the87 project's ubiquitous language). Only touch it if a genuinely *domain* term surfaces — general tech88 literacy ("what's an interpreter") is not domain language and belongs in `TEACH.md`.89- **ADR (`docs/adr/`)** ← *optional, only if I ask.* The formal, maintainer-facing "why" for the repo.90 When I want it too, write the decision there as well (terse, ADR-format); `TEACH.md` stays the91 human-friendly teaching version.9293## Never9495- Never sell a choice — teach the tradeoff and concede the alternative's real strengths, or I can't96 trust the verdict.97- Never state a factual claim (version, limit, capability) from memory — verify and cite the official98 doc.99- Never re-teach or re-write a decision/term already in `TEACH.md` — read it first, append only what's100 new.101- Never leave a term undefined inside another term's explanation — the glossary must close over itself.102- Never write to `TEACH.md` before I've made the decision; never write general tech terms into103 `LANGUAGE.md` (that doc is domain-only).104- Never write the code before I've confirmed the direction on a judgment decision.105106</supporting-info>