Practical setup tips, performance observations, and gotchas from running a self-hosted AI agent runtime on a Jetson Orin Nano (8 GB) in production-like conditions.
The Jetson Orin Nano is an odd duck: ARM64, 7–8 GB RAM shared between CPU/GPU, no x86 emulation shortcuts, and a Linux kernel that's just different enough to trip you up. But it's also:
Cheap to run(~15 W under load)** Silent**(fan-cooled, no coil whine)** Persistent**(NVMe boot, can run 24/7)** Surprisingly capable**for an edge device running a full agent stack
If you want a dedicated automation box that sits on a shelf and runs Hermes Agent around the clock, this is a solid choice.
| Item | Value |
|---|---|
| SoC | |
| NVIDIA Orin Nano (8 GB unified memory) | |
| CPU | |
| 6× Cortex-A78AE @ up to 1.5 GHz | |
| RAM | |
| 7.4 GB (shared GPU/CPU via unified memory) | |
| Storage | |
| NVMe SSD (boot + agent data) | |
| OS | |
| Ubuntu 22.04 aarch64 (JetPack 6.2 / R36) | |
| Kernel | |
| 5.15.185-tegra | |
| Agent | |
| Hermes Agent v2026.5.16 | |
| Power mode | |
| MAXN_SUPER (default) |
Hermes Agent needs Chromium for browser automation and a few Python extras. The JetPack repos have everything:
sudo apt install chromium-browser
sudo apt install libgstreamer1.0-0 libgstreamer-plugins-base1.0-0 \
gstreamer1.0-plugins-good gstreamer1.0-plugins-bad \
libva-drm2
sudo apt install python3-numpy
Gotcha: Don't install python3-pip
's Chromium via playwright install
— it downloads x86 binaries that won't run. Use the system chromium-browser
and point Playwright at it with PLAYWRIGHT_BROWSERS_PATH=/usr/bin chromium-browser
.
The Orin Nano has several power modes exposed via nvpmodel
. The default is MAXN_SUPER
(all 6 cores, max clocks), but you can trade performance for thermals:
sudo nvpmodel -q
sudo nvpmodel -m MODE_ID
For an agent running batch jobs overnight, 8W_4CORE
saves power without seriously hurting response time. Switch to MAXN_SUPER
during interactive sessions.
Pro tip: Add sudo nvpmodel -m 1
to your cron agent's startup script so the box drops to low power between scheduled runs.
With 7.4 GB total and ~2 GB eaten by the OS, you have about 5 GB for the agent + browser + tools. This fits comfortably for:
- Hermes Agent runtime (~200 MB RSS)
- Chromium with 2–3 tabs (~800 MB RSS)
- Python tool processes (~100–300 MB each)
- Local inference? Not really — LLMs need more VRAM. Hermes Agent uses a remote API.
Enable swap if you haven't:
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
The NVMe-backed swap makes it usable (not SD-card slow), but avoid depending on it for hot paths.
Hermes Agent has a built-in cron system. Here's the pattern we use for scheduled technical content:
cron:
jobs:
- expression: "0 6 * * *"
task: "morning_briefing.md"
delivery:
platform: telegram
timeout_minutes: 30
- expression: "30 */4 * * *"
task: "web_monitor.md"
delivery:
platform: telegram
timeout_minutes: 15
The agent's cron scheduler runs as a background daemon (hermes cron start
). Check job status with:
hermes cron list
The Orin Nano's GPU isn't great for WebGL/Canvas-heavy pages — screenshots work fine, but don't expect smooth 60 FPS page renders. That's fine for:
- ✅ Taking page screenshots for QA/briefing
- ✅ Filling forms and clicking buttons
- ✅ Extracting text content and DOM state
- ✅ Login flows with cookies stored locally
- ❌ Video-heavy sites at full resolution
- ❌ CAPTCHA-reliant flows (you'll get flagged anyway on headless)
Use --disable-gpu
and --disable-software-rasterizer
flags in Playwright to avoid GPU-related crashes:
browser = await playwright.chromium.launch(
headless=True,
args=[
"--disable-gpu",
"--disable-software-rasterizer",
"--no-sandbox",
]
)
| Path | Use | Recommended |
|---|---|---|
/ |
||
| OS + snaps | 32 GB | |
/home |
||
| Agent data, models, repos | ≥ 128 GB | |
~/.hermes/ |
||
| Hermes Agent home (config, logs, sessions) | Auto | |
~/.hermes/logs/ |
||
| Agent logs (auto-rotate) | Monitor size | |
~/.hermes/sandboxes/ |
||
| Ephemeral sandbox directories | On tmpfs if RAM permits |
Move the sandbox to tmpfs if you have spare RAM:
tmpfs /home/clawbox/.hermes/sandboxes tmpfs defaults,noatime,nosuid,size=512M 0 0
This speeds up ephemeral file ops and reduces NVMe wear.
The built-in Realtek WiFi (RTL8822CE) works but is mediocre at range. For a 24/7 agent:
Use Ethernet if at all possible (avoid driver quirks and reconnects)WiFi 5 GHz if Ethernet isn't available (the 2.4 GHz band has more interference)- Add a
wlan0
reconnect cron if using WiFi:
* * * * * root ping -c1 -W2 8.8.8.8 >/dev/null || iwconfig wlan0 power off
Hermes Agent runs fine on Orin Nano — the constraints are memory and thermal, not CPU. The 6 Cortex-A78AE cores handle model API calls, tool execution, and file operations with room to spare. The GPU is a non-factor for this use case unless you're doing on-device inference (which you probably shouldn't on 8 GB anyway).
The biggest bottleneck is the agent's API round-trip, not the hardware. Running a local LLM on this box is impractical — the unified memory is too small. But as a remote-API agent runner, it's excellent.
Daily operation is dead simple: the box sits on a shelf, boots Ubuntu, launches Hermes Agent's cron daemon, and executes scheduled tasks. We SSH in maybe once a week for maintenance.
ClawBox— A turnkey self-hosted AI agent appliance based on this exact Jetson Orin Nano + Hermes Agent stack, in a compact enclosure ready to ship to your desk.Hermes Agent— The open-source AI agent runtime with MCP, browser tools, kanban, cron, and gateway integrations.