# Skill mapping — mattpocock/skills → OpenCode v2 Upstream: `mattpocock/skills@49dd158` (v1.3.1, 2026-10-09). Analyzed 2026-10-14. Machine-readable source of truth: `.opencode/state/classification.json` (this doc will be generated from it once `scripts/generate.ts` exists — until then keep both in sync by hand). Validation status legend: `pending` = not yet runtime-verified (Phase 1.9); `validated` = loads and behaves correctly in a real OpenCode v2 session. ## Summary | Classification | Count | Skills | | --- | --- | --- | | skill | 27 | all vendored verbatim; see matrix | | agent+skill | 1 | code-review (+ `pocock-reviewer` subagent) | | orchestrator | 2 | implement-spec (→ `pocock` + `pocock-worker`), chief-of-staff (excluded, in-progress) | | plugin | 1 | git-guardrails-claude-code (→ opt-in guardrails hook) | | not-convertible | 1 | claude-handoff (Claude-CLI-bound, excluded) | | agent (dedicated, no skill) | 0 | research evaluated → rejected as dedicated agent (D8) | Vendored: 31 skills (engineering 20, productivity 7, misc 4). Excluded: 7 in-progress + deprecated bucket (empty upstream). 23 of 31 vendored skills are user-invoked upstream (`disable-model-invocation: true`) → manifest sets `autoinvoke: false`; OpenCode v2 honors this natively (hidden from model auto-selection, still loadable via `/name` or explicit id). ## Generated agents | Agent | Mode | Purpose | Key permissions | | --- | --- | --- | --- | | `pocock` | primary | Orchestrator: routes via ask-matt, walks grill→spec→tickets→build→review→retro, gates user-invoked skills behind explicit proposals, runs the implement-spec dispatch loop (integration branch, one worktree per ticket, frontier from own merge record, merges, cleanup) | edit/shell allow; destructive-git denies on main checkout; skill `*` allow; task allow | | `pocock-worker` | subagent | Builds one ticket test-first (tdd at the spec's seams) inside its prepared worktree; merges integration tip; reports; never pushes/PRs/stashes/worktrees; asks nothing | skill deny `*` + allow-list (tdd, codebase-design, diagnosing-bugs + stack skills); shell denies push/stash/reset --hard/clean/worktree/switch, gh pr/issue-close; edit allow | | `pocock-reviewer` | subagent | Read-only executor of one code-review axis (Standards or Spec) with the skill's fully-specified prompt; findings returned to the caller for verbatim aggregation | edit deny; shell allow git-read only; skill allow code-review only | Rejected agents (recorded so they are not re-proposed without new evidence): `pocock-researcher` (D8 — built-in `general` + the 12-line research brief is equivalent), per-phase agents (spec-writer/ticket-planner/debugger/... — Matt's phases are conversation steps sharing one context, not roles; splitting them shreds the grilling→spec context the methodology depends on), triage agent (every step waits on the maintainer), teach/tutor agent (continuous human dialogue). ## Matrix DMI = `disable-model-invocation: true` upstream (user-invoked). All vendored skills ship verbatim (D1); "extra artifact" lists anything generated on top. Validation: all `pending` until Phase 1.9. | Upstream skill | Bucket | DMI | Classification | Extra artifact | Depends on (skill-tool) | Rationale (abridged; full text in classification.json) | | --- | --- | --- | --- | --- | --- | --- | | ask-matt | eng | ✓ | skill | informs `pocock` system | — | pure router prose; must stay in sync upstream, vendored as-is | | code-review | eng | | agent+skill | `pocock-reviewer` | — | two parallel isolated axis reviewers = dedicated read-only subagent; aggregation stays in caller | | codebase-design | eng | | skill | — | — | shared-vocabulary reference consumed by tdd et al. | | diagnosing-bugs | eng | | skill | — | — | six-phase inline discipline, no isolation needed | | domain-modeling | eng | | skill | — | — | dialogue discipline writing GLOSSARY/ADRs; isolation would break it | | grill-with-docs | eng | ✓ | skill | — | grilling, domain-modeling | 7-line wrapper; orchestrator verifies both loads (known upstream failure mode) | | implement | eng | ✓ | skill | embodied by `pocock-worker` | tdd, code-review | thin single-context per-ticket procedure | | implement-spec | eng | ✓ | orchestrator | `pocock`, `pocock-worker` | tdd, code-review | frontier + worktree fleet; OpenCode task tool lacks worktrees → agents supply them | | improve-codebase-architecture | eng | ✓ | skill | — | codebase-design, grilling, domain-modeling | interactive survey-and-grill; subagents are internal delegation | | pr | eng | | skill | — | — | PR-body template; verbatim vendoring preserves Dex Horthy attribution (metadata.credits, CREDITS.md) | | prototype | eng | | skill | — | — | throwaway-artifact generation procedure | | research | eng | | skill | — | — | the skill IS a background-agent brief; built-in `general` executes it (dedicated agent rejected, D8) | | retro | eng | ✓ | skill | — | writing-for-agents | mines the current session — must not be isolated | | setup-matt-pocock-skills | eng | ✓ | skill | — | — | creates `docs/agents/*` state that 7 skills hard-depend on; required first run per repo | | tdd | eng | | skill | — | codebase-design | the build discipline; worker allow-list core | | to-spec | eng | ✓ | skill | — | — | synthesis from conversation, no interview | | to-tickets | eng | ✓ | skill | — | — | decomposition + human approval loop | | triage | eng | ✓ | skill | — | grilling, domain-modeling | maintainer-driven state machine; agent rejected (HITL at every step) | | wayfinder | eng | ✓ | skill | — | grilling, domain-modeling, research, prototype | tracker-based map/fog/frontier protocol | | wizard | eng | | skill | — | — | bash-wizard generator; bundled template.sh ships with the skill dir | | grill-me | prod | ✓ | skill | — | grilling | 7-line stateless wrapper | | grilling | prod | | skill | — | — | the interview primitive; isolation would make it worse | | handoff | prod | ✓ | skill | — | — | handoff doc to OS temp dir | | teach | prod | ✓ | skill | — | — | stateful tutor; state lives in workspace files | | to-questionnaire | prod | ✓ | skill | — | — | interviews + questionnaire template | | wait-what | prod | ✓ | skill | — | — | 7-line re-pitch corrective | | writing-for-agents | prod | | skill | — | — | pure theory reference | | git-guardrails-claude-code | misc | | plugin | guardrails hook (opt-in) | — | Claude PreToolUse hook → OpenCode `ctx.tool.hook` on shell; skill text kept verbatim for reference | | migrate-to-shoehorn | misc | | skill | — | — | codemod recipe (frozen bucket) | | scaffold-exercises | misc | | skill | — | — | environment-bound: needs Matt's private `ai-hero-cli`; caveat documented, no fix possible | | setup-pre-commit | misc | | skill | — | — | husky/lint-staged recipe (frozen bucket) | | chief-of-staff | in-prog | ✓ | orchestrator | excluded (D6) | — | coordinator persona; revisit if upstream promotes | | claude-handoff | in-prog | ✓ | not-convertible | excluded (D6) | handoff | Claude-CLI `--bg` launcher; harness-bound | | loop-me | in-prog | ✓ | skill | excluded (D6) | grilling | workflow-spec grilling workspace | | setup-ts-deep-modules | in-prog | ✓ | skill | excluded (D6) | codebase-design | dependency-cruiser enforcement setup | | writing-beats | in-prog | ✓ | skill | excluded (D6) | writing-fragments | beat-by-beat exploit writing | | writing-fragments | in-prog | ✓ | skill | excluded (D6) | grilling | explore-phase fragment mining | | writing-shape | in-prog | ✓ | skill | excluded (D6) | writing-fragments | paragraph-level shaping | ## Cross-cutting notes for the conversion - **Hard dependency chain**: `setup-matt-pocock-skills` writes `docs/agents/{issue-tracker,domain, triage-labels}.md` + the `## Agent skills` block; to-spec, to-tickets, triage, implement, implement-spec, code-review, wayfinder all break without it. README + pocock agent must flag it. - **Wrapper semantics**: grill-me/grill-with-docs/wait-what are 7-line compositions relying on cross-skill invocation ("Call the Skill tool with X"). OpenCode's skill tool loads by name — the loading agent must load both named skills itself (upstream docs report wrappers failing to chain; pocock agent verifies). - **Invariant**: user-invoked skills are never callable from other skills upstream; V2's `autoinvoke: false` reproduces exactly this (hidden from model, loadable by human via slash). - **Frontmatter census**: only `name`, `description`, `disable-model-invocation`, `argument-hint` (4 skills), `metadata.credits` (pr) exist upstream — no allowed-tools/model/context fields, so all permission/isolation design is ours (authored fresh in agent templates, not translated). - **`agents/openai.yaml`** in every skill dir is Codex UI metadata (display_name, short_description, policy mirroring DMI) — stripped from the generated OpenCode tree by the generator. - **17 pending upstream changesets** (patch) target code-review, to-tickets, wayfinder, wizard, tdd, teach, implement, grilling, handoff, diagnosing-bugs, ask-matt, setup — the next upstream release will touch ~1/3 of the vendored skills; the nightly sync + drift tests are the safety net. - **scaffold-exercises** only works in Matt's course repos (private `ai-hero-cli`); vendored for fidelity, documented as environment-bound.