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:
A run that died with work still pending is started again under its supervisor. A deliberate pause, an idle run and a completed run are never restarted.
A web server that was running detached (autodev serve --daemon) is started again.
It then prints the status of the run in this folder and ends with Use autodev send <message> to start work.
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.
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.
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.
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.
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.
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.
Flag
Default
What it does
--image <file>
none
Attaches 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.
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.
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.
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.
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.
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.
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.
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.
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 <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.
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 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
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 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.
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.
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.
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.
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.
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.
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.
Flag
Default
What it does
--daemon
off
Runs detached and supervised. It survives the terminal, and after a reboot it starts again when you run autodev in any project.
--port <n>
8787
The port to bind. 0 picks an ephemeral port.
--token <t>
generated
The bearer token clients must present. Defaults to AUTODEV_WEB_TOKEN when it is set, and is generated otherwise.
--tier <t>
full
The telemetry tier of the event stream: status, events or full. Any other value is read as full.
--tunnel
off
Exposes 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.
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.
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.
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.