Every CLI command

Every autodev command, exactly as the CLI declares it: its signature, its flags, its defaults and what it prints.

Bare autodev #

autodev with no command never opens a terminal UI: the VS Code panel is the only interface. Bare autodev is text, and it picks up what a reboot or a crash left behind:

usage
autodev

Run and watch #

These commands start a run and read it back.

autodev start #

usage
autodev start

Starts the run of this project, or resumes it. It prints Thread run started or already running. It takes no arguments and no flags: what the run works on comes from autodev send. Starting is an intent to continue, so it clears a pause request that was left over.

autodev status #

usage
autodev status [--json]

Prints the state of the run: the project, its status, whether the daemon is alive, the current task, the iteration, the estimated cost, the last heartbeat (marked (stalled?) when an active run has been silent for 40 minutes), when the run resumes next, whether the web server is up and, for a run that waits, what it waits for. --json prints the machine-readable state envelope (Command v1 StateSubset) instead of text.

autodev attach #

usage
autodev attach [--json]
autodev watch [--json]

Follows the daemon's live activity and returns when the run is over. Ctrl+C only detaches, and the daemon keeps running. watch is an alias of attach. --json emits Envelope v1 NDJSON (RelayEnvelope) instead of human text.

autodev thread #

usage
autodev thread

Prints the shared thread: who said what, oldest first. A message you sent that no run has read yet is listed at the end as Queued for next run.

autodev report #

usage
autodev report [--hours <n>] [--json]

What ran overnight: work done, what blocked, quota burned, what needs you. --hours <n> sets the reporting window in hours, and the default is 12. --json emits the view model as JSON instead of text.

autodev quota #

usage
autodev quota [--days <n>] [--series] [--json]

Subscription capacity used, left idle, and converted into commits. --days <n> sets the reporting period in days, and the default is 7. --series prints per-day, per-provider buckets instead of the period totals. --json emits the view model as JSON instead of text.

Talk to the run #

The thread is the one way in. These commands put something on it, or answer what a participant put in front of you.

autodev send #

usage
autodev send [--image <file>]... [--no-start] "<message>"

Posts a message to the shared thread. The first message is the objective, and every later one steers the run. Each message is also written to .autodev/goal.md, under a heading with the time, so the objective is a file you can edit. Several words are joined into one message.

If no run is alive, send starts one, and it prints Message sent; run started. If a run is alive, it queues the message for that run and prints Message queued.

A project can only run once it has a team that this machine confirmed. Before that, send prints set up the team before sending a message and exits with code 1; autodev team sets one up. An empty message is refused.

FlagDefaultWhat it does
--image <file>noneAttaches an image to the message. Repeat the flag for more, up to 6 images of at most 8 MB each. Only image files are accepted.
--no-startoffQueues the message and does not start a run.

autodev answer #

usage
autodev answer <noticeId> <text...>

Answers a notice: a message a participant left for you while the run kept going. The answer reaches that participant in a later turn, and it lifts the hold the notice put on a capability, unless you held the notice. The id is the one in notices.json, n- followed by eight hexadecimal digits. With an id that no notice has, it prints No notice with id <id>. and exits with code 1. The panel answers a notice without asking for the id.

autodev notice #

usage
autodev notice hold <id>
autodev notice release <id>
autodev notice dismiss <id>

Changes a notice without answering it. hold keeps the notice open, and keeps a capability it suspended suspended, until you release it: an answer or a message of yours no longer lets go. release ends the hold and lifts the suspension. dismiss closes the notice with no answer. Each prints Notice updated., and an unknown id prints No notice with id <id>. and exits with code 1.

Steer the run #

These commands change a run that exists.

autodev pause #

usage
autodev pause

Requests a pause and prints Pause requested.

autodev resume #

usage
autodev resume

Requests a resume. If the daemon exited, run autodev start to relaunch it.

autodev stop #

usage
autodev stop

Gracefully stops the daemon after the current iteration.

autodev kill #

usage
autodev kill

Force-kills the daemon process tree, closes the browser the run kept open, and resets the state to idle. It says which of two things happened: it ended a running daemon and the agent it had started, and anything unfinished may be left half-done in the working tree; or nothing was running, and it cleared the state that was left behind.

autodev approve #

usage
autodev approve

Approves the pending irreversible-action gate and relaunches the daemon, so the action is performed. It refuses, and says why, when no gate is pending, when the run is not waiting at the gate, or when a message of yours is queued and may withdraw the gate.

autodev deny #

usage
autodev deny

Denies the pending gate: the action is never performed. Run autodev start to continue the run. It refuses in the same cases as approve.

autodev new-run #

usage
autodev new-run [--yes]

Starts over. It archives the finished run's sessions, thread, events and state, and clears goal.md and memory.md, so the next run does not resume last night's conversation. A copy of each of the two files goes into the archive first, and the participants are untouched. The archive is a folder named for the day, .run-YYYY-MM-DD, beside the run's state on this machine, and new-run prints where it is.

Because it empties two files you wrote, it says so and asks Start a new run? before it moves anything. --yes skips the question. It refuses while a daemon is running and points to autodev stop. When it is done, write the new goal with autodev send.

Team and providers #

The team is the set of participants in .autodev/participants/, one file each. The participants file describes the file.

autodev team #

usage
autodev team

Prints Team: and its state, then one line per participant: its id, its provider, and its model and effort, each shown as default when it is not set. The state is ready for a team this machine confirmed, confirm for a team that came with the project and is not confirmed here yet, use_default when there is no team and a default team exists on this machine, and setup when there is nothing yet.

autodev team add #

usage
autodev team add <provider>

Adds a participant that runs on a provider. claude, codex and antigravity are the ones AutoDev drives today. Its id is the provider's name, or claude-2, claude-3 when that is taken. It starts unpinned, on the provider's own default model. It prints the id, and it confirms the team on this machine.

autodev team remove #

usage
autodev team remove <id>

Removes a participant by deleting its file. It is refused while that participant is taking a turn.

autodev team rename #

usage
autodev team rename <id> <to>

Renames a participant. Its conversation follows the new name. It is refused while that participant is taking a turn. The scheduler breaks ties alphabetically, so a name also decides who opens a thread.

autodev team pin #

usage
autodev team pin <id> [--model <model>] [--effort <effort>]

Pins the model and the effort of a participant, written into its file. Neither is checked against a list, because the providers add values of their own. It refuses an id that is not on the team.

autodev team unpin #

usage
autodev team unpin <id>

Removes the pin, so the participant goes back to its default model and effort.

autodev team confirm #

usage
autodev team confirm

Confirms the team on this machine. A team that came with the project does not run until you do, because a participant file turns into flags and instructions for a CLI. It prints Team confirmed.

autodev team default #

usage
autodev team default use
autodev team default save

The default team belongs to this machine and is the team a new project starts from. The first team you build is saved as the default on its own; after that only save changes it. use copies the default team into this project and confirms it. save saves this project's team as the default.

autodev team template #

usage
autodev team template
autodev team template <name> [--provider <id=cli>]... [--yes]

With no name, lists the templates: solo (one participant, builder), builder-reviewer (a builder and a reviewer who checks each change) and manager-builder-reviewer (a manager who assigns blocks, a builder and a reviewer). With a name, applies one: it writes the template's participants, removes the project's other participants, and confirms the team.

--provider <id>=<cli> sets the CLI of one participant of the template, and can be repeated. An id that is not in the template is an error. If the project already has participants, the command lists the files it would replace and asks for --yes. It is refused while a participant is taking a turn.

autodev team edit #

usage
autodev team edit <id>

Prints the path of a participant's instruction file. It does not open it.

autodev providers #

usage
autodev providers
autodev providers use <provider> <binPath>

Lists the agent CLIs adopted on this machine, one per line as name: path, with PATH when the CLI is found on the PATH. With none, it prints No providers adopted on this machine. use records the binary to run for a provider, for a CLI that is installed outside the PATH. Signing in stays with the provider's own CLI: AutoDev never asks for or stores a credential.

Checkpoints and projects #

AutoDev writes a checkpoint as a run advances. These commands list them, rewind to one, and list the projects on the machine.

autodev restore #

usage
autodev restore [<id>]

With no id, lists AutoDev's checkpoints. With an id, rewinds the code to that checkpoint and prints where it landed, and the branch that saved the work it moved away from, when there is one.

It refuses while a daemon is running, prints Stop the run before restoring — restore resets the project tree. and exits with code 1.

autodev workspaces #

usage
autodev workspaces
autodev workspaces forget <path>

Lists every AutoDev project on this machine. forget <path> drops one from the workspace index. Any other action, or forget with no path, prints an error and exits with code 1.

Settings and state #

These commands read the files AutoDev keeps for a project. The keys, defaults and environment variables of config have their own page, Every config key.

autodev config #

usage
autodev config
autodev config set <key> <value>
autodev config unset <key>

Views or changes the run settings. With no subcommand it prints every key with its effective value and where it comes from: an environment variable, the config file, or the default. set persists a value and unset removes it. A few keys belong to the machine and are written to ~/.autodev/config.json; the rest go to the project's .autodev/config.json. set never prints a value that is a secret: it prints (hidden) in its place.

autodev memory #

usage
autodev memory

Prints .autodev/memory.md, or (no memory yet) when there is none.

autodev browser login #

usage
autodev browser login <url>

Opens AutoDev's own browser profile, visible, on a login page. Log in once and the login stays for every later run. The browser tools use that profile, which is separate from your everyday browser. The address must be a full http:// or https:// URL.

If a run has that browser open and visible, the page opens in a new tab of it, and you close the tab after the login. If the run has it hidden, there is no window to log into, and the command says to log in after the run ends. With no Chrome or Edge found, it asks you to point AUTODEV_BROWSER at one. The panel has the same action.

Servers and machine interfaces #

These commands serve AutoDev to something other than a person at a terminal.

autodev serve #

usage
autodev serve [--daemon] [--port <n>] [--token <t>] [--tier <t>] [--tunnel]

Serves the web plane (SSE events and POST commands) on 127.0.0.1, for a local UI or the extension. It does not start a run. Without --daemon it runs in this terminal. Any action other than stop and pair prints an error and exits with code 1.

FlagDefaultWhat it does
--daemonoffRuns detached and supervised. It survives the terminal, and after a reboot it starts again when you run autodev in any project.
--port <n>8787The port to bind. 0 picks an ephemeral port.
--token <t>generatedThe bearer token clients must present. Defaults to AUTODEV_WEB_TOKEN when it is set, and is generated otherwise.
--tier <t>fullThe telemetry tier of the event stream: status, events or full. Any other value is read as full.
--tunneloffExposes the plane publicly through a cloudflared quick tunnel, for remote check-in.

With --daemon it prints the address and tells you where the token is persisted, ~/.autodev/serve.json.

autodev serve pair #

usage
autodev serve pair

Asks the running server for a pairing code, and prints the code, when it expires and, with a tunnel up, the public address to open on the phone. With no server running it prints remote access is not running and exits with code 1.

autodev serve stop #

usage
autodev serve stop

Halts a detached server. With none running it says so and clears any stale descriptor.

autodev mcp #

usage
autodev mcp

Serves AutoDev's tools for a participant over MCP stdio: the thread, the memory, notices, and the browser tools when they are turned on. A participant's CLI spawns it, and it finds the project through AUTODEV_ROOT.

autodev dispatch #

usage
autodev dispatch <envelope>

Dispatches a Command v1 envelope, given as JSON: the machine interface for commands. It prints one JSON line, ok, kind and either result or reason, and exits with a non-zero code on a rejection or a malformed envelope.