OpenCode 2.0 refuses every plugin written for version 1. On my upgrade day, 16 October 2026, three of my five plugin entries failed to load, including oh-my-openagent 5.1.34. Its maintainers shipped a fix in 5.1.38 on 19 October, three days later; the other two failures are my own plugins, still on the version 1 shape. The same project also continues as OmO, a standalone agent on a Pi fork, for people who want to leave OpenCode.
What broke on upgrade day?
OpenCode 2.0.31 starts a background server and a terminal client, and each loads its own plugins. My server log recorded three failures in a row, one per plugin, all with the same cause. The loader expects a default export shaped like a version 2 definition, with an id and a setup function. My plugins export the version 1 shape, a function that returns hooks. Three entries, three rejections:
git-ai.ts Plugin must export a default definition with an id and an effect or setup function
rtk.ts Plugin must export a default definition (Missing key at ["default"])
oh-my-openagent Missing key at ["default"]["effect"] / ["default"]["setup"]
The terminal client failed the same way on oh-my-openagent: it spent five seconds installing the package and then rejected it for the same missing keys. Two plugins loaded fine. The count on the day was 3 failed out of 5 entries, measured in one server log on 16 October 2026. A Plugin in this context is the unit OpenCode loads to extend itself: hooks that run before tools, extra tools, event subscriptions.
The rack shows that count as an object: two cartridges seated, three in the return bin, each slot with its lamp.
What did OpenCode 2 change?
OpenCode 2 ships a new plugin API, and the migration guide says it plainly: version 1 plugin implementations do not run in version 2. Three things changed at once. The package moved from @opencode-ai/plugin to @opencode/plugin. The export changed from a function returning hooks to Plugin.define with an id and a setup function that registers hooks through a context object. And the config key changed from plugin to plugins, with local file paths now required to point at directories instead of files.
The diagram shows the single gate that matters. Nothing about the old code is salvageable by renaming keys. Moving a file or renaming the config entry is not enough, because the whole hook protocol changed shape. My global config still pinned the old package at 1.15.13, which tells you how deep the version 1 wiring went.
How oh-my-openagent got back on OpenCode 2
oh-my-openagent is an agent orchestration plugin for OpenCode: a main orchestrator with specialist subagents, per-agent model routing, and the ultrawork keyword that fans work out. Version 5.1.34, the one I had on 16 October, shipped only the version 1 entrypoint, so OpenCode 2 rejected it on both the server and the terminal side. An issue on the repository had reported exactly that since 4 October.
Version 5.1.38, published on 19 October 2026, fixes it. Its release notes say the server and terminal entries now also export an OpenCode 2 setup, so one package loads on both major versions. I have not yet re-run my setup against 5.1.38, so I cannot confirm the fix on my machine. The issue itself is still open on GitHub as I write.
The project also changed shape in parallel. The repository now presents itself as OmO, a standalone agent installed with its own binary, with a setup command that carries provider keys, MCP servers and skills across from an OpenCode install. OmO runs on senpi, the maintainer’s fork of Pi. Pi here is pi-mono, the minimal terminal coding agent by Mario Zechner that both projects fork.
The timeline puts the cost of the break in days: the third day is when a fix existed upstream, and only for the plugin with active maintainers.
Where does batteries-included live now?
Three names cover the Pi side, and they differ in one dimension: how much comes in the box. Pi itself is minimal on purpose, closer to Arch Linux than to an IDE: you add what you need. oh-my-pi, command omp, is the opposite bet by Can Bölük at Stencil Labs: a fork of pi-mono with hash-anchored file edits, LSP refactoring, live-process debugging, 40-plus model providers and subagent fan-out, MIT licensed, 36,700 GitHub stars on 26 October 2026. OmO is the third branch: the oh-my-openagent orchestration ideas (ultrawork graphs, per-model routing, memory) on senpi, aimed at turning tokens into finished work rather than at harness tinkering.
| Option | Runs on | Plugin model | Best when |
|---|---|---|---|
| OpenCode 2 + dual-API plugins | OpenCode server | Plugin.define, V2 only |
You keep OpenCode and accept fewer plugins |
| Pi (pi-mono) | Own terminal | Pi extensions | You want minimal and fast |
oh-my-pi (omp) |
Own terminal | Pi ecosystem + built-ins | You want debugger, LSP and tools out of the box |
OmO (omo) |
Own terminal (senpi) | OmO skills | You want the ultrawork orchestration without OpenCode |
| oh-my-openagent 5.1.38+ | OpenCode 2 plugin | Dual V1/V2 entry | You want ultrawork but stay on OpenCode |
The table compresses the decision to one row per option. The first and last rows keep OpenCode. The three exits each keep a different thing: Pi keeps simplicity, oh-my-pi keeps tooling, OmO keeps the orchestration.
Which two plugins survived, and why
Two of my five OpenCode plugins already export both API shapes from one file, so they survived the 2.0 upgrade untouched. The Orca status reporter exports the old factory when an environment flag says v1 and the new {id, setup} shape otherwise. Ponytail, the brevity ruleset I run, does the same split, and its docs note the directory rule that bit me: OpenCode 2 entries must name a directory, while my config pointed at files. The failing three (oh-my-openagent, git-ai, rtk) came out of both the server config and the terminal config. git-ai and rtk are plugins I maintain or wrap myself and still export the version 1 shape; porting them is on my list.
What is still open?
Two things. I have not re-tested oh-my-openagent 5.1.38 on my machine, so the fix is the maintainers’ claim, not my measurement. And I have not measured what running lean costs in practice: no token or task comparison between the orchestrated setup and the lean one, so “fewer plugins” is an aesthetic judgment, not a number.
To check your own setup, restart the OpenCode server and search its log for failed to load plugin. Every line names the entry and the missing key, which tells you whether the plugin needs a version 2 port or only a config rename. If oh-my-openagent is on that list, update it to 5.1.38 or later first.
OpenCode 2 is a new plugin platform wearing an old name: a plugin has to export the version 2 shape or it does not load, and the maintained ones are already catching up.
Keep reading

You might not care about this: my 2025 ending credits.
A human-written look back at 2025: technical marketers, “Neanderthalism” in the year of AI, n8n-style automation and the times AI left me speechless.

The parable of the Elephant is now the Dragon's.
Zhipu AI, the Chinese AI giant the West ignores while it only talks about DeepSeek.