Scroll {topic} Reels for {10} minutes and tell me what you learned. Run it, fill in the blanks, and Mobster’s agent takes it from there: you write what you’d type, and the agent works out the taps. To run several steps, branch, loop them, or send the answer somewhere, add steps on the workflow’s canvas (Build a workflow on its canvas).
Save a workflow
- Under any of Mobster’s answers in a conversation that went well, choose Save as workflow. A new workflow’s page opens with the task’s own words while Mobster reads the conversation and drafts the name and the steps, with the parts you’d change marked as blanks; the draft takes their place unless you’ve changed them first. Nothing is saved until you choose Save workflow. With several phones it runs on the one the task ran on, and Always continue in the same conversation adds every run to that conversation.
- On the Workflows page, choose New workflow and write the steps yourself, on the workflow’s own page (The page).
- On an empty Workflows page, choose one of the ideas under Start from one of these. Each shows the icon of the app it works in (Calendar, Mail, Instagram, Amazon, Settings), and an idea that spans no single app shows a plain glyph. It opens a new workflow’s page filled in, schedule included, and saves nothing until you do.
Blanks
Two blanks with the same name are one blank. A workflow has at most 12.
Run a workflow
- Workflows page: Run. A workflow with blanks asks for them in its row first.
- ⌘K: type its name, then choose Run “…”.
- In a conversation: choose Run workflow here… in the conversation’s ··· menu in the sidebar, or in ⌘K. The steps become that conversation’s next message, so the agent sees everything before them.
- Siri and Shortcuts:
mobster-task.sh --workflow "Reels digest" topic=basketball(Siri, Raycast and Alfred). - Terminal:
mobster chat --workflow "Reels digest" --set topic=basketball(mobster chat). - Your coding agent, over MCP:
list_workflowsandrun_workflow(MCP server). - The HTTP API:
POST /api/workflows/{id}/runwith anIdempotency-Keyheader and{"values": {"topic": "basketball"}, "threadId": "…"}. Both fields are optional. The answer has therunand itsthreadId.
Run it
Run it, in the inspector of the workflow’s first card (Starts), has the ways a workflow starts without you pressing Run:- On a schedule: turn it on, and pick the days and the time beside its switch (Schedules).
- By webhook: in Edit, once the workflow is saved, Make a URL gives another tool a signed address that starts the workflow (Start a workflow from another tool).
- From a shortcut: Copy the command copies the line for Siri, Shortcuts, Raycast or Alfred, with the workflow’s name and a
NAME=for each blank without a default (Run a saved workflow).
What a workflow’s row shows
Each row on the Workflows page says what the workflow does, how it last went, and what it needs from you:- What it does: its name, and its steps’ first line under it.
- Worked: when its last verified run finished, and the first line of what that run found, such as Worked 8:02 AM beside “Standup at 9:30, lunch with Priya at 12”. A run is verified when the screen proved it done or you marked it Looks right. Choose Worked to open that task.
- Next run: when a scheduled workflow runs next. A workflow you run by hand has none.
- What needs you, in place of Worked, from its newest attempt that ended:
A later verified run clears what an earlier failure said, so the row only ever shows what needs you now. When something needs you, Last worked moves to the line under it. A time missed while your Mac was asleep or Mobster was closed is no failure: the row keeps saying what it said before. A run that finished without proof, which you haven’t checked, shows Last run and Take a look instead.
A workflow you saved without publishing says Not published and names the schedule it will use. Choose Publish on its row to make that saved version available to its schedule, webhook and shortcuts.
Delete on a row, or
backspace on the row you’re on, asks in the row itself: Delete “Morning brief”?, with Cancel and Delete workflow. esc cancels. Searching away from the row cancels an unconfirmed question. The schedule stops, and the tasks it ran stay in the sidebar.
GET /api/workflows sends this as each workflow’s health: {"lastSuccess": {"at", "runId", "line"} | null, "attention": {"kind": "failed" | "phone" | "input" | "limit", "words", "detail", "runId", "at"} | null, "recent": [{"outcome", "at", "runId"}]}. recent is its last 10 runs, newest first, each done, check (it finished and wants a look), failed, stopped, skipped or running; a missed time is left out. Times are UTC epoch milliseconds.
Learned steps
After a workflow’s first good run, Mobster keeps the steps it took. The next runs repeat those steps the same way, and check each screen before each step. The row on the Workflows page says Learned: “Worked before. Mobster repeats it the same way, checking each screen. Last run: 5s, $0.00. First run took 48s, $0.06.” A repeat calls no model, so it costs nothing on your key and takes seconds. A run that repeated learned steps says Learned under its result, with its time and cost once, and the mark’s tooltip says what the first run took: “First run took 48s, $0.06”. The first run’s numbers come from that run’s own record, kept with the learned steps, so they stay after the run leaves your history. Learned again after a screen changed, a workflow keeps its first run’s numbers. A first run whose cost wasn’t reported shows its time only. The run’sreplay.first (and program.first for a program) holds them: runId, seconds and costUsd.
- A send, post, delete or purchase still asks you first, as in any task. Each replayed step goes through the same rules as a live step: in Ask before every change a Save or Create asks, a like, follow or repost asks, and typing a one-time code asks in every mode. In Full access, Mobster hands that step to the model, which goes ahead as Full access says. A replay never opens or acts in an app you haven’t allowed: it hands that step to the model, which asks before it opens the app.
- Typed text comes from the workflow’s own words: a workflow that says “Text : ” types the message you fill in. A search query replays as it was typed, because it finds things rather than writing them. Text the model wrote, such as a caption, is written by the model each run.
- When a screen doesn’t match (the app changed, a sheet popped up), the model takes over from that step with what was done so far, and the run that finishes is learned again. After a replayed send, post or delete, or when a learned action’s outcome is unknown (the phone didn’t answer, or the screen couldn’t be read after it), the model never takes over: the task ends with Check the result, so nothing is done twice. Look at your iPhone before you run it again.
- A replay says done only on evidence. Either the screen shows what the learned run quoted at the end, such as the sent message, or the replay ends on the learned run’s last screen in the same app with the words it typed on it, such as the new note’s text. When neither holds, one look-only call to your model checks the screen; it can’t tap or type, and its words count only if they’re on the screen. Otherwise the run ends with Check the result. The run’s
replay.confirmedsays which:proof,screenorlook. - A loop over rows (Loop › Each row) whose first round is learned replays the next rounds with no model, each with its own row’s words, and goes on to the next round when each one ends done.
- A workflow that reads something (an answer schema, or only taps and scrolls) replays its steps, and the model reads the answer at the end.
MOBSTER_REPLAY=off in the env file turns learning and replay off.
Learned steps from any task
Mobster keeps a task that finished done, whole, and repeats it for a task with the same words, or the same words and other values. It’s on by default in Mobster for Mac,mobster serve, phone_task from your coding agent through mobster mcp, and Mobster Remote. Set MOBSTER_PROGRAMS=off in the env file to turn it off. With MOBSTER_PROGRAMS=on, the terminal UI and mobster run use it too.
Measured on an iPhone 15 Pro with iOS 26.0.1 (11 Oct 2026), 4 runs each way, every run passed and every approval was asked as before:
The first repeat still makes one model call, to check the screen; later repeats make none. When a task’s learned steps and a repeat task’s steps both fit, the learned steps run. On iOS Simulators running code-graded tasks with other values (11 Oct 2026), repeats took 2.33 model calls instead of 5.06, with the same pass rate.
- What’s kept: when a task finishes with every part shown on screen, Mobster keeps its steps, its checklist and your request, with the values you typed or named as blanks. “Create a note titled ‘Errands 5’ that says ‘post office’” also serves “Create a note titled ‘Garden 6’ that says ‘water the basil’”. A row Mobster scrolled to because your request named it counts as a value too: “Open Settings › Accessibility › Subtitles & Captioning” also serves “Open Settings › Accessibility › Keyboards & Typing”. Each screen is kept as hashes of its controls’ roles and names, never as text. Answers, notes and anything Mobster wrote itself aren’t kept.
- When it’s used: a later task in the same app, on the same iPhone, whose words are the kept request, with the same values or other ones. Code fills in the values from your words. The model is asked only when your words could fill the request two ways. A task that says more than the kept request, such as a second request after “then” or after a closing quote, runs with the model instead: a value never runs across a quote mark, a semicolon, the end of a sentence, or a “then” outside quotes.
- What’s repeated: each step runs only on a screen like the one it ran on, and types only your words. An app that reopens on another page is first brought back to where the steps started: its Back button, then closing and reopening it once, never while a field on screen holds typed text. Sends, payments and deletes ask you first, as in any task; in Full access they go ahead as Full access says. When a screen doesn’t match, the model takes over with the remaining steps as a plan.
- How it finishes: the first repeat of learned steps ends the usual way, with the model checking the screen. After one repeat that shows every part done, later repeats of a task with nothing to report end as soon as the screen shows it done, with no model.
- What you taught: a task you taught on the live view (Teach Mobster a task) is kept as learned steps too. It opens its own app first, so it runs whichever app a task starts in, and it also runs for a workflow’s runs and its schedule. It’s kept until you forget it: a run that fails leaves it to be checked by the model again. Save as a workflow makes a workflow whose words run it, with your blanks as the workflow’s.
-
Forgetting: learned steps whose first repeat fails are forgotten at once. After that, ones that fail twice in a row are forgotten. Mobster keeps up to 100 tasks’ steps, in the data folder’s
replays/programs/. -
Parts of learned steps: with
MOBSTER_PROGRAMS=onset in the env file, a new task with other words can also use parts of other tasks’ learned steps. A calories question’s steps have a “look up a food in CalTrack” part; a create-a-note task’s steps have a “create a note with this title and text” part. “Create a note titled ‘Groceries 12’ that says ‘rice and beans’, then tell me the calories in one serving of Quinoa in CalTrack” then runs both parts with no model:- code takes each value from your words, where the kept request had its value, and checks it against the task’s checklist;
- a part runs only for a part of the checklist still open in its app, and a part that wrote something never runs for a task that only reads;
- each step runs only on a screen like the one it ran on, and the part’s last screen must show your values;
- a value your words don’t give is left to the model, with the remaining steps as a plan.
The Morning brief
The Morning brief is a job Mobster sets up for you: every morning, the DMs that need you with a draft reply for each, what’s trending in your niche, and ideas from your saved posts, on Instagram, as one result. Choose Set up on its card on Home. The form opens under the cards: say your niche and the time (8:00 unless you change it), and choose Save brief. When it’s ready, a Mac notification says “Your brief is ready”, and the result opens from Home or the notification, with Download › PDF. It is a workflow like any other, in Workflows, where you can change its words, time and steps:- Three task cards, each read-only: “Don’t send anything”, “Don’t like, comment or follow”, “Don’t like, comment or save anything”. A reply goes only when you approve its draft, and that send asks as any send does.
- A Brief step that puts their results together (Build a workflow on its canvas).
- Every day at the time you chose, with a $2.00 spending limit a run and a 60-minute time limit.
POST /api/workflows/templates/morning-brief with {"niche": "home cooking", "time": "07:30"} (and an optional timezone) saves it and answers {workflow}.
Schedules
Under Run it, turn on On a schedule to run a workflow by itself, such as weekdays at 8:00 AM: Repeat and Time sit under the switch. The line under them says the schedule in words and when it runs next, and Advanced, at its end, takes a cron schedule and a time zone. A schedule fills each blank with its default, so every blank needs one first. Turned off again, a schedule keeps its times, paused.When a schedule runs
- A step that needs your approval waits for you, as in any task. If nobody answers within 10 minutes, the task ends without that step.
- A workflow saved with a profile (
accountin the API) runs on that profile’s phone, as that profile, with its values in the task’s placeholders (Profiles). - A workflow runs on the phone saved with it. With none, it runs on the only phone, or the first iPhone, never on whichever phone you used last.
- Open at login, in Settings › General, starts Mobster when you log in, so schedules run even if you haven’t opened it. Closing the window keeps Mobster running; ⌘Q quits it.
- Task notifications, in the same place, tell you when a task finishes or needs your OK while Mobster is in the background.
Staying awake
From 10 minutes before a scheduled task is due until its run ends, and while any task runs, Mobster keeps your Mac from going to sleep on its own. A closed laptop on battery still sleeps, and so does a Mac whose battery runs out: Mobster warns while tasks run on a Mac at 20% or less. A scheduled task on Mobster’s agent pauses while the iPhone’s battery is at 10% or less and not charging (Battery, heat and the Mac).MOBSTER_KEEP_AWAKE=0 in the env file turns keeping awake off.
Alerts
Mobster can post to a webhook when a scheduled task fails, stops before it finishes, or waits a minute for your approval. Put an https address in the env file:agent.env
- Slack, Discord and ntfy addresses get their own format. Any other address gets JSON:
workflow,status,reason,runId,atandtext. - A post says which task and why. It never holds the task’s answer, a screenshot or anything it typed.
- Tasks you start yourself never alert.
- Addresses on this Mac or its local network are refused.
mobster alerts test sends a test post and says whether it arrived.