Skip to content

Adding a Cursor seat

joshdaugherty edited this page Sep 26, 2026 · 2 revisions

Adding a Cursor seat

Describes robot-council/cli v0.4.28, and one Cursor seat added on macOS on 2026-09-25 (#308).

A Cursor seat takes six steps. Each block lives in the README, so this page gives the order and links to the block rather than copying it.

A Cursor seat cannot be woken. Only Claude Code reads the channel a bridge wakes an idle agent through (#197), so a Cursor agent takes fleet work only on a turn its operator starts. The stop hook then hands over what is waiting when that turn ends (What a seat receives).

The steps

  1. Enroll the machine as cursor, in your own terminal, with the --machine-label the machine's other harnesses already use: robot-council enroll --service=<fleet> --harness=cursor --machine-label=<the same label>. A credential belongs to one harness, so a machine with Claude Code already enrolled enrolls again for Cursor. Two harnesses given different labels appear as two machines (Getting a machine onto a fleet).
  2. Add the bridge to the global ~/.cursor/mcp.json, with ROBOT_COUNCIL_HARNESS set to cursor in its env (Wiring the bridge into a harness: Cursor). Naming the harness matters more for Cursor than for Claude Code, because whether the editor exports the variable detection reads has not been measured.
  3. Make a Cursor copy of the stop-hook script, with ROBOT_COUNCIL_HARNESS=cursor in it (The script every harness runs). A copy set to claude reads the Claude Code sink and reports a quiet fleet.
  4. Point ~/.cursor/hooks.json at that copy, with loop_limit set (Handing fleet events to an agent: Cursor). Cursor's payload has no stop_hook_active, so the script delivers on every continuation, and loop_limit is what bounds it. On Windows the entry names a .cmd shim that runs Git Bash on the script.
  5. Treat one Cursor application as one seat. Cursor runs one bridge for the whole application, whatever windows and chats are open, in the home folder, and runs its stop hook in ~/.cursor (measured on Cursor 3.17.19, #327). So a Cursor seat is the application, not a chat: it joins as one fleet session, and its sink is keyed without a checkout (v0.4.28). Use v0.4.28 or later: from v0.4.23 until then, the hook and the bridge computed different sinks, and a Cursor seat received nothing.
  6. Ask the agent to join the fleet, then run the checks on Checking a seat is healthy. The channel and stop hook found rows there are Claude Code only.

If php comes from a user-level install on macOS, such as Laravel Herd, a Cursor launched from the Dock may not inherit it on its PATH. The README's Cursor wiring section has the precaution. Whether it is needed is unmeasured.

Measured

On 2026-09-25, a Cursor seat on macOS arm64, with cli v0.4.23, joined the fleet as expected. The fleet listed it as a new session under a separate cursor installation for the machine, working in a linked worktree (#308).

Not tested in that run:

  • whether the stop hook delivered to that seat, or ran in the checkout's folder;
  • whether the PATH precaution was needed;
  • the Cursor version.

The Cursor seat measured on Windows 11 is recorded in the README's Cursor wiring section: Cursor 3.7.21, 2026-09-21.

Clone this wiki locally