WebGPT
Nhahan/WebGPT
Hands bounded tasks from Codex to a signed-in ChatGPT web session at a chosen reasoning level, or opens a terminal chat in your project that you control.
A skill your agent uses when a user wants to set up, configure, install, or reconfigure the opencode Fusion agent team - a strong main/build agent that plans and reviews but cannot edit files…
$ npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install mihneaptu/opencode-fusion fusion-setup --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/mihneaptu/opencode-fusion.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.opencode/skills/fusion-setup .claude/skills/fusion-setup && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "fusion-setup" agent skill from https://github.com/mihneaptu/opencode-fusion/tree/main/.opencode/skills/fusion-setup into .claude/skills/fusion-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fusion-setup", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/mihneaptu/opencode-fusion/tree/main/.opencode/skills/fusion-setupType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install mihneaptu/opencode-fusion fusion-setup --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mihneaptu/opencode-fusion.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.opencode/skills/fusion-setup .agents/skills/fusion-setup && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "fusion-setup" agent skill from https://github.com/mihneaptu/opencode-fusion/tree/main/.opencode/skills/fusion-setup into .agents/skills/fusion-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fusion-setup", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install mihneaptu/opencode-fusion fusion-setup --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mihneaptu/opencode-fusion.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.opencode/skills/fusion-setup .cursor/skills/fusion-setup && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "fusion-setup" agent skill from https://github.com/mihneaptu/opencode-fusion/tree/main/.opencode/skills/fusion-setup into .cursor/skills/fusion-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fusion-setup", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/mihneaptu/opencode-fusion.git --path .opencode/skills/fusion-setup--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install mihneaptu/opencode-fusion fusion-setup --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mihneaptu/opencode-fusion.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.opencode/skills/fusion-setup .gemini/skills/fusion-setup && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "fusion-setup" agent skill from https://github.com/mihneaptu/opencode-fusion/tree/main/.opencode/skills/fusion-setup into .gemini/skills/fusion-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fusion-setup", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install mihneaptu/opencode-fusion fusion-setupInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/mihneaptu/opencode-fusion.git skills-src && mkdir -p .github/skills && cp -r skills-src/.opencode/skills/fusion-setup .github/skills/fusion-setup && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "fusion-setup" agent skill from https://github.com/mihneaptu/opencode-fusion/tree/main/.opencode/skills/fusion-setup into .github/skills/fusion-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fusion-setup", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install mihneaptu/opencode-fusion fusion-setup --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/mihneaptu/opencode-fusion.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.opencode/skills/fusion-setup .opencode/skills/fusion-setup && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "fusion-setup" agent skill from https://github.com/mihneaptu/opencode-fusion/tree/main/.opencode/skills/fusion-setup into .opencode/skills/fusion-setup/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "fusion-setup", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
fusion-setupA skill your agent uses when a user wants to set up, configure, install, or reconfigure the opencode Fusion agent team - a strong main/build agent that plans and reviews but cannot edit files…
Fusion Setup is an agent skill from mihneaptu/opencode-fusion. Use when a user wants to set up, configure, install, or reconfigure the opencode Fusion agent team - a strong main/build agent that plans and reviews but cannot edit files, delegating all edits to a cheaper sidekick subagent, plus an explore search agent and optional research/design/reviewer/vision specialists. Triggers include "set up fusion", "configure fusion", "install fusion", "fusion setup", "undo fusion" / "remove fusion", changing which models the main, sidekick, or explore agents use, or naming a…
Its SKILL.md is about 7.5k tokens, which your agent loads only when the skill is triggered. The skill folder holds 22 other files, including scripts (for example `agent/build.md`, `agent/design.md` and `agent/plan.md`).
It sits in Agent Workflows, covering Subagents. It works with OpenAI. The repository describes itself as: Main agent plans and reviews; cheaper sidekick edits. Devin Fusion pattern for OpenCode. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit e48981a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 1 file in scripts/ (JavaScript, from the files we listed), which the agent can run.
Shell commands in SKILL.md call:
npmnodeclaudenpxgitruffcargogomakeopencodeFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
opencode.aiFrom URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
MYPROVIDER_API_KEYKIROCC_API_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Fusion Setup loads about 7.5k tokens when it runs. Until then it costs about 186 tokens; SKILL.md has 4,015 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from mihneaptu/opencode-fusion at commit e48981a, republished under its MIT licence (© mihneaptu). 4,015 words, ~7,494 tokens.
.claude/skills/fusion-setup/SKILL.md (or your agent's skills folder). This skill also uses 18 other files; get the full folder from GitHub.This skill configures the Fusion agent team (a main agent, a sidekick executor, an explore searcher, and optional specialists) by writing the user's GLOBAL opencode config at ~/.config/opencode/ (on Windows: %USERPROFILE%\.config\opencode\). It does not require cloning any repository.
opencode resolves that directory as $XDG_CONFIG_HOME/opencode/ when XDG_CONFIG_HOME is set and non-empty, falling back to ~/.config/opencode/ otherwise. Every ~/.config/opencode/... path below means that resolved directory. The bundled installer in Step 4 works this out itself, so the normal flow needs no special handling; only the manual fallback in Step 4b and the verification in Step 5 need you to resolve it by hand. Installing into ~/.config/opencode/ on a machine with a different XDG_CONFIG_HOME writes a tree opencode never reads - the install looks successful and Fusion silently never loads.
Fusion splits work across agents with asymmetric permissions:
build (main, primary): a strong model that plans, makes judgment calls, and reviews. It CANNOT edit files, search the codebase, or run arbitrary shell. Its only path to changing files is delegating to the sidekick via the task tool.plan (primary): plan mode - the same planning brain as build. Produces a reviewed plan and delegates exploration, but does not execute; switch to build to carry it out. Overrides opencode's built-in plan agent so plan mode stays Fusion-aware.sidekick (subagent): a cheaper, fast model with full edit and broad bash access (direct git commit/git push and common wrappers are denied as defense-in-depth - committing stays with the main agent). It executes precise specs handed to it by the main agent.explore (subagent): a cheap model used for read-only codebase exploration.research (subagent): read-only external research - web search and docs. No edit access.design (subagent): frontend/UI implementation. Loads design skills, edits files, runs the dev/build tooling.reviewer (subagent): critiques a plan before implementation and audits a diff before commit (correctness, scope, security). Read-only plus lint/test; no edit access.vision (subagent): reads images/screenshots the main model cannot see and reports them as text. Only needed when the main model lacks image input.Think of the repo as a catalog of roles: the core (build/plan/sidekick/explore) is required, and the rest are optional pieces you install only if your workflow needs them. The research/design/reviewer/vision specialists are optional. Each role's model is chosen independently - that is a key reason to use Fusion: put your favorite design model on design and a different reviewer model on reviewer.
The asymmetry is enforced by the permission layer, not by convention. Preserving the exact permission frontmatter in the bundled agent files installed during Step 4 is what makes Fusion work.
Before the per-role interview, ask whether the user's models come from one of these subscriptions. Each maps to a bundled profile - a ready-made config fragment in <this-skill-dir>/profiles/ with sane per-role defaults:
| Profile | Subscription |
|---|---|
opencode-go | OpenCode Go (low-cost open-model plan on OpenCode Zen) |
opencode-zen | OpenCode Zen pay-as-you-go credits |
opencode-zen-free | OpenCode Zen free-tier models only |
chatgpt | ChatGPT Plus or Pro |
github-copilot | GitHub Copilot |
If the user names one (including as a /fusion-setup argument):
Read <this-skill-dir>/profiles/<name>.json and show its role -> model table for confirmation. The JSON is the single source of truth - never quote model ids from memory or from this document.
Remind them that authentication is out-of-band: the provider must be connected once via opencode auth login (or /connect inside opencode) with their subscription login or key. NEVER ask for a key in the chat. Profile provider blocks deliberately contain no npm adapter, baseURL, or apiKey - opencode knows these providers natively; the blocks only carry display names.
Skip Steps 1-3 and run the installer with the profile (Step 4's delegation rules still apply):
node <this-skill-dir>/scripts/install.js apply --profile <name> --extras commands,pluginNo --roles flag is needed: the installer derives the role list from the profile, so every role the profile assigns a model also gets its permission-bearing agent file.
To change one or two picks, keep --profile <name> and add --config <fragment.json> holding just the delta (for example a different agent.reviewer.model, plus a provider block only if that model's provider is outside the profile). The fragment wins over the profile. Removing an optional role a profile assigns cannot be expressed as an override - use the custom interview (Steps 1-4) without --profile instead.
Caveats worth mentioning when they apply: opencode-zen-free includes a vision role because its main model cannot read images, while the other profiles lead with models that read images directly; opencode-zen-free runs on free-period models whose prompts may be used for training under OpenCode's policy - warn users to keep sensitive code off it; the single-vendor chatgpt profile keeps every role on one vendor, so its reviewer differs from build by model (GPT-5.6 Terra) rather than by vendor - a user with a second provider may still want to override the reviewer for true cross-vendor review; github-copilot defaults its main to Claude Sonnet 5 for credit-cost sanity - a user who wants max quality can override build to github-copilot/claude-opus-5 (billed much higher per token). There is deliberately NO Claude Pro/Max provider profile. A subscription login cannot become agent.build.model. If the user wants a limited Claude Pro/Max integration, offer the optional Claude Code review bridge below. Subscription lineups rotate - if a profile model errors as unknown, the ids may have drifted; fall back to the custom interview and report it.
If the user asks for Claude subscription OAuth, keep another normal OpenCode provider or profile as the build model and offer the claude extra. It installs a local OpenCode plugin with two custom tools: a sanitized readiness check and a stateless plan review. Only the build and plan agents may call them.
The bridge invokes Anthropic's official claude CLI in print mode. It does not read the credential store, extract an OAuth token, put a token in opencode.json, or expose Claude as an OpenCode model. It verifies that claude auth status reports a first-party Pro or Max login, removes API-key and third-party routing variables from the child process, defaults to Claude Opus 5 at high effort (the review tool accepts an optional full claude-* model id and an effort of low, medium, high, xhigh, or max per call), disables tools and customizations, sends the review packet over stdin, and disables session persistence. It runs the CLI from a neutral temporary directory, honors session cancellation, and its tools refuse callers other than the build and plan agents even before permissions apply.
Ask the user to install Claude Code and authenticate directly with claude auth login; never ask them to paste a token. On Windows they need the native Claude Code build (the installer script or claude install), not the npm shim - the bridge spawns claude without a shell. Then include claude in Step 4's extras, for example --extras commands,plugin,claude. Do not enable this by default. Anthropic describes subscription usage as intended for its native applications, including Claude Code, and says third-party-tool access may be allowed at its discretion or charged to usage credits. Present this as an optional compatibility bridge, not as a guaranteed subscription entitlement or an API replacement.
If the user has none of these subscriptions, or wants full control over every pick, continue with Step 1.
Ask the user which model to use for each role. Do not assume; let them choose their own provider and models. Collect:
Roles 4-7 are optional a-la-carte pieces. If the user only wants the core build/plan/sidekick/explore roles, skip them - but offer them, since choosing a different model per specialist is a key reason to use Fusion. The plan agent activates from its installed agent/plan.md (Step 4), which overrides opencode's built-in plan agent - it reuses the main/build model and needs no agent.plan block in opencode.json and no separate model question. Do not offer vision when the main model already reads images.
For each distinct provider the chosen models use, collect the connection details:
kiro, progrok, anthropic, openai)@ai-sdk/openai-compatible)MYPROVIDER_API_KEY). NEVER ask the user to paste the actual key into the chat - the config references the variable and opencode resolves it at startup, so the secret never appears in the conversation or in plaintext config.If the user is unsure, offer the OpenAI-compatible local-gateway shape as the default pattern and ask for their baseURL and key env var name.
For each provider, build a block under provider. OpenAI-compatible template:
"<provider-id>": {
"npm": "@ai-sdk/openai-compatible",
"name": "<display name>",
"options": {
"baseURL": "<baseURL>",
"apiKey": "{env:<ENV_VAR_NAME>}"
},
"models": {
"<model-id>": {
"name": "<display name>",
"attachment": true,
"modalities": { "input": ["text", "image"] }
}
}
}The {env:...} placeholder is documented opencode config syntax: the key is read from the user's environment at startup, so it never sits in plaintext in opencode.json. An UNSET variable silently resolves to an empty string, which surfaces later as auth errors - tell the user to set the variable in the environment they launch opencode from. If they prefer a key file, "apiKey": "{file:~/.secrets/<name>}" works the same way.
Only include attachment/modalities for models that actually support image input. A main model with image input means no separate vision agent is needed.
The template above shows the OpenAI-compatible shape (@ai-sdk/openai-compatible). If a provider is a native vendor rather than an OpenAI-compatible gateway, use that vendor's adapter instead - for example @ai-sdk/anthropic for an Anthropic-style endpoint or @ai-sdk/openai for OpenAI. Only the npm value changes; the rest of the block shape is the same.
If two roles use different models from the SAME provider (for example a main model and a cheaper research model both on provider kirocc), do NOT emit two provider blocks with the same id - that is a duplicate key. Emit ONE block for that provider with BOTH models listed under its models object, like this:
"kirocc": {
"npm": "@ai-sdk/anthropic",
"name": "Kirocc",
"options": { "baseURL": "<baseURL>", "apiKey": "{env:KIROCC_API_KEY}" },
"models": {
"claude-opus-4-8": { "name": "Opus", "attachment": true, "modalities": { "input": ["text", "image"] } },
"claude-sonnet-5": { "name": "Sonnet" }
}
}Build a config FRAGMENT with this exact structure and save it to a temporary file (OS temp dir is fine). Do NOT write ~/.config/opencode/opencode.json yourself - the installer script in Step 4 merges the fragment in deterministically. When running as the restricted Fusion build agent, delegate creation of the temporary fragment and the Step 4 installer command together in one sidekick task so build never needs direct filesystem access. In plan mode, stop after specifying the choices and tell the user to switch to build (or run the command themselves); plan must not execute the install. Replace the <...> placeholders with the user's choices. Model references are always provider-id/model-id. The JSON only assigns models - each role's mode, permissions, and prompt come from its agent file (Step 4), and the build agent's permission frontmatter is the core of Fusion and must not be loosened.
{
"$schema": "https://opencode.ai/config.json",
"subagent_depth": 2,
"model": "<main-provider>/<main-model-id>",
"provider": {
"<main-provider-id>": { "npm": "...", "options": {}, "models": {} },
"<sidekick-provider-id>": { "npm": "...", "options": {}, "models": {} }
},
"agent": {
"build": { "model": "<main-provider>/<main-model-id>" },
"explore": { "model": "<explore-provider>/<explore-model-id>" },
"sidekick": { "model": "<sidekick-provider>/<sidekick-model-id>" },
"research": { "model": "<research-provider>/<research-model-id>" },
"design": { "model": "<design-provider>/<design-model-id>" },
"reviewer": { "model": "<reviewer-provider>/<reviewer-model-id>" }
}
}Notes:
"subagent_depth": 2. OpenCode 1.18.2+ defaults to 1, which lets build start sidekick but prevents sidekick from starting its permitted read-only explore/research helper. The installer enforces a minimum of 2 and preserves a larger existing value."<...-provider-id>": { ... } placeholder lines under provider with the ACTUAL provider block(s) you built in Step 2. If your main and sidekick share one provider, that is a single block (see Step 2 on merging models); if they use different providers, include one block each. The placeholder shape shown is not valid config on its own - it must be filled in.~/.config/opencode/agent/ as an agent definition: frontmatter supplies the role's mode and permission, and the body is its prompt. No prompt fields belong in opencode.json - Step 4 installs the files that carry them.opencode.json.backup.<timestamp> and deep-merges the fragment - your fragment wins on conflicting keys, everything else in the user's config is preserved. Never silently discard an existing config: if the user explicitly wants a clean overwrite instead of a merge, they should move the old opencode.json aside first."vision": { "model": "<vision-provider>/<vision-model-id>" } to the agent block ONLY if the user configured a vision role (main model lacks image input). Omit it otherwise."small_model": "<cheap-provider>/<cheap-model-id>" - opencode uses a small model for background tasks like title generation; if unset it may fall back to a remote default. Pin it to one of the user's own cheap local models to keep everything on their providers."enabled_providers": ["<provider-a>", "<provider-b>"] - allowlist of providers to load; keeps the model picker deterministic and ignores any other credentials present."compaction": { "prune": true } - drops stale tool outputs when compacting context, which cuts main-agent token cost in a delegation-heavy Fusion flow."limit": { "context": <n>, "output": <n> } inside the model block lets opencode track remaining context accurately (models on models.dev supply this automatically; custom local gateways do not). Use the real context/output window for that model; do not guess.The skill bundles an installer at <this-skill-dir>/scripts/install.js (plain Node, no dependencies). It owns every mechanical step - timestamped backup, deep merge, atomic write, prompt-file copies, an undo manifest, and post-install validation - so none of that depends on improvised file operations. Its version-2 manifest stores the original bytes and permissions of every managed file, plus hashes of the exact installed state. Reapply and undo refuse before writing if the config or a managed file changed after installation; they never guess which content belongs to Fusion. Run it with the fragment from Step 3:
node <this-skill-dir>/scripts/install.js apply --config <path-to-fragment.json> --extras commands,plugin--profile <name> applies a bundled subscription profile (Step 0) as the base fragment; a --config fragment, when also given, overrides it key by key. Unknown profile names fail listing the available ones.--roles is normally omitted: the installer derives the list from the config - the core build,plan,sidekick plus every optional role the fragment or profile assigns a model (explore needs no file by design). An explicit --roles can add extra roles, but one that omits a role the config assigns a model is refused: a role with a model and no agent file would run without Fusion's permissions.--extras commands,plugin installs the optional slash commands and audit plugin described below. Add claude only when the user explicitly wants the Claude Code Pro/Max review bridge: --extras commands,plugin,claude.--dry-run to print the full plan (backup name, merged keys, files) without writing anything - offer this if the user seems cautious. The plan also prints an OVERRIDES: line naming any top-level key whose current value the fragment would replace.--adopt-config is for reapplying over an opencode.json the user edited by hand since the last install. Without it that mismatch refuses, which would otherwise wedge reapply permanently - including a prompt-only refresh whose managed files are all intact. The merge folds the fragment into the CURRENT file, so hand edits survive; the flag only re-records the baseline hash. The manifest keeps the pre-install originalContent, so a later undo still restores the true pre-Fusion state. It deliberately does NOT excuse a modified managed prompt: that refusal protects a deliberate local customization from being overwritten.Only when Node is unavailable. Before merging or copying anything, make a timestamped backup of opencode.json and of every destination file that already exists, and record which destinations did not exist. Then copy the prompt files bundled with this skill into the global agent folder (one per role you configured). <this-skill-dir> is the directory this SKILL.md lives in - its bundled prompts are in the agent/ subfolder next to this file. Every configured role except explore needs its agent file installed (explore is opencode's built-in read-only subagent and only gets a model in the JSON); in particular the sidekick DOES need its agent/sidekick.md file - its permissions and prompt come entirely from that file:
<this-skill-dir>/agent/build.md -> ~/.config/opencode/agent/build.md<this-skill-dir>/agent/plan.md -> ~/.config/opencode/agent/plan.md<this-skill-dir>/agent/sidekick.md -> ~/.config/opencode/agent/sidekick.md<this-skill-dir>/agent/research.md -> ~/.config/opencode/agent/research.md<this-skill-dir>/agent/design.md -> ~/.config/opencode/agent/design.md<this-skill-dir>/agent/reviewer.md -> ~/.config/opencode/agent/reviewer.md<this-skill-dir>/agent/vision.md -> ~/.config/opencode/agent/vision.md (only if a vision role was configured)These carry the full operating instructions and permissions for each role. Each subagent file's frontmatter sets its mode and permission; the files deliberately ship WITHOUT a model key, because markdown frontmatter overrides opencode.json on any key it sets - a model baked into the file would silently override the user's Step 3 choice. Models come only from opencode.json. Install only the files for the roles you configured - if the user skipped research/design/reviewer/vision, skip those.
Four optional pieces ship next to the skill. The installer groups the two commands under commands, the audit plugin under plugin, and the Claude Code bridge under claude (manual copy paths below if the script cannot run):
<this-skill-dir>/commands/fusion-setup.md -> ~/.config/opencode/commands/fusion-setup.md (note the PLURAL commands/ directory). This gives a discoverable /fusion-setup command that launches this setup flow; it accepts optional arguments for a targeted reconfigure.<this-skill-dir>/commands/fusion-status.md -> ~/.config/opencode/commands/fusion-status.md. This gives a /fusion-status health check that verifies the setup is installed, loaded, and enforcing (live tool schema, config on disk, installed agent files, and the optional Claude bridge). It only reports - it changes nothing.<this-skill-dir>/plugins/fusion-audit.js -> ~/.config/opencode/plugins/fusion-audit.js (PLURAL plugins/). It logs the delegation tree (subagent spawns and edit/write/apply_patch/task tool calls) and aggregates per-agent token usage per session via opencode's logger for auditing - the raw numbers behind "did Fusion actually save money?". It is observational only - it cannot see the calling agent, so it does not enforce anything; permissions do the enforcing. Skip it if the user does not want extra logging.<this-skill-dir>/plugins/fusion-claude.js -> ~/.config/opencode/plugins/fusion-claude.js. Also merge "fusion_claude_*": "deny" into the top-level permission map. The build and plan agent files contain the two exact allows that override this global deny. If the existing top-level permission is shorthand, preserve it as "*" before adding the Claude deny. This bridge is deliberately review-only and optional. Note that re-running the installer without the claude extra does not remove a previously installed bridge - the plugin file, the global deny, and the build/plan allows all stay in place; removal is install.js undo (or deleting the plugin file and the deny by hand).~/.config/opencode/opencode.json, and confirm every agent prompt file you installed exists under ~/.config/opencode/agent/ (build and sidekick at minimum).~/.config/opencode/commands/ and ~/.config/opencode/plugins/. For the Claude bridge, also confirm the top-level fusion_claude_* deny and the exact build/plan allows are present.{env:VAR}, confirm with the user that the variable is set in the environment they launch opencode from - using a presence-only check that never prints the secret: [ -n "$VAR" ] && echo set || echo missing in bash/zsh, if defined VAR (echo set) else (echo missing) in cmd. Do NOT suggest echo $VAR - that prints the actual credential into the terminal (and into the transcript if run through an agent). An unset variable becomes an empty string and shows up later as auth errors.fusion_claude_status; it reports readiness without returning account identity or credential data.build.md allows npm run lint*, npm test*, npm run build*, npx tsc --noEmit*, and npx vitest run*; plan.md has the same list without npm run build*; reviewer.md allows only npm run lint*, npm test*, and npx vitest run*. Check the file before telling the user to change an entry in it. Point them at README's "Adjust the bash allowlist" section for the per-stack tools (pytest/ruff check for Python, cargo test/cargo clippy for Rust, go test/go vet for Go, make test/make lint for Make-driven builds). Three things to say out loud: keep "*": "deny" first; prefer an exact pattern over a trailing *, because * matches the whole rest of the command and a broad "ruff check*" also permits the file-rewriting ruff check --fix and --add-noqa (pin the command the project actually runs where you can, since enumerating every writing flag never finishes); and if you do need a broad allow, put each narrowing deny after it, because opencode resolves overlapping patterns by last-match-wins. These prompts are global, not per project, so a user who works across stacks should add their entries alongside the JS ones rather than replacing them. The git half of the allowlist needs no change.To change a model, build a small fragment with agent.<role>.model (and a provider block if the new model uses a new provider), then rerun the installer and restart opencode. For a profile-based install, rerun with the same --profile <name> plus the small --config delta. Reapply preserves the original pre-Fusion baseline and keeps all previously managed files recorded for a complete undo.
Going through the installer is preferred because it keeps the manifest accurate, but editing opencode.json in place is supported and does not lose anything: the next reapply refuses once so the mismatch is visible, and --adopt-config accepts the edited file as the new baseline while still merging the fragment into it. Editing an installed agent/*.md is different - that refusal has no override, because silently overwriting a deliberately customized prompt is worse than stopping. Restore the bundled copy of that file if you want the installer to manage it again.
Run the bundled undo. It restores the exact pre-install config and every destination that Fusion replaced, removes only destinations Fusion originally created, keeps every timestamped config backup, and refuses before changing anything if the installed state was edited afterward or the manifest is unsafe:
node <this-skill-dir>/scripts/install.js undoManual fallback after a manual install (no Node):
opencode.json and every destination that existed before installation from the backups made during the manual install.For an automatic install when Node is temporarily unavailable, wait until Node is available and use the manifest-driven undo. If an automatic manifest is missing, the timestamped files recover only opencode.json; do not remove prompts or extras unless independent backups or byte-for-byte ownership evidence prove they are still Fusion-owned. Confirm with the user before deleting anything, and never delete the backups themselves.
© mihneaptu, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 18 other files (scripts) in .opencode/skills/fusion-setup of mihneaptu/opencode-fusion.
Open the folder on GitHubat commit e48981a
Fusion Setup next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Fusion Setup this skillmihneaptu/opencode-fusion | 217 | — | ~7.5k | Automated safety check: Pass | MIT | |
| WebGPTNhahan/WebGPT | 117 | — | ~1.4k | Automated safety check: Pass | MIT | |
| Codex Workflowsscasella/claude-dynamic-workflows-codex | 324 | — | ~13k | Automated safety check: Pass | MIT | |
| Codex GuideK9i-0/ccpocket | 1.1k | — | ~475 | Automated safety check: Pass | MIT | |
| Claudish UsageMadAppGang/claudish | 1k | — | ~9k | Automated safety check: Pass | None | |
| OpenAI Codex CLI Bridgetaracodlabs/aiden | 851 | 1 repos | ~826 | Automated safety check: Pass | Apache-2.0 |
Nhahan/WebGPT
Hands bounded tasks from Codex to a signed-in ChatGPT web session at a chosen reasoning level, or opens a terminal chat in your project that you control.
scasella/claude-dynamic-workflows-codex
Run a dynamic-workflow script on a local Codex App Server — orchestrate many Codex / GPT agents (the agent / parallel / pipeline / phase / budget DSL) instead of Claude subagents, for codebase…
K9i-0/ccpocket
Codex の使い方、CLI/app/IDE、rules・hooks・AGENTS.md・skills・subagents・config などを案内する。Codex や OpenAI 製品の仕様を答える前に必ず公式ドキュメントを確認し、rules/approval は codex execpolicy check で実検証すること。
MadAppGang/claudish
CRITICAL - Guide for using Claudish CLI ONLY through sub-agents to run Claude Code with any AI model (OpenRouter, Gemini, OpenAI, local models).
taracodlabs/aiden
Delegates code generation, editing and explanation tasks to the OpenAI Codex CLI, with commands for interactive, auto-edit, question-only and model-specific runs.
agentuse/agentuse
Create, improve, and review AgentUse agent files. An agent skill from agentuse/agentuse.
Works with
Categories
A skill your agent uses when a user wants to set up, configure, install, or reconfigure the opencode Fusion agent team - a strong main/build agent that plans and reviews but cannot edit files…. Fusion Setup is an agent skill from mihneaptu/opencode-fusion. Use when a user wants to set up, configure, install, or reconfigure the opencode Fusion agent team - a strong main/build agent that plans and reviews but cannot edit files, delegating all edits to a cheaper sidekick subagent, plus an explore search agent and optional research/design/reviewer/vision specialists.
Fusion Setup fits situations like: A user wants to set up; reconfigure the opencode Fusion agent team - a strong main/build agent that plans and reviews but cannot edit files; delegating all edits to a cheaper sidekick subagent; plus an explore search agent and optional research/design/reviewer/vision specialists.
Run `npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a claude-code`. Or copy the skill folder (.opencode/skills/fusion-setup in mihneaptu/opencode-fusion) into .claude/skills/fusion-setup in your project. Claude Code loads it when a task matches its description.
Run `npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a codex`. Or copy the skill folder (.opencode/skills/fusion-setup in mihneaptu/opencode-fusion) into .agents/skills/fusion-setup in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add mihneaptu/opencode-fusion --skill fusion-setup -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/fusion-setup, .gemini/skills/fusion-setup, .github/skills/fusion-setup and .opencode/skills/fusion-setup in your project.
Going by SKILL.md and its folder, Fusion Setup needs JavaScript for the scripts in its folder, the command-line tools its instructions call (npm, node, claude, npx, git and ruff) and credentials named MYPROVIDER_API_KEY and KIROCC_API_KEY. Our summary lists: Node.js; A credential in MYPROVIDER_API_KEY.
SKILL.md names 1 domain. In commands or code: opencode.ai; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Fusion Setup is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 7.5k tokens (SKILL.md is roughly 30k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Fusion Setup: WebGPT (Nhahan/WebGPT, 117 stars), Codex Workflows (scasella/claude-dynamic-workflows-codex, 324 stars), Codex Guide (K9i-0/ccpocket, 1.1k stars) and Claudish Usage (MadAppGang/claudish, 1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
mihneaptu (a GitHub user) maintains it in mihneaptu/opencode-fusion, which has 217 GitHub stars. The repository was last updated on August 24, 2026.
Source: mihneaptu/opencode-fusion on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.