{"kind":"doc","doc":{"title":"Intern","section":{"slug":"posts","name":"Posts"},"rkey":"1781835006151-intern","cid":"bafkreidyp4qn2bhmlrb6ikifu3qhsvpedxarao2mmit5gjatu7qrrq56s4","renderKey":"bafkreidyp4qn2bhmlrb6ikifu3qhsvpedxarao2mmit5gjatu7qrrq56s4@2026-06-19T02:10:06Z@2026-10-20T04:18:20Z@Posts|","href":"/posts/1781835006151-intern","publishedAt":"2026-06-19T02:10:06Z","updatedAt":"2026-10-20T04:18:20Z","tags":["raspberry-pi","hardware","ai-agents","self-hosting","side-projects","hermes"],"description":"The Autonomous Intern ships as a Raspberry Pi 5 in a desk-toy case running a stack I didn't pick. I flashed it to Debian Trixie, swapped the whole thing for the Hermes agent with its own built-in memory, and folded it all into one setup script.","readingMinutes":4,"markdown":"![](blob://bafkreieaq4ip4vt6c5rjptbsoiy7ygg3r7sv3oq7n7rrmm6v7cl74wklaq)\n\nAh, the Autonomous Intern. A glorious little housing meant to sit on your desk with its LEDs flashing, letting you know it's hard at work on whatever you threw at the agent it's running.\n\nOut of the box, the Intern is a Raspberry Pi 5 with 4 GB of RAM and a 64 GB SD card. It ships with a factory install (the docs imply Debian Bookworm), and when you plug it in, it boots into access point mode. You connect to its wifi network (`Intern-XXXX`) and set it up from there.\n\nYou can also pop the case open by removing four screws, minding the wires for the LED array. With some tweezers you can pop the SD card and flash it with whatever you want. It's a Pi! Have some fun with it.\n\nWell, I had some fun with it. I reworked the [setup script](https://cdn.autonomous.ai/intern/setup.sh) Autonomous provides with some defaults that I preferred:\n\n- Debian Trixie instead of Bookworm\n- Caddy instead of nginx\n- Hermes instead of OpenClaw (the stock default)\n- Supermemory dropped for the default Hermes memory ([recommended by Teknium, who leads Hermes](https://x.com/Teknium/status/2067030389538083183))\n\n## The agent\n\nThe brain is now [Hermes](https://github.com/NousResearch/hermes-agent), the agent from Nous Research. It runs as a gateway service on the Pi and talks over whatever channels you wire up. Bring your own model (I point it at OpenRouter) and pick it in a little web dashboard. Caddy sits out front, serving the setup page and proxying the backend. Nothing fancy, just the parts I trust doing the jobs I want.\n\n## Memory\n\nThis is the part I went back and forth on. I started by self-hosting [Honcho](https://github.com/plastic-labs/honcho) as a memory backend: Postgres, pgvector, Redis, a deriver worker, the whole Docker stack. It worked, and it was also a fragile, RAM-hungry pile of moving parts for what it actually bought me on a 4 GB Pi.\n\nSo I ripped it out. The default Hermes memory is just a small `MEMORY.md` the agent keeps current, plus skills it writes for itself. No vector database, no embeddings bill, and a lot less to run.\n\n## Reaching it\n\nThe Intern lives on my desk, but I don't want to be at my desk to use it. [Tailscale](https://tailscale.com) handles that. The dashboard is published to my tailnet only, SSH goes over the tailnet, and a firewall locks the rest down so nothing interesting is exposed to the local network. From my phone or my laptop, anywhere, it's just there.\n\n## The LEDs\n\nThose flashing LEDs aren't just for show. The backend drives the ring to track what the agent is doing. On my build, getting it to follow Hermes took a small bridge that feeds Hermes' activity to the backend's LED API, so the ring breathes one color when it's idle, another while it's thinking, another while it's running a tool.\n\n## The Rabbit R1\n\nThere's one more goodie in the script: a shim that lets you pair a [Rabbit R1](https://www.rabbit.tech) to the Intern using the R1's built-in OpenClaw pairing. Scan a QR and the R1 becomes a pocket remote for the agent. I wrote that part up on its own: [Replacing Rabbit's Brain](https://iammatthias.com/posts/1775069974473-replacing-rabbit-s-brain-connecting-a-rabbit-r1-to-hermes).\n\n## One script\n\nIt's all one script. Flash a Raspberry Pi 5 with Debian Trixie, run it, and you get the whole stack: agent, web layer, memory, remote access, LEDs, and the optional R1 channel. It's idempotent, so you can re-run it without thinking too hard, and it works out on its own whether to run wifi onboarding or use a connection you've already got.\n\nRepo's here: [github.com/iammatthias/intern](https://github.com/iammatthias/intern).\n\n```mermaid\nflowchart LR\n  accTitle: What runs on the Intern\n  accDescr: A phone or laptop reaches the Intern over Tailscale through Caddy, the Hermes agent answers using a model from OpenRouter and its own memory file, the LED ring shows what the agent is doing, and a Rabbit R1 can talk to the same agent.\n  P[Phone or laptop] -->|tailnet| T[Tailscale]\n  T --> C[Caddy]\n  C --> H[Hermes agent]\n  R[Rabbit R1] --> H\n  H --> M[OpenRouter model]\n  H --> N[Memory file]\n  H -->|activity| L[LED ring]\n```\nEverything lives on the Pi itself, and the only way in from outside the desk is over my own tailnet.","media":{"bafkreieaq4ip4vt6c5rjptbsoiy7ygg3r7sv3oq7n7rrmm6v7cl74wklaq":{"mime":"image/webp","width":1920,"height":1080,"dominantColor":"#101111","blurhash":"L64B|DV@4mxuyDf6I9kCR,oLoIWB","thumbCid":"bafkreiatlsgbz2sty6yyhbblqf5wxnng4db6it4w5c6mk2upp6pms77w3q"}},"series":{},"related":[{"title":"Adventures in Machine Vision","href":"/posts/1780360240000-adventures-in-machine-vision","section":"posts","description":"A Nat Friedman anecdote about an AI watching him drink water sent me digging for a spare Raspberry Pi. Now a camera and a sensor HAT watch my desk, a self-inflicted panopticon that logs who walks by and what the room is doing.","publishedAt":"2026-06-02T00:30:40Z"},{"title":"Intern","href":"/experiments/1789407081000-intern","section":"experiments","description":"Bootstrap for the Autonomous Intern, an agentic Raspberry Pi project running Hermes with Caddy, Tailscale, and a HAL-driven LED ring, plus optional Rabbit R1 support and a single idempotent setup script.","publishedAt":"2026-09-20T05:08:59Z"},{"title":"Text your tools","href":"/posts/1787671012000-text-your-tools","section":"posts","description":"Wiring a Farfield homelab up to iMessage with Photon and OpenPoke, so slash commands reach personal apps and talking to your agent feels like texting a friend instead of learning another tool.","publishedAt":"2026-08-25T15:16:52Z"},{"title":"Now Playing","href":"/posts/1784736733544-now-playing","section":"posts","description":"Putting my Apple Music \"Now Playing\" on display with a Raspberry Pi and a 64x64 LED matrix.","publishedAt":"2026-07-25T17:18:48Z"},{"title":"Replacing a Rabbit's Brain: Connecting the R1 to Hermes","href":"/posts/1775069974473-replacing-rabbit-s-brain-connecting-a-rabbit-r1-to-hermes","section":"posts","description":"I replaced the OpenClaw agent on my R1 with Hermes, running locally on a MacBook Pro.","publishedAt":"2026-04-01T11:59:00Z"},{"title":"Single-origin deployment with bhvr","href":"/posts/1747182886660-single-origin-deployment-with-bhvr","section":"posts","description":"Fried my Pi using a 10V solar panel without a buck converter.","publishedAt":"2025-05-13T17:34:00Z"}],"prev":{"title":"Toy GPTs","href":"/posts/1780416704000-toy-gpts"},"next":{"title":"Post-UI","href":"/posts/1784126858578-post-ui"}}}