Flows and schedules
A flow is a list of browser steps you record once or write by hand, then replay on as many profiles as you like. Schedules run flows and other actions on a timetable while Echidna is running.
Flows, recordings and forms
Open Flows. It has four tabs:
| Tab | What it holds |
|---|---|
| Recordings | Steps captured while you use a profile's window. |
| Flows | Flows you write or edit as JSON. |
| Forms | Form templates that fill a page's fields (Capture from a page or New form template). |
| Sync | Mirror one window's actions to other profiles live. |
Flows run inside the engine, so they keep going when you leave the Flows view.
Record a flow
- Open the profile you want to record with (it needs a window).
- In Flows, press Record, choose the Profile, optionally give it a Name, and press Start recording.
- Use the window as usual. Clicks, typing, keys, scrolling and page changes become steps.
- Press Stop, then Save (or Discard).
Passwords you type are saved as the placeholder {account.password}, not as text, so each profile fills in its own saved login.
Write or edit a flow
Press New flow, or Edit… on an existing one. The editor shows the flow as JSON on the left and what it does on the right. It checks the flow as you type (“Looks good” or a list of problems); Tidy JSON formats it and Save stores it. Import loads a flow file, and Export… saves one.
{
"name": "Search",
"kind": "flow",
"start_url": "https://example.com",
"steps": [
{"type": "click", "selector": "input[name=q]"},
{"type": "type", "selector": "input[name=q]", "text": "{custom.query}"},
{"type": "press", "key": "Enter"},
{"type": "wait", "ms": [800, 1600]}
]
}
A flow can have up to 1,000 steps. Every step can also carry note, timeout_ms and optional.
Step types
| Step | Does |
|---|---|
navigate | Open a page. |
click | Click an element. |
type | Type into a field like a person (or paste). |
press | Press a key. |
select, check | Choose an option; tick or untick a box. |
scroll | Scroll the page or to an element. |
wait, wait_for | Pause for a random time; wait for an element, text or URL. |
if, repeat, router | Branch, loop, or react to whichever of several pages appears. |
assert | Stop with a message if something isn't as expected. |
extract, set_data | Read a value from the page into custom data, or set a value later steps can use. |
solve_captcha | Find and solve a captcha on the page. |
wait_for_otp, arm_otp | Wait for a one-time code (or link) in the profile's mailbox or the Unified Inbox. |
screenshot | Take a screenshot. |
switch_tab, close_tab | Work with tabs. |
call | Run another flow (up to 5 levels deep). |
wait_queue | Wait until the tab is through a waiting room (never reloads). |
Placeholders
Text in steps can use placeholders, so one flow works for every profile:
| Placeholder | Becomes |
|---|---|
{custom.<key>} | A value from the profile's Data tab |
{account.username}, {account.password} | The profile's saved login (Account tab) |
{totp}, {otp} | The current 2FA code; the last code from a wait_for_otp step |
{profile} | The profile's name |
{rand:N} | N random digits |
{data.<key>} | A value saved earlier in the run |
Options
| Option | Values |
|---|---|
on_error | stop or continue |
step_timeout_ms | 1,000 to 600,000 |
speed | 0.25 to 4.0 |
dialog | accept or dismiss |
keep_open | Keep profiles open after the run |
preset | default or careful |
Run a flow on many profiles
Press Run on… on a flow (Replay on… for a recording, Fill on… for a form), or select profiles and use Tools… → Run flow….
- Choose the Profiles by name, Group or Tag.
- At once: how many profiles work at the same time, 1 to 16 (default 3).
- Pause between profiles: a random wait in a range of seconds.
- Open closed profiles for the run: closed profiles are opened for the run and closed again when they finish. Without it, a closed profile fails with “not open”.
Press Run on N profiles. The run panel shows each profile's state and its step-by-step trace, with Stop run to cancel. Recent runs lists runs started from the app, by schedules, scripts or agents; the engine keeps the last 50.
Schedules
Open Schedules and press New schedule. A schedule has three parts.
What
Open, Close, Open a URL, Run a flow, Replay a recording, Check proxy, Check fingerprint, Clear cache, New device or Keep warm.
When
| Mode | Settings |
|---|---|
| Once | A date and time (not in the past). |
| Repeat | Every 15 minutes up to once a year. |
| Cron | A standard 5-field cron expression, such as 0 9 * * 1-5, or a shortcut like @daily. |
| Daily window | From and Until times on chosen Days. Open early opens profiles some minutes before the start, and Put profiles back as they were at the end restores them afterwards. |
- Timezone: this computer's time by default, or any named timezone.
- Random delay: start each run a random number of minutes later, so it doesn't happen at exactly the same moment every time (not for daily windows).
- Quiet hours: runs that fall inside them wait until they end. Quiet hours can follow The proxy's timezone, This computer's time or Another timezone…. Close and Check proxy actions still run during quiet hours.
On
The profiles to act on: chosen profiles, a group, a tag or all profiles, and how many at once (1 to 16, default 3).
On the Schedules page, Run now starts a schedule immediately and History shows its last 50 runs. The All schedules card sets Browsers opened by schedules at once and has Pause timed runs; while paused, Run now still works.
Keep Echidna running
Schedules run in the engine, even when the window is closed, as long as Echidna is running. To close the window and keep schedules working, turn on Settings → General → Keep running in the system tray when the window is closed (on macOS, “in the menu bar”).
If Echidna wasn't running at the set time, a one-off run more than an hour late, or a daily window that has already ended, is recorded as missed. Other overdue repeating runs start on the next check after Echidna starts again.
Scripts and AI agents can create and run flows and schedules too; see Engine API and AI agents (MCP).