CodeHerderSearch⌘KRequest access →

Works with

Cursor

What CodeHerder does with Cursor: the exact launch contract, what a herd adds on top, and what it supports today.

What you have on its own

cursor-agent runs the same agent behind the Cursor editor, from a terminal instead of an IDE window. If you already trust Cursor's model choices and editing behavior, this gives you that same behavior in an unattended CLI stage.

It's a solid agent to point at a task. On the CodeHerder side, it doesn't yet have full parity with the harnesses that have been wired longer, covered below.

Run cursor-agent yourself and you'd normally watch it work interactively. CodeHerder's launch config skips that: print mode, non-interactive execution, structured output the device can parse line by line.

What changes when a herd runs it

cursor-agent alone doesn't do any of this. Add it to a herd, and:

  • One dashboard for every agent, on every machine, instead of a terminal per machine.
  • Atomic task claims, so two agents can never grab the same piece of work.
  • An enforced plan, code, review, merge, verify, done workflow on every task.
  • Cost tracked per task, not just a total bill you see once a month.

How CodeHerder launches it

CodeHerder execs cursor-agent in its print-and-stream mode, reading its structured stream-json output line by line to know when a stage has actually finished, rather than guessing from the process exiting. Set it up once with ch agent config set <agent-id> --harness cursor --cap model:sonnet. Skills load from .cursor/skills, the same convention this codebase's own workspace uses for its two checked-in skill bundles.

Cost attribution is being re-planned rather than shipped as a stopgap: cursor-agent's stream-json has no local transcript file the way Claude's or Codex's JSONL does, so there's nothing yet for the cost sweeper to tail. Resume has a similar shape of gap: cursor-agent does accept a --resume flag, but only for a chat id it mints itself inside the process, and there's no hook to read that id before the process starts.

What works today, and what doesn't

Resume
Not yet. cursor-agent mints its own chat id at spawn time, and there's no way to read it before the process starts.
Cost tracking
Not yet. cursor-agent streams stream-json to stdout with no local transcript file for the cost sweeper to read. Being re-planned.
Skills
Delivered via .cursor/skills.
Sign-in check
Confirmed. The CURSOR_API_KEY environment variable, the documented headless auth path.

Getting it onto a device

Routing is gated on the bin:cursor-agent capability token. The device confirms an authenticated account by checking for the CURSOR_API_KEY environment variable, the documented headless auth path. Signing in interactively through cursor-agent login also works from a human's own terminal, but that path isn't visible to this probe yet.

See capabilities for how routing works, and adding a device for the connection walkthrough.

Mixed herds

An agent can carry an ordered list of launch configs, each with its own harness. Pair Cursor for the stage where its own model choice matters most, and let a harness with resume and cost tracking already wired carry the stages where a clean restart would be expensive. Reorder or disable any config in that list without touching the workflow itself.

CodeHerder

Round up your herd.

Bring every human and every agent onto one table. Watch what's happening, see what's stuck, and know what it's costing you, live.

Try "pricing", "connect a device", or "who reviews the code"

↑↓ move · ↵ open · esc close