Skip to main content
18 verbs. Output is machine JSON by default — safe for pipes, CI and agents. Human-readable output is opt-in with --human, NAIVE_HUMAN=1, or naive config output human.

Create & manage

list and show render status, next_wake_at, wakes, attention and blocked_reason from the agent record, and nothing in the runtime writes those columns back — so they read idle / null / 0 / false / null on every agent, awake or not. What an agent is actually doing lives on the board (naive agents tasks <id>) and in the log (naive agents logs <id>).
The CLI takes dollars and converts to micro-USD. --max-task-usd defaults to a tenth of --budget-usd. --model must be a pinned slug — an alias is refused. create needs a child project selected first (naive use <user-id>) — without one the API answers invalid_input.
🔴 --window standard|flex needs a model that declares the window, and is REFUSED on the rest. On any other model the flag passes the CLI, passes the API, and is then refused at the first model call with window_unavailable — refused rather than downgraded to asap, because a downgrade reports a discount nobody bought. The gate runs before a provider is chosen, so a refused turn spends nothing. Leave --window off unless the agent is pinned to a model that declares it.The CLI does not validate the value — the server does the refusing, so a fix ships with a deploy rather than with a new install.
update takes every create flag plus --paused / --no-paused:
--paused is a hold on execution: no wake is armed, no schedule fires, and a task you send is still accepted and still queued — it waits for --no-paused. It does not abort a slice already running; that is naive agents cancel.
🔴 Raising the cap does less than it reads.It does not restart a task the cap already stopped. A braked task is never claimed again — not at the period reset, not on a higher cap — so raise the cap and re-send the work with naive agents job.
list filters on --status idle|running|blocked|braked|stopped, --limit, --cursor — but the agent-level status column is a mirror nothing writes to, so every agent is idle and --status running returns nothing. Use naive agents tasks <id> --status … for real state.

Send work

Both take:
--window on job / run takes all three values. An earlier release accepted --window standard on a task, stored it and echoed it back as asap; the runtime narrowed the inbound window with a two-way test written when there were two windows, and it now narrows against the platform’s window table.It is not the same knob as create --window. On a task the value selects the tier the call is priced at. The run’s fan-out, sub-agent width and batch hint come from the agent’s window and only from there, because the run manifest declares one strategy before its first turn.Omitting --window inherits the agent’s configured window — it does not fall back to asap. The CLI simply sends no field, and the runtime resolves it against the agent. An earlier release did read an omitted window as asap; that changed. Pass the flag only when one task needs a tier other than its agent’s.

The board

🔴 naive agents task exits 3 when the task’s terminal state is not success — not 1. Exit 1 means the command failed; exit 3 means the command worked and the work did not. A CI step can tell those apart without parsing anything.

The event log

--after is a position, never a time. Replay is strictly greater, so a resume loses nothing and duplicates nothing. If your offset has aged out past the 20,000-row retention floor you are told, rather than silently skipped:
--show-args prints tool arguments in full instead of a digest and refuses to run in a pipe — a full-argument dump of a sandbox run contains file contents.

Spend

Every component prints including the zeros. The CLI never computes money — every figure is the string the API sent.

Deliverables

The download URL is minted on read, lives an hour, and is unauthenticated once issued — do not cache it, run the command again.

Inbound webhooks

Output & exit codes

Machine JSON is the default, so nothing has to detect a pipe to be safe. --human (or NAIVE_HUMAN=1, or naive config output human) switches to rendered output; --json forces machine output back even when human mode is configured.

Common recipes

See the Agents overview, quickstart and SDK reference.