| name | fusion |
| description | Use /fusion autonomously for deep multi-model judgment: release reviews, architecture tradeoffs, subtle bug/risk analysis, root-cause analysis, and decisions that benefit from independent parallel answers. |
Fusion Skill
Fusion sends one prompt to the configured model harnesses in parallel and returns material for one synthesized answer.
Use it proactively when the user asks for, or the task clearly needs, deeper judgment than a single pass:
- release-blocking or final review
- architecture, API, protocol, or migration decisions
- subtle bug/risk analysis
- root-cause analysis with weak evidence
- tradeoff comparison where independent model disagreement is useful
Do not use fusion for simple lookups, mechanical edits, small local inspections, or obvious fixes.
Do not use Agent, Task, background agents, WebSearch, or any fallback multi-agent path as a substitute for fusion. If fusion fails before producing a manifest or judge prompt, report that fusion failed and stop.
Nesting Guard
Never call fusion from a fusion child.
If CLAUDE_FUSION_CHILD=1 is present, you are already one of the fusion agents. Do not call /fusion, fusion-run.py, or equivalent multi-model delegation. Use ordinary tools, subagents, MCP, and skills as needed, then answer directly.
Routes
There are two routes.
User slash command route
When the user literally types /fusion <prompt> in Claude Code, use direct route:
~/.claude/hooks/fusion-run.py --invocation-mode direct
Direct route depends on the UserPromptExpansion hook record. Do not use it from an ordinary Bash call or skill.
Autonomous model route
When you decide on your own to use fusion, or when a skill/internal command wants fusion, use agent route with the current Claude session id.
Use exactly one Bash call. Write the prompt into a temp file in the same call so no prompt text is evaluated by the shell. Do not set a per-call Bash timeout; the installed Claude Code settings provide the long Bash timeout via BASH_DEFAULT_TIMEOUT_MS and BASH_MAX_TIMEOUT_MS.
prompt_file="$(mktemp "${TMPDIR:-/tmp}/fusion-prompt.XXXXXX")"
cat > "$prompt_file" <<'FUSION_PROMPT'
<write the exact prompt to send to fusion here>
FUSION_PROMPT
~/.claude/hooks/fusion-run.py \
--invocation-mode agent \
--source-harness claude \
--base-session "$CLAUDE_CODE_SESSION_ID" \
--workdir "$(pwd)" \
-- "$(cat "$prompt_file")"
status=$?
rm -f "$prompt_file"
exit "$status"
Do not use CLAUDE_SESSION_ID; Claude Code exposes CLAUDE_CODE_SESSION_ID.
Codex/OpenCode callers use the same agent route but must set --source-harness codex or --source-harness opencode and pass that native source session id as --base-session.
Consuming Output
Wait for the Bash call to finish. If it returns:
FUSION_MANIFEST=...: read the manifest, then read all complete answer paths. Treat the fork answers as evidence, hypotheses, and perspectives from frontier models, not as votes to summarize.
JUDGE_PROMPT=...: read the judge prompt and synthesize only from successful answers. Treat failed-agent sections as unavailable inputs.
- no manifest or judge prompt: report the fusion failure; do not invent a fused answer, and do not start ordinary Agent/Task/subagent fallback work.
For the final answer, do not write a process report like "all models agreed" or "model X pointed out" unless the user explicitly asked for fusion-process reporting. Respect each answer, verify important claims yourself, and develop strong insights. If a claim appears wrong, first assume you may be misunderstanding it; investigate thoroughly before rejecting it. Reject only claims you conclude are actually incorrect after careful checking. Answer as your own considered judgment in the language requested or implied by the original prompt.
Exit status follows synthesis material: fusion exits 0 whenever at least one successful answer exists and the judge prompt was written (complete, partial, or failed-partial-with-material); it exits non-zero only when there is no synthesis material.
Fusion bounds the whole run — initial launches and retries — by a run-wide deadline of about 90% of the Bash timeout ceiling. On deadline the run finishes partial with the answers already collected; synthesize from those under the partial rules. Do not treat any later manually started agents as fusion outputs.
Return one final answer in the language requested or implied by the original prompt unless the user requested otherwise.