Skip to content

Install teaport

This page walks you through installing teaport on a Jetson Orin Nano Dev Kit (8 GB). When you finish, the device answers you from the browser of a phone or a laptop. Allow 30 to 45 minutes. Downloading the engine and its models, about 15 GB, takes most of that time.

  • A Jetson Orin Nano, NX, or AGX, flashed with JetPack 7.2. JetPack 7.2 ships Linux for Tegra (L4T) R39.2 with CUDA 13.2; the installer accepts L4T R38 or R39. The Orin Nano with 8 GB of memory is the reference device.
  • SSH access or a screen, and a home network.
  • An agent: OpenClaw on the device, or NemoClaw, which is NVIDIA’s OpenClaw package. The agent gives you the browser interface, the Talk session, and the tools. You can skip the agent, but then nothing can talk to the device. See Install an agent.
  • Your own large language model (LLM). Use a cloud key from OpenRouter, Groq, or Cerebras, or a local OpenAI-compatible server. See Configuration.
  • A phone or laptop with a browser on the same network. Its microphone and speaker carry the audio. Nothing to plug in: the device is already powered and on the network.
  • About 15 GB of free disk space for the engine and its models. The installer warns when it finds less.

This step is necessary. The engine ships for JetPack 7.2 on L4T R38 or R39 with CUDA 13. On any other release, the installer stops.

Use NVIDIA SDK Manager or the Jetson Linux flashing tools, and follow NVIDIA’s flashing guide. Teaspoon AI does not host a copy of JetPack. Do not use the JetPack 7.2 ISO: NVIDIA records a known problem where the ISO does not make the 25 W and MAXN SUPER power modes available.

Set the power mode and the swap file, and stop the desktop. See Prepare the Jetson. This step is optional but recommended.

Choose one of the two agents. If both are present, the installer uses NemoClaw.

OpenClaw runs on Node.js. JetPack 7.2 does not include Node.js. Install Node.js 24 and the OpenClaw release this teaport release is tested with, 2026.9.7:

Terminal window
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g openclaw@2026.9.7

The installer warns when the OpenClaw on the device is another release.

Give OpenClaw a minimal configuration and start its gateway:

Terminal window
cat > /tmp/oc-init.json <<'JSON'
{ "gateway": { "mode": "local", "bind": "loopback", "port": 18789 } }
JSON
openclaw config patch --file /tmp/oc-init.json
openclaw gateway install

Check the gateway:

Terminal window
openclaw gateway status

The line Runtime: must say running, and Connectivity probe: must say ok. The gateway listens on 127.0.0.1:18789; the installer fronts it with Caddy.

NemoClaw is NVIDIA’s installer. It runs OpenClaw inside a container. Run it in your own terminal and give your own consent:

Terminal window
bash <(curl -fsSL https://www.nvidia.com/nemoclaw.sh)

Run NemoClaw as your own user. Do not use sudo. The installer looks for ~/.nemoclaw/sandboxes.json in your home folder. If NemoClaw installs into another user’s home folder, the installer does not find it.

You can skip both. The installer then finishes in voice-only mode. To add an agent later, install OpenClaw or NemoClaw and run the installer again.

On the Jetson, run:

Terminal window
bash <(curl -fsSL https://get.teaspoon.tech/teaport)

The address serves a small bootstrap script. The bootstrap clones the teaport repository into a temporary directory and runs the installer from that checkout. The installer reads the release manifest and downloads the engine and the models that it names.

The installer asks you:

  1. The engine license. Press Enter to read it, then type accept.
  2. Your LLM endpoint, model, and API key. The model question offers gpt-oss-120b as the default. The key can stay empty for a keyless local server.
  3. Your Discord server and user IDs, and the bot token. The installer asks these only when you set TEAPORT_ENABLE_BRIDGE=1 to add the Discord bridge.

For OpenRouter, the base URL is https://openrouter.ai/api/v1.

Every question has an environment variable, so you can also run the installer unattended: TEAPORT_ACCEPT_EULA=1 accepts the license, and TEAPORT_LLM_BASE_URL, TEAPORT_LLM_MODEL, and TEAPORT_LLM_API_KEY preset the LLM answers. The flags and variables are in Installer reference.

You can run the installer again at any time. A re-run repairs the existing installation; it does not create a second one. It keeps settings that you added to /etc/teaport/brain.env yourself.

The installer does these tasks:

  • It downloads the engine, release 1.6, with its models and the pronunciation dictionary into /opt/teaport.
  • It builds the brain in a Python 3.12 environment.
  • It installs the teaport command and the configuration helper.
  • It installs the plugin into your agent and connects the agent to the brain.
  • It installs the Caddy reverse proxy and Avahi, and serves the browser page at https://teaport.local. If another device on the network already uses that name, the installer names this one teaport-ab12.local instead, where ab12 is the end of its Wi-Fi address, the same name as its Wi-Fi setup network.
  • It starts the services and checks the installation.

teaport has three optional components. The installer sets up none of them by default:

  • Phone calls. teaport can take calls on a phone line over SIP (Session Initiation Protocol). Phone calls are off by default; teaport sip configure turns them on. See Set up phone calls.
  • The Discord bridge. The bridge joins a Discord voice channel and follows one user into the conversation. Turn it on with TEAPORT_ENABLE_BRIDGE=1 when you install. See Set up the Discord bridge.
  • A microphone on the device. A ReSpeaker XVF3800 microphone array on the Jetson hears and speaks without a phone. Turn it on with TEAPORT_ENABLE_LOCAL_AUDIO=1. See Use a microphone on the device.
  1. On the Jetson, run this command:

    Terminal window
    teaport status

    All three services show active, with the engine and brain ports and the memory use.

  2. Run the health check:

    Terminal window
    teaport doctor

    The doctor checks the install root, the engine and its models, the brain, the LLM configuration, the services, and the ports. Every check prints ok, or a warning that says what to fix.

  3. Optional: to confirm that speech recognition uses the fast path, read the engine’s first messages:

    Terminal window
    sudo journalctl -u teaport-engine | grep -i marlin

    You must see Detected Marlin INT4 model (single-file format). Any other message means the engine uses a slower path.

If a check fails, see Troubleshooting.

The installer printed a web address at the end, similar to the following:

browser: open https://teaport.local/#token=a-long-token from a LAN device (accept the one-time cert).

Open that address on the phone or laptop. Accept the certificate warning once: the device signs its own certificate, and the browser needs HTTPS before it allows the microphone.

Start a Talk session in the page and speak. The device answers through the phone or the laptop’s microphone and speaker.

You can add a browser, or the OpenClaw app on a phone, to the device without the token or a terminal.

  1. In a conversation with the device, say “add my laptop” or “connect my phone”. The request works in the room and in a Talk session. It does not work on a phone call.
  2. The device shows a QR code on its screen. Point the laptop’s or the phone’s camera at the screen, and open the link.
  3. The page in the browser offers two choices. Nothing is used until you press one.
    • Open the dashboard here opens the dashboard in this browser and pairs it.
    • Use the OpenClaw app shows a setup code for the app. Press Copy code, open the OpenClaw app, open Add Gateway from its menu (or Settings, then Gateway, if the app already has a gateway), paste the code, and connect. Paste it within a few minutes: it works one time.
  4. After you choose, the screen shows Finish on your device. When the new device is connected, the screen shows Paired, and the device says so. The app gets limited access: everything except the administrator’s settings.

The code stays on the screen when the conversation that asked for it ends: you can ask from the OpenClaw app or a Talk page on the same phone, then switch to the camera to scan it. Say “never mind” to take it down.

The code works one time, and for 5 minutes at most. If you need a new code, ask again: the screen shows a new code, the old one stops working, and a device that is still connecting with the old code is still recognized. Either choice can take a few seconds to start.

The link opens over HTTPS. A phone that has not trusted the device’s certificate yet must do that first: see The phone does not pair, steps 1 to 3. The OpenClaw app always needs that; a browser can sometimes go past the warning. Pressing a choice uses the code up even when the dashboard or the app then does not connect, so after you trust the certificate, ask the device for a new code.

The certificate is named for the device, for example Teaport ab12 Local Authority, so a phone that trusts two devices lists two entries you can tell apart. The page in the browser names it and has the steps for an iPhone, Android, Windows, and a Mac. If the installer was given your own certificate (see Use your own certificate), there is nothing to trust, and the page leaves the step out.

The installation is done. From here: