Shown in the app's own themes — pick the one you run. Light or dark follows the toggle above.
Studio
The Task Builder
Build what the bot does as a flow of steps, then test it on an emulator.
The Task Builder is where a task's or routine's flow is built: steps the bot runs from top to bottom, with branches, loops and reusable functions. It also holds the task's settings form, a place to try that form, and a live test run on a real emulator.
Open it from Studio ▸ Tasks (or Routines): click a card, its Edit button, or the New task / New routine card. A card with the Bundle chip opens the Bundle Editor instead, which uses this same editor for its flows.
Studio
Task name
Basic / Configurable
Expand
Config
Save task
Tabs
Steps panel
Adding to:
Eye / up-down / ✕ buttons
Inspector
Delay after (ms)
Remove step
Studio
Task name
Basic / Configurable
Expand
Config
Save task
Tabs
Steps panel
Adding to:
Eye / up-down / ✕ buttons
Inspector
Delay after (ms)
Remove step
Studio
Task name
Basic / Configurable
Expand
Config
Save task
Tabs
Steps panel
Adding to:
Eye / up-down / ✕ buttons
Inspector
Delay after (ms)
Remove step
The Task Builder on the Flow tab: the Steps panel, the flow with a step selected, and the Inspector.
Set it up
In Studio ▸ Tasks, click New task. The builder opens on the Flow tab, adding to the top of Root.
In the Steps panel click Find template. In the Inspector click Load detector and pick one (or Vision Lab to make one), set On image to Fresh screenshot, and type a name under Store match as, for example close_btn.
Click If / Else. Under Condition pick close_btn and is found. Adding to: now points at its Then slot.
Click Tap on match and set From match to close_btn.
Click Save task, name the task, choose Runs as, add a description and click Save.
Open the Log tab, click Run flow, pick your emulator and click Run. Watch the lines arrive; click Stop to end the run early.
Top bar
Studio
Back to the library. With unsaved changes it asks Discard changes?: Discard leaves without saving, Cancel stays.
Task name
The name field. A new task starts as New task, a new routine as New routine. You can also set the name in the Save task dialog.
Basic / Configurable
Basic: no settings form. Configurable: the task has a form, built on the Config UI tab and filled in per instance on Task setup. Switching a task that has a form back to Basic asks Make this task Basic?: Keep form hides the form (it returns if you switch back), Discard form clears it for good once you save. Default for a new task: Basic.
Expand
Opens the tabs in a large window, Builder — expanded view (tooltip Open the builder in a large window). Close expanded view puts them back.
Config
Opens Task config: how the task runs by default, where it appears, and the inputs and return value a caller sees. Tooltip: How this task functions at run time (count targets, marches, …).
Save task
Opens the Save task dialog described below.
Tabs
Flow
The step editor: Steps panel, flow and Inspector. Always shown.
Config UI
The settings-form designer, shown while the task is Configurable. See The Config UI builder.
Test inputs
A working copy of the settings form to fill in for Run flow, shown while the task is Configurable.
Log
Run flow, Stop, Clear and the live run output.
The Steps panel
Steps
The panel title. The button beside it folds the panel to a thin strip (Collapse the steps panel) and opens it again (Show the steps panel).
Step list
Grouped under CAPTURE, PERCEPTION, ACTION, CONTROL, COMPOSITION and SCHEDULER, under the hint Click to add to the active slot. A click adds the step where Adding to: points. Every step is described in the Flow step reference.
Panel widths
Drag the gaps between the Steps panel, the flow and the Inspector to resize them.
The flow
Function tabs
Root is the task itself: a run starts at its first step. Every other tab is a function, a named piece of flow you run with a Call function step. Click a tab to edit it.
New function
Adds and opens a function named Function 1, Function 2 and so on. Not shown inside the Bundle Editor.
Rename a function
Double-click its tab. Rename function asks for a Function name (placeholder e.g. Find alliance); every Call function step that used the old name follows the rename.
✕ on a function tab
Removes the function and all of its steps at once, with no confirmation. Root cannot be removed.
Adding to:
Where the next click in the Steps panel lands, for example · Root › If / Else › Then. Click Top of file to add to the top level of the open tab again.
Step row
The step's icon and name, its note (or a short description), and ⟶ name when it stores a variable. Click the row to select it. Hover a shortened line to read all of it. On Standing Watch each row also starts with its number and a short verb such as TAP or READ; on a narrow flow the number, then the verb, step aside first.
Eye button
Switches the step off without deleting it (Disable this step (skipped on run)). A switched-off step is dimmed and skipped at run time; click again to switch it on (Step disabled — click to re-enable).
Up / down arrows
Move the step up or down within its own list.
✕ on a step
Removes the step. On a container (If / Else, a loop, Retry block, For each match) everything inside goes too.
Slots
Containers show their slots: ▸ Then and ▸ Else, ▸ Repeat, ▸ Try and ▸ Recover, or ▸ For each match. Click a slot to make new steps land there. An empty slot reads Empty — pick this slot, then click palette steps.
Deep nesting
Each container indents what is inside it. However deep a flow nests, every row keeps its eye, arrows and ✕ on screen at any window size: when the deepest row would not fit, the indents tighten instead.
Unknown step
A step Evonex does not recognise is shown as Unknown step, cannot be edited here, and is kept exactly as it is when you save.
The Inspector
Inspector
With nothing selected it reads Select a step to edit its options.
Header
The selected step's icon, name and what it does.
Note
A plain-English label for the step (placeholder Plain-English label for this step). When set, it replaces the description on the step's row, which keeps a long flow readable.
Delay after (ms)
A pause after the step finishes; blank means none. Leave it blank for most steps. A pause of the length a screen needs to finish drawing is replaced at run time by the instance's Screen delay (see Instance settings), so its exact number does not matter. Only a very short spacing pause (under half a second) or a long wait on the game itself (about two seconds or more) is kept as typed.
Condition
On If / Else, Loop until… and Stop when…: a variable, an operator and, for comparisons, a value under Compare to, with a preview line underneath. On Retry block it is optional (Verify). See the Flow step reference.
Step fields
The options of the selected step, listed in the Flow step reference. Placeholders show the expected format and the value used when a field is left blank.
Store … as
On a step that produces a value: the variable name later steps use (the placeholder suggests one). When the step can produce more than one type, a Type picker follows. The line → saved as a variable later steps can use (only within this scope) is a reminder of where it can be used.
Remove step
Removes the selected step, like ✕ on its row.
Save task dialog
Name
Required (placeholder e.g. Rally Joiner); Save does nothing until it has one.
Type
Task or Routine. Changing it moves the card to the other tab.
Runs as
Main task or Side task, the lane an instance uses by default (tooltip A default, not a restriction — any task can be scheduled as main or side on an instance.). Default for a new task: Side task.
Description
What the task does (placeholder What this task does (shown on its card).). The card shows it when the settings form has no Summary.
Delete
Existing tasks only. Asks Delete this task permanently? This cannot be undone. and returns to Studio. Built-in tasks and routines are not deleted.
Cancel / Save
Save stores the name, type, role and description together with the flow, the settings form and Task config.
Name
Type
Runs as
Delete
Save
The Save task dialog: Name, Type, Runs as and Description.
Saving a Configurable task whose form has no field bound to a property (and no call options) asks Save without inputs?, because such a task does not appear on Task setup. Save anyway saves it as it is; Cancel lets you bind a field first.
Test inputs tab
The tab opens with Fill this exactly as a player would per instance, then “Run flow” — your picks here feed the flow's config variables (otherwise defaults are used). It shows the task's settings form as Task setup does, pinned header and footer included, rebuilt from the Config UI design each time you open the tab. Fill it in as a player would: Run flow uses these values, and anything you leave alone uses the form's defaults. What you type is kept while you switch tabs but is not saved with the task. If a test run writes progress back into the settings (a trained-so-far count, for example), the form updates live. With no fields yet it reads No Config UI fields yet — add some in the Config UI tab to mock test inputs here.
Log tab and Run flow
Run flow
Saves the task, then opens Run flow on emulator. During a run the button reads Stop: click it to end the run at the next step (the log shows ⏹ stopping…). Tooltip: Run this flow live on an emulator using your Test-inputs selection. Click again to stop.
Clear
Empties the log.
Run log
The live output, one line per step and message. Warnings start with ⚠ and errors with ✗; the most recent 2,000 lines are kept. Before a run it reads Run a flow to see live output here.
The Run flow on emulator dialog:
Start at
Shown when the task has functions. Root — the whole task (default) runs the task normally; picking a function runs only that function.
Arguments
Shown when Start at is a function. Add argument adds a name / value row; each becomes a variable the function starts with, standing in for what its caller would pass. ✕ removes a row. The function and its arguments are remembered for the next run.
Call options
Shown when the task or routine declares inputs in Task config: one field per input.
Emulator
Pick a detected emulator or type its address, for example 127.0.0.1:5555; a bare port such as 5555 works too. The refresh button looks again for an emulator you just opened. The last one used is filled in.
Cancel / Run
Run switches to the Log tab and starts. With no emulator it shows Pick or enter an emulator / ADB address.
Start at
Arguments
Add argument
Emulator
Run
The Run flow on emulator dialog: Start at, Emulator and the Cancel / Run buttons.
A test run is real. The bot taps, spends and sends marches exactly as a scheduled run would, using your Test inputs, and it refuses to start on a display other than 540 × 960. Stop any instance that uses the same emulator first so the two do not fight over the screen — and remember that Run flow saves the task before it runs.
Picking a point or a region
Pick on image…
On Tap (x, y), Long press and Set field text: opens Pick a tap point on a 540 × 960 frame. Click the spot, then Use point to fill X and Y.
Pick region… / Pick…
Opens Pick a region. Drag a box on the frame and adjust its edges; Reset goes back to the whole frame; Use region fills the field.
+ (Load a screenshot backdrop)
Loads a saved screenshot to click or draw on. Without one the frame is blank.
Camera
Grabs the current screen of the emulator you last used with Run flow (tooltip Capture from your last-run emulator, or Capture a frame from your last-run emulator in Pick a region). It appears once you have used Run flow; until then, load a saved screenshot with +.
Region box
+ (load backdrop)
Camera
Reset
Use region
The Pick a region dialog: the 540 × 960 frame with a dragged box, Reset and Use region.
How it runs
A run starts at the first step of Root and works down. Containers run their slots: If / Else runs Then or Else, loops repeat their slot, Retry block tries again after a failure.
Switched-off steps are skipped. A step's Delay after follows the step.
A Call function step runs that function and comes back. The function hands a value back by setting a variable named return.
A variable made inside a container is gone when that container ends, unless the step that made it has Scope set to Function or Run. Settings fields and call options are available everywhere.
A Finish (success/fail) or Stop when… step ends the task with a result; otherwise it ends after the last step of Root.
When an instance runs the task, it uses that instance's Task setup values and Screen delay. A Run flow test uses your Test inputs.
Examples
Dismiss a popup only if it is there. Find template (detector event_popup_close, On image Fresh screenshot, Store match as x_btn) → If / Else (x_btn is found) → Then: Tap on match (From match x_btn). When the popup is not showing, nothing happens.
Repeat a number of times the player chooses. Make the task Configurable and add a Number field bound to spins on the Config UI tab. In the flow: Loop N times with Times {spins} → Repeat: your tap steps, then Report progress with Units done 1.
Test one function on its own. In Run flow, set Start at to Find alliance, add the argument target = help, and click Run. Only that function runs.
Troubleshooting
A variable I stored is not in the picker.
Pickers list the variables in scope at that step: made earlier in the same list or in a list that contains it, plus settings fields and call options. A variable made inside a slot is not visible after that slot. Move the step, or set the producing step's Scope to Function or Run.
Run flow stops straight away with an error in the log.
Read the first ✗ line. The usual causes are an emulator that is not running or not reachable at that address, and a display that is not 540 × 960 — see Emulator setup.
The camera button is missing in Pick a region.
It appears after you have used Run flow once. Until then, load a saved screenshot with +.
My task has no card on Task setup.
Task setup lists Configurable tasks with at least one field bound to a property. Look for the Nothing is wired yet banner on the Config UI tab.
I switched to Basic and the form is gone.
If you chose Keep form, switch back to Configurable and it returns. If you chose Discard form and saved, it cannot be brought back.
I removed a function by mistake.
Removal is immediate. If you have not saved since, click Studio, choose Discard, and reopen the task. Remember that Run flow saves too.