Host-native routing and OMS control-plane support for AI work on OpenCode, Codex, Qwen, and Claude Code, with first-class superpowers support and an experimental host-native direct mode on OpenCode, Codex, and Qwen.
| Capability | OpenCode | Codex | Qwen | Claude Code |
|---|---|---|---|---|
superpowers workflow routing |
Full | Full | Partial | Experimental |
| Direct mode | Experimental | Experimental | Experimental | None yet |
| OMS control plane | Full | Full | Full | Experimental |
| Host bootstrap | Native plugin entry | Local bootstrap/plugin bundle | None | None |
| Compatibility monitor | Full | Full | None yet | None yet |
| Generated host artifacts | Agents + commands | Agents + plugin/skills | Agents + commands | Skills |
| Temporary disable helper | Full | Full | None yet | None yet |
codexFast |
Full | Full | None yet | None yet |
Support level notes:
Full: implemented and part of the supported surfaceExperimental: implemented for the first generic slice and expected to evolvePartial: implemented with explicit stage limits documented belowNone yet: not implemented in the current releaseNot planned: intentionally out of scope for now
Feature notes:
- The temporary disable helper is host-local, conversation-scoped, and does not change persistent OMS state.
codexFastis full on OpenCode and Codex. Qwen does not support it yet.- Direct mode stays host-native: OpenCode renders commands plus agents, Codex renders agent TOMLs plus local bootstrap skills, and Qwen renders project-local commands plus agents.
gstackis a first-party workflow source. In the current slice, gstack-backed route projection is supported on OpenCode, Codex, and Claude Code, but not on Qwen.
The project is intentionally split into a shared OMS core plus thin workflow and host adapter layers. The table below uses current source line counts from the implementation files only; it excludes tests and docs.
| Layer | Main files | Approx. source LOC | Thickness |
|---|---|---|---|
| OMS control plane core | src/control-plane.ts, src/config.ts, src/cli.ts |
4316 | Medium |
| Workflow adapters | src/router.ts, src/workflow-superpowers.ts, src/workflow-gstack.ts, src/workflow-sources.ts, src/workflow-direct.ts |
371 | Thin |
| Shared capability policy | src/capabilities.ts |
97 | Thin |
| OpenCode adapter | src/opencode.ts |
633 | Thin |
| Codex adapter + bootstrap | src/codex.ts, src/codex-bootstrap.ts |
760 | Medium |
| Qwen adapter | src/qwen.ts |
424 | Thin |
| Claude adapter | src/claude.ts |
138 | Thin |
| Compatibility monitor | src/superpowers-compatibility.ts, src/superpowers-detectors.ts |
1093 | Medium |
| Shared artifact reconciliation | src/materialize.ts |
712 | Thin-to-medium |
How to read this:
Thin: mostly host-specific rendering or lightweight integration glueThin-to-medium: shared operational glue or adapters that stay narrower than the core but do more than pure renderingMedium: shared policy, config resolution, lifecycle, or bootstrap behavior- OMS is intentionally thicker in the shared core than in any single host adapter
oh-my-superagents is evolving into a broader routing and control-plane product.
Today it still ships first-class superpowers support across the supported hosts, and the first generic slice now includes an experimental host-native direct mode on OpenCode, Codex, and Qwen, while Claude Code currently supports the superpowers slice only.
It is not a cross-host configuration sync tool.
The supported surface for this release is the CLI, generated host artifacts, packaged plugin entrypoints, the Stage 1 OMS control plane, the Stage 2 Qwen adapter, the experimental direct-mode slices on OpenCode, Codex, and Qwen, and the current oh-my-superagents/library export surface.
Today that means:
- OpenCode: supported for
superpowersworkflow routing and the experimental direct-mode slice - Codex: supported for
superpowersworkflow routing and the experimental direct-mode slice - Qwen: supported with a limited Stage 2 surface for
superpowersworkflow routing plus an experimental direct-mode slice - Claude Code: supported as a thin host adapter for the current
superpowersslice, including source-aware route projection; direct workflow projection is not supported yet
- Reads layered
oh-my-superagents.config.jsoncfrom global and project locations - Resolves built-in
superpowersphase inputs into canonical routes such asphase.plan, and resolves user-defined direct intents into canonical routes such asintent.plan - Generates
.opencode/agents/*.mdand.opencode/commands/*.md - Generates
.codex/agents/*.toml - Generates
.qwen/agents/*.mdand.qwen/commands/*.md - Generates
.claude/skills/*/SKILL.md - Proposes routing config changes with
author routingfrom repo signals plus a user-supplied model inventory - Exposes
author routing,status,use,disable,sync,doctor,explain, andbootstrapCLIs - Ships a minimal OpenCode plugin entrypoint for startup diagnostics
- Built-in OMS phase inputs stay user-facing as stable phase names such as
writing-plans, but the shared router normalizes them to true canonical route ids such asphase.plan. - Source adapters map those canonical routes to source-native workflow entries. For example,
phase.planmaps tosuperpowers/writing-plansby default and can map togstack/plan-eng-reviewwhen that source is selected. - Host adapters consume the resolved canonical route plus its source entry metadata, then render host-native artifacts from that result instead of treating source-native phase names as the internal truth layer.
- Source overrides, explain output, and control-plane diagnostics use canonical route ids like
phase.plan; legacy aliases likephase.writing-plansare not the internal routing contract.
The first generic-routing slice is now an experimental direct workflow on OpenCode, Codex, and Qwen.
- It uses user-defined intents and keeps the rendered shape host-native instead of forcing identical files everywhere.
- OpenCode renders
ai-<intent>commands plusrt-<intent>agents. - Codex renders
rt-<intent>.tomlagents plus repo-localai-<intent>bootstrap skills inplugins/oh-my-superagents-codex/skills/. - Qwen renders project-local
.qwen/commands/ai-<intent>.mdcommands plus.qwen/agents/rt-<intent>.mdagents. - Direct intent ids must use lowercase letters, digits, and
-only so the generated host filenames stay valid. - The supported direct-mode control-plane surface is
status,doctor, andsyncon OpenCode, Codex, and Qwen. explain --intentis currently supported on OpenCode and Codex, but not yet on Qwen or Claude Code.explain --host claude --phase <phase>is supported for the current Claudesuperpowersslice.- Direct mode does not require upstream
superpowers, while first-partysuperpowersworkflow routing remains supported and unchanged.
This repository is maintained with pnpm. If you are working on the repo itself, enable Corepack once and use pnpm install for dependency management. Consumer-facing package usage examples in the install section can still use npx.
Host-local validation is disabled for this plugin repository. Run repository verification from a Debian Docker container only.
corepack enable
pnpm install
bash scripts/run-opencode-debian-canary.sh
bash scripts/run-codex-debian-canary.shFor superpowers workflow mode, install upstream superpowers separately, then use the host-specific flow you need.
For the experimental direct mode on OpenCode, Codex, or Qwen, upstream superpowers is not required.
Host-specific flow:
- OpenCode: add
oh-my-superagentsto your OpenCode plugin list - Codex: use the packaged CLI to run
bootstrap --host codex - Qwen: use
sync --host qwen; there is no heavy bootstrap flow in Stage 2
For ad-hoc local use of the CLI, run it with npx or from your local node_modules/.bin:
npx oh-my-superagents sync --host opencodeCreate oh-my-superagents.config.jsonc in your project root:
For a Codex-compatible profile inside the modern layered config shape, enable codexFast explicitly:
{
"presets": {
"default": {
"profiles": {
"build": {
"model": "gpt-5.4",
"effort": "balanced",
"codexFast": true
}
},
"routes": {},
"defaultRoute": "build"
}
}
}Notes:
- This single file can define multiple presets and switch between them with
status,use, anddisable. - Without
--config, OMS layers global config at~/.config/oh-my-superagents/config.jsoncunder the project file. Project settings override global settings, project presets replace same-named global presets, and project command entries replace same-named global command entries before missing defaults are synthesized. - Legacy single-preset router configs are still read and migrated into
presets.default, but do not mix legacy top-level keys withsettingsorpresets. - For
--host codex, use Codex-compatible model ids in profiles, such asgpt-5.4orgpt-5.3-codex-spark. The Codex adapter does not translate arbitrary OpenCode provider/model ids. - For
--host qwen, use Qwen-compatible model ids in profiles such asqwen/qwen3-coder-30borqwen/qwen3-coder-480b.
Lane-aware routing keeps phase fixed to the upstream superpowers workflow key and adds one routing layer below it:
phaseremains the stablesuperpowersworkflow key.laneis a tech-stack route bundle such asfrontend,backend, orinfra.profileis the leaf model/config object that carries executable settings.presetstill chooses the work mode, andusesLaneslimits which global lanes that preset can use.settings.defaultLaneis the persisted baseline lane for the active preset.laneSelection.modesupportsmanual,suggest, andauto.--lane <name>is a per-invocation runtime lane override forstatus,doctor,explain, andsync; it is never written back into config, butsyncwill materialize artifacts for the requested lane until the next sync regenerates them.
manual uses only the persisted/default lane path, suggest surfaces the runtime lane as a non-applying Stage 1 suggestion, and auto may apply a session-scoped effectiveLane without persisting it back into config.
Examples:
oh-my-superagents status --host opencode --lane frontend
oh-my-superagents explain --host opencode --phase brainstorming --lane frontendCompact example:
{
"settings": {
"activePreset": "default",
"defaultLane": "backend",
"laneSelection": { "mode": "suggest" }
},
"profiles": {
"frontend-build": {
"model": "openai/gpt-5",
"effort": "balanced"
},
"backend-build": {
"model": "gpt-5.4",
"effort": "balanced",
"codexFast": true
}
},
"lanes": {
"frontend": {
"label": "Frontend",
"routes": {
"frontend-design": "frontend-build"
},
"defaultRoute": "frontend-build"
},
"backend": {
"label": "Backend",
"routes": {
"writing-plans": "backend-build"
},
"defaultRoute": "backend-build"
}
},
"presets": {
"default": {
"label": "Default",
"short": "def",
"usesLanes": ["frontend", "backend"],
"defaultLane": "backend",
"routes": {},
"defaultRoute": "backend-build"
}
}
}Lane-aware subagent execution is an execution-layer enhancement under superpowers, not a separate workflow family. In the current slice, OMS keeps the main /sp-execute path on superpowers/subagent-driven-development and adds OpenCode-first lane-scoped wrappers such as /sp-execute-frontend with matching spr-build--frontend agents when the active preset enables lanes through usesLanes.
Set settings.subagentExecution.mode to control split behavior:
manual: only use lane-specific execution when the user explicitly asks for itsuggest: propose the split first and wait for confirmation; this is the defaultauto: apply the split across the matching lane helpers automatically for the current execution
These lane-scoped helpers stay inside the existing superpowers execution flow. They make the selected lane explicit at execution time, but they do not introduce a new top-level workflow system.
Stage 1 adds host-local control-plane commands:
oh-my-superagents status --host <opencode|codex|qwen|claude>oh-my-superagents use <preset-or-short> --host <opencode|codex|qwen|claude>oh-my-superagents disable --host <opencode|codex|qwen|claude>oh-my-superagents sync --host <opencode|codex|qwen|claude>oh-my-superagents doctor --host <opencode|codex|qwen|claude>
Behavior notes:
statusanddoctorcan fall back to the built-in default config when no real config file exists.useanddisablecan create the first real layered control-plane config when none exists yet.syncstill requires a real config source unless you pass an explicit--configpath.useaccepts either the preset key or its uniqueshortalias.disableand disabledsyncremove OMS-owned artifacts for the invoking host only. For example,--host opencodecleans up.opencode/*artifacts and leaves.codex/*and.qwen/*alone.- For
--host codex, the OMS-managed surface includes.codex/agents/*.toml, the OMS marketplace entry inside.agents/plugins/marketplace.json,plugins/oh-my-superagents-codex/.codex-plugin/plugin.json, and OMS control-plane skills underplugins/oh-my-superagents-codex/skills/*/SKILL.md. - For
--host qwen, the OMS-managed surface includes both.qwen/commands/*.mdand.qwen/agents/*.md. - For
--host claude, the OMS-managed surface includes project-scoped.claude/skills/*/SKILL.mdwrappers. - Artifact inspection in
statusanddoctoris also invoking-host-only.
OMS diagnostics now separate four different questions instead of flattening everything into one generic readiness bit:
support: whether OMS supports the host/source/route or command combination at all. This comes from shared capability policy and surfaces asreadiness.support.availability: whether the required upstream source can be detected right now. This surfaces asreadiness.availabilitywith statuses such asavailable,not_detected,error, ornot_implemented.compatibility: whether a detected upstreamsuperpowersinstall is inside the tested OMS matrix. This surfaces as top-levelcompatibilityon hosts with a monitor, and asreadiness.compatibilityfor route-level readiness when that question applies.sync state: whether OMS-managed artifacts for the invoking host are present, missing, or stale.statusanddoctoralways return host-localartifacts; OpenCodestatusadditionally summarizes sync state throughstate,nextAction, andartifactSummary, while OpenCodedoctorsurfacesartifactSummarywithout those extra status-only fields.
Those signals are intentionally independent. For example, an unsupported Qwen gstack projection stops at support.supported: false; a Claude gstack detector failure becomes availability.status: "error"; missing OpenCode wrappers are a sync-state problem, not a compatibility problem.
author routing is AI-assisted authoring support for routing config. It proposes lane, profile, preset, and optional direct-mode intent changes from repo signals plus a local model inventory. It does not autonomously rewrite your config or silently persist changes.
First-slice command shape:
oh-my-superagents author routing --mode direct --models ./models.jsoncBehavior notes:
--mode <superpowers|direct>is required.--models <path>is required in the first slice and must point to a local JSON or JSONC model inventory.- Preview is the default behavior: the command prints a summary and diff, returns the proposed patch in JSON output, and leaves config on disk unchanged.
- Add
--writeto apply the proposed config document after the same preview/diff output. - The first slice is CLI-first and host-independent. It helps bootstrap or evolve routing config faster, but the user remains responsible for reviewing model ids, lane names, and the final write.
Examples:
oh-my-superagents author routing --mode superpowers --models ./models.jsonc
oh-my-superagents author routing --mode direct --models ./models.jsonc --writeOpenCode and Qwen command filenames come from settings.commandPrefix plus each configured command name and aliases.
Example:
{
"settings": {
"commandPrefix": "team",
"commands": {
"status": { "name": "state", "aliases": ["health"] },
"sync": { "name": "refresh", "aliases": ["resync", "sync-now"] }
}
},
"presets": {
"default": {
"label": "Default",
"short": "def",
"profiles": {
"build": { "model": "openai/gpt-5" }
},
"routes": {},
"defaultRoute": "build"
}
}
}This renders OpenCode/Qwen command files such as team-state.md, team-health.md, team-refresh.md, team-resync.md, and team-sync-now.md.
Stage 2 Qwen support is intentionally narrow in superpowers workflow mode:
- no heavy bootstrap flow
- no
.qwen/skillsoutput from OMS - wrapper agents in
.qwen/agents/*.md - OMS control-plane command wrappers in
.qwen/commands/*.md - upstream skills are discovered from existing
.qwen/skillsor.agents/skillsdirectories in the project or home directory
Qwen wrapper agent names are fixed:
oms-brainstormoms-planoms-executeoms-reviewoms-verifyoms-visualoms-web-test
Qwen command files are generated from the same control-plane prefix and alias settings used by OpenCode.
For direct mode on Qwen, OMS keeps the same project-local host shape but swaps in ai-<intent> commands and rt-<intent> agents.
That direct-mode path does not require upstream skill discovery, supports status, doctor, and sync, and still leaves explain unsupported on Qwen.
For gstack-backed superpowers routes, Qwen is not supported in this slice; use OpenCode or Codex for those projections.
For Codex, the recommended first-run command is:
oh-my-superagents bootstrap --host codexThis will:
- create a starter
oh-my-superagents.config.jsoncif the project does not have one yet - scaffold a repo-local Codex marketplace entry in
.agents/plugins/marketplace.json - scaffold a local plugin bundle in
plugins/oh-my-superagents-codex/ - generate
.codex/agents/*.toml - generate OMS Codex control-plane skills in
plugins/oh-my-superagents-codex/skills/*/SKILL.md
After bootstrap completes:
- restart Codex
- open the plugin directory
- install
oh-my-superagents-codexfrom the local marketplace
The installed plugin adds Codex-native skill entrypoints for OMS status, use, disable, sync, and doctor, but routing truth still lives in oh-my-superagents.config.jsonc plus sync --host codex.
oh-my-superagents sync --host opencodeoh-my-superagents sync --host codexoh-my-superagents sync --host qwenoh-my-superagents sync --host claudeUse --config /absolute/or/relative/path.jsonc to override config discovery.
For Codex, sync and use reconcile the full OMS-owned Stage 1 surface: .codex/agents/*.toml, the OMS marketplace entry, plugins/oh-my-superagents-codex/.codex-plugin/plugin.json, and OMS control-plane skills under plugins/oh-my-superagents-codex/skills/*/SKILL.md.
For Qwen in Stage 2, sync materializes either OMS command wrappers plus OMS wrapper agents for superpowers workflow mode, or direct-mode ai-<intent> commands plus rt-<intent> agents for direct workflows. Only the superpowers workflow path requires upstream skills. It does not run a Codex-style bootstrap or install upstream skills for you. gstack-backed route projection is intentionally unsupported on Qwen in this slice.
For Claude Code in the current slice, sync materializes project-scoped .claude/skills/*/SKILL.md wrappers for the superpowers workflow surface. Direct workflow projection is intentionally unsupported on Claude in this slice.
oh-my-superagents explain --host opencode --alloh-my-superagents explain --host codex --alloh-my-superagents explain --host claude --phase writing-plansexplain is currently supported for --host opencode, --host codex, and --host claude in v1.
When control-plane explainability is available, explain adds route-trace fields such as routeSource, configSource, reuseRelationship, resolvedSource, and sourceEntry, plus route-level readiness. Single-item output carries top-level compatibility; --all preserves array shape and attaches compatibility to each item.
oh-my-superagents includes a host-aware compatibility monitor for upstream superpowers.
In the first release it checks:
- OpenCode upstream install metadata from project or user
opencode.jsonplugin entries plus the standard local install paths.opencode/plugins/superpowers.jsand${XDG_CONFIG_HOME:-~/.config}/opencode/plugins/superpowers.js - Codex upstream install metadata from the standard clone and skills symlink locations
First-release scope does not include Gemini CLI.
The monitor is observational only:
- it reads upstream install metadata to detect the current
superpowersref or version when possible - it does not install, update, rewrite, or relocate upstream
superpowers
For OpenCode, if project-scope and user-scope detection resolve to different upstream refs or versions, the monitor degrades to a conservative non-versioned result that evaluates as not_detected instead of pretending one install won.
Host-wide compatibility results surface in JSON output from status, doctor, sync, explain, and bootstrap on the hosts that currently have a monitor.
OpenCode startup diagnostics currently log only incompatible and not_detected outcomes.
The reported status is one of:
compatible: detected version is inside a tested rangeuntested: detected version is parseable but outside tested rangesincompatible: detected version is below the minimum supported version or in a known bad rangenot_detected: no parseable upstream version could be detected
Configure policy mode in oh-my-superagents.config.jsonc:
{
"settings": {
"superpowersCompatibility": {
"mode": "warn"
}
}
}Policy behavior:
warn: always continue;syncandbootstrapinclude compatibility details in JSON output and emit warning text foruntested,incompatible, andnot_detected, whileexplainincludes compatibility in JSON output onlystrict: blocksyncandbootstraponly when status isincompatible;compatible,untested, andnot_detectedremain non-blocking
/sp-brainstorm/sp-plan/sp-execute/sp-review/sp-verify/sp-visual/sp-web-test
On OpenCode, /sp-visual and /sp-web-test both target the shared spr-visual agent today, so they cannot diverge on model selection in the current implementation.
When the OMS control plane is enabled, OpenCode also generates command wrappers from the configured prefix and aliases, such as oms-status, oms-use, oms-off, oms-sync, and oms-doctor.
For superpowers workflow mode, Codex generates these OMS phase agents:
oms-brainstormoms-planoms-executeoms-reviewoms-verifyoms-visualoms-web-test
In direct mode, Codex instead generates rt-<intent>.toml agents and matching repo-local ai-<intent> bootstrap skills under plugins/oh-my-superagents-codex/skills/.
Run oh-my-superagents sync --host codex to materialize these into .codex/agents/, and to reconcile the OMS-owned marketplace entry, plugin manifest, and Codex control-plane skill bundle.
Then ask Codex to use a specific phase agent, for example:
Use the oms-review agent to review the current branch
Run oh-my-superagents sync --host qwen to materialize Qwen artifacts into .qwen/commands/ and .qwen/agents/.
In superpowers workflow mode this renders OMS-owned wrapper commands plus wrapper agents and still requires the upstream skills to be available in .qwen/skills or .agents/skills.
In direct mode this renders ai-<intent>.md commands plus rt-<intent>.md agents and does not require upstream skills.
Stage 2 boundaries:
- no generated
.qwen/skills - no host bootstrap installer
- wrapper commands plus wrapper agents only
bootstrap --host codex, sync --host codex, and use <preset> --host codex reconcile this OMS-owned Codex plugin surface:
.agents/plugins/marketplace.jsonplugins/oh-my-superagents-codex/.codex-plugin/plugin.jsonplugins/oh-my-superagents-codex/skills/<prefix-status-or-alias>/SKILL.mdplugins/oh-my-superagents-codex/skills/<prefix-use-or-alias>/SKILL.mdplugins/oh-my-superagents-codex/skills/<prefix-disable-or-alias>/SKILL.mdplugins/oh-my-superagents-codex/skills/<prefix-sync-or-alias>/SKILL.mdplugins/oh-my-superagents-codex/skills/<prefix-doctor-or-alias>/SKILL.md
Run the packaged-plugin canary in a clean Debian container:
bash scripts/run-opencode-debian-canary.shThe detailed validation notes are in docs/superpowers/specs/2026-04-09-opencode-debian-canary.md.
Host-local validation is disabled for this plugin repository. Use the Debian Docker canary instead:
bash scripts/run-opencode-debian-canary.shThe disabled host-local policy is documented in docs/superpowers/specs/2026-04-09-opencode-local-canary.md.
Run the packaged Codex canary in a clean Debian container:
bash scripts/run-codex-debian-canary.shThe detailed validation notes are in docs/superpowers/specs/2026-04-09-codex-debian-canary.md.
Host-local validation is disabled for this plugin repository. Use the Debian Docker canary instead:
bash scripts/run-codex-debian-canary.shThe disabled host-local policy is documented in docs/superpowers/specs/2026-04-09-codex-local-canary.md.
This project builds on and is inspired by work from several projects and communities:
- superpowers — The upstream workflow skill system that
oh-my-superagentsroutes and complements. The core design rule is to complement, never compete. - oh-my-opencode — The original
oh-my-*orchestration framework in the AI CLI space, which established the naming convention and demonstrated the value of host-native routing. OMS deliberately takes a thinner approach while sharing the same ecosystem. - oh-my-claudecode — A related ecosystem project whose Claude Code host primitives provided useful evidence of host capability. OMS references these capabilities while staying aligned with its own thin-adapter architecture.
- oh-my-codex — A related ecosystem project for Codex CLI orchestration, part of the same
oh-my-*family of AI CLI tools. - OpenCode — The primary host platform, providing the plugin and agent system that OMS targets first.
- Codex — OpenAI's Codex CLI, a supported host platform with its own agent and plugin primitives.
- Qwen Code — Alibaba's Qwen Code CLI, a supported host platform.
- Claude Code — Anthropic's Claude Code CLI, a supported host platform.
- gstack — A first-party workflow source with structured specialist agents, used as a workflow source adapter in OMS.
{ "$schema": "./node_modules/oh-my-superagents/schemas/oh-my-superagents.schema.json", "settings": { "enabled": true, "activePreset": "default", "commandPrefix": "oms", "commands": { "status": { "name": "status", "aliases": ["st"] }, "use": { "name": "use", "aliases": ["u"] }, "disable": { "name": "off", "aliases": ["o"] }, "sync": { "name": "sync", "aliases": ["sy"] }, "doctor": { "name": "doctor", "aliases": ["dr"] } }, "superpowersCompatibility": { "mode": "warn" } }, "presets": { "default": { "label": "Default", "short": "def", "description": "General daily development", "profiles": { "strategy": { "model": "anthropic/claude-sonnet-4-5-20250929", "variant": "high" }, "build": { "model": "openai/gpt-5", "effort": "balanced" } }, "routes": { "brainstorming": "strategy" }, "defaultRoute": "build" }, "review": { "label": "Review", "short": "rev", "description": "Heavier review-oriented preset", "profiles": { "review": { "model": "anthropic/claude-sonnet-4-5-20250929", "variant": "high" } }, "routes": {}, "defaultRoute": "review" } } }