Loading blog posts...
Loading blog posts...
Loading...

A coding agent can produce plausible code while following a weak process. Matt Pocock’s engineering skills address that gap by giving agents repeatable ways to plan, create tickets, implement changes, test behavior, and review work.
The goal isn’t more automation for its own sake. It’s tighter control over how an agent reaches an engineering decision.
Before installing anything, confirm these requirements:
A skill is a small instruction package that teaches an agent a repeatable method for one job. Skills compose well because one skill’s output can become another skill’s input.
Claude Code users who want managed, read-only skills can install the official plugin:
bash/plugin install mattpocock-skills
This route receives updates through Claude Code’s plugin system. The files are managed rather than edited directly, which fits teams that want a consistent shared installation.
The Claude Code plugin documentation explains how plugin discovery, installation, and management work.
Warning
Do not install the Claude Code plugin and the skills.sh copy together. Duplicate installations can expose every skill twice and leave the agent unsure which version to follow.
For Codex, Cursor, GitHub Copilot, Amp, or an editable Claude Code installation, use the skills.sh CLI:
bashnpx skills@latest add mattpocock/skills
Select the required skills during installation. Include setup-matt-pocock-skills, since it connects the general skill set to the repository’s actual conventions.
The CLI installs ordinary files that developers can inspect, version, and edit. The skills.sh documentation covers supported agents and package management, while Cursor’s Agent Skills documentation explains how Cursor discovers and applies skill files.
Updates are explicit rather than automatic:
bashnpx skills update
That separation matters in regulated or tightly reviewed repositories. Your team can inspect upstream changes before bringing them into active engineering workflows.
| Installation route | Best fit | Editable | Update model |
|---|---|---|---|
| Claude Code plugin | Managed Claude Code setup | No | Plugin system |
skills.sh CLI | Codex, Cursor, Copilot, Amp | Yes | Manual update |
skills.sh with Claude Code | Custom Claude workflows | Yes | Manual update |
Why it matters: One installation route prevents duplicate skills while preserving a clear update and review policy.
An existing project doesn’t need to restart its architecture, backlog, tests, or documentation. Setup reads what’s already present and records repository-specific decisions around it.
Check the working tree before asking an agent to change project instructions:
bashgit status
If the tree contains intentional work, either commit it or stash it:
bashgit add. git commit -m "Save work before agent skills setup"
Or:
bashgit stash push -m "Before Matt Pocock skills setup"
This creates a clean comparison point. Setup may propose changes to CLAUDE.md, AGENTS.md, or files under docs/agents/, so a clean diff makes every addition visible.
Important
Treat setup as a repository configuration change. Review it with the same care as a build configuration or CI policy change.
Open the repository in the chosen coding agent, then run:
bash/setup-matt-pocock-skills
The setup skill reads the Git remote and checks existing CLAUDE.md and CONTEXT.md files. It then proposes repository-specific instructions instead of assuming a blank project.
Review each proposed change before accepting it. The setup can record decisions under docs/agents/ and add an Agent skills section to CLAUDE.md or AGENTS.md.
This is where human control shows up most clearly. The skill can detect context and propose conventions, but the developer confirms what becomes repository policy.
For GitHub, the workflow uses the gh CLI. GitLab uses glab, while local mode works without a remote. Linear, Jira, Azure DevOps, Beads, Gitea, and other trackers can also work. Their programmatic workflow must be described in docs/agents/issue-tracker.md so the agent knows how to create, read, link, and update work items.
GitHub Issues and local Markdown are alternatives, not layers. Choosing both creates two possible sources of truth and makes completion state unreliable.
Setup also establishes:
That boundary is useful. The repository owns its engineering conventions, while the installed skills supply repeatable procedures.
Why it matters: Existing repositories gain a controlled agent workflow without discarding their architecture or current delivery system.
The new-project path is shorter because there are fewer existing conventions to reconcile. It still benefits from explicit domain language and issue-tracker rules before the first large feature.
Create the repository and its first agent instruction file:
bashgit init touch AGENTS.md
Install the skills through the selected route, then run:
bash/setup-matt-pocock-skills
Choose the issue tracker and establish domain vocabulary before planning a large feature. Domain vocabulary gives agents stable names for entities, boundaries, states, and business operations.
A new repository can define these rules before code creates conflicting terminology. An existing repository instead asks setup to discover and document the terminology already embedded in code and documentation.
The setup is safe at either stage. The difference is whether the skill records established decisions or helps formalize early ones.
For teams monitoring broader changes in coding agents, AI Developer Trends: Agents, Local Models & Code Safety gives related context on agent control and code safety.
Why it matters: Early vocabulary and tracker decisions reduce ambiguity before multiple agent sessions begin producing code.
The skill set is easier to understand as an engineering lifecycle than as a command list. Start with the current problem, then choose the smallest skill that produces the next required artifact.
| Moment | Skill | Purpose |
|---|---|---|
| Getting started | /setup-matt-pocock-skills | Configures repository-specific tracker, documentation, and agent conventions. |
| Getting started | /ask-matt | Identifies which skill or workflow fits the current situation. |
| Main delivery | /grill-with-docs | Questions an idea and records the resulting decisions. |
| Main delivery | /to-spec | Converts a settled discussion into a written specification. |
| Main delivery | /to-tickets | Divides a specification into agent-sized tickets and dependencies. |
| Main delivery | /implement | Completes one defined unit of work using test-first development. |
| Main delivery | /code-review | Reviews implementation against the specification and repository standards. |
| Shaping | /wayfinder | Helps find a viable direction when the solution is unclear. |
| Shaping | /prototype | Produces a limited experiment to test an uncertain approach. |
| Shaping | /research | Investigates a technical question before a decision is made. |
| Upkeep | /improve-codebase-architecture | Identifies and plans focused architectural improvements. |
| Upkeep | /diagnosing-bugs | Structures bug investigation around evidence and competing explanations. |
| Upkeep | /resolving-merge-conflicts | Guides conflict resolution while preserving intended behavior. |
| Upkeep | /triage | Classifies incoming issues and determines the next action. |
| Upkeep | /wizard | Guides a structured multi-step repository task. |
| Human workflows | /grill-me | Questions a person to expose assumptions and missing decisions. |
| Human workflows | /handoff | Creates context for another person or agent session. |
| Human workflows | /to-questionnaire | Converts uncertainty into a set of answerable questions. |
| Human workflows | /teach | Explains a codebase concept or engineering topic. |
| Human workflows | /wait-what | Stops progress and clarifies confusing or contradictory context. |
| Human workflows | /writing-for-agents | Produces instructions designed for reliable agent interpretation. |
| Shared methods | /codebase-design | Applies repeatable principles for organizing code and boundaries. |
| Shared methods | /domain-modeling | Defines domain concepts, relationships, and language. |
| Shared methods | /grilling | Supplies the questioning method used to uncover hidden assumptions. |
| Shared methods | /tdd | Supplies the test-first method used during implementation. |
When the correct entry point is unclear, use:
bash/ask-matt
This avoids starting with implementation when the real gap is an unsettled requirement, missing research, or an undefined repository convention.
Start by testing the idea through structured questioning:
bash/grill-with-docs
The result is a recorded set of decisions. Once those decisions are stable, convert them into a specification:
bash/to-spec
The specification becomes the input for ticket design:
bash/to-tickets
Each approved ticket can then enter a fresh implementation context:
bash/implement
After implementation, review the result against the specification and repository standards:
bash/code-review
The sequence isn’t mandatory ceremony for every change. If a complete change fits inside one context window and has clear acceptance criteria, /implement can handle it directly without creating tickets.
For larger changes, the artifacts protect information between agent sessions. Conversation becomes a specification, the specification becomes tickets, and each ticket becomes a reviewable implementation.
Why it matters: Explicit artifact handoffs prevent decisions from disappearing when an agent’s context changes.

A ticket is a self-contained unit that a fresh agent session can understand and finish. It needs observable acceptance criteria, explicit blockers, and one narrow behavior that can be demonstrated.
A useful ticket cuts through the schema, API, interface, and tests needed for one small behavior. It does not place all database work in one ticket and all interface work in another.
The skill author documented a 26-ticket case organized into corpus, producer, aggregator, and selector layers. It required roughly 20 agent runs per closed ticket, with about three quarters of those runs spent on rework.
The lesson isn’t that 26 tickets is inherently excessive. It’s that a technically neat decomposition can create expensive coordination when individual tickets don’t produce independently demonstrable behavior.
After reviewing a proposed ticket, ask what can be demonstrated when it closes. If the answer depends on several unfinished tickets, the slice is probably too horizontal.
Wide renames and shared-symbol migrations are an exception. Those changes can follow an expand, migrate, contract sequence: introduce compatibility, move callers, then remove the old symbol.

Read a dependency as a directed blocking edge. If ticket B says Blocked by A, B can’t start until A closes.
Tickets with no open blockers form the current frontier. Those are the tickets that independent agent sessions can safely begin.
/to-tickets publishes blockers first. Before publication, it shows a numbered breakdown and asks the user to merge, split, or correct tickets.
The human approves this graph. The skill proposes sequencing, but it doesn’t own scope or architecture.
Tip
Keep /to-spec and /to-tickets in the same context for a large specification. This reduces information loss between the design decisions and the ticket graph.
On GitHub, create an issue with native blockers:
bashgh issue create --blocked-by 12,15
Create a child issue under a parent:
bashgh issue create --parent <number>
Or attach an existing issue as a sub-issue:
bashgh issue edit <parent> --add-sub-issue <number>
Native relationships are preferable to plain body text because GitHub can expose blockers and sub-issues as structured data. The GitHub issue dependencies documentation explains the supported relationships.
The skill may still write Blocked by in the issue body or omit a parent sub-issue link. Inspect published issues and repair native relationships when necessary.
In local mode, each ticket lives in a separate file:
.scratch/<feature-slug>/issues/<NN>-<slug>.md
Implement a numbered local ticket with:
bash/implement 03
Local files remove tracker setup and work well for isolated repository work. GitHub and Linear are better suited to displaying a dependency frontier across several fresh agent sessions.
The skill creates the ticket graph, but it isn’t an orchestration platform. It doesn’t dispatch agents, reliably close every completed ticket, or update every external tracker state.
Why it matters: A visible dependency frontier permits parallel work without pretending that ticket creation also manages execution.
Agent workflows fail most often at the boundaries between artifacts. Testing should verify the acceptance criteria, the implementation, and the tracker state.
Before implementation, confirm that the acceptance criteria fail. A passing test at this point may not test the requested behavior.
Run the repository’s existing test command rather than inventing a new testing path. Then use:
bash/implement <ticket-number>
After implementation, verify four things:
Finish with:
bash/code-review
The review should compare code against the specification, not merely check style. This catches implementations that are technically valid but solve a different problem.

| Problem | Likely cause | Practical correction |
|---|---|---|
| Every skill appears twice | Plugin and CLI routes were both installed | Remove one installation route |
| Setup proposes incorrect tracker commands | docs/agents/issue-tracker.md is missing or vague | Document the exact programmatic workflow |
| An agent starts blocked work | Dependency relationships are plain text or missing | Add native blocker links and inspect the frontier |
| Tickets cannot be demonstrated alone | Work was split by technical layer | Merge or reshape tickets as vertical slices |
| Rework dominates implementation | Tickets lack context or observable criteria | Add decisions, blockers, and testable outcomes |
| A completed ticket remains open | Tracker updates were assumed to be automatic | Update and close the issue explicitly |
| The agent loses specification details | Planning and ticketing used separate contexts | Keep /to-spec and /to-tickets together |
| Tiny changes create excessive process | Ticketing was used for a one-context change | Run /implement directly |
Use one fresh context per ticket. This tests whether the ticket is genuinely self-contained and prevents hidden conversational knowledge from influencing implementation.
For more coverage of agent reliability risks, see AI Weekly News: Mystery Models and Screen Watching.
Why it matters: Tests prove behavior, while tracker checks preserve operational truth between sessions.
Start here (your first step)
Run git status, commit or stash current work, then install the skills through exactly one supported route.
Quick wins (immediate impact)
/setup-matt-pocock-skills once and review every proposed repository change before accepting it./ask-matt on one current engineering task and record which workflow entry point it selects.Deep dive (for those who want more)
/to-tickets, then verify that every ticket has observable acceptance criteria and explicit blockers.Matt Pocock’s engineering skills are process instructions, not autonomous engineering management. They turn uncertain ideas into specifications, specifications into dependency-aware tickets, and tickets into tested implementations.
Install them through one route. Configure them around the repository rather than replacing existing practices. Use vertical slices for ordinary product work. Reserve expand, migrate, contract sequencing for broad symbol migrations and compatibility changes.
Keep humans responsible for scope, ticket breakdowns, architecture, demonstrations, and tracker state.
The strongest workflow isn’t the one with the most agent runs. It’s the one where every run starts with a clear artifact and ends with verifiable evidence.