23 KiB
mattpocock-skills
1.1.0
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. -
#405
14c13c5Thanks @mattpocock! - Rename the in-progressreviewskill tocode-reviewand promote it fromin-progress/to theengineering/bucket. It now ships in the plugin, is listed in the top-level and Engineering READMEs (Model-invoked), and has a human-facing docs page atdocs/engineering/code-review.md. The/implementskill and docs now point at/code-review. -
#401
64d9f3dThanks @mattpocock! - Add a fourth Task ticket type to thedecision-mappingskill. Some blockers are neither a decision, a prototype, nor research — just literal manual work that has to happen before the discussion can move forward (moving data, signing up for a third-party service, provisioning access). The agent automates it where it can, otherwise hands the human a precise checklist, and records any resulting facts later tickets depend on. -
#433
e1c025eThanks @mattpocock! - Add a confirmation gate togrilling: 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. Thedescriptionalso recruits the pretrainedgrillleading word ("Grill the user relentlessly") to sharpen invocation, and the docs page is re-synced with the new gate behaviour. -
#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. -
#459
0172e61Thanks @mattpocock! - Sharpen how theto-issuesskill records structure. The "What to build" template now adds a context pointer to where the/prototypeskill's code lives, rather than inlining a snippet from it. And publishing now prefers the tracker's native sub-issues for parent → slice and native blocking edges forBlocked bywhere the tracker supports them (mechanics already live in the issue-tracker doc), keeping the## Parent/## Blocked bybody sections as the fallback. -
#436
6f9e995Thanks @mattpocock! - Changewayfinder's claim mechanism from a label to an assignee.A session now claims a ticket by assigning it to the dev driving the map, rather than setting a
wayfinder:claimedlabel. The assignee is the claim — an open, unassigned ticket is unclaimed — which reads more naturally in GitHub's own UI and frees the label vocabulary towayfinder:<type>alone. The claim leading word and its "first, before any work" rationale are unchanged; only the physical expression moved. -
#413
5c3c49dThanks @mattpocock! - Makewayfindercollaborative by moving the map off a local Markdown file and onto the repo's issue tracker.The map is now a single
wayfinder:mapissue whose tickets are its child issues — one shared URL the whole team can watch and comment on. Blocking, claiming (wayfinder:claimed), and the frontier query all use native tracker semantics, so a session loads the map at low resolution (Notes + one context pointer per closed ticket + Fog prose) and zooms into individual tickets on demand, instead of loading the whole map every time.Wayfinder stays tracker-agnostic: the per-tracker mechanics live behind a pointer in
docs/agents/issue-tracker.md, sosetup-matt-pocock-skillsnow seeds a "Wayfinding operations" section for GitHub, GitLab, and local-markdown. Absent that doc, Wayfinder defaults to local-markdown. -
#456
299eb0cThanks @mattpocock! - Givewayfindera first-class notion of out of scope, separate from fog.Fog and out-of-scope were conflated under one
## Fogmap section, gated by different things: fog by knowledge (can't specify it yet — in scope, unripe, graduates as the frontier advances), out-of-scope by scope (beyond the destination — never graduates). Cramming both under "Fog" made out-of-scope work read as takeable frontier (an unblocked, unclaimed item is indistinguishable from a live ticket).Now the map body has two plainly-named sections —
## Not yet specifiedand## Out of scope— and the skill's prose splits to match: the Fog of war section teaches only the not-yet-specified bucket and keeps the two-way fog-or-ticket sharpness test, while a new Out of scope section owns the scope axis (beyond the destination, closed not graduating, returns only as a fresh effort if the destination is redrawn). Charting and working-the-map now rule a beyond-destination ticket out of scope — close it, one line in Out of scope — rather than leaving it on the frontier or logging it in Decisions so far.The fog of war leading word is retained: it names the concept and drives the graduate-the-fog behavior in the prose; only the human-facing map headings go to plain language.
-
#455
53c6219Thanks @mattpocock! - Sharpenwayfinder's top-level purpose around destination as the leading word: wayfinding finds the way to a destination, it doesn't charge at building it.The opening now states that the destination varies per effort — a spec to hand off and iterate, a decision to lock before planning, or a change made in place like a data-structure migration — and that naming it is the first act of charting, because it shapes every ticket. The map body gains a
## Destinationfield that every session orients to before choosing a ticket, and triage's first step now pins the destination before any ticket exists. The straygoalmentions in the description and Fog section are unified ontodestination. -
#419
9272935Thanks @mattpocock! - Makewayfinder's no-duplication contract explicit: the map is an index, not a store.Adopting "index" as the leading word for the map's role fixes two duplication risks. The map now states up front that a decision lives in exactly one place — its ticket — so it only ever gists and links, never restates the answer (previously this rule was implied inside an HTML comment in the map-body template). And graduating fog into a ticket now clears the graduated patch from the Fog, so a suspected question can't linger in both places at once.
-
#428
8cc3328Thanks @mattpocock! - Reframewayfinder's description around the work it's for: planning a huge chunk of work, more than one agent session can hold.The description does the skill's invocation work, so it now leads with the trigger that actually reaches for Wayfinder — a big effort you need to break down — instead of the softer "chart a route through a foggy problem". The skill body and fog-of-war mechanic are unchanged.
-
#412
4027ea6Thanks @mattpocock! - Rename thedecision-mappingskill towayfinder, invoked as/wayfinder."Decision map" was jargony and inaccurate — only one of the skill's four ticket types (Grilling) is actually a decision. The reframe charts a route through a foggy problem, resolving investigation tickets one at a time until the way to the goal is clear. This makes one coherent leading-word frame (fog of war / frontier / the map) instead of mixing an invented term on top of it.
Also a pruning pass: unified
node→ticket, bound "the frontier" to the unblocked tickets, dropped the duplicated "one question at a time" (owned by/grilling), and trimmed intro no-ops.
Patch Changes
-
#394
7a4c756Thanks @mattpocock! - Give the in-progresscode-reviewskill 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) are inlined intoSKILL.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. -
#393
e81f976Thanks @mattpocock! - Reshape thetddskill into 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 and duplicating the horizontal-slicing anti-pattern. 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, collapsing the old Philosophy "public interfaces" prose and the Planning "confirm interface / behaviors" handshake into one rule: 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, not red → green → refactor. Refactoring belongs to the review stage, not the implementation loop, so the refactor rule and
refactoring.mdwere removed (its home is thereviewskill). -
43ea088Thanks @mattpocock! - Add the tautological test anti-pattern to thetddskill. Tests whose assertion is recomputed the way the code computes it pass by construction and give zero confidence — distinct from the implementation-coupling anti-pattern already covered. Added as a peer at the same three sites: a Philosophy principle (expected values must come from an independent source of truth), a per-cycle checklist gate, and a BAD/GOOD example pair intests.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. -
#461
ce908a6Thanks @mattpocock! - Stopwayfindergrilling itself instead of the human, and classify ticket types by HITL / AFK.Students reported
/wayfinderpicking a grilling ticket and answering its own questions rather than turning to the human. Root cause:grillingcarried a line written for the live-human case — "If a question can be answered by exploring the codebase, explore the codebase instead" — which, oncewayfinderruns grilling inside a resolve-the-ticket frame, reads as license to answer questions autonomously and race the ticket to "resolved".Two changes:
grillingnow splits facts (look them up) from decisions (put each one to the human and wait for their answer).wayfinderlabels every ticket type HITL (human in the loop — Prototype, Grilling) or AFK (agent alone — Research; Task is either). A HITL ticket only resolves through the live exchange, so the "wait for the human" behaviour falls out of the label instead of being spelled out per type — a grilling agent that answers its own questions has, by definition, broken HITL.
-
#435
b289481Thanks @mattpocock! - Sharpen Wayfinder's blocking rule to prefer the tracker's native dependency relationship, and update the GitHub and GitLab issue-tracker templates to match.Native blocking is essential rather than cosmetic: it renders the frontier visually in the tracker's own UI, so the human sees what's takeable at a glance without opening the map.
wayfinder's SKILL.md now states that preference and rationale; the GitHub template spells out the native issue-dependencies recipe (gh api .../dependencies/blocked_by, frontier query onissue_dependencies_summary.blocked_by), and the GitLab template names the native/blocked_byblocking link (Premium/Ultimate) with the body-convention fallback. Both keep the body fallback for trackers that lack native blocking. -
#460
55511ceThanks @mattpocock! - Restorewayfinder's early exit when the frontier grilling turns up no fog.The skill used to have a Skipping The Decision Map section: if the opening grilling surfaced no fog of war, there was no map to build, so it offered to skip straight to implementing. That clause was demoted to a parenthetical inside the Handoff section, then deleted as collateral when Handoff was removed — never an intentional cut.
It's back, co-located in Chart the map step 2 (Map the frontier), where the fog/no-fog outcome is actually determined: if breadth-first grilling surfaces no fog — the journey is small enough for one session — you don't need a map, so stop and ask the user how they'd like to proceed. The ask, rather than an auto-skip, is preserved from the original.
1.0.1
Patch Changes
d20ee26Thanks @mattpocock! - Make theteachskill reuse-first. Lessons are now built from reusable components in./assets/— stylesheets, quiz widgets, simulators, diagram helpers. Reuse is the default: the agent reads./assets/before authoring a lesson, builds from what's there, and extracts anything new and reusable into a component rather than inlining it.
1.0.0
Major Changes
-
47bde84Thanks @mattpocock! - Add theask-mattskill — a user-invoked router that points you at the right skill or flow for your situation.Breaking:
ask-mattroutes over the other user-invoked skills in this repo, so it expects them to be installed. -
47bde84Thanks @mattpocock! - Add the shared design skills and rewire existing skills onto them.- New
codebase-designskill — the deep-module vocabulary (module, interface, depth, seam, adapter) and the principles for putting a lot of behaviour behind a small interface. The language that previously lived inimprove-codebase-architecture/LANGUAGE.mdnow lives here, generalized for reuse across skills. - New
domain-modelingskill — actively build and sharpen a project's domain model, stress-testing terms against the glossary and keepingCONTEXT.mdand ADRs current. improve-codebase-architecturenow draws its architecture vocabulary from/codebase-designand its domain model from/domain-modeling.tddnow leans on/codebase-designfor interface-design guidance — its inlinedeep-modules.md/interface-design.mdnotes were removed in favour of the shared skill.grill-with-docsnow builds the domain model inline via/domain-modeling.
Breaking: these skills now depend on the new
codebase-design/domain-modelingskills, so you must install them too. - New
-
47bde84Thanks @mattpocock! - Remove thecavemanandzoom-outskills.cavemanwas a duplicate of another skill I was testing and was never meant to be public.zoom-outwent unused in practice, so it's been removed from the repo.
Breaking: both skills have been removed.
-
47bde84Thanks @mattpocock! - Rename thediagnoseskill todiagnosing-bugs.Breaking: invoke it as
/diagnosing-bugs— the old/diagnosename no longer exists. -
47bde84Thanks @mattpocock! - Replacewrite-a-skillwithwriting-great-skills.- Removed
write-a-skill. - Added
writing-great-skills(plus itsGLOSSARY.md) — a reference for writing and editing skills well: the vocabulary and principles that make a skill predictable, hunting no-ops down to the sentence level. - Exposed
grillingas a model-invoked skill — the reusable interview loop behindgrill-meandgrill-with-docs.
Breaking:
write-a-skillhas been removed; usewriting-great-skillsinstead. - Removed
Minor Changes
-
47bde84Thanks @mattpocock! - Add theresolving-merge-conflictsskill — a loop for resolving an in-progress git merge or rebase conflict. Standalone, with no dependencies on other skills. -
47bde84Thanks @mattpocock! - Rename the skill taxonomy from Commands / Skills to User-invoked / Model-invoked across the docs, and adddocs/invocation.mddefining the split: user-invoked skills are reachable only when you type them and exist to orchestrate; model-invoked skills can also be reached automatically when the task fits. A user-invoked skill may invoke model-invoked skills, but never another user-invoked one.
Patch Changes
47bde84Thanks @mattpocock! - Tighten thereviewskill: fail-fast ref check, single-sourced rules, and no-op cuts.