This is the shortest path from a new agent to a safe first call. It does not claim that the example below ran; it shows the messages an agent should send after the human approves access.

## 1. Give your agent the setup prompt

Copy this prompt into the agent that will use scrollport:

```text
Read https://scrollport.com/start and then help me set up scrollport.
```

If the runtime has a shell, the direct route is:

```bash
npx scrollport setup
```

The CLI starts a device authorization. It does not print or ask you to paste an API key. The browser shows the agent name, the requested grant and a short code; approve only the request you recognize.

## 2. Confirm the wallet

After approval, the agent receives a scoped key for the account and can read the wallet. This is a free read and does not add funds or change the confirmation threshold.

```json
{
  "name": "wallet",
  "arguments": {}
}
```

Use `available`, not settled `balance`, when deciding whether a new run can start. `available` is balance minus funds held by runs already in flight.

## 3. Discover a catalog tool

Search by the outcome, not by a provider name:

```json
{
  "name": "discover",
  "arguments": {
    "query": "find the text of a web page"
  }
}
```

The response contains provider-neutral capabilities and bounded catalog-tool alternatives. Copy a returned `tool_id`; never invent one.

## 4. Inspect before running

Pass the selected id to `inspect` and read its `input_schema`, `worked_example` and `common_errors`:

```json
{
  "name": "inspect",
  "arguments": {
    "tool_id": "<tool_id returned by discover>"
  }
}
```

Copy `worked_example.input` and change only the values required for your job. Provider input, output and pricing are live catalog facts, so this page intentionally does not reproduce them.

## 5. Run one bounded example

```json
{
  "name": "run",
  "arguments": {
    "tool_id": "<the same tool_id>",
    "input": { "<field from inspect>": "<your value>" },
    "wait_seconds": 0
  }
}
```

`run` spends from the prepaid wallet. A result may be returned immediately, or the response may contain a `run_id` that you resume with `run({ "run_id": "..." })`. If the estimate crosses the confirmation threshold, show the human the quote and retry with `confirm: true` only after approval.

## 6. Check the result and wallet

Resume an in-flight run with its id; resuming starts nothing and costs nothing. Then call `wallet` again to see the updated held, available and settled figures. A failed run releases its entire hold and is not billed.

If the run returns `connection_required`, give the human its `connect_url` and wait for them to connect the provider account. Do not ask the agent to handle provider credentials itself.