Files
fusion/plugins/fusion-plugin-cursor-runtime
gsxdsm b6efd89ae5 FN-9097: add Cursor CLI execution runtime
Add a supervised Cursor CLI runtime for routed Cursor model sessions.

- Stream Cursor prompt output into Fusion session callbacks with resume support.
- Support Windows Cursor shims, inactivity-based supervision, and cursor-agent to cursor fallback execution.
- Route Cursor CLI models through the bundled plugin and document the runtime contract.

Files changed:
 .changeset/fn-9097-cursor-cli-runtime.md           |   7 ++
 docs/cursor-cli-contract.md                        |  21 ++++
 docs/settings-reference.md                         |   4 +-
 .../cli-runtime-routing-conformance.test.ts        |  11 +-
 .../engine/src/agents/agent-session-helpers.ts     |   6 +-
 packages/engine/src/agents/cli-provider-routing.ts |  27 ++---
 plugins/fusion-plugin-cursor-runtime/README.md     |  21 ++++
 plugins/fusion-plugin-cursor-runtime/package.json  |   1 +
 .../src/__tests__/cli-spawn.test.ts                |  25 ++++-
 .../src/__tests__/prompt-transport.test.ts         |  58 ++++++++++
 .../src/__tests__/runtime-adapter.test.ts          |  44 +++++---
 .../src/__tests__/stream-parser.test.ts            |  12 +++
 .../fusion-plugin-cursor-runtime/src/cli-spawn.ts  |  57 +++++++++-
 plugins/fusion-plugin-cursor-runtime/src/index.ts  |   4 +-
 .../src/prompt-transport.ts                        | 120 +++++++++++++++++++++
 .../src/runtime-adapter.ts                         |  59 ++++++----
 .../src/stream-parser.ts                           |  43 ++++++++
 plugins/fusion-plugin-cursor-runtime/src/types.ts  |  18 ++--
 pnpm-lock.yaml                                     |   3 +
 19 files changed, 458 insertions(+), 83 deletions(-)

Fusion-Task-Id: FN-9097

Fusion-Task-Lineage: a4eed861-6059-4528-9f80-3426f5ccad58

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-15 08:51:35 -07:00
..
2026-08-13 01:41:54 -07:00

fusion-plugin-cursor-runtime

Cursor CLI-backed provider/runtime plugin for Fusion.

Contract summary

  • Provider ID: cursor-cli
  • Binary probes: cursor-agent, then cursor
  • Expected failure states: missing binary, missing Cursor IDE install, locked macOS keychain, unauthenticated runtime
  • Model discovery: cursor-agent models (plain text id - Label output; no --json support) with header/tip/empty-state filtering, dedupe, and fallback metadata
  • Auth status: cursor-agent status --format json (isAuthenticated), probed against the same candidate binary that succeeded --version

Notes

Status/auth and model discovery behavior follows docs/cursor-cli-contract.md.

External Integration Evidence

  • Canonical upstream repository: Cursor CLI is closed-source and has no canonical upstream source repository. Its public issue tracker is https://github.com/cursor/cursor.
  • Docs / homepage: https://cursor.com/docs/cli/overview
  • Release / download: curl https://cursor.com/install -fsS | bash (macOS/Linux/WSL), or irm 'https://cursor.com/install?win32=true' | iex (Windows PowerShell).
  • Binary: cursor-agent
  • Checksum: upstream-pending-verification; Cursor publishes no versioned checksum manifest. Verified local provenance: 2026.08.11-e8db854 on 2026-08-15.

Execution transport contract

Fusion runs one supervised cursor-agent --print --output-format stream-json turn per prompt. The prompt is supplied on stdin, the process cwd is the Fusion task worktree, and the init event confirmed that cwd is the Cursor workspace without a --workspace argument. Stream JSON emits init, thinking, assistant, tool_call, and terminal result events; session IDs are retained with --resume on the next turn.

Fusion tool mode Cursor flags
coding --force --trust
readonly or unset --mode plan --trust

--print already grants built-in write and shell tools. --force controls approval, so it is limited to coding sessions whose cwd is Fusion's isolated task worktree. Fusion does not use --auto-review, worktree, add-dir, MCP approval, plugin-dir, or sandbox override flags. Fusion fn_* tools are not bridged into Cursor; Cursor uses only its own built-in tools.

All turns use superviseSpawn with a finite lifetime. The Windows prompt transport prefers a direct executable; .cmd/.bat shims validate and reject cmd metacharacters before a quoted cmd launch, .ps1 uses PowerShell -File, and unknown extensions fail loudly. PI_CURSOR_CLI_FIRST_LINE_TIMEOUT_MS and PI_CURSOR_CLI_TIMEOUT_MS optionally tune cold-start and inactivity guards.