Skip to content

Automation

Anode does not need the TUI. Run it from scripts, CI jobs, JSON stream consumers, or the daemon.

anode -x "run the focused tests and summarize failures"

Useful flags:

FlagUse
--profile <name>Pick craft, quick, study, review, oracle, find, aggman, a custom profile, or an alias: smart -> craft, rush -> quick, deep -> study, search -> find.
--model provider/modelOverride the selected model for this run.
--max-turns <n>Stop after a fixed number of model/tool turns.
`—approval askauto
--allow-tool <name>Repeat to limit the run to specific tools.
--run-label <label>Add a label to the run.
--stream-jsonEmit newline-delimited run events.
--stream-json-inputRead execute-mode JSON user messages from stdin. Requires --stream-json.

In CI, prefer explicit tool and permission limits:

anode -x \
--profile review \
--allow-tool read \
--allow-tool finder \
--allow-tool web_search \
--stream-json \
"review the current diff for risky changes"

--stream-json prints one event object per line. Consumers should parse line by line and treat unknown event types as forward-compatible data.

anode -x "summarize this repository" --stream-json | jq -c 'select(.type=="result.final")'

For multi-turn automation, use JSON input:

anode -x --stream-json --stream-json-input

Send one JSON object per line:

{"type":"user","message":{"role":"user","content":"find the CLI entrypoint"}}

Use "steer":true to inject guidance at the next safe interruption point.

Start the daemon:

anode daemon

Start work in the background:

anode runs start "investigate flaky tests"

Watch it:

anode attach <run-id>

List and cancel runs:

anode runs list
anode runs cancel <run-id>

Use --daemon <addr> when the daemon is not using the default socket.

anode review --base main --stream-json
anode review --base main --checks --stream-json

--checks loads project check files from .agents/checks/*.md.

Keep going: