Reference
Automation
An automation is a tree of steps run against one profile — in that profile's browser, through its proxy, with its cookies. Twenty step types, and no scripting language to learn.
On this page
What an automation is
A tree of steps, run top to bottom against one profile. The steps that touch the page run inside that profile's own browser session — its proxy, its cookies, the fingerprint you built — so a site sees the identity rather than an automation harness bolted to it.

Steps are built in the launcher on a canvas — each step a card, branches drawn as lanes, loops as groups you drop steps into — or handed over the API as JSON. Same tree either way: the canvas is only where the program is drawn, and execution order never follows where a card was dragged.
Either way the tree is validated before anything is stored, and a rejection names the exact path that failed rather than saying the shape is wrong.
Some steps deliberately run from the launcher and not from the page — an HTTP request, a model call, a notification. Those do not use the profile's proxy or cookies, and each says so on its own card.
An automation can also be pinned, from its editor, to every profile's browser start page — a tile next to the bookmarks, so it can be run from inside the browser.

The 22 step types
Every field below is read from the schema Argus itself serves, so this is the vocabulary an agent gets when it calls argus_automation_schema.

Driving the page
The six that touch the browser. Each one runs inside the profile's own session, so a site sees the identity you built rather than an automation harness.
Go to
gotoGo to {url}
- url
- text · required
- waitUntil
- select · one of load | domcontentloaded
Wait for
waitForWait for {for}
- for
- select · required · one of selector | selectorGone | url | text
- selector
- text
- url
- text
- text
- text
Click
clickClick {selector}
- selector
- text · required
- nth
- number
Type
typeType into {selector}
- selector
- text · required
- text
- text · required
- clear
- boolean
- delayMs
- number
- pressEnter
- boolean
Scroll
scrollScroll to {to}
- to
- select · required · one of bottom | top | selector
- selector
- text
Screenshot
screenshotScreenshot
- selector
- text
- fullPage
- boolean
Reading and holding data
Pull something out of the page, compute with it, or fetch it from somewhere else. Anything stored lands in a variable you name, and every later step can interpolate it. Save cookies captures the session itself, back into the profile's cookie set — and the two database steps carry a run's results out to a sheet, a table or a file, or read a work list back in.
Extract
extractRead {selector} into {into}
- selector
- text · required
- what
- select · one of text | html | attr | value
- attr
- text
- all
- boolean
- into
- text · required
Run script
evaluateRun script
- script
- textarea · required
- args
- keyvalue
- into
- text
Set variable
setVarno browser neededSet {name}
- name
- text · required
- value
- text · required
HTTP request
httpRequestno browser needed{method} {url}
- method
- select · one of GET | POST
- url
- text · required
- headers
- keyvalue
- body
- textarea
- into
- text
Sent from the launcher, not from the page -- it does not use the profile's proxy or cookies.
Save cookies
saveCookiesSave cookies to the Launcher {domain}
- domain
- text
With a filter set, the live cookie set is REPLACED by exactly this filtered subset -- running this step again with a narrower filter after a full sync discards every other domain's cookies from that set.
Save to database
saveRowsno browser neededSave to {target}
- connector
- connector · data connector
- target
- remote · required
- rows
- select · required · one of one | many | each
- items
- text
- mapping
- mapping
- matchOn
- remote
- extraColumns
- select · one of fail | ignore | add
- into
- text
Sent from the launcher, not from the page -- it does not use the profile's proxy or cookies. Values are converted to the column's type before they are sent, and a value that cannot be converted fails the step rather than being stored wrong.
Load from database
loadRowsno browser neededLoad {target} into {into}
- connector
- connector · data connector
- target
- remote · required
- filter
- keyvalue
- limit
- number
- into
- text · required
Sent from the launcher, not from the page -- it does not use the profile's proxy or cookies. Only equality filters, and at most 1000 rows: this is a step that feeds a loop, not a query language.
Asking a model
Three steps that hand work to a model: an open question whose answer you keep, a yes-or-no check you branch on, and an agent that plans and calls tools — HTTP, code in the page, your data connectors, messages, other automations, MCP servers — until the task is done. All run from the launcher, against whichever AI connector you point them at.
Ask AI
aiPromptAsk AI into {into}
- provider
- connector · ai connector
- prompt
- textarea · required
- context
- select · one of none | pageText | selector
- selector
- text
- format
- select · one of text | json
- maxTokens
- number
- into
- text · required
Sent from the launcher, not from the page -- it does not use the profile's proxy or cookies. Page text is truncated before it is sent.
AI check
aiCheckAI check: {question}
- provider
- connector · ai connector
- question
- textarea · required
- context
- select · one of none | pageText | selector
- selector
- text
- into
- text
- onFalse
- select · one of continue | fail
The model is asked for one word and nothing else. Anything it says that is not yes or no fails the step rather than being guessed at.
AI Agent
aiAgentAgent into {into}
- provider
- connector · ai connector
- prompt
- textarea · required
- system
- textarea
- memory
- select · one of none | window
- memoryWindow
- number
- maxIterations
- number
- tools
- tools
- into
- text · required
Calls leave from the launcher, not the page -- no profile proxy or cookies. Tools run with the same limits as their standalone steps, and an approval tool gates every call behind a yes/no over Telegram.
Control flow and output
Branch, repeat, pause, compose, and tell someone. Run automation calls another automation's steps inline, so a flow you use everywhere is written once. A notify step is how a run that finished at three in the morning reaches you.
If
ifIf {condition.left} {condition.op}
- condition
- condition · required
- then
- steps
- else
- steps
Loop
loopno browser neededLoop {mode}
- mode
- select · required · one of times | forEach
- times
- number
- items
- text
- maxIterations
- number
- body
- steps
Wait
waitno browser neededWait
- ms
- number
- minMs
- number
- maxMs
- number
Send message
notifyno browser neededSend message
- connector
- connector · message connector
- message
- textarea · required
- subject
- text
Sent from the launcher, not from the page -- it does not use the profile's proxy or cookies.
Run automation
callAutomationno browser neededRun automation {automationId}
- automationId
- automation · required
Variables and conditions
Any field marked as interpolated substitutes templates before the step runs: {{vars.name}} for something an earlier step stored, {{profile.email}} and {{profile.password}} for the profile's own saved credentials, and {{loop.item}} inside a loop.
One field is deliberately excluded. A Run script step never interpolates its script — templates are not substituted into code, so a value that happens to contain a quote cannot rewrite what runs.
Conditions are not an expression language, on purpose. One interpolated left side, one of five comparators, and one literal right side — enough to branch on what a page says, and too little to become a language nobody can read six months later.
Parameters
An automation can declare parameters — the inputs it asks for before it runs. A workflow that searches Dortmund and one that searches Essen should be one automation with a city parameter, not two copies of twelve steps.
Every parameter is readable from any interpolated field as a variable. A value can come from three layers — the automation's own default, under the profile's saved value, under whatever the run dialog or an agent supplies for that run — and the most specific one wins.
Secret parameters are masked in the interface and redacted out of the run record. List parameters become real arrays, so one can feed a loop's items directly.
Schedules
An automation can carry a schedule: every N minutes (5 to 1440), daily at a wall-clock time, or weekly on the days you pick — against a list of profiles it runs on. No cron strings; the modal, the card badge and an agent authoring over MCP all read and write the same small shape.
The schedule fires while the launcher is running. It is part of the automation itself, so creating or changing it over the API is the same create and update call.
Runs and notifications
Every run is recorded: which profile, which steps ran, per-step timing, and the verdict — succeeded, finished with errors, failed, or cancelled. A partial run did every step it could and tells you which one it could not, which is a different thing from a failure.
Starting a run returns as soon as it is registered; it continues in the background and lands in the history, which an agent reads back with the runs tool.
When a run finishes — at three in the morning, on a schedule, or started by an agent — Argus can send the verdict to Telegram: what ran, on which profile, and whether it succeeded. One bot serves the whole workspace, but every message is personal: you link your own chat once, then subscribe per automation to every run or failures only. Your subscriptions never ring a teammate's phone.
Automations can also notify through any messaging connector when they finish, separately from the notify step — a run that fails halfway still tells someone, even though the step that would have said so never ran.
Authoring over the API
Automations can be written by hand in the launcher or created over the local API — which is what a coding agent does. Ask for the step vocabulary first; the field names are not guessable, and a tree that does not validate is refused.
/v1/automations/create{
"name": "Sign in",
"steps": [
{ "id": "s1", "type": "goto", "url": "https://example.com" },
{ "id": "s2", "type": "waitFor", "for": "selector", "selector": "h1" },
{ "id": "s3", "type": "extract", "selector": "h1", "what": "text", "into": "heading" }
]
}Creating, changing and deleting an automation needs a key with no folder scope, because automations are shared across every folder and have none of their own. A folder-scoped key may still list, read and run them.
Parameters and schedules ride the same calls — parameters and schedule are fields of create and update, validated exactly the way the editor validates them. Running one returns as soon as the run is registered — it continues in the background, lands in the run history, and a notify step or a Telegram subscription is how it reaches you when it is done.
Build one
The editor is in the launcher, under Automations. Connect a model and a messaging service first if you want the AI and notify steps.