hooks/session-start-codex has had no caller since "Remove Codex hooks" (#1845) deleted hooks-codex.json and its manifest registration; the Codex manifest now declares an empty hooks object so Codex registers no session-start hook at all. The script is Codex-specific dead code — nothing executes it on Codex or any other harness. - Delete hooks/session-start-codex. - tests/hooks/test-session-start.sh: drop the two Codex cases that are redundant with the generic session-start tests (nested-format and the legacy-warning omission are already covered by the Claude Code cases). Re-point the "wrapper dispatches" case to the live `session-start` script so run-hook.cmd dispatch coverage — used by Claude Code and Cursor in production — is preserved rather than lost. - docs/porting-to-a-new-harness.md: Codex is no longer a Shape A (shell-hook) harness, so re-anchor that worked example to Cursor (a live shell-hook harness that demonstrates the same per-harness field, schema, and matcher variance) and mark Codex as native skill discovery with no session-start hook. Clears the references to the deleted hooks-codex.json. - docs/windows/polyglot-hooks.md: the "check hooks-codex.json" pointer referenced a file deleted in #1845; re-point to hooks-cursor.json. RELEASE-NOTES.md keeps its historical mention of hooks-codex.json (it accurately records what that release did). The tests/codex-plugin-sync fixtures build their own synthetic session-start-codex and test the sync mechanism generically, so they are intentionally left as-is. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Superpowers for OpenCode
Complete guide for using Superpowers with OpenCode.ai.
Installation
Add superpowers to the plugin array in your opencode.json (global or project-level):
{
"plugin": ["superpowers@git+https://github.com/obra/superpowers.git"]
}
Restart OpenCode. The plugin installs through OpenCode's plugin manager and registers all skills.
Verify by asking: "Tell me about your superpowers"
OpenCode uses its own plugin install. If you also use Claude Code, Codex, or another harness, install Superpowers separately for each one.
Migrating from the old symlink-based install
If you previously installed superpowers using git clone and symlinks, remove the old setup:
# Remove old symlinks
rm -f ~/.config/opencode/plugins/superpowers.js
rm -rf ~/.config/opencode/skills/superpowers
# Optionally remove the cloned repo
rm -rf ~/.config/opencode/superpowers
# Remove skills.paths from opencode.json if you added one for superpowers
Then follow the installation steps above.
Usage
Finding Skills
Use OpenCode's native skill tool to list all available skills:
use skill tool to list skills
Loading a Skill
use skill tool to load brainstorming
Personal Skills
Create your own skills in ~/.config/opencode/skills/:
mkdir -p ~/.config/opencode/skills/my-skill
Create ~/.config/opencode/skills/my-skill/SKILL.md:
---
name: my-skill
description: Use when [condition] - [what it does]
---
# My Skill
[Your skill content here]
Project Skills
Create project-specific skills in .opencode/skills/ within your project.
Skill Priority: Project skills > Personal skills > Superpowers skills
Updating
OpenCode installs Superpowers through a git-backed package spec. Some OpenCode and Bun versions pin that resolved git dependency in a lockfile or cache, so a restart may not pick up the newest Superpowers commit. If updates do not appear, clear OpenCode's package cache or reinstall the plugin.
To pin a specific version, use a branch or tag:
{
"plugin": ["superpowers@git+https://github.com/obra/superpowers.git#v5.0.3"]
}
How It Works
The plugin does two things:
- Injects bootstrap context via the
experimental.chat.messages.transformhook, adding superpowers awareness to every conversation. - Registers the skills directory via the
confighook, so OpenCode discovers all superpowers skills without symlinks or manual config.
Tool Mapping
Skills speak in actions rather than naming any one runtime's tools. On OpenCode these resolve to:
- "Create a todo" / "mark complete in todo list" →
todowrite Subagent (general-purpose):template → OpenCode'stasktool withsubagent_type: "general"(or"explore"for codebase exploration)- "Invoke a skill" → OpenCode's native
skilltool - "Read a file" →
read - "Create a file" / "edit a file" / "delete a file" →
apply_patch - "Run a shell command" →
bash - "Search file contents" / "find files by name" →
grep,glob - "Fetch a URL" →
webfetch
(Verified against the installed OpenCode CLI's tool inventory.)
Troubleshooting
Plugin not loading
- Check OpenCode logs:
opencode run --print-logs "hello" 2>&1 | grep -i superpowers - Verify the plugin line in your
opencode.jsonis correct - Make sure you're running a recent version of OpenCode
Windows install issues
Some Windows OpenCode builds have upstream installer issues with git-backed
plugin specs, including cache paths for git+https URLs and Bun not finding
git.exe even when it works in a normal terminal. If OpenCode cannot install
the plugin, try installing with system npm and pointing OpenCode at the local
package:
npm install superpowers@git+https://github.com/obra/superpowers.git --prefix "$HOME\.config\opencode"
Then use the installed package path in opencode.json:
{
"plugin": ["~/.config/opencode/node_modules/superpowers"]
}
Skills not found
- Use OpenCode's
skilltool to list available skills - Check that the plugin is loading (see above)
- Each skill needs a
SKILL.mdfile with valid YAML frontmatter
Bootstrap not appearing
- Check OpenCode version supports
experimental.chat.messages.transformhook - Restart OpenCode after config changes
Getting Help
- Report issues: https://github.com/obra/superpowers/issues
- Main documentation: https://github.com/obra/superpowers
- OpenCode docs: https://opencode.ai/docs/