setup-matt-pocock-skills · diff
git:20260819.4e21727 to git:20260923.15c9348
39 added, 66 removed. Audit A to A.
---
name: setup-matt-pocock-skills
- description: 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.
+ description: "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."
disable-model-invocation: true
---
# Setup Matt Pocock's Skills
Scaffold the per-repo configuration that the engineering skills assume:
- - **Issue tracker** — where issues live (GitHub by default; local markdown is also supported out of the box)
- - **Triage labels** — the strings or actions used for the canonical category
- and state triage roles
- - **Domain docs** — where `CONTEXT.md` and ADRs live, and the consumer rules for reading them
+ - **Issue tracker**: where issues live (GitHub by default; local markdown is also supported out of the box)
+ - **Triage labels**: the strings used for the five canonical triage roles
+ - **Domain docs**: where `CONTEXT.md` and ADRs live, and the consumer rules for reading them
This is a prompt-driven skill, not a deterministic script. Explore, present what you found, confirm with the user, then write.
## Process
### 1. Explore
Look at the current repo to understand its starting state. Read whatever exists; don't assume:
- - `git remote -v` and `.git/config` — is this a GitHub repo? Which one?
- - `AGENTS.md` and `CLAUDE.md` at the repo root — does either exist? Is there already an `## Agent skills` section in either?
+ - `git remote -v` and `.git/config`: is this a GitHub repo? Which one?
+ - `AGENTS.md` and `CLAUDE.md` at the repo root: does either exist? Is there already an `## Agent skills` section in either?
- `CONTEXT.md` and `CONTEXT-MAP.md` at the repo root
- `docs/adr/` and any `src/*/docs/adr/` directories
- - `docs/agents/` — does this skill's prior output already exist?
- - `.scratch/` — sign that a local-markdown issue tracker convention is already in use
+ - `docs/agents/`: does this skill's prior output already exist?
+ - `.scratch/`: a sign that a local-markdown issue tracker convention is already in use
+ - Is the `triage` skill installed? (a `triage` skill folder alongside this one, or `triage` in your available skills.) This decides whether Section B runs at all.
+ - Monorepo signals: a `pnpm-workspace.yaml`, a `workspaces` field in `package.json`, or a populated `packages/*` with its own `src/`. These are present only in a genuinely large multi-package repo; their absence means single-context, which is almost every repo.
### 2. Present findings and ask
- Summarise what's present and what's missing. Then walk the user through the three decisions **one at a time** — present a section, get the user's answer, then move to the next. Don't dump all three at once.
+ Summarise what's present and what's missing. Then take the sections in order. One section, one answer, then the next.
- Assume the user does not know what these terms mean. Each section starts with a short explainer (what it is, why these skills need it, what changes if they pick differently). Then show the choices and the default.
+ Lead each section with the recommended answer so the user can accept it in a word. Give a one-line explainer only when the choice genuinely branches; skip the section entirely when exploration already settled it (Section B when `triage` isn't installed, Section C when there's no monorepo).
- **Section A — Issue tracker.**
+ **Section A: Issue tracker.**
- > Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, `to-spec`, and `qa` read from and write to it — they need to know whether to call `gh issue create`, write a markdown file under `.scratch/`, or follow some other workflow you describe. Pick the place you actually track work for this repo.
+ > Explainer: The "issue tracker" is where issues live for this repo. Skills like `to-tickets`, `triage`, and `to-spec` read from and write to it. They need to know whether to call `gh issue create`, write a markdown file under `.scratch/`, or follow some other workflow you describe. Pick the place you actually track work for this repo.
Default posture: these skills were designed for GitHub. If a `git remote` points at GitHub, propose that. If a `git remote` points at GitLab (`gitlab.com` or a self-hosted host), propose GitLab. Otherwise (or if the user prefers), offer:
- - **GitHub** — issues live in the repo's GitHub Issues (uses the `gh` CLI)
- - **GitLab** — issues live in the repo's GitLab Issues (uses the [`glab`](https://gitlab.com/gitlab-org/cli) CLI)
- - **Local markdown** — issues live as files under `.scratch/<feature>/` in this repo (good for solo projects or repos without a remote)
- - **Other** (Jira, Linear, etc.) — ask the user to describe the workflow in one paragraph; the skill will record it as freeform prose
-
- If — and only if — the user picked **GitHub** or **GitLab**, ask one follow-up:
-
- > Explainer: Open-source repos often receive feature requests as pull requests, not just issues — a PR is an issue with attached code. If you turn this on, `/triage` pulls _external_ PRs into the same queue and runs them through the same labels and states as issues (collaborators' in-flight PRs are left alone). Leave it off if PRs aren't a request surface for you.
-
- - **PRs as a request surface** — yes / no (default: no). Record the answer in `docs/agents/issue-tracker.md`. For local-markdown and other trackers, skip this question — there are no PRs.
-
- **Section B — Triage label vocabulary.**
-
- > Explainer: When the `triage` skill processes an incoming issue, it assigns a category role — bug or enhancement — and moves it through a state machine — needs evaluation, waiting on reporter, ready for an AFK agent to pick up, ready for a human, or won't fix. To do that, it needs labels or equivalent tracker actions that match strings _you've actually configured_. If your repo already uses different label names (e.g. `type:bug` instead of `bug`, or `status:todo` instead of `needs-triage`), map them here so the skill applies the right ones instead of creating duplicates.
-
- The two canonical category roles:
-
- - `bug` — something is broken
- - `enhancement` — new feature or improvement
+ - **GitHub**: issues live in the repo's GitHub Issues (uses the `gh` CLI)
+ - **GitLab**: issues live in the repo's GitLab Issues (uses the [`glab`](https://gitlab.com/gitlab-org/cli) CLI)
+ - **Local markdown**: issues live as files under `.scratch/<feature>/` in this repo (good for solo projects or repos without a remote)
+ - **Other** (Jira, Linear, etc.): ask the user to describe the workflow in one paragraph; the skill will record it as freeform prose
- The five canonical state roles:
+ Record the choice in `docs/agents/issue-tracker.md`. The GitHub and GitLab templates carry a "PRs as a request surface" flag, defaulted **off**. Leave it off and don't raise it: a user who wants external PRs in the triage queue can flip the flag in the file later.
- - `needs-triage` — maintainer needs to evaluate
- - `needs-info` — waiting on reporter
- - `ready-for-agent` — fully specified, AFK-ready (an agent can pick it up with no human context)
- - `ready-for-human` — needs human implementation
- - `wontfix` — will not be actioned
+ **Section B: Triage label vocabulary.** Skip this section entirely if the `triage` skill isn't installed (exploration told you), since an uninstalled skill needs no labels.
- Default: each role's string equals its name. Ask the user if they want to
- override any category or state role. If a state such as `wontfix` is represented
- by closing instead of a label, record that action explicitly.
+ If it is installed, ask exactly one question:
- **Section C — Domain docs.**
+ > Do you want to keep the default triage labels? (recommended: **yes**)
- > Explainer: Some skills (`improve-codebase-architecture`, `diagnosing-bugs`, `tdd`) read a `CONTEXT.md` file to learn the project's domain language, and `docs/adr/` for past architectural decisions. They need to know whether the repo has one global context or multiple (e.g. a monorepo with separate frontend/backend contexts) so they look in the right place.
+ The defaults are the five canonical roles, each label string equal to its name: `needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, `wontfix`. On **yes**, write them as-is. Only if the user says no, usually because their tracker already uses other names (e.g. `bug:triage` for `needs-triage`), collect the overrides so `triage` applies existing labels instead of creating duplicates.
- Confirm the layout:
+ **Section C: Domain docs.** Default to **single-context** (one `CONTEXT.md` + `docs/adr/` at the repo root). This fits almost every repo; write it without asking.
- - **Single-context** — one `CONTEXT.md` + `docs/adr/` at the repo root. Most repos are this.
- - **Multi-context** — `CONTEXT-MAP.md` at the root pointing to per-context `CONTEXT.md` files (typically a monorepo).
+ Offer **multi-context** (a root `CONTEXT-MAP.md` pointing to per-context `CONTEXT.md` files) only when exploration found monorepo signals. Then confirm which layout they want.
### 3. Confirm and edit
Show the user a draft of:
- The `## Agent skills` block to add to whichever of `CLAUDE.md` / `AGENTS.md` is being edited (see step 4 for selection rules)
- - The contents of `docs/agents/issue-tracker.md`, `docs/agents/triage-labels.md`, `docs/agents/domain.md`
+ - The contents of `docs/agents/issue-tracker.md`, `docs/agents/domain.md`, and `docs/agents/triage-labels.md` (the last only when `triage` is installed)
Let them edit before writing.
### 4. Write
- **Core repository override:** Do not add or expand an `## Agent skills` catalog
- in root `AGENTS.md`. Core uses progressive skill discovery plus
- `docs/ai/rules/agent-skill-routing.md`. Store issue-tracker and domain setup in
- the `docs/agents/` files below; update the routing rule only when a durable Core
- route is genuinely missing. Preserve `CLAUDE.md` as the exact `@AGENTS.md`
- adapter. In this repository, skip the generic instruction-file selection and
- `## Agent skills` block below; do not edit either root instruction file.
-
**Pick the file to edit:**
- If `CLAUDE.md` exists, edit it.
- Else if `AGENTS.md` exists, edit it.
- - If neither exists, ask the user which one to create — don't pick for them.
+ - If neither exists, ask the user which one to create; don't pick for them.
- Never create `AGENTS.md` when `CLAUDE.md` already exists (or vice versa) — always edit the one that's already there.
+ Never create `AGENTS.md` when `CLAUDE.md` already exists (or vice versa); always edit the one that's already there.
If an `## Agent skills` block already exists in the chosen file, update its contents in-place rather than appending a duplicate. Don't overwrite user edits to the surrounding sections.
The block:
```markdown
## Agent skills
### Issue tracker
- [one-line summary of where issues are tracked, plus whether external PRs are a triage surface]. See `docs/agents/issue-tracker.md`.
+ [one-line summary of where issues are tracked]. See `docs/agents/issue-tracker.md`.
### Triage labels
[one-line summary of the label vocabulary]. See `docs/agents/triage-labels.md`.
### Domain docs
- [one-line summary of layout — "single-context" or "multi-context"]. See `docs/agents/domain.md`.
+ [one-line summary of layout: "single-context" or "multi-context"]. See `docs/agents/domain.md`.
```
- Then write the three docs files using the seed templates in this skill folder as a starting point:
+ Include the `### Triage labels` sub-block, and write `docs/agents/triage-labels.md`, only when `triage` is installed and Section B ran. When it isn't, both are omitted.
- - [issue-tracker-github.md](./issue-tracker-github.md) — GitHub issue tracker
- - [issue-tracker-gitlab.md](./issue-tracker-gitlab.md) — GitLab issue tracker
- - [issue-tracker-local.md](./issue-tracker-local.md) — local-markdown issue tracker
- - [triage-labels.md](./triage-labels.md) — label mapping
- - [domain.md](./domain.md) — domain doc consumer rules + layout
+ Then write the docs files using the seed templates in this skill folder as a starting point:
+ - [issue-tracker-github.md](./issue-tracker-github.md): GitHub issue tracker
+ - [issue-tracker-gitlab.md](./issue-tracker-gitlab.md): GitLab issue tracker
+ - [issue-tracker-local.md](./issue-tracker-local.md): local-markdown issue tracker
+ - [triage-labels.md](./triage-labels.md): label mapping (only if `triage` is installed)
+ - [domain.md](./domain.md): domain doc consumer rules + layout
+
For "other" issue trackers, write `docs/agents/issue-tracker.md` from scratch using the user's description.
### 5. Done
- Tell the user the setup is complete and which engineering skills will now read from these files. Mention they can edit `docs/agents/*.md` directly later — re-running this skill is only necessary if they want to switch issue trackers or restart from scratch.
+ Tell the user the setup is complete and which engineering skills will now read from these files. Mention they can edit `docs/agents/*.md` directly later; re-running this skill is only necessary if they want to switch issue trackers or restart from scratch.