π Prerequisites
Before running any command, make sure your machine has the right environment. The Matt Pocock's skills run on runtimes that make specific assumptionsβskipping this step is the #1 reason installations fail with cryptic messages.
π― The essentials in 3 items
- β’ Claude Code (claude.com/claude-code) or Codex CLI installed and logged in.
-
β’
Node.js 18+ on the PATH β used by
npxthat downloads the installer. -
β’
One working repository open (or new folder) β the installer writes to
.claude/edocs/agents/.
β Supported configurations
- βClaude Code (desktop or terminal)βplugin mode
- βCodex CLI β file mode (skills/ in the repo)
- βmacOS, Linux, WSL2 (native Windows via WSL)
- βNode 18 LTS, 20 LTS, 22 LTS
- βGit repositories (recommended) or standalone folders
- βIssue trackers: GitHub, Linear, local (.scratch/)
β Not supported (yet)
- βNative Windows without WSLβpaths break
- βNode 16 or earlier β npx incompatible
- βJira, GitLab Issues, Notion (planned, not ready)
- βEditors like Cursor/Continue (skill is Claude/Codex)
- βNo write permission in the project (read-only mounts)
- βCompanies that block the npm registry (without a proxy)
π‘ Quick check (10 seconds)
If any of them fail, fix it before before running the installer. Most reported bugs are caused by missing prerequisites.
π¦ Installation via skills.sh (recommended)
O skills.sh is the official path. One command, no cloning a repo, no editing JSON by hand. It detects the runtime (Claude Code or Codex), copies the right files to the right place, and opens a selection screen.
π§ What the installer does behind the scenes
- 1.Downloads the package
skillsvianpx(doesn't install globally). - 2.Detects whether youβre in Claude Code (looks for
.claude/) or Codex (looks for.codex/). - 3.Does
git clone --depth 1ofmattpocock/skillsin a temporary cache. - 4.List of available skills (engineering/, productivity/, misc/) with checkboxes.
- 5.Copy the selected ones to
.claude/skills/(or the Codex equivalent). - 6.Register the skills in the
plugin.jsonor in the local configuration.
Doesn't touch anything outside these two directories. Reversible: deleting the skills folder restores the original state.
ποΈ Selecting skills in the installer
After running the command, the installer switches to interactive mode. 4 visual steps until you confirm β you can't go wrong if you follow the screen. Most importantly: mark /setup-matt-pocock-skills at this stage, because it's what will configure everything later.
Run the command
Terminal open at the root of the repo
You type npx skills@latest add mattpocock/skills. O npx downloads the installer (~300KB) and runs in ~5 seconds the first time.
Expected output: "Fetching mattpocock/skills..." followed by "Detected runtime: claude-code".
Selection screen appears
Interactive checklist
You see all the skills grouped by bucket: engineering/ (handoff, ica, grill-meβ¦), productivity/ (setup-matt-pocock-skills, triage-issuesβ¦), misc/. Use the arrows to navigate and space to mark.
Skills personal/, in-progress/ e deprecated/ donβt appear β protecting the user from drafts.
Choosing agents β mark /setup-matt-pocock-skills
Critical step β donβt skip
Mark /setup-matt-pocock-skills as required. This agent runs once after installation and generates the configuration files (labels, doc paths, issue tracker integration). Without it, the other skills work but remain disconnected from your workflow.
Minimum recommendation: /setup-matt-pocock-skills, /grill-me, /handoff. Then you add the rest.
Confirm and review the diff
Everything written at once, atomic
You press Enter. The installer shows a summary: "5 skills installed β .claude/skills/". If you use Git, do git status to see everything that was added. Itβs recommended to commit right away as "chore: install matt-pocock skills".
If something goes wrong along the way, the installer won't leave a partial state: either everything is added, or nothing is.
πͺ Running /setup-matt-pocock-skills
With the skills installed, open Claude Code (or Codex) inside the same project and trigger the setup agent. It does one short interview (3β4 questions) and generates the configuration files in the right format for your workflow.
π‘ Recommendations by team size
- Solo / side project: local issue tracker (
.scratch/). No friction, no external dependencies. - Small team (2β5 devs): GitHub Issues. Thatβs where the code already lives, and everyone has access.
- Medium/large team (6+): Use Linear if the company already pays for it. Otherwise, GitHub Projects.
- Regulated/closed company: local + manual sync. Avoids exposing internal decisions in a public SaaS.
ποΈ Configuring the issue tracker
The choice of issue tracker shapes the rest of the flow. Skills like /triage-issues e /handoff need to know where to create/read tickets. The three modes cover 95% of cases.
β When to use each one
- GitHub Issues β public/private repo, the whole team has access, integrates with PRs.
- Linear β a paid organization using Linear that wants structured cycles/projects.
- Local (.scratch/) β solo, offline, exploratory. No cost, no auth.
β When NOT to use
- GitHub β if the repo is closed but the tracker needs to work across repos.
- Linear β if you're on your own or still validating an idea (overkill).
- Local β in teams of 3+ people (each person will have a
.scratch/different, without sync).
The generated configuration lives in docs/agents/issue-tracker.md. Example generated by setup when you choose GitHub:
π·οΈ Triage labels
The labels are the vocabulary that connects humans and agents. If you say "this is a bug" and the agent says "this is a defect", you duplicate tickets. The setup generates a mapping role β label string for standardization.
Each semantic role (what the ticket represents in the workflow) becomes a canonical string. You change the strings to match your teamβs vocabulary, but keep the roles:
π Why map role -> string?
Because the internal name (bug) is stable in the agentβs code, but the string visible to the user ("defeito", "erro", "bug") varies across teams.
Renamed the label on GitHub? Edit one line here. The agent keeps working. Without this indirection, you break all the prompts every time the team changes its vocabulary.
π§ Manual installation (without skills.sh)
If your company blocks npm registry, or you want full control over what goes into the repo, you can everything by hand. Itβs more work, but it works in any environment.
π§ Symlink vs. copy
- Symlink: one
git pullin the clone, updates everything. Good if you always want the latest. - Copy: freeze the version. Good for a team that needs a stable skill and PR reviews.
After this manual setup, you still need to run /setup-matt-pocock-skills inside Claude Code to generate the configuration files. Manual installation only puts the files in place β the configuration is separate.
β Verifying that everything works
Installed, configured β now prove it's alive. /grill-me is the fastest test: it makes the agent ask questions about the current problem instead of answering directly. If this skill loaded, they all loaded.
π Validation checklist
- β
/grill-me <qualquer coisa>asks questions instead of giving direct answers - β
/handoffgenerates structured markdown instead of free-form prose - βFiles
docs/agents/issue-tracker.mdetriage-labels.mdexist - β
.claude/skills/has the folders for the selected skills - β
git statusshows the new files β ready to commit - βRestarted Claude Code once to make sure the files were read
π©Ί Troubleshooting
Almost everything that goes wrong falls into three buckets. Identify the symptom, apply the fix, move on.
β Common symptoms
- Skill doesnβt appear when typing
/β empty autocomplete or built-ins only. - Conflict with another skill β two skills with the same name or trigger, message
"ambiguous command". - Plugin won't load β Claude Code opens, but no custom skills work; error in the startup log.
- Agent responds directly without running the skill β you type
/grill-meand it only responds like a regular chat.
β Solutions
- Restart β 70% of cases. Claude Code only reads
.claude/at startup. - Rename the conflicting skill or disable the duplicate in the
plugin.json. - Validate JSON β
cat .claude/plugin.json | jq. A trailing comma breaks everything. - Force a skill prefix in the prompt:
/grill-mehas to be the first word in the message.
π οΈ Recipe: skill doesn't appear
- Check whether the directory exists:
ls .claude/skills/grill-me. - Check whether it has
SKILL.mdinside with valid frontmatter (name, description). - Restart: close Claude Code completely (not just the window) and reopen it.
- If it still doesn't appear, check the logs in
~/.claude/logs/β look for"skill load error". - Last resort: delete the skill folder, run
npx skills@latest addagain.
β οΈ Attention to permissions
If you ran npx with sudo sometimes, the files may have been left owned by root, and Claude Code (running as your user) can't read them. Fix it with: sudo chown -R $USER .claude/. Never run the installer again with sudo.
π Module Summary
npx skills@latest add mattpocock/skills. One command copies files, registers the plugin, and is reversible.
/setup-matt-pocock-skills β Confirm.
docs/agents/.
Next Track:
Track 3 β Practice: running real skills in real projects, /handoff between sessions, /grill-me for architecture, advanced triage workflows.