Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 26 additions & 5 deletions .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
"email": "hi@okis.dev"
},
"description": "Multi-model orchestration marketplace for Claude Code.",
"version": "0.0.67",
"version": "0.0.68",
"plugins": [
{
"name": "grok",
"source": "./plugins/grok",
"displayName": "Grok Companion",
"description": "Local Grok CLI delegation: task, review, resumable history, best-of-n tournaments, background jobs, stats, and setup health checks.",
"version": "0.0.67",
"version": "0.0.68",
"author": {
"name": "Harry Yep"
},
Expand All @@ -34,7 +34,7 @@
"source": "./plugins/codex",
"displayName": "Codex Companion",
"description": "First party local Codex CLI delegation for tasks, reviews, resumable threads, and durable background jobs.",
"version": "0.0.67",
"version": "0.0.68",
"author": {
"name": "Harry Yep"
},
Expand All @@ -55,7 +55,7 @@
"source": "./plugins/cursor",
"displayName": "Cursor Companion",
"description": "Local Cursor Agent CLI delegation: multi family consults, Composer implementation in owned worktrees, review, resumable history, background jobs, and setup health checks.",
"version": "0.0.67",
"version": "0.0.68",
"author": {
"name": "Harry Yep"
},
Expand All @@ -71,12 +71,33 @@
"orchestration"
]
},
{
"name": "devin",
"source": "./plugins/devin",
"displayName": "Devin Companion",
"description": "Local Devin CLI delegation: multi family consults, SWE implementation in owned worktrees, review, resumable history, background jobs, and setup health checks.",
"version": "0.0.68",
"author": {
"name": "Harry Yep"
},
"homepage": "https://github.com/okisdev/claude-code-fusion",
"repository": "https://github.com/okisdev/claude-code-fusion",
"license": "MIT",
"category": "workflow",
"tags": [
"devin",
"multi-model",
"delegation",
"code-review",
"orchestration"
]
},
{
"name": "fusion",
"source": "./plugins/fusion",
"displayName": "Fusion Orchestrator",
"description": "Multi-model orchestration: tier agents, routing rules, blind panel, ultra fleet, model config, and drift doctor.",
"version": "0.0.67",
"version": "0.0.68",
"author": {
"name": "Harry Yep"
},
Expand Down
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,13 @@
# changelog

## 0.0.68

- devin joins as a second breadth engine: a `devin` companion plugin drives the Devin CLI over the agent client protocol for `diversity` consults on any family a Devin plan serves and `burst` implementation on Cognition's SWE models. cursor's october pricing change moved third party models off its included plans, which emptied cursor's `diversity` seat for accounts on them.
- exactly one breadth engine holds the routing seat, chosen with `/fusion:config set-breadth <cursor|devin>` (default cursor) and named by the rendered routing table; the other keeps working for direct `/cursor:*` or `/devin:*` commands, collection, and stats, but receives no routed work.
- the devin companion runs every job under a private home that links only the credentials file, writes a per job configuration that turns off every configuration import except `AGENTS.md`, denies reads of credential and agent configuration directories, refuses every permission request, pins model, thought level, and standard speed through session options, and runs writes inside the OS sandbox. `adaptive` and `fusion-*` routers are refused because no event pins the model they choose.
- the orchestration and troubleshooting rules, panel, ultra, smoke, doctor, and config speak of the breadth engine instead of cursor.
- `/fusion:stats --record` settles a codex collector task again: the settlement path writes the codex ledger and then settles the collector, where the collector guard had refused both the task id and the job id, so the stop hook kept asking for a command that could not succeed.

## 0.0.67

- this release acts on the call records of a second host on 0.0.65: 24 sessions, 326 peer jobs, and 342 worker records since its upgrade.
Expand Down
17 changes: 9 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributing

This repository ships the Claude Code plugins that make multi model orchestration work in practice. The fusion plugin owns routing rules, tier agents, configuration, doctor, panel, ultra, and stats. The Codex, Grok, and Cursor plugins are the hosted peer companions for their local CLIs; a new engine joins through an entry in `plugins/fusion/scripts/lib/engines.mjs` and a companion that implements [docs/companion-contract.md](docs/companion-contract.md). Alongside them live a bench harness under `bench/` and a Node test suite under `tests/`.
This repository ships the Claude Code plugins that make multi model orchestration work in practice. The fusion plugin owns routing rules, tier agents, configuration, doctor, panel, ultra, and stats. The Codex, Grok, Cursor, and Devin plugins are the hosted peer companions for their local CLIs; a new engine joins through an entry in `plugins/fusion/scripts/lib/engines.mjs` and a companion that implements [docs/companion-contract.md](docs/companion-contract.md). Alongside them live a bench harness under `bench/` and a Node test suite under `tests/`.

Plugin behavior is driven by prose rules as much as by code. `plugins/fusion/rules/orchestration.md` is synced to `~/.claude/rules/` and loaded into every orchestrated session. `plugins/fusion/rules/troubleshooting.md` ships with the fusion plugin and is consulted on demand when delegation fails. Together they decide which lanes fire, when collection is required, and how posture and the question policy gate the main loop. Treat wording changes in those files as production changes.

Expand All @@ -12,18 +12,18 @@ Any change to `plugins/fusion/rules/orchestration.md` or `plugins/fusion/rules/t
2. Check that the load bearing invariants survived the edit:
- The main Claude session is the only control plane and final judge. It owns ambiguity resolution, decomposition, integration, semantic acceptance, and user communication, while work packages execute in delegated lanes.
- Codex owns ordinary implementation by default. Grok remains implementation capable only through its four protected roles (`burst`, `independence`, `live-web`, `large-context`) or an explicit user choice; it is not a generic alternative merely because it is idle.
- Codex admission order is the current workspace, an isolated worktree for an independent eligible package, then Grok or Cursor under `burst`, then the matching Claude fallback. Packages with overlapping files, shared generated state, or ordering dependencies are consolidated or sequenced instead of parallel overflow.
- Cursor remains a multi family breadth lane with two protected roles, `diversity` (a read only consult on a model family no other installed lane serves) and `burst` (Composer implementation in orchestrator owned worktrees). It never runs Auto, never serves the Claude family, and stands in for another family's native lane only while that lane's breaker is open on quota or rate limits.
- Routing stays capability first: capability monopolies (X and live platform reads on Grok `live-web`, model families no other installed lane serves on Cursor, Claude tool surface and privacy on Claude workers, judgment dense authorship in the main session) hard route ahead of every task type default, and the judgment dense authorship rule keeps policy text, public naming, API shape, and UX copy authored in the main session with only the mechanical spread dispatched.
- Claude worker and Grok dispatches are background Agents. Codex is the foreground Agent exception: its rescue Agent and companion Bash call stay foreground regardless of complexity or expected duration unless the incoming user request already contains `--background`.
- Codex admission order is the current workspace, an isolated worktree for an independent eligible package, then Grok or the breadth engine under `burst`, then the matching Claude fallback. Packages with overlapping files, shared generated state, or ordering dependencies are consolidated or sequenced instead of parallel overflow.
- The breadth engine is Cursor or Devin, selected with `/fusion:config set-breadth <cursor|devin>` (default `cursor`) and named in the rendered routing table; exactly one holds the seat. Its protected roles are `diversity` (a read only consult on a model family no other installed lane serves) and `burst` (bounded Composer or SWE implementation in orchestrator owned worktrees). It never runs a model router (Cursor Auto, Devin Adaptive or Fusion pairings), never serves the Claude family, and stands in for another family's native lane only while that lane's breaker is open on quota or rate limits.
- Routing stays capability first: capability monopolies (X and live platform reads on Grok `live-web`, model families no other installed lane serves on the breadth engine, Claude tool surface and privacy on Claude workers, judgment dense authorship in the main session) hard route ahead of every task type default, and the judgment dense authorship rule keeps policy text, public naming, API shape, and UX copy authored in the main session with only the mechanical spread dispatched.
- Codex, Grok, Cursor, and Devin wrapper Agents stay foreground regardless of complexity or expected duration. Only an incoming user request with explicit companion `--background` may detach the companion child; Fusion collects a receipt it creates in the same turn.
- A Codex package that cannot fit the foreground cap is split or routed elsewhere. Complexity and duration never silently detach it.
- Independent packages fan out in a single message rather than being queued one at a time. Dependence is never removed by switching engines.
- Agent scheduling, companion delivery, and CLI process supervision remain distinct. A manual receipt created by Fusion orchestration gets one same turn bounded collection attempt; a managed Grok detachment stays inside its owning Agent until terminal and marks collection. The monitor suppresses collected jobs but emits a delayed fallback after the grace period when a terminal managed job remains uncollected, as a best effort owner loss fallback. Direct Codex or Grok slash commands with explicit `--background` return manual receipts for status and result collection.
- Agent scheduling, companion delivery, and CLI process supervision remain distinct. A manual receipt created by Fusion orchestration gets one same turn bounded collection attempt; a managed Grok detachment stays inside its owning Agent until terminal and marks collection. The monitor suppresses collected jobs but emits a delayed fallback after the grace period when a terminal managed job remains uncollected, as a best effort owner loss fallback. Direct peer slash commands with explicit `--background` return manual receipts for status and result collection.
- After refreshing installed plugin caches, run `/fusion:smoke` before real delegated work.
- `fusion:deep-reasoner` is read only advice, never an implementation retry. `fusion:claude-worker` owns resolved Claude tool-surface or privacy packages, and `fusion:trivial-worker` is an exact tiny fallback when no eligible peer lane fits.
- The question policy whitelist still routes questions and problem descriptions to read only main loop work and requested changes into implementation posture.
- The session execution posture protocol (coordinate, implement, triage) still persists per goal and still forces implement before product edits once accumulation triggers fire.
- After two eligible packages have gone to Claude workers, the balance check routes the next ordinary implementation package to idle Codex. It routes to idle Grok only when a protected role fits and its circuit breaker is closed.
- After two eligible packages have gone to Claude workers, the balance check routes the next ordinary implementation package to idle Codex. It routes to idle Grok or the selected breadth engine only when a protected role fits and its circuit breaker is closed.
- The capability table between its sentinels remains config generated, and every concrete model ID named by routing prose appears in that table; `/fusion:doctor` checks for orphans.
3. Regenerate the rules manifest and run the full test suite:

Expand All @@ -32,6 +32,7 @@ Any change to `plugins/fusion/rules/orchestration.md` or `plugins/fusion/rules/t
claude plugin validate plugins/codex
claude plugin validate plugins/grok
claude plugin validate plugins/cursor
claude plugin validate plugins/devin
claude plugin validate plugins/fusion
claude plugin validate .
npm test
Expand All @@ -45,6 +46,6 @@ Tests use Node's built in runner (`node --test`) and live under `tests/`. Keep t

## Releases

Bump all plugin versions and the marketplace versions together: `plugins/codex/.claude-plugin/plugin.json`, `plugins/cursor/.claude-plugin/plugin.json`, `plugins/fusion/.claude-plugin/plugin.json`, `plugins/grok/.claude-plugin/plugin.json`, and `.claude-plugin/marketplace.json` (marketplace root version plus each plugin entry). Add a `CHANGELOG.md` entry at the top in the repo's existing lowercase bullet style (lowercase prose, proper nouns and acronyms kept, one bullet per behavioral change, motivation clauses when a change was forced by measured regression).
Bump all plugin versions and the marketplace versions together: `plugins/codex/.claude-plugin/plugin.json`, `plugins/cursor/.claude-plugin/plugin.json`, `plugins/devin/.claude-plugin/plugin.json`, `plugins/fusion/.claude-plugin/plugin.json`, `plugins/grok/.claude-plugin/plugin.json`, and `.claude-plugin/marketplace.json` (marketplace root version plus each plugin entry). Add a `CHANGELOG.md` entry at the top in the repo's existing lowercase bullet style (lowercase prose, proper nouns and acronyms kept, one bullet per behavioral change, motivation clauses when a change was forced by measured regression).

Edit shared companion code under `shared/companion`, then run `node shared/sync.mjs` before committing. CI fails if the vendored plugin copies drift from the shared sources.
Loading
Loading