Superpowers is my software development workflow tool set for coding agents.

Over the past couple weeks, I've been hearing more good things about opencode.ai. OpenCode is an open source agentic coding tool in the style of Claude Code or OpenAI Codex, but it's not tied to any specific model or model provider. The UI is pretty, it supports subagents, MCP servers, custom tools, and it has a REST API you can build against if you want to make your own user interface.

One thing it does not (yet) have is native support for skills, which means that giving OpenCode Superpowers requires a little bit of magic. Conveniently, it's very similar magic to what I needed to do to give Codex Superpowers.

That magic is primarily composed of two parts: The bootstrap and tools. Unlike Codex, OpenCode supports hooks, so Superpowers is able to automatically set itself up at session start without you needing to add lines to your AGENTS.md file.

The bootstrap is what tells OpenCode that it has Superpowers. It kicks off at startup (and after compact). It explains what Superpowers is, what skills are, and how to activate them with the new use_skill tool. It also lists off all available skills using the newfind_skills tool.

The other thing it does is to provide a translation table between OpenCode's environment and the Claude Code environment that is still the default for skills:

When skills reference tools you don't have, substitute OpenCode equivalents:
- `TodoWrite` → `update_plan`
- `Task` tool with subagents → Use OpenCode's subagent system (@mention)
- `Skill` tool → `use_skill` custom tool
- `Read`, `Write`, `Edit`, `Bash` → Your native tools

Superpowers' skills are included as part of the Superpowers plugin for OpenCode, but the find_skills and use_skills tools are a full Skills system for OpenCode. You can drop anthropic-compatible personal skills into ~/.config/opencode/skills and project-specific skills into .opencode/skills in your project directory. Superpowers will discover them at startup time.

One of the hardest bits of all of this is testing. I've been working toward an evals suite for Superpowers, but I'm not there yet. You can think of evals as a flaky test suite with confidence levels. Because LLMs don't always respond the same way to to the same inputs, traditional test suites...just don't work once AI gets involved. Evals acknowledge this lack of determinism and...just run the tests a bunch of times and see if they pass "often enough." For me, this is easily the most frustrating part of building software with AI inside.

In the absence of a proper eval suite, I have one test for Superpowers that needs to pass 100% of the time: Open up a fresh session and, without preamble, I ask the coding agent to do something that it's been conditioned to do:

Let's make a react todo list.

If it starts coding, then I've failed. If it stops me, launches the brainstorming skill, and tries to dig into what I'm really trying to do, then I'm happy.

pasted image 20251124 113803

Once I got skills triggering correctly, the last puzzle piece was installation.

OpenCode has a plugin system, although it doesn't appear to be quite as full-featured as the Claude Code plugin system. It gives us the hooks we need to inject Superpowers and skills at session startup. It lets us add new tools. But it doesn't have an in-app installation mechanism. Thankfully, OpenCode ships with an engineer inside. To install Superpowers for OpenCode, just run opencode and tell it:

Fetch and follow instructions from https://raw.githubusercontent.com/obra/superpowers/refs/heads/main/.opencode/INSTALL.md

And, just like that, OpenCode has Superpowers.