Provider capabilities
Generated from `runner.Matrix()`. Do not edit by hand.
Provider capabilities
Generated from runner.Matrix(). Do not edit by hand.
Each capability has one of four levels per provider: enforced (the provider's own controls stop it), guarded (the runner detects a breach after the step and fails it with repo_modified), partial (it works with a documented gap), or not_supported. A step that requires a not_supported capability is refused before it starts, with dependency_missing. guarded and partial satisfy a requirement.
Matrix
| Capability | Claude Code | Cursor |
|---|---|---|
headless | enforced | enforced |
interactive | enforced | not_supported (PRD §6 decision 5) |
read_only | enforced (tool deny list, GF-18) | guarded (--mode ask plus the git-tree guard (PRD §6 decision 1). Ignored files and files outside the worktree are not covered.) |
edit | enforced | enforced (--force) |
no_commit | enforced (deny list) | guarded (ref guard (W19)) |
no_push | enforced (deny list) | guarded (push guard (W20): GIT_CONFIG_* pushInsteadOf plus a refs/remotes check) |
tool_allowlist | enforced | not_supported (PRD §6 decision 1; not emulated) |
system_prompt | enforced | partial (inlined into the prompt (GF-57 W14)) |
model | enforced | enforced |
mcp | enforced (enforced when the GF-27 probe passes (V55)) | enforced (enforced when the W21 check passes, else refused) |
skills | enforced (GF-27) | partial (inlined into the prompt (PRD §6 decision 2)) |
project_instructions | enforced (CLAUDE.md as Claude Code loads it) | enforced (AGENTS.md, CLAUDE.md and .cursor/rules at the worktree root) |
os_sandbox | enforced (per GF-88) | enforced (enforced by GF-88's kusaw sandbox: --sandbox disabled when it wraps the step, no --sandbox flag otherwise (W23, GF-88 X135)) |
network | not_supported (enforced when the factory sandbox runs in allowlist mode (GF-132)) | not_supported (enforced when the factory sandbox runs in allowlist mode (GF-132); Cursor's own sandbox settings are unused) |
reported_cost | enforced | not_supported (GF-59: computed or unknown) |
token_usage | enforced | partial (GF-57 W24: unknown if not reported) |
no_cloud_handoff | n/a | enforced (GF-57 W15) |
secret_store_denied | enforced (permission deny rules (X120)) | partial (per-attempt .cursor/cli.json (X122); Read does not cover Grep/Glob) |
git_control_protected | guarded (control-file guard (X141)) | guarded (control-file guard (X141)) |
resume | enforced (Probe reports enforced when --help lists --resume) | enforced (Probe reports enforced when --help lists --resume) |
fork | enforced (Probe reports enforced when --help lists --fork-session (used with --resume)) | not_supported (no fork flag) |
live_steering | not_supported (enforced when steer.live is on and Probe finds streaming input) | not_supported (stdin stays closed (GF-57)) |
Built-in requirements
| Built-in | Preset | Requires |
|---|---|---|
build | edit | edit; no commit, reset or checkout; no push; declared MCP and skills if any |
review, write-spec, retro, deliver (summary text), classify, score, atlas-map | read_only | read-only; declared MCP and skills if any |
grill | interview | interactive (Claude Code only in v3) |
Built-in steps
| Step | Interactive | Description |
|---|---|---|
atlas-map | no | Write Atlas map pages from the redacted snapshot |
bench-finish | no | Record the diff and run held-out benchmark checks |
build | no | Test-first implementation in the worktree |
classify | no | Estimate the size of a change |
contract-review | no | Reviews the combined milestone diff against the contract |
contract-tests | no | Map JUnit tests tagged [A] onto contract assertions |
deliver | no | Squash the branch into one commit and write SUMMARY.md |
evidence | no | Take screenshots of local pages as evidence |
grill | yes | Interactive intake interview |
plan | no | Split the task spec into owned, dependency-ordered subtasks |
plan-check | no | Check the Work order plan files |
retro | no | Propose factory improvements from the run |
review | no | Reviews the diff against standards or the spec |
score | no | Score the run against configured criteria |
spec-check | no | Check the task spec structure |
triage-assess | no | Assess each triage group and assign roles |
triage-group | no | Group triage items by shared root cause |
verify | no | Run the spec's verification commands |
write-plan | no | Write the Work order contract, features, and milestones |
write-spec | no | Write the task spec from the intake notes |
MCP tools
| Tool | Description |
|---|---|
kusaw_add | Check a spec and queue it. Pass spec_path or spec_text, not both. workflow is optional. |
kusaw_approve | Approve a waiting gate. note is optional. |
kusaw_reject | Reject a waiting gate. note is required. |
kusaw_requeue | Start a new run from that run's branch. note and workflow are optional. |
kusaw_status | Show the kusaw status JSON (schema 1). Pass run for one run. |
kusaw_take_over | Stop a queued, running, or waiting run and keep its worktrees. |
route_task | Route a waiting task to a named workflow. |
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.
Adding a provider
Use this checklist to judge whether a third agent CLI can become a built-in provider. Fill in the [template](new-provider-template.md). Public material only: do not write account names or keys.