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

# What a node can do

> The three capability switches on an agent node, the runtime features they unlock, and how the environment overrides them.

Every [agent node](/concepts/nodes) declares three capability switches. They decide which tools the node gets during an execution.

The runtime resolves the node's toolset from these switches and from the workflow's [environment](/concepts/environments). The environment wins where the two disagree.

The object is optional. Omit it and the runtime applies the defaults below.

```yaml theme={null}
label: "Submit Form"
type: agent
capabilities:
  browser_use: true
  computer_use: false
  ask_user_question: true
model: asteroid-balanced
```

Over the API, the SDK, and the MCP tools, the same object sits at `properties.capabilities`.

***

## The three switches

<CardGroup cols={1}>
  <Card title="Browser use" icon="globe" horizontal>Navigate and interact with web pages (`browser_use`)</Card>
  <Card title="Computer use" icon="monitor" horizontal>Vision-based mouse and keyboard control (`computer_use`)</Card>
  <Card title="Ask user question" icon="message-square" horizontal>Pause mid-run and ask a person for input (`ask_user_question`)</Card>
</CardGroup>

### Browser use

Gives the node the browser toolset: navigating, clicking, typing, filling forms, reading page content, capturing screenshots, saving PDFs, uploading files, and running Playwright code.

Turn it on when the node drives a website. This is how most workflows work on the web.

Browser use also opens the node-script bridge that the [Google Sheets](#google-sheets) skill runs on.

### Computer use

Gives the node vision-based control of a full desktop. The node looks at the screen and moves the mouse and keyboard, instead of working through the DOM.

Use it for native applications, and for pages that a DOM-based approach cannot handle. It is slower and costs more than browser use, so prefer browser use when either would work.

### Ask user question

Lets the node stop and ask a person for a value, a decision, or a confirmation. The execution moves to `paused_by_agent` until someone answers.

Turn it on for workflows with a person in the loop. Leave it off for unattended executions, where a paused run has nobody to answer it.

<Info>
  This switch is separate from email. Inbox tools appear automatically when the execution has a profile with an inbox attached.
</Info>

<Card title="Executions and statuses" icon="hourglass" href="/concepts/executions" horizontal>What `paused_by_agent` means and how an execution leaves it</Card>

***

## The environment overrides two of them

Browser use and computer use are resolved against the workflow's environment.

| Environment      | `browser_use`  | `computer_use` |
| ---------------- | -------------- | -------------- |
| Browser          | On by default  | Off by default |
| Linux or Windows | **Always off** | **Always on**  |

<Warning>
  On a Linux or Windows environment, setting `browser_use: true` has no effect.

  If a switch looks like it is being ignored, check the environment first.
</Warning>

<Card title="Environments" icon="server" href="/concepts/environments" horizontal>Browser, Linux, and Windows, and what each one runs</Card>

***

## Runtime features

These features are available to an agent node. Each one becomes usable once its own prerequisite holds.

| Feature              | What it does                                                              | Prerequisite                                                    |
| -------------------- | ------------------------------------------------------------------------- | --------------------------------------------------------------- |
| Base workspace tools | Read, write, edit, search, run commands, manage todos, use bundled skills | None                                                            |
| Google Sheets        | Read and write spreadsheet data                                           | `browser_use`, and the sheet open in the active tab             |
| Two-factor codes     | Generate TOTP codes                                                       | A TOTP secret stored as a credential on the profile             |
| Send and read email  | Use the workflow's inbox                                                  | A profile with an inbox attached to the execution               |
| Handoffs             | Move to the next node along an outgoing transition                        | An outgoing transition                                          |
| Output variables     | Pass structured data to later nodes                                       | A schema on the transition, or a scripted node that returns one |

<Info>
  A feature works only where its prerequisite holds. A workflow that cannot use one says which prerequisite is missing, rather than guessing.
</Info>

### Google Sheets

The Google Sheets skill reads and writes cell ranges. It works when all of these are true:

* `browser_use` is available, because the skill runs through the browser node-script bridge.
* The spreadsheet is open in the active browser tab.
* The profile or session has edit access to the sheet.
* The target sheet tab is selected.

<Warning>
  Google Sheets draws the grid as a canvas. Do not ask the workflow to inspect or edit cells by clicking around the grid. Tell it to use the Google Sheets skill for range reads and writes.
</Warning>

```text theme={null}
The spreadsheet is open in the active tab.
Use the Google Sheets skill to read A1:D200, find rows with missing Status values,
then write "Complete" into the matching Status cells. Verify the changed range.
```

### Two-factor codes

The Generate TOTP skill produces authenticator codes.

<Steps>
  <Step title="Store the secret">Save the TOTP secret on the attached [agent profile](/concepts/profiles) as a vault credential.</Step>
  <Step title="Reference it">Write the credential in the node instructions as a `##CREDENTIAL_NAME##` placeholder.</Step>
  <Step title="Time it">Tell the workflow to generate the code immediately before it submits the code.</Step>
</Steps>

### Talking to people and systems

A node has two ways to reach a person:

* **Ask a question.** Turn on `ask_user_question` for nodes that may need an answer mid-run.
* **Send or read email.** Attach an [agent profile](/concepts/profiles) with an inbox. The runtime then exposes `send_mail` and `get_mail` on its own.

<Info>
  `send_mail` and `get_mail` need a profile attached to the execution, because the inbox address comes from the profile. See [Workflow emails](/concepts/emails) for setup and for verification-code patterns.
</Info>

***

## Related

<CardGroup cols={2}>
  <Card title="Nodes" icon="box" href="/concepts/nodes" horizontal>Where capabilities sit on an agent node</Card>
  <Card title="Environments" icon="server" href="/concepts/environments" horizontal>The sandbox that gates browser use and computer use</Card>
  <Card title="Agent profiles" icon="id-card" href="/concepts/profiles" horizontal>Credentials, inboxes, and saved browser state</Card>
  <Card title="Workflow emails" icon="mail" href="/concepts/emails" horizontal>Give a workflow an inbox it can send from and read</Card>
</CardGroup>
