Homelab & mini PCs
This is the deployment target Nouride was designed around. A Pi 4 with 2 GB of RAM comfortably runs a handful of agents.
What works
| Target | Verdict |
|---|---|
| Raspberry Pi 4 / 5 (1 GB+) | Comfortable. linux-arm64. A Pi 5 is more than this needs |
| Orange Pi 5 / 5 Plus | Same. Armbian arm64 |
| Mini PC / NUC / old laptop | Overkill, and the right choice anyway if the agent does infrastructure work |
| Any 512 MB VPS | Fine, including the dashboard. The cheapest tier at most providers |
| NAS with Docker (Synology, QNAP, Unraid) | Fine. Check uname -m — several are arm64 |
| Proxmox LXC | Fine, with one caveat about memory limits below |
| Alpine anything | Needs the -musl build and apk add libstdc++ |
The one thing to check first
Your OS must be 64-bit.
uname -m # aarch64 → good. armv7l → 32-bit, not supportedThere is no 32-bit ARM build, and the installer stops rather than downloading something that will not
run. If you see armv7l, reinstall with Raspberry Pi OS (64-bit), Ubuntu Server arm64, or Armbian
arm64. A Pi 3 or newer and any modern Orange Pi can all run 64-bit — the 32-bit image is just still a
common default.
Install
Exactly the same command as any other Linux box:
curl -fsSL https://get.nouride.com/install.sh | sudo shsystemd supervises it, it comes back after a reboot, and re-running the script upgrades it.
What it will actually use
| Idle, 1 agent | ~65–75 MB resident |
| Boot peak | roughly double the resting figure |
| Each extra agent | ~0.4 MB |
| CPU at idle | 0.7% of one core |
| Disk | ~95 MB installed |
The floor is 64 MB — verified — but do not deploy at the floor: that is the number that proves the daemon is small, not a recommendation. At 64 MB there is nothing left for a turn.
Every measurement, with its provenance →
MemoryHigh is silently inert on Raspberry Pi OS
The generated systemd unit carries a soft memory ceiling at 80% of what the machine reports. Raspberry Pi OS ships with the memory cgroup controller disabled, so systemd accepts the setting and enforces nothing:
systemctl show nouride -p MemoryCurrent --value # `[not set]` means it is inertcat /sys/fs/cgroup/cgroup.controllers # no `memory` in the listFix it by adding cgroup_enable=memory cgroup_memory=1 to /boot/firmware/cmdline.txt and
rebooting.
Inside an LXC
Two things to know.
Percentages resolve against the host. This is why the unit writes MemoryHigh as an absolute
number computed at install time: on a 2 GB container of a 62 GB node, 80% came out as 49.8 GB.
The typecheck used to take the container down, if you run the test suite on the box. It sizes its
pool from the machine now and prints the width it chose; NOURIDE_TYPECHECK_JOBS=1 forces it lower
still.
The daemon is often not the biggest thing in its own cgroup
Worth knowing before you size a small device. Measured on a live install:
| the daemon | 73.3 MB |
wa-bridge | 67.8 MB |
| one Node-based MCP server | 91.5 MB |
On a 256 MB device the daemon and the bridge fit. Adding one Node MCP server does not.
One way to buy headroom back:
--bundle-wa-bridgeputs the bridge in-process and saves ~40 MB — one process instead of two. It makes the binary GPL-3.0.
Keeping the work off the SD card
An agent’s output is the only part of the install that grows without bound, and an SD card is the part of a Pi that fails.
[daemon]workspace_dir = "/mnt/ssd/nouride-workspace"The three paths are separate config keys for exactly this. Nothing else has to move.
What to expect from the model, not the machine
None of the above depends on which model an agent uses. Providers are remote endpoints, so RAM is unaffected — a Pi calling Claude and a 64-core server calling Claude use the same amount of memory and wait the same amount of time.
What a small box does affect is exec: a build the agent kicks off runs on this machine. That is
what the 512 MB recommendation is really for.