Inspiration
I run two small businesses: a 3D-printing shop and a website studio. Most of my day goes on the same loop. A customer messages, I answer the same questions, they haggle, I check my prices, I forget a follow-up. Meanwhile my todos and notes are scattered across apps.
The AI assistants that could help all want the same thing: my whole life in someone else's cloud, and my API keys inside an agent that a clever customer message could trick. I wanted a partner I'd actually trust with my customers and my prices. It should live on hardware I own, reach only the services I pick, and be physically unable to give a customer a price I wouldn't.
What it does
Max is a private AI business partner that runs 24/7 on your own server. You talk to it on Telegram, by voice on your PC, or it calls your phone.
- Business desk. A customer message comes in. Max works out which of your businesses it's for, answers from that business's profile, haggles in steps and closes the deal by itself. But the model never decides the price: a script (
deal_check.sh) checks every deal first. It only closes if the price is at or above your floor and the quantity and date fit your policy. Offers up to 10% under the floor come to you. Bigger lowballs get countered up to 3 times, then politely declined. - It calls you. When a deal needs you, the Android app rings like a phone call. You answer by voice ("counter at twenty-seven and a half") and Max carries on.
- WhatsApp front desk. WhatsApp Web runs on the server. Customers talk to a separate, tool-less AI, while code makes every price decision and checks each reply before it goes out.
- Runs your computers. "Play lofi on YouTube", "how much disk is free on the server?", "what's this error on my screen?"
- Daily life. Quick capture (
todo: pay the supplier friday), calendar, research with sources, and a 06:30 morning briefing with weather, schedule, overdue todos and follow-ups. - Desktop HUD. An inbox of one-tap decision cards (Accept / Counter / Decline), leads, calendar and a voice mode with local speech recognition.
How we built it
- NVIDIA Nemotron (
nemotron-3.5-super-vl-120b-a12bon build.nvidia.com) is the brain. The API is OpenAI-compatible, so local Nemotron Nano on Ollama works as a fully offline fallback. - Hermes Agent provides the agent loop, persistent memory, skills (plain Markdown
SKILL.mdfiles), the cron scheduler and the Telegram gateway. - OpenShell is the sandbox. It enforces per-host, per-method, per-path egress rules, and keys live in the gateway and are swapped in at egress, so the agent only ever sees placeholders.
- NemoClaw (NemoHermes) handles install, onboarding, policies, channels and recovery.
- Around that: bash scripts inside the sandbox (deal gate, leads, calendar, invoices as PDFs), a Python front desk, Node services on the server (WhatsApp relay via Playwright, PC control, phone API), an Electron desktop app with local Whisper, and a Kotlin Android app connected over Tailscale with push notifications.
- It's not tied to me. Everything personal lives in a git-ignored
max.configandprivate/business/.bin/installsets up a fresh Linux server in one re-runnable step, anddocs/SETUP.mdwalks any business owner through it in about 45 minutes, no programming needed.
It has run 24/7 on my 3.7 GB home server since 17 Oct 2026, next to my live web store. The sandbox is capped at 1 CPU / 1 GiB.
Challenges we ran into
- NemoClaw integration gaps.
- Hermes ignored
SOUL.mdand custom skills in gateway sessions, because the agent home resolves to~/.hermes/runtime/. - The rebuild preflight rejects native NVIDIA endpoints.
- A
rebuildonce destroyed my working sandbox. On rootless Podman the restored0700permissions block the recreate, so the old sandbox is gone and the new one never comes up. - Each of these has a workaround in
bin/fixup, documented in the README.
- Hermes ignored
- Speed vs. honesty. Turning Nemotron's reasoning off cut replies from ~90 s to 21 s, but Max started inventing prices and skipping rules. I kept the reasoning on and moved every hard rule into code.
- Small hardware. On 3.7 GB without swap, the server froze during image builds and Telegram replies silently disappeared. Now swap is mandatory below 8 GB.
- Sandbox quirks. The clock is fixed to UTC, Telegram egress only works from Python, and unknown keys in
.envmake NemoClaw refuse to start. Each needed its own fix. - Keeping secrets out of everything. Every key is typed at a hidden prompt and handed straight to the gateway. None are in the repo, the config or the sandbox.
Accomplishments that we're proud of
- A customer can't talk Max below my floor, because the limit isn't a prompt, it's a script.
- A prompt injection can't leak a key the agent has never seen.
- It's genuinely always on, on a cheap home box, and anyone can install their own copy.
What we learned
- Put the guarantees in code and let the model do the talking. LLMs are great negotiators and terrible enforcers.
- Sandboxing changes how you design an agent. Narrow egress rules and gateway-held keys make privacy an architectural property, not a promise.
- An "always-on" assistant needs boring infrastructure (watchdogs, swap, restart timers) as much as it needs a good model.
What's next
- Gmail and Google Calendar through a separate business account.
- A weekly business review and more channels.
- One-click installers for non-technical owners.
Log in or sign up for Devpost to join the conversation.