100 lines
4.9 KiB
Markdown
100 lines
4.9 KiB
Markdown
# @haylan/opencode-pocock
|
|
|
|
[OpenCode](https://opencode.ai) v2 integration for [Matt Pocock's skills](https://github.com/mattpocock/skills):
|
|
the upstream skills injected verbatim as OpenCode skills, plus generated agents that run his
|
|
skill-driven engineering flow — grill an idea, turn it into a spec and tickets, build test-first
|
|
with parallel workers in isolated git worktrees, review, retro.
|
|
|
|
All engineering discipline is Matt Pocock's; this package only supplies the OpenCode v2 wiring.
|
|
Upstream is synced nightly and the package republished on change (see `CHANGELOG.md` for the
|
|
upstream revision each release carries).
|
|
|
|
## Install
|
|
|
|
1. Add the plugin (from the Gitea registry, or npm once published there):
|
|
|
|
```jsonc
|
|
// opencode.json
|
|
{
|
|
"$schema": "https://opencode.ai/config.json",
|
|
"plugins": ["@haylan/opencode-pocock"],
|
|
}
|
|
```
|
|
|
|
The plugin injects all skills at startup — no files copied into your repo.
|
|
|
|
2. Install the agents (OpenCode discovers agents only as markdown files, and plugins cannot
|
|
register them, so this one copy step is required):
|
|
|
|
```bash
|
|
npx @haylan/opencode-pocock init # project: .opencode/agents/
|
|
npx @haylan/opencode-pocock init -g # or global: ~/.config/opencode/agents/
|
|
```
|
|
|
|
3. Once per repo, run `/setup-matt-pocock-skills` in OpenCode. It configures the issue tracker,
|
|
triage labels and domain docs that `to-spec`, `to-tickets`, `triage`, `implement`,
|
|
`implement-spec`, `code-review` and `wayfinder` depend on.
|
|
|
|
## Usage
|
|
|
|
Start OpenCode with the `pocock` agent selected and describe what you want to build:
|
|
|
|
```bash
|
|
opencode --agent pocock
|
|
```
|
|
|
|
| Agent | Role |
|
|
| ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
| `pocock` | Primary orchestrator. Routes with `ask-matt`, walks grill → spec → tickets → build → review → retro, proposes before each user-invoked step, runs `implement-spec` with one git worktree per ticket and parallel `pocock-worker` subagents. |
|
|
| `pocock-worker` | Subagent. Builds one ticket test-first (`tdd` at the spec's seams) inside its worktree, merges the integration tip, reports. Never pushes. |
|
|
| `pocock-reviewer` | Subagent. Read-only executor of one `code-review` axis (Standards or Spec). |
|
|
|
|
23 of the 31 vendored skills are user-invoked upstream (`disable-model-invocation: true`);
|
|
OpenCode v2 honors that natively — they stay out of the model's auto-selection. Note that
|
|
plugin-injected skills are not exposed as slash commands in v2 (only file-based skills are):
|
|
the `pocock` agent proposes each user-invoked step and loads it after your yes. If you want
|
|
`/to-spec` & co. directly, either keep a file-based install of Matt's skills (e.g.
|
|
`npx skills@latest add mattpocock/skills -a opencode`; id collisions then resolve to your
|
|
file-based copies) or, for a project-level npm install, add a skills source:
|
|
`"skills": ["./node_modules/@haylan/opencode-pocock/skills"]`.
|
|
|
|
Worktrees live under `/tmp/pocock-workers`. Current OpenCode v2 builds allow `external_directory`
|
|
for `/tmp/*` by default; if yours asks before a subagent writes there, add a global rule:
|
|
|
|
```json
|
|
{ "permission": { "external_directory": { "/tmp/pocock-workers/*": "allow" } } }
|
|
```
|
|
|
|
## Plugin options
|
|
|
|
```jsonc
|
|
{
|
|
"plugins": [
|
|
{
|
|
"package": "@haylan/opencode-pocock",
|
|
// Ports skills/misc/git-guardrails-claude-code to OpenCode: blocks dangerous git
|
|
// commands (push --force, reset --hard, clean -f, branch -D, ...) before execution.
|
|
"options": { "guardrails": true },
|
|
},
|
|
],
|
|
}
|
|
```
|
|
|
|
## Development
|
|
|
|
- `npm run sync` — update `upstream/` snapshot from mattpocock/skills (script-only; never
|
|
hand-edit `upstream/` or `skills/`).
|
|
- `npm run generate` — regenerate `skills/` + `manifest.json` from `upstream/` and
|
|
`.opencode/state/classification.json`.
|
|
- `npm test` / `npm run check` / `npm run build` — unit + integration tests (`node --test` on TS),
|
|
prettier + tsc gate, build.
|
|
- `npm run smoke` — boots `opencode serve` against a fixture and verifies plugin/skills/agents
|
|
over the HTTP API (needs a local `opencode` binary; no model calls).
|
|
|
|
Design and rationale: [`docs/architecture.md`](docs/architecture.md).
|
|
Per-skill classification: [`docs/skill-mapping.md`](docs/skill-mapping.md).
|
|
|
|
## License
|
|
|
|
MIT — see [`LICENSE`](LICENSE) and [`NOTICE`](NOTICE) for upstream attributions.
|