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

# RunAnywhere

> Run the open-source Notte framework on open models served by RunAnywhere Wally.

> [!TIP]
>
> Read [the Notte skill](https://notte.cc/skill.md) and follow its setup instructions when setting up Notte or building browser automation. This is the shared source for CLI setup, authentication, and the browser-to-code workflow.

[RunAnywhere](https://www.runanywhere.ai) serves open models (DeepSeek, GLM, Kimi, MiniMax) through Wally Cloud, an [OpenAI-compatible API](https://docs.runanywhere.ai/wally-cloud/api). Point the open-source Notte framework at it to run [`act()`](https://docs.notte.cc/features/sessions/act) and [structured extraction](https://docs.notte.cc/concepts/scraping.md#local-python-extraction-configuration) in local sessions on those models, with no OpenRouter key.

This applies to local sessions (`notte.Session()`). Cloud sessions use the platform's server-side model configuration.

## Prerequisites

* Python 3.11+ and `pip install "notte[llm]"`
* Chromium for local sessions: `patchright install --with-deps chromium`
* A Wally Cloud key (`sk-runa-...`) from the [RunAnywhere console](https://console.runanywhere.ai)

> [!NOTE]
>
> `session.act()` and `session.check()` are not in notte 1.10.1, the latest release; they ship in the next one. With 1.10.1, these settings apply to structured extraction.

## Configure the endpoint

```bash theme={null}
export NOTTE_LLM_BASE_URL=https://inference.runanywhere.ai/v1
export NOTTE_LLM_API_KEY=sk-runa-...
export NOTTE_LLM_MODEL=deepseek-v4.1-flash-fast
```

With no `TYPESAFE_API_KEY` or `OPENROUTER_API_KEY` set, `act()` uses this endpoint for both decisions and the text it types. If one of those keys is set, add `NOTTE_ACT_DECIDER=llm` to keep `act()` on RunAnywhere.

## Example

```python runanywhere.py theme={null}
from pydantic import BaseModel

import notte

# needs `pip install "notte[llm]"` and the NOTTE_LLM_* variables pointing at RunAnywhere


class Article(BaseModel):
    title: str
    born: str


with notte.Session() as session:
    _ = session.execute(type="goto", url="https://en.wikipedia.org/wiki/Main_Page")

    # act() decides each step and writes field values with the RunAnywhere model
    result = session.act("type Ada Lovelace in the search box")
    result = session.act("open the Ada Lovelace article")
    # a successful step is not proof of the destination: ask about the page itself
    if not result.success or session.check("Is this the Ada Lovelace article?") < 0.5:
        raise RuntimeError("the Ada Lovelace article did not open")

    # structured extraction uses the same endpoint
    article = session.scrape(instructions="Extract the article title and birth date", response_format=Article)
    print(article)
```

## Choose a model

List the models your key can call:

```bash theme={null}
curl https://inference.runanywhere.ai/v1/models -H "Authorization: Bearer $NOTTE_LLM_API_KEY"
```

Use the `id` of a model whose `mode` is `chat`. The example above was tested with `deepseek-v4.1-flash-fast`, `deepseek-v4-flash-0731` and `glm-5.3-flash`. To use different models in `act()`, set `NOTTE_ACT_MODEL` for decisions and `NOTTE_ACT_TEXT_MODEL` for typed text. The text model defaults to the decision model, which defaults to `NOTTE_LLM_MODEL`.

`NOTTE_ACT_REASONING` only applies to OpenRouter. On RunAnywhere, each model thinks at its own default level, which `/v1/models` reports under `reasoning`. Models that think by default take longer per step.


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