Cursor
Cursor is an optional provider. It stays off until you enable it on the machine. Use it only for personal and demo code, never a restricted setup.
Cursor is an optional provider. It stays off until you enable it on the machine. Use it only for personal and demo code, never a restricted setup.
Install
Install Cursor's CLI from Cursor's own instructions. This page does not copy those steps.
Command
The runner looks up agent, then cursor-agent, unless cursor.command is set. It checks identity with --version and --help (the help text must mention Cursor, --output-format, and --workspace). There is no model call and no network. A binary that fails that check is refused.
Sign-in
Sign in with agent login, or set CURSOR_API_KEY in the environment kusaw serve starts from.
--api-key is refused: it would be visible in the process list. Pass credentials through the environment, never as an argument.
kusaw validate reports signed in as yes or no. It does not print a key or an account.
The factory never stores credentials.
Switching one step
A new user can switch one step to Cursor as follows. The example uses factory demo and a step named review.
- Enable Cursor on the machine. See Enabling Cursor.
kusaw config set --factory demo steps.review.provider cursorkusaw validate --factory demo- Run a task (
kusaw addwhilekusaw serve --factory demois running). - Find
cursor · configured-defaultinkusaw statusfor that run.
steps:
review:
provider: cursorWithout step 1, step 3 prints GF-56 E14 and exits 2. A kusaw.yaml cannot enable Cursor.
Models
Model strings are whatever your Cursor CLI accepts. List them with agent models. Put a setting in steps.<id>.config.model. The placeholder in these docs is configured-default.
steps:
review:
config:
model: configured-defaultkusaw validate warns if that string is missing from agent models. The check is a warning so the factory still works offline. Cursor may refuse an unknown name when the step runs.
Read-only steps
Read-only steps (review, write-spec, retro, classify, score, and deliver summary text) pass --mode ask and then the git-tree guard. The guard compares the worktree after the step to a snapshot taken before it.
The guard covers tracked and untracked files inside the worktree. It does not cover ignored files, or files outside the worktree. A failure looks like: Step "review" must not change files, but Cursor changed: A path.txt. The worktree was left as is.
Build steps
Build steps pass --force. After the step, the ref guard fails a commit, reset, or checkout, and the push guard fails a push (GIT_CONFIG_* pushInsteadOf plus a refs/remotes check).
MCP servers and skills
For each Cursor step the runner writes a per-run .cursor/mcp.json in the worktree, listing only the servers that step declared. It restores or deletes that file when the step ends. ~/.cursor is never touched.
If Cursor would also load undeclared servers, the step is not started: The installed Cursor CLI would also load MCP servers <names> that step "<id>" did not declare. This step was not started. Disable those servers in Cursor, or use claude-code for this step.
Skills are inlined into the prompt. They are not loaded from a Cursor skills folder.
Cost and budgets
Tokens are reported. Cost isn't: the factory does not get a dollar figure from Cursor.
Optional prices go in cursor.pricing.<model>. The factory ships none.
cursor:
pricing:
configured-default:
input_usd_per_token: 0.000001
output_usd_per_token: 0.000005
cached_usd_per_token: 0.0000001limits.budget_tokens_per_run and limits.finally_budget_tokens count cached reads at a fraction: the cached-to-input price ratio from that model's price row, or 0.1 when there is no price.
limits:
budget_tokens_per_run: 100000
finally_budget_tokens: 20000Cursor's usage arrives only at the end of a step, so a Cursor step can overshoot a token budget by up to one step. Time limits still apply during the step.
Known gaps versus Claude Code
Every capability-matrix row that is not enforced for Cursor:
interactive— not supported. There is no interactive grill on Cursor. A follow-up Idea may add a headless resume loop oragent acp.read_only— guarded with--mode askplus the git-tree guard. Ignored files and files outside the worktree are not covered.no_commit— guarded by the ref guard after the step.no_push— guarded by the push guard after the step.tool_allowlist— not supported and not emulated.system_prompt— partial: inlined into the prompt.skills— partial: inlined into the prompt.network— not supported (only inside Cursor's own sandbox, per its settings).reported_cost— not supported. Cost is computed from a price table, or unknown.token_usage— partial: unknown if Cursor does not report it.secret_store_denied— partial: per-attempt.cursor/cli.json.Readdoes not cover Grep/Glob.
The live table is generated in capabilities.
Tested version
The GF-57 build session checked these flag names against agent --help. A Cursor CLI version string is not recorded in this tree (unverified). Confirm with agent --version on the machine that runs the factory.
Claude Code
Claude Code is the default provider (`claude-code`). Setup is unchanged from v1 and v2: install it, sign in with your own account, and point the factory at the executable. The factory does not copy Claude Code's install steps and does not ask for credentials or a model.
Provider capabilities
Generated from `runner.Matrix()`. Do not edit by hand.