A curated collection of agent skills authored by Matt Pocock that extend Claude Code across planning, development, tooling, and writing. Each skill is a self-contained Markdown specification (
SKILL.md) installed into your project's.claude/skills/directory and invoked by name during a Claude Code session.
Repository: mattpocock/skills
License: MIT (Copyright 2026 Matt Pocock)
Installer: npx skills@latest
Skill count: 18 skills, 2 reference docs, 1 helper script
1. Quick Start
The fastest path from zero to a working skill is a single npx call. Pick the skill you want, run the installer, then invoke it inside Claude Code.
npx skills@latest add mattpocock/skills/tdd
Installed mattpocock/skills/tdd into .claude/skills/tdd/
Once installed, ask Claude Code to use it. The skill's SKILL.md description tells Claude when to load the workflow:
> /tdd
> Let's TDD a new shopping cart total calculator.
Claude reads .claude/skills/tdd/SKILL.md, loads the red-green-refactor instructions, and walks you through the cycle one test at a time.
Tip
You can install multiple skills back-to-back. They are independent — each lives in its own folder and only loads when its description matches the current request.
What you get
- 18 production-tested skills covering planning, implementation, refactoring, code quality, GitHub workflow, and writing.
- Bundled reference material (e.g., the TDD pack ships five companion files on deep modules, mocking, refactoring, tests, and interface design).
- A drop-in helper script (
block-dangerous-git.sh) for the git-guardrails skill. - An MIT license that allows commercial and community reuse.
What you need
- Claude Code installed and signed in.
- Node.js with
npx(the installer is published to npm asskills). - Git (most skills explore repos via
git log/git diff). - The GitHub CLI (
gh) for any skill that creates issues — see the matrix in section 3.
2. Installation
2.1. Prerequisites
| Requirement | Why it's needed |
|---|---|
| Claude Code | The host that loads SKILL.md files and runs the workflows. |
Node.js + npx |
The installer (skills@latest) is a small npm package that copies SKILL files into your project. |
| Git | Skills read git remote, git log, and run git mv for renames. |
GitHub CLI (gh) |
Required for write-a-prd, prd-to-issues, request-refactor-plan, triage-issue, qa, github-triage, and improve-codebase-architecture. |
Bash + jq |
Required for the git-guardrails-claude-code hook script. |
Important
Authenticate the GitHub CLI before you install any issue-creating skill. Run
gh auth loginonce per machine — every issue-creating skill callsgh issue createand will fail with a permissions error ifghis unauthenticated.
2.2. Install a single skill
npx skills@latest add mattpocock/skills/<skill-name>
Replace <skill-name> with any of the 18 skill names (see section 3). The installer creates .claude/skills/<skill-name>/ in the current working directory and copies SKILL.md plus any bundled reference files (e.g., tdd/ ships with deep-modules.md, mocking.md, refactoring.md, tests.md, and interface-design.md).
2.3. Install several skills
Run the installer once per skill — there is no batch syntax:
npx skills@latest add mattpocock/skills/tdd
npx skills@latest add mattpocock/skills/write-a-prd
npx skills@latest add mattpocock/skills/grill-me
Note
The skills do not depend on each other. You can mix and match freely; install only the ones you intend to use to keep Claude's skill list short.
2.4. Verify
After installation, list the contents of .claude/skills/:
ls .claude/skills/
tdd write-a-prd grill-me
Each subdirectory contains a SKILL.md (and possibly companion .md files or a scripts/ folder). Claude Code auto-discovers any SKILL.md under .claude/skills/.
2.5. Uninstall
Delete the skill directory:
rm -rf .claude/skills/<skill-name>
2.6. Project vs. global install
Most skills install into the current project (./.claude/skills/). The git-guardrails-claude-code skill is the one explicit exception — it asks during invocation whether to install the hook for this project only (.claude/settings.json) or all projects (~/.claude/settings.json).
3. Available Skills
The pack contains 18 skills grouped into four themes. The table below is the at-a-glance index; each skill is detailed in section 4.
3.1. Skill matrix
| Skill | Theme | Triggers (Claude detects) | Needs gh? |
|---|---|---|---|
write-a-prd |
Planning | "write a PRD", "create a product requirements document", plan a new feature | Yes |
prd-to-plan |
Planning | "break down a PRD", "create an implementation plan", "tracer bullets" | No (writes local file) |
prd-to-issues |
Planning | "convert a PRD to issues", "create implementation tickets" | Yes |
grill-me |
Planning | "stress-test a plan", "get grilled on my design", "grill me" | No |
design-an-interface |
Planning | "design an API", "explore interface options", "design it twice" | No |
request-refactor-plan |
Planning | "plan a refactor", "create a refactoring RFC" | Yes |
tdd |
Development | "TDD this", "red-green-refactor", "test-first development" | No |
triage-issue |
Development | "triage this bug", "investigate and plan a fix" | Yes |
improve-codebase-architecture |
Development | "improve architecture", "find refactoring opportunities", "deepen modules" | Yes |
migrate-to-shoehorn |
Development | "migrate to shoehorn", "replace as in tests" |
No |
scaffold-exercises |
Development | "scaffold exercises", "create exercise stubs" (ai-hero-cli context) | No |
setup-pre-commit |
Tooling | "set up Husky", "configure lint-staged", "add pre-commit hooks" | No |
git-guardrails-claude-code |
Tooling | "block dangerous git commands", "add git safety hooks" | No |
github-triage |
Tooling | "triage issues", "review incoming bugs", "manage issue workflow" | Yes |
qa |
Tooling | "QA session", "report bugs conversationally" | Yes |
write-a-skill |
Writing | "create a new skill", "write a skill" | No |
edit-article |
Writing | "edit an article", "improve a draft" | No |
ubiquitous-language |
Writing | "extract a glossary", "ubiquitous language", "DDD terms" | No |
obsidian-vault |
Writing | "find a note in Obsidian", "create an Obsidian note" | No |
Note
The
obsidian-vaultskill hard-codes the vault path/mnt/d/Obsidian Vault/AI Research/. If your vault lives elsewhere, editobsidian-vault/SKILL.mdafter install and replace the path.
3.2. By theme
Planning & Design (6): write-a-prd, prd-to-plan, prd-to-issues, grill-me, design-an-interface, request-refactor-plan.
Development (5): tdd, triage-issue, improve-codebase-architecture, migrate-to-shoehorn, scaffold-exercises.
Tooling & Setup (4): setup-pre-commit, git-guardrails-claude-code, github-triage, qa.
Writing & Knowledge (4): write-a-skill, edit-article, ubiquitous-language, obsidian-vault.
4. Skill Reference
Each entry summarises the skill's purpose, its trigger phrases, what it produces, and the workflow it follows. All summaries are drawn directly from each SKILL.md's description: field and body — there is no fabricated functionality.
4.1. write-a-prd
Purpose. Turn a problem statement into a Product Requirements Document, then file it as a GitHub issue.
Trigger. "write a PRD", "create a product requirements document", "plan a new feature".
Workflow.
- Asks for a long, detailed description of the problem and any candidate solutions.
- Explores the repo to verify your assertions and understand the current codebase.
- Interviews you relentlessly, walking down each branch of the design tree, resolving dependencies one decision at a time.
- Sketches the major modules to build/modify, actively looking to extract deep modules with simple, testable interfaces.
- Confirms which modules need tests written for them.
- Writes a PRD using a template with sections: Problem Statement, Solution, User Stories (numbered, "As an X I want Y so that Z" format), Implementation Decisions, Testing Decisions, Out of Scope, Further Notes.
- Submits the PRD as a GitHub issue.
Output. A new GitHub issue containing the full PRD body.
Tip
The skill will skip steps it considers unnecessary. Push back if it skips an interview step you wanted — be explicit: "Don't skip the interview, I want to grill the design first."
4.2. prd-to-plan
Purpose. Convert an in-context PRD into a phased implementation plan saved locally.
Trigger. "break down a PRD", "create an implementation plan", "plan phases from a PRD", "tracer bullets".
Workflow.
- Confirms the PRD is in conversation context (or asks for it).
- Explores the codebase to understand current architecture and integration layers.
- Identifies durable architectural decisions (route shapes, schema shape, key data models, auth approach, third-party boundaries).
- Drafts vertical slices (tracer bullets) — each slice cuts through every layer end-to-end.
- Quizzes you on granularity and dependencies; iterates until approved.
- Writes
./plans/<feature-name>.mdwith sections for architectural decisions and per-phase blocks (Title, User stories, What to build, Acceptance criteria).
Output. A Markdown plan file under ./plans/. Creates the directory if missing.
Important
Phases must NOT include specific file names, function names, or implementation details that are likely to change. They DO include durable decisions like route paths, schema shapes, and data model names. The plan is meant to outlive the first refactor.
4.3. prd-to-issues
Purpose. Break a PRD into independently-grabbable GitHub issues.
Trigger. "convert a PRD to issues", "create implementation tickets", "break a PRD into work items".
Workflow.
- Asks for the PRD GitHub issue number; fetches it with
gh issue view <number>if not in context. - Explores the codebase if not already explored.
- Drafts vertical-slice issues. Each is tagged
HITL(human-in-the-loop, requires judgment) orAFK(away-from-keyboard, can be done autonomously). Prefers AFK. - Presents the breakdown: Title, Type (HITL/AFK), Blocked by, User stories covered. Asks about granularity, dependencies, splits/merges, and HITL/AFK classification.
- Iterates until you approve.
- Creates each issue with
gh issue createin dependency order so "Blocked by" can reference real numbers. Does NOT close or modify the parent PRD.
Issue body template. Parent PRD link, "What to build", "Acceptance criteria" checklist, "Blocked by" (or "None — can start immediately"), "User stories addressed".
4.4. grill-me
Purpose. Force a thorough Q&A pass over a plan or design.
Trigger. "stress-test a plan", "get grilled on my design", "grill me".
Workflow. Interviews you relentlessly, walking each branch of the decision tree and resolving dependencies one at a time. Asks one question at a time. Provides its recommended answer with each question. If a question can be answered by exploring the codebase, it explores instead of asking.
Output. A shared mental model captured in conversation — no file is written.
Tip
Issue #16 in the upstream repo notes that the skill sometimes asks 10+ questions at once instead of one-by-one. If that happens, push back: "One at a time, please."
4.5. design-an-interface
Purpose. Generate radically different interface designs for a module using parallel sub-agents, then compare them.
Trigger. "design an API", "explore interface options", "compare module shapes", "design it twice".
Workflow.
- Gathers requirements: what problem the module solves, who the callers are, key operations, constraints, what should be hidden vs exposed.
- Spawns 3+ sub-agents in parallel using the Task tool. Each gets a different design constraint:
- Agent 1: minimise method count (1-3 methods max).
- Agent 2: maximise flexibility.
- Agent 3: optimise for the most common case.
- Agent 4: take inspiration from a specific paradigm or library.
- Each agent outputs an interface signature, a usage example, what it hides internally, and trade-offs.
- Presents designs sequentially.
- Compares them on interface simplicity, generality, implementation efficiency, depth (small interface hiding significant complexity = good), and ease of correct vs incorrect use. Discusses in prose, not tables.
- Synthesises — often the best design combines insights from multiple options.
Theory. Anchored in John Ousterhout's "A Philosophy of Software Design" — chapter "Design It Twice".
4.6. request-refactor-plan
Purpose. Draft a tiny-commits refactor plan and file it as a GitHub issue.
Trigger. "plan a refactor", "create a refactoring RFC", "break a refactor into safe incremental steps".
Workflow.
- Asks for a long, detailed problem description and any candidate ideas.
- Explores the repo to verify assertions.
- Asks if you've considered alternatives; presents alternatives.
- Interviews about implementation in extreme detail.
- Hammers out exact scope — what's in, what's out.
- Checks test coverage; asks about your test plan if coverage is thin.
- Breaks the work into tiny commits ("each step as small as possible, so that you can always see the program working" — Martin Fowler).
- Creates a GitHub issue using a template with: Problem Statement, Solution, Commits (long detailed plain-English plan), Decision Document (modules, interfaces, technical clarifications, schema/API contracts, interactions — no file paths or code snippets), Testing Decisions, Out of Scope, Further Notes.
4.7. tdd
Purpose. Test-driven development with a red-green-refactor loop, one vertical slice at a time.
Trigger. "TDD this", "red-green-refactor", "build a feature with tests first", "fix this bug with TDD".
Anti-pattern flagged. Horizontal slicing — writing all tests first then all implementation produces tests of imagined behavior coupled to data shape. The skill enforces vertical slicing: one test → one implementation → repeat.
Workflow.
- Plan. Confirm interface changes, prioritise behaviors to test, identify deep-module opportunities, design for testability, get user approval.
- Tracer bullet. Write ONE test for ONE behavior. RED → fails. GREEN → minimal code to pass.
- Incremental loop. For each remaining behavior: RED → next test fails. GREEN → minimal code passes.
- Refactor. Only after all tests pass. Extract duplication, deepen modules, apply SOLID where natural. Run tests after each step.
Per-cycle checklist. Test describes behavior not implementation; uses public interface only; would survive internal refactor; code is minimal for this test; no speculative features added.
Bundled references. deep-modules.md, interface-design.md, mocking.md, refactoring.md, tests.md — see the Admin Guide for what each covers.
Warning
Never refactor while RED. Get to GREEN first. The skill explicitly enforces this.
4.8. triage-issue
Purpose. Investigate a bug, find its root cause, and create a GitHub issue with a TDD fix plan.
Trigger. "triage this bug", "investigate and plan a fix", "file an issue".
Workflow.
- Captures the problem with at most ONE clarifying question. Then starts investigating.
- Uses the
Agenttool withsubagent_type=Exploreto find: where the bug manifests, what code path is involved, why it fails (root cause not symptom), what related code exists. - Identifies the minimal fix and which behaviors need test coverage.
- Designs a TDD fix plan as ordered RED-GREEN cycles.
- Creates the issue with
gh issue create(no review prompt) using a template: Problem, Root Cause Analysis, TDD Fix Plan, Acceptance Criteria.
Durability rule. Suggestions must survive radical codebase changes — describe behaviors and contracts, not internal structure.
4.9. improve-codebase-architecture
Purpose. Find architectural improvement opportunities (especially shallow modules) and propose deepening refactors as GitHub issues.
Trigger. "improve architecture", "find refactoring opportunities", "consolidate tightly-coupled modules", "make a codebase more AI-navigable".
Workflow.
- Explores the codebase using
subagent_type=Explore. Looks for friction signals: bouncing between many small files to understand one concept, modules where the interface is nearly as complex as the implementation, pure functions extracted just for testability while real bugs hide in calls, tightly-coupled modules with integration risk in seams. - Presents a numbered list of candidates with: cluster, why they're coupled, dependency category, test impact.
- After you pick a candidate, frames the problem space — constraints, dependencies, an illustrative code sketch (NOT a proposal).
- Spawns 3+ parallel sub-agents to design radically different interfaces.
- Compares designs in prose and gives an opinionated recommendation.
- Creates a GitHub refactor RFC issue with: Problem, Proposed Interface, Dependency Strategy, Testing Strategy, Implementation Recommendations.
Dependency categories. In-process / Local-substitutable / Remote-but-owned (Ports & Adapters) / True external (Mock).
4.10. migrate-to-shoehorn
Purpose. Replace as type assertions in test files with @total-typescript/shoehorn.
Trigger. "migrate to shoehorn", "replace as in tests", "need partial test data".
Migration table.
| Pattern | Replacement |
|---|---|
obj as Type |
fromPartial(obj) |
obj as unknown as Type |
fromAny(obj) |
| Force full object | fromExact(obj) |
Workflow.
- Asks which test files have
asassertions, whether large objects with few-needed-properties are involved, and whether intentionally-wrong data is needed. - Installs
@total-typescript/shoehornas a dev dependency. - Finds candidates with
grep -r " as [A-Z]" --include="*.test.ts" --include="*.spec.ts". - Replaces
as TypewithfromPartial()andas unknown as TypewithfromAny(). - Adds imports and runs the type checker.
Warning
Test code only. The skill explicitly forbids using shoehorn in production code.
4.11. scaffold-exercises
Purpose. Create the directory structure for tutorial exercises that pass pnpm ai-hero-cli internal lint.
Trigger. "scaffold exercises", "create exercise stubs", "set up a new course section".
Conventions.
- Sections:
XX-section-name/insideexercises/. - Exercises:
XX.YY-exercise-name/inside a section. - Names dash-cased (lowercase, hyphens).
- Each exercise needs at least one of
problem/,solution/,explainer/. Default when stubbing:explainer/. - Each subfolder needs a
readme.mdthat is non-empty and has no broken links. - A subfolder with code also needs a
main.ts(>1 line). Readme-only is fine for stubs.
Workflow. Parse the plan → create directories with mkdir -p → write minimal stub READMEs (a title + description) → run pnpm ai-hero-cli internal lint → fix errors and iterate.
Renames. Use git mv (not mv) to preserve history.
4.12. setup-pre-commit
Purpose. Set up Husky + lint-staged + Prettier with type-check and test scripts in the pre-commit hook.
Trigger. "set up Husky", "configure lint-staged", "add pre-commit hooks".
Workflow.
- Detects package manager (
package-lock.json→ npm,pnpm-lock.yaml→ pnpm,yarn.lock→ yarn,bun.lockb→ bun; defaults to npm). - Installs
husky,lint-staged,prettieras devDependencies. - Initialises Husky (
npx husky init). - Writes
.husky/pre-commitcontaining:npx lint-staged,npm run typecheck,npm run test(substituting the detected package manager and omitting the lines for missing scripts). - Writes
.lintstagedrcwith{"*": "prettier --ignore-unknown --write"}. - Writes
.prettierrcif missing (defaults:useTabs: false,tabWidth: 2,printWidth: 80,singleQuote: false,trailingComma: "es5",semi: true,arrowParens: "always"). - Verifies via a checklist and commits with the message
Add pre-commit hooks (husky + lint-staged + prettier)— a smoke test of the new hook.
Note
Husky v9+ does not need shebangs in hook files. The skill writes hooks without them.
4.13. git-guardrails-claude-code
Purpose. Block dangerous git commands inside Claude Code via a PreToolUse hook before they execute.
Trigger. "block dangerous git commands", "add git safety hooks", "block git push/reset".
Blocks.
| Command pattern | Why blocked |
|---|---|
git push (all variants, including --force) |
Pushing remote state by mistake |
git reset --hard |
Discards uncommitted work |
git clean -f / git clean -fd |
Deletes untracked files |
git branch -D |
Force-deletes a branch |
git checkout . / git restore . |
Discards working-tree changes |
When blocked, Claude sees a stderr message stating it does not have authority for these commands and exits with code 2.
Workflow.
- Asks scope — project (
.claude/settings.json) or global (~/.claude/settings.json). - Copies
scripts/block-dangerous-git.shinto.claude/hooks/(or~/.claude/hooks/) and makes it executable. - Adds a
PreToolUsematcher to the chosen settings file. If the file already exists, merges into the existinghooks.PreToolUsearray — never overwrites. - Asks if you want to add or remove patterns; edits the script accordingly.
- Verifies with:
echo '{"tool_input":{"command":"git push origin main"}}' | <path-to-script>— should exit 2 and print a BLOCKED message.
Caution
The hook runs for every Bash tool call. If
jqis missing on your system, the script will fail and the hook will not block anything. Installjqfirst.
4.14. github-triage
Purpose. Triage GitHub issues through a label-based state machine with grilling sessions.
Trigger. "triage issues", "review incoming bugs or feature requests", "prepare issues for an AFK agent", "manage issue workflow".
Labels. Two axes — Category (bug, enhancement) and State (needs-triage, needs-info, ready-for-agent, ready-for-human, wontfix). Every issue should have exactly one of each. Conflicts are flagged before any action.
State transitions. Documented as a transition table:
| Current state | Can transition to | Trigger |
|---|---|---|
| unlabeled | needs-triage / ready-for-agent / ready-for-human / wontfix | Skill or maintainer |
| needs-triage | needs-info / ready-for-agent / ready-for-human / wontfix | Maintainer via skill |
| needs-info | needs-triage | Skill (detects reporter reply) |
Workflows. "Show what needs attention" (groups unlabeled, needs-triage, and needs-info-with-new-activity, oldest first), "Triage a specific issue" (gather context, recommend, reproduce bugs, grill if needed, apply outcome with preview), "Quick state override" (trust the maintainer, but still preview).
Outputs.
ready-for-agent→ posts an agent brief comment (template inAGENT-BRIEF.md).ready-for-human→ posts a brief explaining why a human is needed.needs-info→ posts triage notes (Established / Need from you).wontfix (bug)→ polite comment + close.wontfix (enhancement)→ write to.out-of-scope/<concept>.md(template inOUT-OF-SCOPE.md), comment, close.
Important
Before posting any comment or applying any label, the skill ALWAYS shows a preview of exactly what will be posted and which labels will change, then waits for confirmation.
4.15. qa
Purpose. Conversational QA — you describe bugs, the skill files them as durable GitHub issues.
Trigger. "report bugs", "do QA", "file issues conversationally", "QA session".
Workflow.
- Listens to your description. Asks at most 2-3 short clarifying questions (expected vs actual, repro steps, consistent vs intermittent).
- Kicks off a background
Agent(subagent_type=Explore) to learn the domain language and behavior boundary — but does NOT cite specific files, line numbers, or internal modules in the issue. - Decides single issue vs. breakdown:
- Break down when the fix spans multiple independent areas, has separable concerns, or has multiple distinct failure modes.
- Single when one behavior is wrong in one place.
- Files with
gh issue create(no review prompt). Uses two body templates — single-issue and breakdown — both with What happened / What I expected / Steps to reproduce / (Blocked by, for breakdowns) / Additional context. - Continues until you say you're done.
Issue rules. No file paths or line numbers (they go stale). Use the project's domain language (check UBIQUITOUS_LANGUAGE.md if present). Describe behaviors, not code. Reproduction steps are mandatory. Concise — readable in 30 seconds.
4.16. write-a-skill
Purpose. Bootstrap a new skill with proper structure, progressive disclosure, and bundled resources.
Trigger. "create a new skill", "write a skill", "build a skill".
Workflow.
- Gathers requirements: task/domain, specific use cases, whether scripts are needed, reference materials.
- Drafts
SKILL.md(concise instructions) plus optionalREFERENCE.md/EXAMPLES.md/scripts/if needed. - Reviews with you: coverage, clarity, depth.
Recommended structure.
skill-name/
├── SKILL.md # Main instructions (required)
├── REFERENCE.md # Detailed docs (if needed)
├── EXAMPLES.md # Usage examples (if needed)
└── scripts/ # Utility scripts (if needed)
└── helper.js
Description requirements. Max 1024 characters. Third person. First sentence: what it does. Second: "Use when [specific triggers]." The description is the ONLY thing the agent sees when deciding which skill to load.
When to add scripts. Operation is deterministic, the same code would be generated repeatedly, errors need explicit handling.
When to split files. SKILL.md exceeds 100 lines, content has distinct domains, advanced features are rarely needed.
4.17. edit-article
Purpose. Improve article drafts by restructuring sections, sharpening clarity, and tightening prose.
Trigger. "edit this article", "revise my draft", "improve clarity".
Workflow.
- Divides the article into sections by heading. Treats information as a directed acyclic graph — sections must respect their dependencies. Confirms sections with you.
- For each section, rewrites for clarity, coherence, and flow with a maximum of 240 characters per paragraph.
Note
The 240-char-per-paragraph cap forces short, scannable paragraphs. Longer technical paragraphs may need to be split or argued for explicitly.
4.18. ubiquitous-language
Purpose. Extract a Domain-Driven-Design ubiquitous-language glossary from the current conversation.
Trigger. "define domain terms", "build a glossary", "harden terminology", "ubiquitous language", "domain model", "DDD".
Workflow.
- Scans the conversation for domain-relevant nouns, verbs, and concepts.
- Identifies problems: same word for different concepts (ambiguity), different words for the same concept (synonyms), vague or overloaded terms.
- Proposes a canonical glossary with opinionated term choices.
- Writes
UBIQUITOUS_LANGUAGE.mdwith grouped tables (Term / Definition / Aliases to avoid), relationships (cardinality), example dialogue (3-5 dev/domain-expert exchanges), and flagged ambiguities. - On re-run in the same conversation, reads the existing file, incorporates new terms, updates definitions, and rewrites the example dialogue.
4.19. obsidian-vault
Purpose. Search, create, and manage notes in an Obsidian vault using wikilinks and index notes.
Trigger. "find a note", "create a note", "organise notes in Obsidian".
Default vault path. /mnt/d/Obsidian Vault/AI Research/ — edit obsidian-vault/SKILL.md if your vault is elsewhere.
Conventions.
- Mostly flat at the root level.
- Index notes aggregate related topics (e.g.,
Skills Index.md,RAG Index.md). - Title Case for all note names.
- No folders for organisation — links and index notes only.
[[wikilinks]]syntax. Notes link to dependencies/related notes at the bottom.
Workflows. Search by filename (find ... -name "*.md" | grep -i "keyword"), search by content (grep -rl "keyword" ... --include="*.md"), create a new note (Title Case, write as a unit of learning, add wikilinks at the bottom), find backlinks (grep -rl "\\[\\[Note Title\\]\\]"), find index notes (find ... -name "*Index*").
5. Using a Skill — End-to-End Walkthroughs
The following recipes show real, common flows.
5.1. Recipe: Plan → Implement → Ship
Goal: take a fresh idea from a one-liner to merged code with tests.
- Brainstorm with
grill-me— install and invoke. Answer questions one at a time until the design tree is fully resolved. - Capture the plan with
write-a-prd— install if you haven't. Walks you from problem statement through user stories and modules; files the PRD as a GitHub issue. - Slice with
prd-to-issues— install. Reference the PRD issue. Approve the breakdown. Issues are filed in dependency order withBlocked byreferences. - Implement with
tdd— install. Pick the first issue. Walk the red-green-refactor loop one vertical slice at a time.
Tip
If at any point the design starts to drift, drop back to
grill-mefor a focused interrogation of the open question.
5.2. Recipe: Triage a bug end-to-end
Goal: turn a vague bug report into a fix plan.
triage-issue— install. Describe the bug in one sentence. The skill explores the codebase, finds the root cause, and files an issue with a TDD fix plan.- Implement with
tdd— pick up the issue from step 1.
5.3. Recipe: Refactor a tightly-coupled subsystem
improve-codebase-architecture— install. Skill explores the codebase and proposes deepening candidates.- Pick a candidate. Skill spawns parallel sub-agents to design 3+ radically different interfaces.
- Skill files a refactor RFC issue with the chosen interface, dependency strategy, and testing strategy.
request-refactor-plan(optional) — for very large refactors, you can layer this on top to break the chosen design into tiny commits.tdd— implement.
5.4. Recipe: Wrap a project in safety rails
Run all three setup skills early in a new project:
npx skills@latest add mattpocock/skills/setup-pre-commit
npx skills@latest add mattpocock/skills/git-guardrails-claude-code
npx skills@latest add mattpocock/skills/github-triage
In one Claude Code session: invoke setup-pre-commit (Husky + lint-staged + Prettier + typecheck + tests), then git-guardrails-claude-code (PreToolUse hook against destructive git), then start using github-triage for any incoming issues.
5.5. Recipe: Document the domain alongside the code
Goal: keep a living glossary as the system grows.
ubiquitous-language— install. Run it after major design discussions. Each run readsUBIQUITOUS_LANGUAGE.md, merges new terms, and rewrites the example dialogue.qa— install. References the glossary when filing issues so domain language stays consistent.obsidian-vault— if you keep parallel notes, link the same terms in your vault for cross-referencing.
6. Combining Skills
The skills compose deliberately. Understanding the handoff points helps you avoid redundant work.
6.1. Planning chain
grill-me → write-a-prd → prd-to-plan OR prd-to-issues → tdd
↑
improve-codebase-architecture
request-refactor-plan
grill-meclarifies intent before any artefact is written.write-a-prdfiles the PRD as an issue (durable record).prd-to-planwrites a local plan file when you're not yet ready to file issues.prd-to-issuesfiles issues when you're ready to dispatch work.request-refactor-planandimprove-codebase-architectureproduce refactor RFCs that feed the sametddloop.
6.2. Quality chain
qafiles conversational bug reports.triage-issueinvestigates a single bug deeply and produces a TDD fix plan.github-triageruns the full state-machine workflow over many issues, batching grilling sessions and producing agent briefs.
6.3. Cross-skill conventions
The pack uses three shared conventions that show up in multiple skills:
| Convention | Where it appears |
|---|---|
| Vertical slices (tracer bullets) | tdd, prd-to-plan, prd-to-issues |
| Deep modules (small interface, large implementation) | tdd, write-a-prd, design-an-interface, improve-codebase-architecture |
gh issue create for durable records |
write-a-prd, prd-to-issues, request-refactor-plan, triage-issue, qa, github-triage, improve-codebase-architecture |
Note
When two skills both want to file an issue (e.g.,
triage-issueandqa), use the one that matches the depth of investigation.triage-issuedoes a full root-cause exploration;qadoes light clarification and bulk filing.
7. Customisation
Each skill is just a Markdown file. After installing, you can edit .claude/skills/<skill-name>/SKILL.md directly.
Common edits:
- Vault path —
obsidian-vault/SKILL.mdhard-codes/mnt/d/Obsidian Vault/AI Research/. Replace with your path. - Blocked git patterns — edit
git-guardrails-claude-code/scripts/block-dangerous-git.shto add or remove entries from theDANGEROUS_PATTERNSarray. - Pre-commit script list —
setup-pre-commit/SKILL.mdwritesnpx lint-staged,npm run typecheck,npm run test. If your repo has different scripts (e.g.,lint,e2e), swap them in. - Issue templates — every skill that files issues has its template inline. Reword to match your repo's conventions if needed.
- Prettier defaults —
setup-pre-commit/SKILL.mdships opinionated defaults; edit them in-place.
Tip
If you change a skill, keep a note of what you changed and why. Re-running
npx skills@latest add <skill>will overwrite your edits — the installer copies fresh.
8. Troubleshooting
Error: gh: command not found
Cause. A skill that files issues has tried to call gh issue create but the GitHub CLI is not installed.
Solution.
- Install the GitHub CLI from
https://cli.github.com/. - Authenticate:
gh auth login. - Re-run the skill.
Prevention. Install and authenticate gh before installing write-a-prd, prd-to-issues, request-refactor-plan, triage-issue, qa, github-triage, or improve-codebase-architecture.
Error: hook not blocking dangerous git commands
Cause. The git-guardrails-claude-code hook script is missing jq, is not executable, or is not registered in settings.json.
Solution.
- Verify
jqis installed:jq --version. - Verify the script is executable:
ls -l .claude/hooks/block-dangerous-git.shshould showxpermissions. - Verify it is registered:
cat .claude/settings.json | jq '.hooks.PreToolUse'. - Test manually:
echo '{"tool_input":{"command":"git push origin main"}}' | .claude/hooks/block-dangerous-git.sh— should exit 2 with aBLOCKEDmessage.
Prevention. Run the verification command in step 4 immediately after installing the skill.
Error: grill-me asks ten questions at once instead of one
Cause. Known behavior — see issue #16 in the upstream repo.
Solution. Push back explicitly: "One at a time, please. Recommend an answer with each."
Prevention. None at the moment — re-prompt as needed.
Error: setup-pre-commit writes npm run typecheck but my repo has no typecheck script
Cause. The skill checks for missing typecheck and test scripts in package.json and is supposed to omit those lines while telling you. If the omission did not happen, the script reading hit a permissions or parsing issue.
Solution.
- Open
.husky/pre-commit. - Delete the
npm run typecheckline (or replace with your actual script — e.g.,npm run lint). - Commit again.
Prevention. Add the expected scripts to package.json before running the skill, or accept that you'll edit .husky/pre-commit once.
Error: npx skills@latest add ... puts the skill in the wrong folder
Cause. Issue #31 in the upstream repo notes occasional wrong-folder installs.
Solution.
- Locate the misplaced directory.
mvit to.claude/skills/<skill-name>/.- Verify Claude Code picks it up (it watches
.claude/skills/).
Prevention. Run npx skills@latest add ... from the repo root only.
Error: skill description appears to truncate mid-word
Cause. Skill descriptions are capped at 1024 characters. Some are very close to the limit. The agent brief example in github-triage/AGENT-BRIEF.md documents this exact bug template.
Solution. Shorten the description manually inside the installed SKILL.md and reload Claude Code.
Error: obsidian-vault skill does nothing useful
Cause. The vault path /mnt/d/Obsidian Vault/AI Research/ is hard-coded for Matt Pocock's WSL setup.
Solution. Edit .claude/skills/obsidian-vault/SKILL.md and replace every occurrence of the path with your vault location.
Error: migrate-to-shoehorn finds no candidates
Cause. The grep pattern " as [A-Z]" only matches assertions where as is followed by a capitalised type name. Lowercase types or assertions across line breaks are not detected.
Solution. Run grep -rn " as " --include="*.test.ts" --include="*.spec.ts" manually to confirm; copy the candidates back to the agent.
Error: improve-codebase-architecture finds nothing interesting
Cause. The skill works by sensing friction during exploration. In a small or already-deep codebase, friction signals are absent.
Solution. Re-run with a specific module under investigation: "Look specifically at the auth/ subsystem — I think the session module is shallow."
9. FAQ
Q: Do I need every skill?
No. Install only the ones you'll use. Each is independent and lives in its own directory under .claude/skills/.
Q: How does Claude Code decide which skill to load?
It reads the description: field in each SKILL.md and picks the one whose description matches the current conversation. The write-a-skill skill explains this in detail — descriptions are surfaced in the system prompt.
Q: Can I use these skills on non-TypeScript projects?
Most of them, yes. Some are TypeScript-specific by name or example: migrate-to-shoehorn (TypeScript-only), setup-pre-commit (Node-only because of Husky), tdd examples are TypeScript but the methodology is language-agnostic. The PRD/refactor/issue/QA/architecture/triage skills are project-agnostic.
Q: Do the skills modify files outside .claude/skills/?
Some do — by design.
setup-pre-commitwrites.husky/pre-commit,.lintstagedrc,.prettierrc, and updatespackage.json.git-guardrails-claude-codewrites.claude/hooks/block-dangerous-git.shand updates.claude/settings.json(or~/.claude/settings.jsonif global).prd-to-planwrites./plans/<name>.md.ubiquitous-languagewrites./UBIQUITOUS_LANGUAGE.md.scaffold-exercisescreatesexercises/...directory trees.github-triagewrites.out-of-scope/<concept>.mdfor rejected enhancement requests.- All issue-creating skills call
gh issue create(no local file writes for those).
Q: Can two skills be invoked in the same conversation?
Yes. Claude Code can load several skills concurrently. The skills are designed to compose — see section 6 for chains.
Q: How are the skills versioned?
The repo is plain Markdown on main. npx skills@latest add ... fetches the latest commit's content. No semantic version is published. Pin a commit by editing the installer URL if you need stability — see the Admin Guide.
Q: Does the pack support a marketplace?
Issue #21 in the upstream repo proposes adding marketplace.json for plugin marketplace support; issue #3 closed in favour of native Claude Code marketplace integration. As of source commit 651eab0, no marketplace file exists in the repo.
Q: Is the pack open-source?
MIT licensed (see LICENSE). Issue #6 (closed) was the request that added the license.
Q: Where does the design philosophy come from?
Two recurring sources are cited inline:
- John Ousterhout's A Philosophy of Software Design — deep modules, "Design It Twice".
- Martin Fowler — "make each refactoring step as small as possible, so that you can always see the program working."
Domain-Driven Design (Eric Evans) underlies the ubiquitous-language skill.
Q: Where do I report bugs or request skills?
Open an issue at the upstream repository on GitHub. The maintainer triages with the github-triage workflow described in section 4.14.