My agent skills that I use every day to do real engineering - not vibe coding. Developing real applications is hard. Approaches like GSD, BMAD, and Spec-Kit try to help by owning the process.
> /plugin marketplace add mattpocock/skills> /plugin install mattpocock-skills@mattpocock
Repo: mattpocock/skills
What's inside
My agent skills that I use every day to do real engineering - not vibe coding.
Developing real applications is hard. Approaches like GSD, BMAD, and Spec-Kit try to help by owning the process. But while doing so, they take away your control and make bugs in the process hard to resolve.
These skills are designed to be small, easy to adapt, and composable. They work with any model. They're based on decades of engineering experience. Hack around with them. Make them your own. Enjoy.
If you want to keep up with changes to these skills, and any new ones I create, you can join ~60,000 other devs on my newsletter:
Two ways in, two philosophies. The Claude Code plugin installs the whole set as a managed, read-only bundle that updates when I ship β you subscribe rather than fork. skills.sh copies editable skill files into your project, so you can hack on them and make them your own. Pick one β installing both leaves you with every skill twice.
claude plugins install mattpocock-skills
Or, from inside a session:
/plugin install mattpocock-skills
It's in Claude Code's official marketplace, so there's nothing to add first, and updates arrive automatically.
npx skills@latest add mattpocock/skills
Pick the skills you want, and which coding agents to install them on. The installer lets you choose which skills to take β make sure setup-matt-pocock-skills is one of them.
A native Codex plugin is on the roadmap β see .agents/adr/0002-ship-as-a-claude-code-plugin.md.
Use the same installer, on any agent β including Claude Code:
npx skills@latest add mattpocock/skills
It writes the skills into your repo as ordinary files you own and can edit. Nothing updates behind your back; pull my latest changes when you want them with npx skills update.
/setup-matt-pocock-skillsIn your agent, run it once per repo. It will:
/triage uses labels)I built these skills as a way to fix common failure modes I see with Claude Code, Codex, and other coding agents.
"No-one knows exactly what they want"
David Thomas & Andrew Hunt, The Pragmatic Programmer
The Problem. The most common failure mode in software development is misalignment. You think the dev knows what you want. Then you see what they've built - and you realize it didn't understand you at all.
This is just the same in the AI age. There is a communication gap between you and the agent. The fix for this is a grilling session - getting the agent to ask you detailed questions about what you're building.
The Fix is to use:
/grill-me - for non-code uses/grill-with-docs - same as /grill-me, but adds more goodies (see below)These are my most popular skills. They help you align with the agent before you get started, and think deeply about the change you're making. Use them every time you want to make a change.
With a ubiquitous language, conversations among developers and expressions of the code are all derived from the same domain model.
Eric Evans, Domain-Driven-Design
The Problem: At the start of a project, devs and the people they're building the software for (the domain experts) are usually speaking different languages.
I felt the same tension with my agents. Agents are usually dropped into a project and asked to figure out the jargon as they go. So they use 20 words where 1 will do.
The Fix for this is a shared language. It's a document that helps agents decode the jargon used in the project.
Here's an example CONTEXT.md, from my course-video-manager repo. Which one is easier to read?
This concision pays off session after session.
This is built into /grill-with-docs. It's a grilling session, but that helps you build a shared language with the AI, and document hard-to-explain decisions in ADR's.
It's hard to explain how powerful this is. It might be the single coolest technique in this repo. Try it, and see.
[!TIP] A shared language has many other benefits than reducing verbosity:
- Variables, functions and files are named consistently, using the shared language
- As a result, the codebase is easier to navigate for the agent
- The agent also spends fewer tokens on thinking, because it has access to a more concise language
"Always take small, deliberate steps. The rate of feedback is your speed limit. Never take on a task thatβs too big."
David Thomas & Andrew Hunt, The Pragmatic Programmer
The Problem: Let's say that you and the agent are aligned on what to build. What happens when the agent still produces crap?
It's time to look at your feedback loops. Without feedback on how the code it produces actually runs, the agent will be flying blind.
The Fix: You need the usual tranche of feedback loops: static types, browser access, and automated tests.
For automated tests, a red-green-refactor loop is critical. This is where the agent writes a failing test first, then fixes the test. This helps give the agent a consistent level of feedback that results in far better code.
I've built a /tdd skill you can slot into any project. It encourages red-green-refactor and gives the agent plenty of guidance on what makes good and bad tests.
For debugging, I've also built a /diagnosing-bugs skill that wraps best debugging practices into a disciplined loop, gated phase by phase.
"Invest in the design of the system every day."
Kent Beck, Extreme Programming Explained
"The best modules are deep. They allow a lot of functionality to be accessed through a simple interface."
John Ousterhout, A Philosophy Of Software Design
The Problem: Most apps built with agents are complex and hard to change. Because agents can radically speed up coding, they also accelerate software entropy. Codebases get more complex at an unprecedented rate.
The Fix for this is a radical new approach to AI-powered development: caring about the design of the code.
This is built in to every layer of these skills:
/to-spec quizzes you about which modules you're touching before creating a specAnd crucially, /improve-codebase-architecture surveys a codebase for deepening opportunities and hands you the candidates. I recommend running it on your codebase once every few days. It is a survey, not a rescue: on a genuinely old codebase it will find real candidates, but it won't untangle the mud for you.
Software engineering fundamentals matter more than ever. These skills are my best effort at condensing these fundamentals into repeatable practices, to help you ship the best apps of your career. Enjoy.
These split on one axis β who can invoke them. User-invoked skills are reachable only when you type them (e.g. /grill-me); their job is to orchestrate. Model-invoked skills can be invoked by you or reached for automatically by the agent when the task fits; they hold the reusable discipline. A user-invoked skill may invoke model-invoked skills, but never another user-invoked one.
Skills I use daily for code work.
User-invoked
CONTEXT.md and ADRs inline./tdd at pre-agreed seams and closing out with /code-review before committing.Model-invoked
CONTEXT.md and ADRs inline.--abort.General workflow tools, not code-specific.
User-invoked
CONTEXT.md vocabulary.Model-invoked
grill-me, grill-with-docs, triage, wayfinder and improve-codebase-architecture..agents/
adr/
0001-explicit-setup-pointer-only-for-hard-dependencies.md
0002-ship-as-a-claude-code-plugin.md
install-block.md
invocation.md
writing-docs.md
.changeset/
config.json
domain-modeling-trigger-context-adr.md
grilling-remove-em-dashes.md
README.md
skill-tool-invocation-terminology.md
user-invoked-skill-invocation.md
.claude-plugin/
marketplace.json
plugin.json
.github/
workflows/
release.yml
.gitignore
.out-of-scope/
mainstream-issue-trackers-only.md
question-limits.md
setup-skill-verify-mode.md
AGENTS.md
CHANGELOG.md
CLAUDE.md
CONTEXT.md
docs/
engineering/
ask-matt.md
code-review.md
codebase-design.md
diagnosing-bugs.md
domain-modeling.md
grill-with-docs.md
implement.md
improve-codebase-architecture.md
prototype.md
research.md
resolving-merge-conflicts.md
setup-matt-pocock-skills.md
tdd.md
to-spec.md
to-tickets.md
triage.md
wayfinder.md
wizard.md
productivity/
grill-me.md
grilling.md
handoff.md
teach.md
to-questionnaire.md
wait-what.md
writing-for-agents.md
LICENSE
package-lock.json
package.json
README.md
scripts/
link-skills.sh
list-skills.sh
sync-plugin-version.mjs
skills/
deprecated/
README.md
engineering/
ask-matt/
agents/
openai.yaml
PHASE-BOUNDARIES.md
SKILL.md
code-review/
agents/
openai.yaml
SKILL.md
codebase-design/
agents/
openai.yaml
DEEPENING.md
DESIGN-IT-TWICE.md
SKILL.md
diagnosing-bugs/
agents/
openai.yaml
scripts/
hitl-loop.template.sh
SKILL.md
domain-modeling/
ADR-FORMAT.md
agents/
openai.yaml
CONTEXT-FORMAT.md
SKILL.md
grill-with-docs/
agents/
openai.yaml
SKILL.md
implement/
agents/
openai.yaml
SKILL.md
improve-codebase-architecture/
agents/
openai.yaml
HTML-REPORT.md
SKILL.md
prototype/
agents/
openai.yaml
LOGIC.md
SKILL.md
UI.md
README.md
research/
agents/
openai.yaml
SKILL.md
resolving-merge-conflicts/
agents/
openai.yaml
SKILL.md
setup-matt-pocock-skills/
agents/
openai.yaml
domain.md
issue-tracker-github.md
issue-tracker-gitlab.md
issue-tracker-local.md
SKILL.md
triage-labels.md
tdd/
agents/
openai.yaml
mocking.md
SKILL.md
tests.md
to-spec/
agents/
openai.yaml
SKILL.md
to-tickets/
agents/
openai.yaml
SKILL.md
triage/
AGENT-BRIEF.md
agents/
openai.yaml
OUT-OF-SCOPE.md
SKILL.md
wayfinder/
agents/
openai.yaml
SKILL.md
wizard/
agents/
openai.yaml
SKILL.md
template.sh
in-progress/
claude-handoff/
agents/
openai.yaml
SKILL.md
loop-me/
agents/
openai.yaml
SKILL.md
README.md
setup-ts-deep-modules/
agents/
openai.yaml
dependency-cruiser.config.cjs
SKILL.md
writing-beats/
agents/
openai.yaml
SKILL.md
writing-fragments/
agents/
openai.yaml
SKILL.md
writing-shape/
agents/
openai.yaml
SKILL.md
misc/
git-guardrails-claude-code/
agents/
openai.yaml
scripts/
block-dangerous-git.sh
SKILL.md
migrate-to-shoehorn/
agents/
openai.yaml
SKILL.md
README.md
scaffold-exercises/
agents/
openai.yaml
SKILL.md
setup-pre-commit/
agents/
openai.yaml
SKILL.md
productivity/
grill-me/
agents/
openai.yaml
SKILL.md
grilling/
agents/
openai.yaml
SKILL.md
handoff/
agents/
openai.yaml
SKILL.md
README.md
teach/
agents/
openai.yaml
GLOSSARY-FORMAT.md
LEARNING-RECORD-FORMAT.md
MISSION-FORMAT.md
RESOURCES-FORMAT.md
SKILL.md
to-questionnaire/
agents/
openai.yaml
SKILL.md
wait-what/
agents/
openai.yaml
SKILL.md
writing-for-agents/
agents/
openai.yaml
SKILL-MECHANICS.md
SKILL.mdThe FLOW.md
This file reads your intent and auto-invokes the right skill at the right moment. You just prompt.
# FLOW.md: Engineering Discipline > Carry a change from a raw issue through a sharpened model, a designed interface, a test-first build, a diagnosed fix, and a clean handoff, firing the right discipline at each step. > Skills vendored from Matt Pocock (MIT) β see ATTRIBUTION.md. Routing by Flowy. ## Phases 1. **Triage** β entry: a new issue, bug report, or external PR lands. Gate: the item carries one category role and one state role, with an agent brief recorded when it moves to ready-for-agent. 2. **Model** β entry: the work introduces or disputes domain terms before any code. Gate: the resolved term is written to CONTEXT.md (and an ADR recorded when the decision is hard to reverse). 3. **Design** β entry: a module's interface or seam is being shaped. Gate: a chosen interface is recorded as deep (small surface, behaviour hidden) with its seam named. 4. **Build** β entry: a feature or bugfix is ready to implement. Gate: one passing test exists per behaviour, written before its code, green through the public interface. 5. **Diagnose** β entry: something is broken, throwing, failing, or slow. Gate: a regression test goes from red to green on the exact reported symptom (or the missing seam is recorded as the finding). 6. **Handoff** β entry: the session ends or work passes to another agent. Gate: a handoff document is written that references artifacts by path and names the next skills to invoke. ## Routing ``` USER MESSAGE β ββ INTAKE / TRIAGE (a fresh issue, bug, or external PR; do this first) β ββ classify intent and state before acting β invoke triage β Gate: one category role + one state role applied; agent brief recorded on ready-for-agent. β ββ MODEL the domain (Phase 2) β ββ user introduces a term that fights the glossary, or a fuzzy/overloaded word? β invoke domain-modeling β β Gate: the canonical term is written to CONTEXT.md. β ββ a hard-to-reverse, surprising trade-off just landed? β invoke domain-modeling β Gate: an ADR recording the decision and its alternatives exists in docs/adr/. β ββ DESIGN an interface (Phase 3) β ββ user is shaping a module's surface or asking where a seam goes? β invoke codebase-design β β Gate: the interface is recorded as deep (small surface, behaviour hidden) with its seam named. β ββ two or more interfaces worth comparing on depth? β invoke codebase-design β Gate: a recommended interface is chosen and its leverage recorded. β ββ BUILD test-first (Phase 4) β ββ user wants to build a feature or fix a bug in code? β invoke tdd β Gate: one failing test per behaviour was written before its code and is now green through the public interface. β ββ DIAGNOSE a defect (Phase 5) β ββ user reports something broken, throwing, failing, or slow? β invoke diagnosing-bugs β β Gate: a tight red-capable command reproduces the user's exact symptom (paste the invocation and output). β ββ the fix is in and you must lock it down? β invoke diagnosing-bugs β Gate: a regression test goes redβgreen on the minimised repro (or the absent seam is recorded as the finding). β ββ REVIEW-LOOP (feedback came back on a diagnosis or design) β invoke diagnosing-bugs β Gate: each redline is re-verified by re-running the Phase 5 loop, captured redβgreen. β ββ DONE-CHECK (before any claim that a build or fix is done) β invoke tdd β Gate: the full test set is run and its passing output is shown, not asserted. β ββ HANDOFF (session ending or passing the baton) β invoke handoff β Gate: a handoff document is written that references artifacts by path and names the next skills to invoke. β ββ ADVISE-ONLY (user is asking you to explain or recommend, not change code) β answer only β Gate: none; no artifact is produced for a pure question. β ββ SCOPE CHANGE (the brief or requirements changed mid-flight) β re-enter the matching phase β Gate: the superseded work is named and the new phase's entry condition is restated. β ββ BLOCKED (waiting on an external dependency, access, or a human decision) β park and name the blocker β Gate: the blocker and its resume condition are written down; no further phase advances until it clears. β ββ DEFAULT (no branch fits) β answer only, ask one scoping question Gate: none; resolve which phase the user is in before routing. ``` ## Priority on collision 1. Blocked 2. Scope changed 3. Done-check 4. Lifecycle order (Triage β Model β Design β Build β Diagnose β Handoff) 5. Advisory 6. Default ## You are rationalizing if you thinkβ¦ - "I can see the cause, I will fix it and add the test after." No. `diagnosing-bugs` Phase 1 says a red-capable command must exist and run before any hypothesis. Jumping to a fix without a loop is the exact failure the skill prevents. - "I will write all the tests first, then make them pass." No. `tdd` calls that horizontal slicing β it produces tests of imagined behaviour. One test, one implementation, repeat. - "The term is obvious from context, I will not bother updating CONTEXT.md." No. `domain-modeling` resolves the term inline the moment it crystallises; an unwritten decision is re-litigated next session. - "This is a one-line issue, I will just mark it ready-for-agent and skip the brief." No. `triage` requires an agent brief on the ready-for-agent transition; a brief-less issue strands the next agent. ## Additional skills (also available) The full upstream set is vendored in this Flow. The routing above sequences the core lifecycle; these additional skills are available and fire when their trigger matches. See ATTRIBUTION.md for the complete list and license. ### engineering - `ask-matt`: Ask which skill or flow fits your situation. A router over the user-invoked skills in this repo. - `grill-with-docs`: A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go. - `implement`: Implement a piece of work based on a PRD or set of issues. - `improve-codebase-architecture`: Scan a codebase for deepening opportunities, present them as a visual HTML report, then grill through whichever one you pick. - `prototype`: Build a throwaway prototype to flesh out a design, a runnable terminal app for state/business-logic questions, or several radically different UI variations toggleable from one route. - `resolving-merge-conflicts`: Use when you need to resolve an in-progress git merge/rebase conflict. - `setup-matt-pocock-skills`: Configure this repo for the engineering skills, set up its issue tracker, triage label vocabulary, and domain doc layout. Run once before first use of the other engineering skills. - `to-issues`: Break a plan, spec, or PRD into independently-grabbable issues on the project issue tracker using tracer-bullet vertical slices. - `to-prd`: Turn the current conversation into a PRD and publish it to the project issue tracker, no interview, just synthesis of what you've already discussed. ### misc - `git-guardrails-claude-code`: Set up Claude Code hooks to block dangerous git commands (push, reset --hard, clean, branch -D, etc.) before they execute. Use when user wants to prevent destructive git operations, add git safety hooks, or block git push/reset in Claude Code. - `migrate-to-shoehorn`: Migrate test files from `as` type assertions to @total-typescript/shoehorn. Use when user mentions shoehorn, wants to replace `as` in tests, or needs partial test data. - `scaffold-exercises`: Create exercise directory structures with sections, problems, solutions, and explainers that pass linting. Use when user wants to scaffold exercises, create exercise stubs, or set up a new course section. - `setup-pre-commit`: Set up Husky pre-commit hooks with lint-staged (Prettier), type checking, and tests in the current repo. Use when user wants to add pre-commit hooks, set up Husky, configure lint-staged, or add commit-time formatting/typechecking/testing. ### productivity - `grill-me`: A relentless interview to sharpen a plan or design. - `grilling`: Interview the user relentlessly about a plan or design. Use when the user wants to stress-test a plan before building, or uses any 'grill' trigger phrases. - `teach`: Teach the user a new skill or concept, within this workspace. - `writing-great-skills`: Reference for writing and editing skills well, the vocabulary and principles that make a skill predictable. ## Attribution - `triage` by **Matt Pocock** (https://github.com/mattpocock/skills), MIT. - `domain-modeling` by **Matt Pocock** (https://github.com/mattpocock/skills), MIT. - `codebase-design` by **Matt Pocock** (https://github.com/mattpocock/skills), MIT. - `tdd` by **Matt Pocock** (https://github.com/mattpocock/skills), MIT. - `diagnosing-bugs` by **Matt Pocock** (https://github.com/mattpocock/skills), MIT. - `handoff` by **Matt Pocock** (https://github.com/mattpocock/skills), MIT.
FAQ
mattpocock-skills is a Claude Code plugin of 29 hand-picked skills with a FLOW.md router. Install it once and the right skill fires as you prompt, with no slash command to remember. It is built for development work. It includes ask-matt, code-review, codebase-design. Free and open source.