Native OpenCode V2 setup: agents, commands, skills, always-on rules. Markdown only — zero plugin code (V1 plugins do not run in V2, so the old plugin was removed entirely, nothing ported).
| Dir | What |
|---|---|
agents/ |
14 agents: bulba (primary router, default) + 13 subagents — planner, implementer, reviewer, verifier, debugger, benchmarker, paper-explainer, optimizer, webdev, security, skillfinder, researcher, critic |
commands/ |
29 commands: dev loop (/develop /plan /go /verify /publish /status /goal), research/docs/quality, tutor /teach, ponytail set /ponytail* |
skills/ |
14 skills (see Provenance) |
AGENTS.md |
Always-on rules: ponytail (full level) + Bulba core |
The repo is the source of truth; the global config gets symlinks:
ln -s "$PWD/agents" ~/.config/opencode/agents
ln -s "$PWD/commands" ~/.config/opencode/commands
ln -s "$PWD/skills" ~/.config/opencode/skills
ln -s "$PWD/AGENTS.md" ~/.config/opencode/AGENTS.mdPlus "default_agent": "bulba" in ~/.config/opencode/opencode.jsonc. Providers stay unset — pick the model in the TUI.
Gotcha: a running opencode service rebuilds its agent registry on config value changes (or restart), not on plain edits to
agents/*.md— edited agents show up after the next launch or a config change.
/develop— Manage-Execute-Audit loop: plan → questions → tasks → subagents → commits → adversarial review → verify gate → report. No push without/publish./teach <topic>— tutor mode: loads theteachskill (mission-grounded, evidence-based: retrieval, spacing, interleaving), HTML lessons + reference docs, stateful workspace the agent picks./away— work autonomously until the user returns (plain prompt, no permission hacks — V2 allows all by default)./research— deep research on the built-in websearch/webfetch, cited report in.bulba/research/./overhaul,/critique,/simplify,/audit,/security-review,/graph,/test-ui,/design…/ponytail [lite|full|ultra|off]— level switch; always-on at full viaAGENTS.md.
Trust, not enforcement: zero deny-rules. Read-only roles (planner, reviewer, security) are stated in prompts, not permissions. Outward actions (push, PR, delete, creating CI) ask the user. Nothing auto-nags; state lives in .bulba/ (plan.md, goal.md, memory.md, lessons.md — per-project scratch, gitignored there).
grilling,grill-me,teach,to-spec,diagnosing-bugs,writing-for-agents— mattpocock/skillsunslop,blast-radius— cursor/plugins (pstack)ponytail,ponytail-review,ponytail-audit,ponytail-gain,ponytail-debt,ponytail-help— DietrichGebert/ponytail (ruleset also inlined inAGENTS.md)
User-invoked-only skills (grill-me, to-spec, blast-radius, teach) carry metadata.opencode/autoinvoke: false; unslop stays model-visible. Slash entries for teach and ponytail* belong to the command files (slash: false on those skills).