Skip to content

feat: cursor engine and registry driven fusion (0.0.63) - #71

Merged
okisdev merged 7 commits into
mainfrom
feat/cursor-engine
Oct 13, 2026
Merged

okisdev merged 7 commits into
mainfrom
feat/cursor-engine

Conversation

@okisdev

@okisdev okisdev commented Oct 13, 2026

Copy link
Copy Markdown
Owner

summary

  • cursor joins as the third peer engine: the new cursor plugin drives the cursor agent cli (cursor-agent 2026.10.01-e373342) headlessly with consult, write, and review modes, background jobs, resumable chats, history, a model catalog, and setup. fusion routes it under two protected roles: diversity, a read only consult on a model family no other lane serves (google, meta, moonshot, zhipu, cursor composer), and burst, composer implementation in orchestrator owned worktrees; auto and the claude family are never routed
  • every cursor run executes under a private home built per job, because cursor reads claude code hooks and plugins, CLAUDE.md, codex and grok skills, and its own rules, skills, plugins, mcp servers, and sandbox policy from fixed home locations that no flag or CURSOR_CONFIG_DIR disables. the home links only the macos keychain (where the cli keeps its credentials), carries a generated cli-config.json and sandbox.json per mode, and holds read only empty plugins and skills-cursor dirs, which also cuts cold start from about 45s to under 10s. the companion passes a per mode --allowed-tools list, kills a run whose stream shows any other tool (policy), hands the child an allowlisted environment, forwards termination signals to the cursor process group, and reaps its helpers by private home
  • fusion is registry driven now: engines.mjs describes each engine (data roots, roles, efforts, family, version field, acceptance ledger, monitor ownership), and job state lookup, acceptance recording, the breaker, stats, the monitor, lane default injection, collector acceptance, and /fusion:config read it instead of branching on codex and grok. both existing companions accept one record-acceptance flag set and gained models --json, which /fusion:config audit now calls per engine
  • the breaker scopes quota and rate_limited to a job's billingPool, so an exhausted cursor api pool leaves composer open, and opens on setup as the troubleshooting rules already said; model rows carry a family and the rendered table a family column; the panel fills a missing track with a cursor diversity seat on an unseated family before it falls back to deep-reasoner. the reviewable logic lives in plugins/cursor/scripts, plugins/fusion/scripts/lib/engines.mjs, breaker-check.mjs, and fusion-stats.mjs; the cursor state.mjs, args.mjs, process-identity.mjs, and render.mjs are adapted ports of the grok modules

test plan

already verified

  • npm test -> 1419 tests, 1417 pass, 0 fail, 2 skipped
  • the cursor suites three runs in a row -> 71/71 each
  • claude plugin validate on plugins/codex, plugins/grok, plugins/cursor, plugins/fusion and the marketplace root -> all pass
  • live runs against cursor-agent 2026.10.01 in a scratch repo with a scratch data dir: consult returned the exact marker; a write in an orchestrator owned worktree created a module and its test and ran node --test inside cursor's sandbox (pass 1); review with muse-spark-1.3 at xhigh returned a valid json verdict in 36s; a background job collected through result --wait; --resume-last recalled the previous reply; a cross process cancel before and after init and a sigterm to a foreground companion (exit 143) each left the cursor group gone and the record cancelled
  • live sandbox probes: workspace edits and shell writes succeed; shell writes and file tool reads outside the workspace, reads of ~/.claude, and network access are refused; a project .cursor/sandbox.json of type insecure_none and a permissive .cursor/cli.json do not widen the policy
  • an adversarial review of the cursor runtime returned ten findings (allowlisted child env, group aware cleanup, signal forwarding, a drain deadline when a descendant holds the pipes, uuid only session ids, ordering independent tool checks, no timeout after a result, effort variants, delivery acknowledged after the write, streaming utf8), all fixed with regression tests; live runs then caught three more (tool_call metadata keys read as tools, the launcher's exec into node breaking the recorded identity, lint tools starting language servers through npm exec), also fixed

reviewer should verify

  • after installing 0.0.63, /cursor:setup reports the build as tested and authenticated, and /fusion:smoke passes the cursor gate with the job's homeDir under the cursor plugin's runs/ directory
  • /cursor:task --write in a repository whose .claude/settings.json defines hooks renders the warning: project hooks run outside the Cursor sandbox line

notes

  • rules release checklist: every edit to orchestration.md and troubleshooting.md adds cursor next to codex and grok (operating model, the family monopoly, the admission ladder, the brief rows, the cursor peer bullet, panel substitution order, the header grammar, the secrets rule, foreground wrappers and background receipts) or generalizes a grok only phrase (grok unavailable: to <engine> unavailable:); no sentence was deleted or softened, and the CONTRIBUTING invariants gained the cursor line
  • residual boundaries: project instructions and project hooks still load, and project hooks run outside the sandbox (no cli caller disables them); account level cursor user rules reach every session
  • the cursor rows ship with provisional scores; promoting composer past grok burst, or the diversity seat past deep-reasoner, waits on measure the cursor lanes before promoting them #70
  • after installing, add the cursor rows to your own routing file with /fusion:config; the shipped table carries them only for users without one

@okisdev
okisdev merged commit b216591 into main Oct 13, 2026
6 checks passed
@okisdev
okisdev deleted the feat/cursor-engine branch October 13, 2026 07:53
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant