Minor Changes
-
#406
930a450Thanks @mattpocock! - Bring theask-mattrouter up to date with the full skill set. It now maps five skills it was missing:tdd(woven into the main flow as the red-green engineimplementdrives),diagnosing-bugs(a new "Something's broken" on-ramp — there was previously no route for a bug),domain-modelingandcodebase-design(a new "Vocabulary underneath" section), andgrilling(the shared interview primitive).prototypeis fleshed out as a standalone and the description broadens from "user-invoked skills" to "the skills". A maintenance rule is added toCLAUDE.mdso any future skill add/rename/remove or flow change triggers anask-mattre-check, beside the existing docs-page re-sync rule. -
#464
639df6eThanks @mattpocock! - Promote and hardencode-review. The in-progressreviewskill is renamed tocode-reviewand moved fromin-progress/intoengineering/: it now ships in the plugin, is listed in the top-level and Engineering READMEs (Model-invoked), and has a docs page atdocs/engineering/code-review.md. The/implementskill and docs point at/code-review.It also gains an always-on Fowler smell baseline on its Standards axis — a curated ~12 high-signal "Bad Smells in Code" (Mysterious Name, Duplicated Code, Feature Envy, Data Clumps, Primitive Obsession, Repeated Switches, Shotgun Surgery, Divergent Change, Speculative Generality, Message Chains, Middle Man, Refused Bequest) inlined into
SKILL.mdas a fixed baseline alongside whatever the repo documents, not a new third axis. Two binding rules keep it safe: a documented repo standard overrides the baseline, and every smell is reported as a judgement call, never a hard violation. -
#464
639df6eThanks @mattpocock! - Sharpengrillingon two fronts.A confirmation gate. The agent won't enact the plan until you confirm the shared understanding has been reached — turning the skill's existing "shared understanding" completion criterion into an explicit stop-gate. The
descriptionalso recruits the pretrainedgrillleading word ("Grill the user relentlessly") to sharpen invocation, and the docs page is re-synced.Facts vs. decisions. Grilling now splits facts (look them up — explore the codebase) from decisions (put each one to the human and wait for their answer). The old blanket line — "if a question can be answered by exploring the codebase, explore the codebase instead" — was written for the live-human case, but once another skill runs grilling inside a resolve-the-ticket frame it read as license to answer decisions autonomously too. Separating the two keeps a grilling agent from racing ahead and answering its own questions.
-
#463
af6d692Thanks @mattpocock! - Add two adjacent Steering failure modes towriting-great-skills, both about how language you think of as "off" still steers the agent. Negation — the elephant — is steering by prohibition: naming what not to do drags the forbidden behaviour into context and makes it more available, not less (don't think of an elephant), so the cure is to prompt the positive. Negative Space — the void — is blindness to the steering done by what you leave out: every decision a skill declines is delegated to the agent's priors rather than left neutral, so the cure is to read a draft for its silences and decide each omission deliberately (fill it, or leave it open as a real branch). Kept as two entries, not one — they carry different diagnostics and different cures — each a fullGLOSSARY.mdentry plus aSKILL.mdfailure-mode bullet, matching how every other failure mode is carried. -
850873cThanks @mattpocock! - Make theprototypeskill model-invoked, so the agent can reach for it autonomously (and other skills can too). Its description is rewritten around the leading word prototype — throwaway code that answers a design question — with one trigger per branch (state/logic sanity-check, or UI exploration). -
#409
0d74d01Thanks @mattpocock! - Add theresearchskill — a small, model-invoked skill that spins up a background agent to investigate a question against primary sources (official docs, source code, specs, first-party APIs), then leaves a single cited Markdown file wherever the repo keeps such notes. It's delegable reading legwork: you keep working while it reads, and get back a document to grill, plan, or design against. Listed in the top-level and Engineering READMEs (Model-invoked), added to.claude-plugin/plugin.json, given a docs page atdocs/engineering/research.md, and routed as a Standalone inask-matt. -
#469
a0329baThanks @mattpocock! - Split theto-issuesskill into a lean Process and a Reference section, and teach it to handle a wide refactor — a single mechanical change (like renaming a column) whose blast radius fans across the whole codebase, breaking thousands of call sites at once so no vertical slice can land green. The drafting step now points at two co-located reference blocks: the Vertical slice rules for ordinary tracer bullets, and Wide refactors, which slices the change by expand–contract (expand the new form beside the old, migrate call sites in batches sized by blast radius, then contract the old form away) so CI stays green batch to batch — or, when it can't, only at a final integrate-and-verify issue. The issue body template moves into Reference too. -
#464
386d4ffThanks @mattpocock! - Unify the planning skills.to-prdis renamed toto-spec— "spec" is now the single through-line term (it still opens with "you may know this document as a PRD" for discoverability).to-planandto-issuesare merged into oneto-ticketsskill, andto-issuesis deleted.to-ticketsbreaks a plan, spec, or conversation into a set of tickets — tracer-bullet vertical slices, each declaring its blocking edges. That one artifact reads two ways depending on the tracker/setup-matt-pocock-skillsconfigured: a local file (tickets.md) writes the edges as text and you work it top-to-bottom by hand; a real tracker writes them as native blocking links, so any ticket whose blockers are done is on the frontier and several agents can run at once. The edges live in the ticket either way — the medium only decides whether anything acts on them in parallel.Publishing prefers the tracker's native sub-issues for parent → slice and native blocking edges for
Blocked bywhere the tracker supports them, keeping the## Parent/## Blocked bybody sections as the fallback. The "What to build" template points at where a/prototype's code lives rather than inlining a snippet from it.ask-matt's main flow now routesidea → /to-spec → /to-tickets → /implement, and there are human-facing docs pages atdocs/engineering/to-spec.mdanddocs/engineering/to-tickets.md. -
#464
0557d57Thanks @mattpocock! - Settle wayfinder's place in the docs as a situational on-ramp, not the new main entry flow — the grill-led idea → ship chain stays the front door (crowning wayfinder as the default spine is a v2-sized move, not a 1.1). Theask-mattrouter now names wayfinder's concrete triggers — a greenfield project or a huge feature build, too big for one session — and the two grill front doors (grill-me,grill-with-docs) signpost up to wayfinder for the effort that's too big to hold in one session, so the on-ramp is discoverable from where a reader actually starts. -
#464
639df6eThanks @mattpocock! - Graduate and reframewayfinder— the skill for planning a huge chunk of work, more than one agent session can hold. It moves out ofin-progress/intoengineering/(plugin entry, top-level + Engineering READMEs under User-invoked, a docs page atdocs/engineering/wayfinder.md, and a route inask-matt), landing as a mature skill. The rename and reframe that got it there:decision-mappingis renamed towayfinder, invoked as/wayfinder. "Decision map" was jargony and inaccurate — only one ticket type is actually a decision. The reframe charts a route through a foggy problem instead, giving one coherent leading-word frame — fog of war, frontier, the map — rather than an invented term layered on top.- Destination as the leading word. Wayfinding finds the way to a destination; it doesn't charge at building it. Naming the destination is the first act of charting — it fixes the scope and shapes every ticket — so the map gains a
## Destinationfield every session orients to, and triage pins it before any ticket exists. - Plan, don't do. The map produces decisions, not deliverables; it's done when nothing is left to decide before someone builds the thing. An effort can override this in its Notes.
- The map is an index, not a store. A decision lives in exactly one place — its ticket — so the map only gists and links, never restates; graduating fog into a ticket clears the graduated patch so nothing lingers in two places.
- Collaborative by default. The map moves off a local Markdown file onto the repo's issue tracker: a single
wayfinder:mapissue whose tickets are its child issues — one shared URL the team can watch. Sessions load the map at low resolution and zoom into tickets on demand. Wayfinder stays tracker-agnostic (GitHub, GitLab, local-markdown) behind a pointer indocs/agents/issue-tracker.md, andsetup-matt-pocock-skillsseeds the "Wayfinding operations" section. - Claim by assignment, not a label. A session claims a ticket by assigning it to the driving dev — the assignee is the claim — freeing the label vocabulary to
wayfinder:<type>alone. - Native blocking. Blocking prefers the tracker's native dependency relationship, which renders the frontier visually in the tracker's own UI so the human sees what's takeable without opening the map. GitHub and GitLab templates spell out the native recipe, with a body-convention fallback.
- Fog vs. out of scope, split. Two plainly-named map sections —
## Not yet specified(in-scope fog that graduates as the frontier advances) and## Out of scope(work ruled beyond the destination, closed, never graduating) — so beyond-destination work no longer reads as takeable frontier. - A fourth
taskticket type. For literal manual work that blocks a decision (provisioning access, moving data, signing up for a service) — the one type that does rather than decides, earning its place by unblocking a decision. - HITL / AFK ticket classification. Every ticket type is HITL (human in the loop — grilling, prototype) or AFK (agent alone — research; task is either). A HITL ticket only resolves through the live exchange, so "wait for the human" falls out of the label — a grilling agent that answers its own questions has, by definition, broken HITL. (This fixes students' reports of
/wayfindergrilling itself instead of the human.) - No-fog early exit restored. If the opening breadth-first grilling surfaces no fog, the journey is small enough for one session — so it stops and asks how you'd like to proceed rather than building a map nobody needs.
Patch Changes
-
#464
639df6eThanks @mattpocock! - Reshapetddinto a reference-only skill and add a missing anti-pattern.Reference-only. The red → green → refactor loop is anchored by leading words the model already holds, so the step-by-step Workflow was largely restating the loop. Dropped the Workflow and per-cycle checklist; folded their one durable idea — vertical slices / tracer bullets — into the Anti-patterns section and a short Rules-of-the-loop list. Introduced seam as the leading word for where tests go: test only at pre-agreed seams, confirmed with the user before any test is written. Also dropped the refactor stage — TDD is now red → green; refactoring belongs to the review stage, so the refactor rule and
refactoring.mdmoved out (its home iscode-review).Tautological tests. Added the tautological-test anti-pattern: a test whose assertion is recomputed the way the code computes it passes by construction and gives zero confidence — distinct from the implementation-coupling anti-pattern already covered. Added as a peer at the same sites: a Philosophy principle (expected values must come from an independent source of truth), a checklist gate, and a BAD/GOOD example pair in
tests.md. -
e00eadbThanks @mattpocock! - Extend thetriageskill to triage external pull requests, treating a PR as an issue with attached code that runs through the same roles and state machine. PRs flow inline alongside issues (gated by a per-repo setup toggle), discovery surfaces only external PRs, the bug-only "reproduce" step is generalized into a single "verify the claim" step, and a redundancy check resolves already-implemented requests towontfixwithout polluting the out-of-scope knowledge base.setup-matt-pocock-skillsgains the PRs-as-a-request-surface toggle for GitHub/GitLab. -
#472
d869d45Thanks @mattpocock! - Fixwayfinderhardcoding the issue-tracker doc path, which broke the indirection the rest of the suite relies on.to-issues,to-prd, andtriagenever name a path — they resolve the tracker through the### Issue trackerblock thatsetup-matt-pocock-skillswrites intoCLAUDE.md/AGENTS.md, which points at the tracker doc wherever it lives. Wayfinder instead pinned the literaldocs/agents/issue-tracker.md, so in a repo that keeps its agent docs elsewhere it silently fell back to the local-markdown tracker — even one whoseCLAUDE.mdclearly declares GitHub issues. It now resolves the doc via that same pointer and reads its "Wayfinding operations" section by name, keeping the indirection consistent across the suite.