> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mobster.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Task and workflow tools

> Hand Mobster a whole task, run a saved workflow and list your profiles.

## `phone_task`

Hand a task to Mobster's agent on the user's iPhone. It asks the user in the Mobster app before it sends, buys, posts or deletes. Pass `thread_id` for a follow-up that sees what earlier tasks found.

**Acts on the device.**

**Arguments**

| Name | Type | Default | Description |
| - | - | - | - |
| `message` | string | required | What Mobster's agent should do on the iPhone, in plain words; in a conversation, a follow-up such as "now reply to her" (it sees what the earlier tasks found). 1 to 4,000 characters. |
| `thread_id` | string | | Continue this conversation (from an earlier `phone_task`); leave it out to start a new one. While its task runs, the message steers it, or answers Mobster's question. Matches `^[a-f0-9]{12}$`. |
| `device` | string | the conversation's, else the user's default device | The iPhone or simulator by id, UDID or name. At most 128 characters. |
| `profile` | string | | Act as this profile (from `list_profiles`, such as "@getmobster on Instagram"): the task runs on its iPhone, and Mobster confirms the profile on screen before it posts or sends. 1 to 160 characters. |
| `account` | string | | Deprecated: use profile, which takes the same value. 1 to 160 characters. |
| `phones` | array of strings | | Run the same task on each of these devices at once (ids, UDIDs or names from `list_devices`), as one task: each phone's answer, then one summary that merges them. Leave device out. 2 to 100 items. Each item: 1 to 128 characters. |
| `profiles` | `"all"` or array of strings | | Run the same task as each of these profiles at once, each on its own iPhone, as one task: "all", or a list of profiles (from `list_profiles`). Mobster confirms each profile on screen before it posts or sends; a profile that fails doesn't stop the others. Leave device, phones and profile out. |
| `queue` | boolean | see description | True (the default): when the phone is in use, wait in line and start when it is free; false: fail at once instead. The status says who holds the phone and your number. |
| `wait_seconds` | integer | `30` | How long to wait for the task before returning; call `phone_task_status` for the rest. 0 to 45. |

**Example**

```json tools/call params theme={"theme":"css-variables"}
{
  "name": "phone_task",
  "arguments": {"message": "Read my unread messages in Messages."}
}
```

**Returns**

Where the task stands, in a sentence: done with its answer, still running, queued for the phone, waiting for the user's approval, an answer or the phone, or how it ended. `structuredContent` has `thread_id`, `run_id` and `status`, with `answer`, `data`, `blocks`, `reason`, `question`, `choices`, `approval` or the queue's `position` as the status calls for. On several phones it has `group_id` and `phones`, each phone's state, and once every phone is done, `summary`.

> [accordion] Input schema and annotations of phone\_task
>
> Annotations: `title: "Phone task"`, `readOnlyHint: false`, `destructiveHint: true`, `idempotentHint: false`, `openWorldHint: true`
>
> ```json theme={"theme":"css-variables"}
> {
>   "type": "object",
>   "properties": {
>     "message": {
>       "type": "string",
>       "minLength": 1,
>       "maxLength": 4000,
>       "description": "what Mobster's agent should do on the iPhone, in plain words; in a conversation, a follow-up such as \"now reply to her\" (it sees what the earlier tasks found)"
>     },
>     "thread_id": {
>       "type": "string",
>       "pattern": "^[a-f0-9]{12}$",
>       "description": "continue this conversation (from an earlier phone_task); leave it out to start a new one. While its task runs, the message steers it, or answers Mobster's question"
>     },
>     "device": {
>       "type": "string",
>       "maxLength": 128,
>       "description": "the iPhone or simulator by id, UDID or name (default: the conversation's, else the user's default device)"
>     },
>     "profile": {
>       "type": "string",
>       "minLength": 1,
>       "maxLength": 160,
>       "description": "act as this profile (from list_profiles, such as \"@getmobster on Instagram\"): the task runs on its iPhone, and Mobster confirms the profile on screen before it posts or sends"
>     },
>     "account": {
>       "type": "string",
>       "minLength": 1,
>       "maxLength": 160,
>       "description": "deprecated: use profile, which takes the same value"
>     },
>     "phones": {
>       "type": "array",
>       "minItems": 2,
>       "maxItems": 100,
>       "items": {
>         "type": "string",
>         "minLength": 1,
>         "maxLength": 128
>       },
>       "description": "run the same task on each of these devices at once (ids, UDIDs or names from list_devices), as one task: each phone's answer, then one summary that merges them. Leave device out"
>     },
>     "profiles": {
>       "description": "run the same task as each of these profiles at once, each on its own iPhone, as one task: \"all\", or a list of profiles (from list_profiles). Mobster confirms each profile on screen before it posts or sends; a profile that fails doesn't stop the others. Leave device, phones and profile out",
>       "oneOf": [
>         {
>           "const": "all"
>         },
>         {
>           "type": "array",
>           "minItems": 1,
>           "maxItems": 100,
>           "items": {
>             "type": "string",
>             "minLength": 1,
>             "maxLength": 160
>           }
>         }
>       ]
>     },
>     "queue": {
>       "type": "boolean",
>       "description": "true (the default): when the phone is in use, wait in line and start when it is free; false: fail at once instead. The status says who holds the phone and your number"
>     },
>     "wait_seconds": {
>       "type": "integer",
>       "minimum": 0,
>       "maximum": 45,
>       "description": "how long to wait for the task before returning (default 30); call phone_task_status for the rest"
>     }
>   },
>   "required": [
>     "message"
>   ],
>   "additionalProperties": false
> }
> ```

## `phone_task_status`

Where a `phone_task` task is: running, waiting for the user's approval or answer, or finished with its answer.

**Read-only.**

**Arguments**

| Name | Type | Default | Description |
| - | - | - | - |
| `thread_id` | string | | The conversation's latest task. Matches `^[a-f0-9]{12}$`. |
| `run_id` | string | | One task. Matches `^[a-f0-9]{12}$`. |
| `group_id` | string | | A task run on several phones (from `phone_task` with phones). Matches `^[a-f0-9]{12}$`. |
| `wait_seconds` | integer | `0` | Wait up to this long for it to finish or need the user. 0 to 45. |

**Example**

```json tools/call params theme={"theme":"css-variables"}
{"name": "phone_task_status", "arguments": {}}
```

**Returns**

Where the task stands, in a sentence: done with its answer, still running, queued for the phone, waiting for the user's approval, an answer or the phone, or how it ended. `structuredContent` has `thread_id`, `run_id` and `status`, with `answer`, `data`, `blocks`, `reason`, `question`, `choices`, `approval` or the queue's `position` as the status calls for. On several phones it has `group_id` and `phones`, each phone's state, and once every phone is done, `summary`. In a conversation where no task started, `status` is `idle`.

> [accordion] Input schema and annotations of phone\_task\_status
>
> Annotations: `title: "Phone task status"`, `readOnlyHint: true`, `destructiveHint: false`, `openWorldHint: false`
>
> ```json theme={"theme":"css-variables"}
> {
>   "type": "object",
>   "properties": {
>     "thread_id": {
>       "type": "string",
>       "pattern": "^[a-f0-9]{12}$",
>       "description": "the conversation's latest task"
>     },
>     "run_id": {
>       "type": "string",
>       "pattern": "^[a-f0-9]{12}$",
>       "description": "one task"
>     },
>     "group_id": {
>       "type": "string",
>       "pattern": "^[a-f0-9]{12}$",
>       "description": "a task run on several phones (from phone_task with phones)"
>     },
>     "wait_seconds": {
>       "type": "integer",
>       "minimum": 0,
>       "maximum": 45,
>       "description": "wait up to this long for it to finish or need the user (default 0)"
>     }
>   },
>   "required": [],
>   "additionalProperties": false
> }
> ```

## `list_workflows`

The user's saved workflows in Mobster: each one's name, steps and blanks.

**Read-only.**

**Arguments**

Takes no arguments.

**Example**

```json tools/call params theme={"theme":"css-variables"}
{"name": "list_workflows", "arguments": {}}
```

**Returns**

One line per workflow: its name, id, steps, graph and blanks. `structuredContent` has `workflows`, each with `id`, `name`, `steps`, `blanks`, `sameConversation`, `nodes`, `branches`, `loops` and `published`.

> [accordion] Input schema and annotations of list\_workflows
>
> Annotations: `title: "List workflows"`, `readOnlyHint: true`, `destructiveHint: false`, `openWorldHint: false`
>
> ```json theme={"theme":"css-variables"}
> {
>   "type": "object",
>   "properties": {},
>   "required": [],
>   "additionalProperties": false
> }
> ```

## `run_workflow`

Run one of the user's saved workflows on their iPhone, with a value for each blank, in a new conversation or the one you name with `thread_id`. Mobster asks the user before it sends, buys, posts or deletes.

**Acts on the device.**

**Arguments**

| Name | Type | Default | Description |
| - | - | - | - |
| `workflow` | string | required | The workflow's name or id, from `list_workflows`. 1 to 120 characters. |
| `values` | object | see description | A value for each blank, by name, like \{"topic": "basketball"}; a blank left out takes its default. |
| `thread_id` | string | | Run it in this conversation (from `phone_task`); leave it out for a new conversation, or the workflow's own one when it always continues one. Matches `^[a-f0-9]{12}$`. |
| `new_conversation` | boolean | | Start a new conversation even when the workflow always continues one. |
| `wait_seconds` | integer | `30` | How long to wait for the task before returning; call `phone_task_status` for the rest. 0 to 45. |

**Example**

```json tools/call params theme={"theme":"css-variables"}
{
  "name": "run_workflow",
  "arguments": {
    "workflow": "Reels digest",
    "values": {"topic": "basketball"}
  }
}
```

**Returns**

That it started the workflow, then where the run stands, as `phone_task` says it. `structuredContent` has `workflow_id`, `thread_id`, `run_id` and the run's state. A graph workflow answers as `graph_status` does, with `thread_id` and `run_id`.

> [accordion] Input schema and annotations of run\_workflow
>
> Annotations: `title: "Run workflow"`, `readOnlyHint: false`, `destructiveHint: true`, `idempotentHint: false`, `openWorldHint: true`
>
> ```json theme={"theme":"css-variables"}
> {
>   "type": "object",
>   "properties": {
>     "workflow": {
>       "type": "string",
>       "minLength": 1,
>       "maxLength": 120,
>       "description": "the workflow's name or id, from list_workflows"
>     },
>     "values": {
>       "type": "object",
>       "additionalProperties": {
>         "type": "string",
>         "maxLength": 300
>       },
>       "description": "a value for each blank, by name, like {\"topic\": \"basketball\"}; a blank left out takes its default"
>     },
>     "thread_id": {
>       "type": "string",
>       "pattern": "^[a-f0-9]{12}$",
>       "description": "run it in this conversation (from phone_task); leave it out for a new conversation, or the workflow's own one when it always continues one"
>     },
>     "new_conversation": {
>       "type": "boolean",
>       "description": "start a new conversation even when the workflow always continues one"
>     },
>     "wait_seconds": {
>       "type": "integer",
>       "minimum": 0,
>       "maximum": 45,
>       "description": "how long to wait for the task before returning (default 30); call phone_task_status for the rest"
>     }
>   },
>   "required": [
>     "workflow"
>   ],
>   "additionalProperties": false
> }
> ```

## `graph_status`

Read a graph workflow's accepted batch by `workflow_id` and `batch_id`, without starting it again.

**Read-only.**

**Arguments**

| Name | Type | Default | Description |
| - | - | - | - |
| `workflow_id` | string | required | The saved workflow's id from `run_workflow`. Matches `^[a-f0-9]{12}$`. |
| `batch_id` | string | required | The graph batch's id from `run_workflow`. Matches `^[a-f0-9]{12}$`. |
| `wait_seconds` | integer | `0` | Wait up to this long for the graph to finish. 0 to 45. |

**Example**

```json tools/call params theme={"theme":"css-variables"}
{
  "name": "graph_status",
  "arguments": {"workflow_id": "0f3a9c2b7d1e", "batch_id": "5b8e2a4c9f10"}
}
```

**Returns**

The batch's status in a line. `structuredContent` has `workflow_id`, `batch_id`, `status`, `reason`, `result`, `steps` (each with `instance`, `type`, `state`, `reason`, `output` and `runId`) and `status_uri`.

> [accordion] Input schema and annotations of graph\_status
>
> Annotations: `title: "Graph status"`, `readOnlyHint: true`, `destructiveHint: false`, `openWorldHint: false`
>
> ```json theme={"theme":"css-variables"}
> {
>   "type": "object",
>   "properties": {
>     "workflow_id": {
>       "type": "string",
>       "pattern": "^[a-f0-9]{12}$",
>       "description": "the saved workflow's id from run_workflow"
>     },
>     "batch_id": {
>       "type": "string",
>       "pattern": "^[a-f0-9]{12}$",
>       "description": "the graph batch's id from run_workflow"
>     },
>     "wait_seconds": {
>       "type": "integer",
>       "minimum": 0,
>       "maximum": 45,
>       "description": "wait up to this long for the graph to finish (default 0)"
>     }
>   },
>   "required": [
>     "workflow_id",
>     "batch_id"
>   ],
>   "additionalProperties": false
> }
> ```

## `list_profiles`

The user's social media profiles mapped in Mobster (handle, app and the iPhone each is signed in on). Pass one to `phone_task` as profile, such as "@getmobster on Instagram".

**Read-only.**

**Arguments**

Takes no arguments.

**Example**

```json tools/call params theme={"theme":"css-variables"}
{"name": "list_profiles", "arguments": {}}
```

**Returns**

One line per profile and the iPhone it's on. `structuredContent` has `profiles`, each with `id`, `profile`, `handle`, `app` and `phone`.

> [accordion] Input schema and annotations of list\_profiles
>
> Annotations: `title: "List profiles"`, `readOnlyHint: true`, `destructiveHint: false`, `openWorldHint: false`
>
> ```json theme={"theme":"css-variables"}
> {
>   "type": "object",
>   "properties": {},
>   "required": [],
>   "additionalProperties": false
> }
> ```

## `list_accounts`

Deprecated: use `list_profiles`, which answers the same list. Kept so clients that learned this name keep working.

**Read-only.**

**Arguments**

Takes no arguments.

**Example**

```json tools/call params theme={"theme":"css-variables"}
{"name": "list_accounts", "arguments": {}}
```

**Returns**

One line per profile and the iPhone it's on. `structuredContent` has `accounts`, each with `id`, `account`, `handle`, `app` and `phone`.

> [accordion] Input schema and annotations of list\_accounts
>
> Annotations: `title: "List profiles (old name)"`, `readOnlyHint: true`, `destructiveHint: false`, `openWorldHint: false`
>
> ```json theme={"theme":"css-variables"}
> {
>   "type": "object",
>   "properties": {},
>   "required": [],
>   "additionalProperties": false
> }
> ```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.