Ask Matt
You don't remember every skill, so ask.
A flow is a path through the skills. Most paths run along one main flow,
and two on-ramps merge onto it. Everything else is standalone, or a
vocabulary layer that runs underneath. Delivery tooling, including stacked PRs,
sits underneath the main flow rather than replacing it.
The main flow: idea → ship
The route most work travels. You have an idea and want it built.
/grill-with-docs sharpens the idea by interview. Start here whenever
you are working in a working directory: it's stateful, retaining what it
learns in CONTEXT.md and ADRs. (No working directory? Use /grill-me
instead, covered under Standalone. Both run the same /grilling primitive;
grill-with-docs is the one that leaves a paper trail.)
Branch: can you settle every question in conversation? If a question
needs a runnable answer (state, business logic, a UI you have to see), detour
through a prototype, bridged by /handoff in both directions:
/handoff out, then open a fresh session against that file;
/prototype to answer the question with throwaway code;
/handoff back what you learned, and reference it from the original idea
thread.
Branch: is this a multi-session build?
- Yes →
/to-spec (turn the thread into a spec), then /to-tickets to
split it into tracer-bullet tickets, each declaring its blocking edges.
On a local tracker that's one file per ticket under
.scratch/<feature>/issues/, worked blockers-first by hand; on a real
tracker the edges become native blocking links, so any ticket whose
blockers are done can be grabbed: kick off /implement per ticket,
clearing context between each one. Each ticket is self-contained, so the
last one's context is disposable.
- No →
/implement right here, in the same context window.
/implement is the user-invoked orchestrator. For non-trivial tickets it
dispatches one isolated implementer subagent, which drives TDD at the agreed
seams; the orchestrator then calls the Skill tool with "code-review" against
the fixed point before delivery. Reach for /tdd on its own when you just
want to build a concrete behaviour test-first without a full spec, and
/code-review on its own whenever you want to review a branch or PR against
a fixed point.
Delivery topology
After /to-tickets has produced and the user has approved the real blocker
graph, choose the PR delivery topology:
- Linear dependency chain → invoke
/implement in stacked mode and use the
gh-stack skill for branch and PR operations.
- Fork or join with one final merge into trunk → invoke
/implement in
integration mode. Create one durable integration branch and target parallel
ticket PRs at it; the final integration PR targets trunk and closes the
spec/PRD.
- Fork or join without a final integration PR → ask whether to serialize the
work into one linear stack or preserve parallelism with independent/dependent
PRs.
gh-stack supports only one parent and one child per stack.
- Existing PR or branch → adopt compatible existing state with
gh stack init <branch> or use gh stack link only when branches are already
managed by an external tool. Never recreate an existing PR just to introduce
a stack.
The issue dependency graph remains the source of truth. A stack ordering is a
delivery decision and must not silently rewrite a ticket's Blocked by edges.
When the user asks for parallel worktrees and a single final PRD merge, the
integration branch is the default delivery topology. Child PRs target the
integration branch and use Refs #<ticket>; only the final PR targets trunk and
uses Closes #<spec>.
When using a stack, each fresh /implement context must run
gh stack view --json and verify the current parent before coding. When using
integration delivery, each fresh context must verify the integration branch and
that all ticket blockers are merged into it. The branch state is durable;
conversation context is not.
Context hygiene
Keep steps 1–3 in one unbroken context window (don't compact or clear until
after /to-tickets) so the grilling, spec, and tickets all build on the same
thinking. Each /implement then starts fresh, working from the ticket and the
durable repository/issue state.
The limit on this is the smart zone:
the window (~150k tokens on state-of-the-art models) within which the model
still reasons sharply. If a session approaches it before /to-tickets, don't
push on degraded: compact at the nearest phase boundary and carry on.
On-ramps
A starting situation that generates work, then merges onto the main flow.
Bugs and requests piling up → /triage. It moves issues through triage
roles and produces agent-ready issues, which /implement later picks up.
Triage is only for issues you didn't create: bug reports, incoming
feature requests, anything that arrives raw. Tickets that /to-tickets
produced are already agent-ready, so don't triage them.
Something's broken → /diagnosing-bugs. For the hard ones: the bug that
resists a first glance, the intermittent flake, the regression that crept in
between two known-good states. It refuses to theorise until it has a tight
feedback loop (one command that already goes red on this bug), then fixes
with a regression test.
A huge, foggy effort: a greenfield project or a huge feature build, too big
for one session → /wayfinder, the most cognitively demanding flow here.
When the way from here to the destination isn't visible yet, it charts a
shared map of decision tickets on the issue tracker and resolves them
one at a time, producing decisions, not deliverables, until the fog is
pushed back and the way is clear. Where /grill-with-docs sharpens an idea
you can hold in one session, wayfinder is for the idea you can't, and it's
slower and denser, so save it for exactly that, never a well-scoped feature.
When the map clears, it hands off, it doesn't build: merge onto the main flow
at /to-spec, which collapses the map's linked decisions into a buildable
plan, then /to-tickets and /implement as usual. Looping the map straight
into /implement skips that collapse and throws the linked detail away, so go
straight to /implement only when the effort turned out genuinely small.
Codebase health
Not feature work, just upkeep.
/improve-codebase-architecture runs whenever you have a spare moment to keep
the codebase good for agents to operate in. It surfaces deepening
opportunities; picking one generates an idea you can take into the main
flow at /grill-with-docs. It's the survey that finds the candidates;
/codebase-design is the bench you design the chosen one on.
Vocabulary underneath
Two model-invoked references that run beneath the other skills, each the
single source of truth for its vocabulary. Reach for them directly when the
words, not the process, are the problem; or let the skills above pull them
in.
/domain-modeling sharpens the project's domain language: challenge a
fuzzy term, resolve an overloaded word ("account" doing three jobs), and
record a hard-to-reverse decision as an ADR. It's the active discipline
/grill-with-docs drives to keep CONTEXT.md a clean glossary.
/codebase-design is the deep-module vocabulary (module, interface, depth,
seam, adapter, leverage, locality) for designing a module's shape: a lot of
behaviour behind a small interface at a clean seam. /tdd and
/improve-codebase-architecture both speak it.
Phase boundaries
A phase is a chunk of work inside a session: the grilling, the
implementation, the QA. At the boundary between two of them you have five
options, and picking between them is the fuzziest decision in this whole map.
- Continue: stay put. Costs nothing, loses nothing.
/clear: empty the window when nothing here matters to what's next.
/handoff: write a portable markdown file for a new harness, directory,
colleague, or side task.
- Subagent: send a tightly scoped task to its own window and get a report
back.
/compact: compress this context and seed a fresh session. It is the
default at the bottom of the tree, not the first reach.
Read PHASE-BOUNDARIES.md for the ordered tree. Make the
decision at the boundary; mid-phase, continue or split the remaining work into
subagents.
Standalone
Off the main flow entirely.
/grill-me is the same relentless interview as /grill-with-docs, but
stateless: it saves nothing locally and builds no CONTEXT.md. Reach for
it when you are not working in a working directory.
/grilling is the interview primitive itself: rounds, the frontier, facts are
the agent's job and decisions are yours. Reach for it directly only when you
want the interview with no wrapper around it.
/resolving-merge-conflicts works an in-progress merge or rebase conflict
hunk by hunk, resolving by intent traced to each side's primary source.
/prototype is a small, throwaway program that answers one design question.
Its answer folds into the real code; keep the prototype as a primary source
when the implementation issue points to it.
/research delegates reading legwork to a background agent and leaves a
cited Markdown file in the repo. Research feeds the main flow; it does not
replace it.
/to-questionnaire writes a questionnaire when the missing information is in
someone else's head rather than yours or the codebase.
/wizard covers steps only a human can perform, such as provisioning,
credentials, or a one-off cutover.
/wait-what re-pitches a message that did not land, using the project's
vocabulary.
/teach supports learning a concept over multiple sessions in the current
directory.
/writing-for-agents is the reference for writing documents agents consume:
skills, AGENTS.md, and pointed-at docs.
Precondition
/setup-matt-pocock-skills runs before the first engineering flow to configure
the issue tracker, triage labels, and doc layout the other skills assume. Custom
issue trackers also work.
1---2name: ask-matt3description: Ask which skill or flow fits your situation. A router over the skills in this repo.4---56# Ask Matt78You don't remember every skill, so ask.910A **flow** is a path through the skills. Most paths run along one **main flow**,11and two **on-ramps** merge onto it. Everything else is standalone, or a12vocabulary layer that runs underneath. Delivery tooling, including stacked PRs,13sits underneath the main flow rather than replacing it.1415## The main flow: idea → ship1617The route most work travels. You have an idea and want it built.18191. **`/grill-with-docs`** sharpens the idea by interview. Start here whenever20 you are **working in a working directory**: it's stateful, retaining what it21 learns in `CONTEXT.md` and ADRs. (No working directory? Use `/grill-me`22 instead, covered under Standalone. Both run the same `/grilling` primitive;23 `grill-with-docs` is the one that leaves a paper trail.)242. **Branch: can you settle every question in conversation?** If a question25 needs a runnable answer (state, business logic, a UI you have to see), detour26 through a prototype, bridged by `/handoff` in both directions:27 - `/handoff` out, then open a fresh session against that file;28 - `/prototype` to answer the question with throwaway code;29 - `/handoff` back what you learned, and reference it from the original idea30 thread.313. **Branch: is this a multi-session build?**32 - **Yes** → `/to-spec` (turn the thread into a spec), then `/to-tickets` to33 split it into tracer-bullet tickets, each declaring its **blocking edges**.34 On a local tracker that's one file per ticket under35 `.scratch/<feature>/issues/`, worked blockers-first by hand; on a real36 tracker the edges become native blocking links, so any ticket whose37 blockers are done can be grabbed: kick off `/implement` per ticket,38 clearing context between each one. Each ticket is self-contained, so the39 last one's context is disposable.40 - **No** → `/implement` right here, in the same context window.4142 `/implement` is the user-invoked **orchestrator**. For non-trivial tickets it43 dispatches one isolated implementer subagent, which drives TDD at the agreed44 seams; the orchestrator then calls the Skill tool with "code-review" against45 the fixed point before delivery. Reach for `/tdd` on its own when you just46 want to build a concrete behaviour test-first without a full spec, and47 `/code-review` on its own whenever you want to review a branch or PR against48 a fixed point.4950## Delivery topology5152After `/to-tickets` has produced and the user has approved the real blocker53graph, choose the PR delivery topology:5455- **Linear dependency chain** → invoke `/implement` in stacked mode and use the56 `gh-stack` skill for branch and PR operations.57- **Fork or join with one final merge into trunk** → invoke `/implement` in58 integration mode. Create one durable integration branch and target parallel59 ticket PRs at it; the final integration PR targets trunk and closes the60 spec/PRD.61- **Fork or join without a final integration PR** → ask whether to serialize the62 work into one linear stack or preserve parallelism with independent/dependent63 PRs. `gh-stack` supports only one parent and one child per stack.64- **Existing PR or branch** → adopt compatible existing state with65 `gh stack init <branch>` or use `gh stack link` only when branches are already66 managed by an external tool. Never recreate an existing PR just to introduce67 a stack.6869The issue dependency graph remains the source of truth. A stack ordering is a70delivery decision and must not silently rewrite a ticket's `Blocked by` edges.7172When the user asks for parallel worktrees and a single final PRD merge, the73integration branch is the default delivery topology. Child PRs target the74integration branch and use `Refs #<ticket>`; only the final PR targets trunk and75uses `Closes #<spec>`.7677When using a stack, each fresh `/implement` context must run78`gh stack view --json` and verify the current parent before coding. When using79integration delivery, each fresh context must verify the integration branch and80that all ticket blockers are merged into it. The branch state is durable;81conversation context is not.8283## Context hygiene8485Keep steps 1–3 in **one unbroken context window** (don't compact or clear until86after `/to-tickets`) so the grilling, spec, and tickets all build on the same87thinking. Each `/implement` then starts fresh, working from the ticket and the88durable repository/issue state.8990The limit on this is the **[smart zone](https://www.aihero.dev/ai-coding-dictionary/smart-zone)**:91the window (~150k tokens on state-of-the-art models) within which the model92still reasons sharply. If a session approaches it before `/to-tickets`, don't93push on degraded: compact at the nearest phase boundary and carry on.9495## On-ramps9697A starting situation that generates work, then merges onto the main flow.9899- **Bugs and requests piling up** → `/triage`. It moves issues through triage100 roles and produces agent-ready issues, which `/implement` later picks up.101102 Triage is only for issues **you didn't create**: bug reports, incoming103 feature requests, anything that arrives raw. Tickets that `/to-tickets`104 produced are already agent-ready, so don't triage them.105106- **Something's broken** → `/diagnosing-bugs`. For the hard ones: the bug that107 resists a first glance, the intermittent flake, the regression that crept in108 between two known-good states. It refuses to theorise until it has a **tight109 feedback loop** (one command that already goes red on *this* bug), then fixes110 with a regression test.111112- **A huge, foggy effort: a greenfield project or a huge feature build, too big113 for one session** → `/wayfinder`, the most cognitively demanding flow here.114 When the way from here to the destination isn't visible yet, it charts a115 **shared map** of **decision tickets** on the issue tracker and resolves them116 one at a time, producing **decisions, not deliverables**, until the fog is117 pushed back and the way is clear. Where `/grill-with-docs` sharpens an idea118 you can hold in one session, wayfinder is for the idea you can't, and it's119 slower and denser, so save it for exactly that, never a well-scoped feature.120121 When the map clears, it hands off, it doesn't build: merge onto the main flow122 at `/to-spec`, which collapses the map's linked decisions into a buildable123 plan, then `/to-tickets` and `/implement` as usual. Looping the map straight124 into `/implement` skips that collapse and throws the linked detail away, so go125 straight to `/implement` only when the effort turned out genuinely small.126127## Codebase health128129Not feature work, just upkeep.130131- `/improve-codebase-architecture` runs whenever you have a spare moment to keep132 the codebase good for agents to operate in. It surfaces **deepening133 opportunities**; picking one _generates an idea_ you can take into the main134 flow at `/grill-with-docs`. It's the survey that finds the candidates;135 `/codebase-design` is the bench you design the chosen one on.136137## Vocabulary underneath138139Two model-invoked references that run **beneath** the other skills, each the140single source of truth for its vocabulary. Reach for them directly when the141**words**, not the process, are the problem; or let the skills above pull them142in.143144- `/domain-modeling` sharpens the project's *domain* language: challenge a145 fuzzy term, resolve an overloaded word ("account" doing three jobs), and146 record a hard-to-reverse decision as an ADR. It's the active discipline147 `/grill-with-docs` drives to keep `CONTEXT.md` a clean glossary.148- `/codebase-design` is the deep-module vocabulary (module, interface, depth,149 seam, adapter, leverage, locality) for designing a module's *shape*: a lot of150 behaviour behind a small interface at a clean seam. `/tdd` and151 `/improve-codebase-architecture` both speak it.152153## Phase boundaries154155A **phase** is a chunk of work inside a session: the grilling, the156implementation, the QA. At the **boundary** between two of them you have five157options, and picking between them is the fuzziest decision in this whole map.158159- **Continue**: stay put. Costs nothing, loses nothing.160- **`/clear`**: empty the window when nothing here matters to what's next.161- **`/handoff`**: write a portable markdown file for a new harness, directory,162 colleague, or side task.163- **Subagent**: send a tightly scoped task to its own window and get a report164 back.165- **`/compact`**: compress this context and seed a fresh session. It is the166 default at the bottom of the tree, not the first reach.167168Read [PHASE-BOUNDARIES.md](PHASE-BOUNDARIES.md) for the ordered tree. Make the169decision at the boundary; mid-phase, continue or split the remaining work into170subagents.171172## Standalone173174Off the main flow entirely.175176- `/grill-me` is the same relentless interview as `/grill-with-docs`, but177 **stateless**: it saves nothing locally and builds no `CONTEXT.md`. Reach for178 it when you are not working in a working directory.179- `/grilling` is the interview primitive itself: rounds, the frontier, facts are180 the agent's job and decisions are yours. Reach for it directly only when you181 want the interview with no wrapper around it.182- `/resolving-merge-conflicts` works an in-progress merge or rebase conflict183 hunk by hunk, resolving by **intent** traced to each side's primary source.184- `/prototype` is a small, throwaway program that answers one design question.185 Its answer folds into the real code; keep the prototype as a primary source186 when the implementation issue points to it.187- `/research` delegates reading legwork to a **background agent** and leaves a188 cited Markdown file in the repo. Research feeds the main flow; it does not189 replace it.190- `/to-questionnaire` writes a questionnaire when the missing information is in191 someone else's head rather than yours or the codebase.192- `/wizard` covers steps only a human can perform, such as provisioning,193 credentials, or a one-off cutover.194- `/wait-what` re-pitches a message that did not land, using the project's195 vocabulary.196- `/teach` supports learning a concept over multiple sessions in the current197 directory.198- `/writing-for-agents` is the reference for writing documents agents consume:199 skills, `AGENTS.md`, and pointed-at docs.200201## Precondition202203`/setup-matt-pocock-skills` runs before the first engineering flow to configure204the issue tracker, triage labels, and doc layout the other skills assume. Custom205issue trackers also work.