mattpocock/skills is the personal agent-skill collection of Matt Pocock, the well-known TypeScript educator and founder of Total TypeScript. Open-sourced in 2026, it quickly became one of the most popular skill collections on GitHub (220k+ stars). The tagline says it all: “Skills for Real Engineers. Straight from my .agents directory.” These are skills the author actually uses daily, not demo samples.
Reader’s guide: Chapters 1-5 explain the design (for everyone); chapter 6 is the comparison with this repo (author’s perspective — casual users can skip it); chapter 7 gives actionable takeaways (each with a first step); chapter 8 is a 5-minute quick start. Want to try it directly? Start at chapter 8.
The repo ships 35 SKILL.md files organized into five buckets:
| Directory | Purpose |
|---|---|
engineering/ |
Daily code work (18 skills, promoted) |
productivity/ |
Non-code workflow tools (7 skills, promoted) |
misc/ |
Kept around but not promoted (4 skills) |
in-progress/ |
Public beta skills, feedback wanted (6 skills) |
deprecated/ |
Retired |
The core philosophy is stated bluntly in the README:
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.
Unlike process-owning frameworks (GSD, BMAD, Spec-Kit — methodology systems that try to take over the entire development process, e.g. GSD is GitHub’s spec-driven workflow), the repo designs skills as small, adaptable, composable units of discipline: the author explicitly encourages users to “Hack around with them. Make them your own.” It targets four real failure modes: misalignment (the agent didn’t do what you wanted), verbosity (the agent uses 20 words where 1 will do), broken code (no feedback loops), and ball-of-mud codebases (accelerated software entropy).
If one word had to summarize this repo, it would be “composition”. Unlike most repos where one skill = one complete manual, skills here form a pyramid:
grilling (interviews), domain-modeling, codebase-design (deep modules), tdd, research, prototype, code-review, diagnosing-bugs. They carry all the methodology and can be triggered any time.grill-with-docs, grill-me, wait-what, handoff, implement (SKILL.md files are 7-16 lines). A router’s body is often a single sentence; grill-with-docs’s entire SKILL.md is:---
name: grill-with-docs
description: A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.
disable-model-invocation: true
---
Call the Skill tool twice, for "grilling" and "domain-modeling".
grilling is the most-reused primitive: five skills drive it (grill-me, grill-with-docs, triage, wayfinder, improve-codebase-architecture). ask-matt is the explicit map of the whole composition system — a “skill router” that answers “which skill fits my situation”.
The payoff: methodology is written once, lives in one place (the primitive), and bug fixes are one-place edits; routers cost almost no context and only pull in primitives when the user actually needs them. The cost: composition relies on string conventions (“Call the Skill tool with X”), so when a user installs only a subset via skills.sh, router calls silently fail — an inherent risk of this architecture. The repo has no detection mechanism (the only install probe lives in setup-matt-pocock-skills), so new users should be aware.
ask-matt is more than a skill map: it encodes the repo’s composition skeleton — the “idea → ship” main flow (grill-with-docs for alignment → to-spec to synthesize a spec → to-tickets to split into tickets → implement to build, driving tdd inside and closing with code-review), two on-ramps (triage and diagnosing-bugs), and the prototype → handoff detour bridge.
grilling is the repo’s most popular pattern (the README calls grill-me / grill-with-docs “These are my most popular skills”) and the answer to failure mode #1 (misalignment). It turns “let the agent ask the user questions” from casual conversation into structured discipline:
Design tree: every decision branches into the decisions that hang off it. The interview’s goal is to traverse the whole tree until every branch is visited and nothing is silently assumed.
Frontier rounds: the whole frontier (every question whose prerequisites are already settled) is asked in one round. Each question is numbered and comes with the model’s recommended answer, then the agent stops and waits for the user’s answers before computing the next frontier. This batching is a subtle piece of attention economics — one wait buys answers to an entire patch of questions, instead of inefficient one-question-one-answer round trips.
Division of labor: “Finding facts is your job, never the user’s.” When a frontier question needs facts from the environment, dispatch a sub-agent to find them without blocking the rest; but decisions are always the user’s — put each one to them and wait.
Termination: the frontier is empty — every branch visited, nothing left silently assumed. Do not act until the user confirms shared understanding.
A grilling session looks like this (numbered questions with recommended answers, the whole frontier asked in one round):
❓ **Q1** - **Scope**: Which features does this change cover, and what is explicitly out?
➡️ I'd suggest starting with the core flow only, deferring edge cases to phase two
❓ **Q2** - **Data model**: Does the current schema need migration?
➡️ I'd suggest not — additive fields should suffice
(The ADRs mentioned in grill-with-docs’s description are Architecture Decision Records — short documents recording “why this design”, so future maintainers without context don’t mischange it.)
wayfinder is one of the most serious structured answers to “large work that won’t fit in one agent session”. Core insight: planning across sessions must be a shared artifact, not session state.
tdd reframes the red→green loop as seam governance. Its goal isn’t to teach the agent to run TDD; it’s to make the loop “produce tests worth keeping”:
expect(add(a, b)).toBe(a + b)). Expected values must come from an independent source of truth.code-review stage, keeping the red→green cycle undiluted.codebase-design for the vocabulary — “a reference to consult, not a session to run”.diagnosing-bugs’s manifesto: “Phase 1: Build a feedback loop. This is the skill. Everything else is mechanical.”
git bisect run)[DEBUG-a4f2]) so cleanup is a single grep.improve-codebase-architecture.writing-for-agents is “the document about how to write documents for agents” — the quality source behind every SKILL.md in the repo, and one of the few public attempts to theorize skill writing. Its toolbox:
AGENTS.md is the same object. The pointer’s wording, not its target, decides when and how reliably the agent reaches the material. “A must-have target behind a weakly worded pointer is a variance bug” (the same input producing inconsistent outputs across runs): sharpen the wording first, inline only if sharpening fails.package.json, --help — restating it makes a document a cache); relevance checks (against sediment — “the default fate when adding feels safe and removing feels risky”); the no-op test (“does this line change behavior versus the default? If not, delete the whole sentence, not words”).codebase-design is the repo’s shared vocabulary base, packaging Ousterhout’s deep-module philosophy (“the best modules are deep: a lot of functionality behind a small interface”) as mandatory terminology: module / interface / depth / seam / adapter / leverage / locality. It is referenced by tdd and improve-codebase-architecture.
Notable writing techniques:
_Avoid_ list.Every skill chooses one of two invocation modes:
disable-model-invocation: true (OpenAI ecosystem: policy.allow_implicit_invocation: false); reachable only when the human types a slash command. Their job is orchestration — carrying stateful session flows.The criterion is self-documented in writing-for-agents/SKILL-MECHANICS.md: user-invoked skills cost zero context but need a human trigger; model-invoked skills carry their trigger branches in their description wording. The README sums it up: “User-invoked skills orchestrate; model-invoked skills hold the reusable discipline. A user-invoked skill may invoke model-invoked skills, but never another user-invoked one.”
CONTEXT.md is the single source of truth for a project’s shared language — a pure glossary, “totally devoid of implementation details”; not a spec, not a scratchpad. It defines domain terms (Issue tracker / Issue / Decision ticket / Triage role), each with an _Avoid_ list, plus a “Flagged ambiguities” section recording terms that were once ambiguous and are now resolved.
Several engineering skills (e.g. tdd, diagnosing-bugs) open with the same instruction: “read CONTEXT.md (if it exists)… respect ADRs in the area you’re touching.” Vocabulary is the glue of cross-skill composition: tdd uses codebase-design’s seam vocabulary, and code-review’s Spec axis (see 4.4) checks the spec. The domain-modeling skill actively builds and sharpens this glossary, with an ADR three-condition gate (hard to reverse + surprising without context + real trade-off — only then write an ADR).
Notably, the repo applies its own methodology at the meta level: its own CONTEXT.md is the product of this glossary system, .out-of-scope/ records rejected requests to prevent repeat suggestions, and ADRs document real trade-offs like “why ship a Claude Code plugin rather than a Codex one”.
Almost every skill uses the same grammar: explicit process gates + checkable completion criteria.
This is the direct product of writing-for-agents’s completion-criteria theory (Clarity + Demand) — the repo practices what it teaches.
Sub-agent dispatch is standard operating procedure, with a clear economic view of “what belongs in a sub-agent window”:
The other half of the context economy is session hygiene, defined in ask-matt/PHASE-BOUNDARIES.md: a five-option decision tree (Continue / /clear / /handoff / Subagent / /compact) ordered by the economics of primary vs secondary sources — Continue is ruled out first, /clear is cheapest, /handoff only for a harness change, directory change, person change, or mid-effort fork, and /compact is last resort. Paired with the smart zone (~150k tokens — the window within which the model still reasons sharply): ask-matt recommends keeping one uninterrupted window from grilling to to-tickets, and handing off or compacting past it.
Two install paths, two philosophies:
.claude-plugin/): claude plugins install mattpocock-skills, a managed, read-only, auto-updating bundle in the official marketplace — subscribe rather than fork. The plugin ships exactly the 25 promoted skills from engineering/ and productivity/; misc / in-progress / deprecated never appear.npx skills add mattpocock/skills): copies skill files into your project as ordinary files you own and edit — “Nothing updates behind your back”. Works for Codex and any Agent-Skills-standard harness.An onboarding skill accompanies both: /setup-matt-pocock-skills runs once per repo, asking which issue tracker (GitHub / Linear / local files), triage label conventions, and where to save docs. Engineering skills get the tracker abstraction through per-tracker config files generated by setup (issue-tracker-github.md / issue-tracker-gitlab.md / issue-tracker-local.md, one per tracker), with the uniform phrasing “should have been provided to you; run /setup-matt-pocock-skills if not”.
How to choose: want zero maintenance and to follow the author’s updates — pick the plugin subscription. Want to adapt the skills to your own workflow, or use non-Claude harnesses like Codex — pick skills.sh. And note the README warning: don’t install both — “installing both leaves you with every skill twice”.
The governance density is rare among skill repos:
ask-matt’s router map must stay accurate (“a router that lies” is an explicit failure mode), and scripts/link-skills.sh symlink distribution..agents/adr/): real architecture decisions — 0002-ship-as-a-claude-code-plugin.md analyzes in depth why to ship a Claude Code plugin but not (yet) a Codex one (Codex manifests accept only a single path; symlinks don’t survive install), and why the setup pointer belongs only in hard-dependency skills (soft-dependency skills stay token-light, no cargo-culting)..changeset/ manages every skill tweak (even “add separators between grilling questions” gets a changeset); sync-plugin-version.mjs keeps plugin and package versions in lockstep.docs/<bucket>/<skill>.md with a uniform four-section structure: What it does / When to reach for it / Common questions / It’s working if.| Dimension | awesome-skills (this repo) | mattpocock/skills |
|---|---|---|
| Skill shape | Large self-contained SKILL packages (30-224 lines each) | Small composition: primitives + thin routers (7-140 lines; methodology written once) |
| Composition | Skills mostly independent, triggered by description | Routers explicitly call primitives (“Call the Skill tool twice”); ask-matt is the explicit map |
| Shared vocabulary | No repo-level glossary; the bilingual (EN/CN layered) convention is the main norm | CONTEXT.md as single source of truth + ADRs, read by nearly every skill |
| Invocation split | Not distinguished | disable-model-invocation principled split, self-documented criterion |
| Testing | unit-test/ testing pyramid (static + end-to-end JSONL assertions) | Almost no testing system (confirmed weakness) |
| Distribution | sync.sh copies to three local harnesses |
Claude Code official marketplace + skills.sh, changeset versioning |
| Deep dives | Three deep-dive articles (gstack / google / superpowers) | None (practice-first) |
| Unique assets | Bilingual docs system, testing pyramid, four-type review (doc-reviewer) | grilling design trees, wayfinder decision-ticket maps, writing-for-agents, diagnosing-bugs loop discipline |
Overlap: our openspec-assistant (spec-driven development) and their to-spec → to-tickets → implement → tdd → code-review pipeline are both SDD, but complementary — ours emphasizes role collaboration (Architect / Developer / QA) with the /opsx command system; theirs emphasizes disciplined small-step pipelines. Our doc-reviewer’s four review types and their code-review’s two axes (Standards + Spec) are also worth cross-referencing.
Each takeaway comes with a first step — actionable as soon as you finish reading; the mechanics live in the referenced section.
ask-matt to prevent “too many skills, can’t find the one”.
grill-with-docs binds alignment interviews to vocabulary sedimentation — one session produces both a shared language and ADRs: “it might be the single coolest technique in this repo”.
_Avoid_ list), put it in CONTEXT.md, and add one line to your skill: “read CONTEXT.md before acting”.editorial-card-designer.).out-of-scope/ preventing repeat suggestions) means every methodology has passed the test of real use.
CONTEXT.md for your repo (even 5 terms), and write one ADR the next time you make a hard-to-reverse decision — start with these two, add the rest as needed.unit-test/.You don’t need to read the whole article to try this repo:
Install the plugin (Claude Code users, 30 seconds):
claude plugins install mattpocock-skills
Or get an editable copy (works with Codex and any harness):
npx skills add mattpocock/skills
Pick one path — don’t install both (you’d get every skill twice).
/setup-matt-pocock-skills — answer three questions (issue tracker, triage labels, docs directory). Skippable if you only use the productivity skills./grill-me on a vague idea you have (a feature, a refactor, an article) and experience the design-tree/frontier interview (§3.1). This is the author’s signature skill./grill-with-docs (alignment + vocabulary), /tdd (seam governance)/wayfinder (decision-ticket maps, §3.2)/diagnosing-bugs (loop discipline, §3.4)skills/productivity/writing-for-agents/SKILL.md — the quality source for every skill in the repo (§3.5)/ask-matt — it routes you through the main flow (§2).