Een agent-runtime die van buitenaf niet bestaat
Hermes is de plek waar het werk gebeurt: lezen, redeneren, code schrijven, een browser besturen, collega-agents inschakelen. Hij draait native op een Mac Mini, bewust buiten de containerstack — en alles wat hij naar buiten doet loopt door één brug zonder publieke hostnaam.
De brug zonder voordeur
Hoe een Worker op de Cloudflare-edge een dienst op een Mac in een woonkamer bereikt — zonder DNS-record, zonder inkomende poort en zonder betaalde API-sleutel.
De proxy vertrouwt iedereen. Dus staat er iets vóór.
De modelproxy hangt per aanvraag de echte credential van het abonnement aan het verzoek en controleert het binnenkomende token niet inhoudelijk — precies zoals de documentatie het beschrijft: “use any bearer token in the client.” Dat is bruikbaar op localhost en onhoudbaar zodra er iets van buiten bij kan.
Alleen de proxy
- De modelproxy hangt zelf de echte credential aan elk verzoek
- Een binnenkomend bearer-token wordt niet inhoudelijk gecontroleerd
- Wie de hostnaam raadt, chat mee op kosten van het abonnement
- Geen spoor van wie het was: elk token ziet er hetzelfde uit
- De enige rem is dat niemand het adres kent — dat is geen beveiliging
Met de auth-gateway
- De aanvraag komt binnen op een auth-gateway vóór de proxy
- Een 64-byte gedeeld geheim wordt vergeleken met timingSafeEqual
- Klopt het niet, dan is er geen tweede kans en geen foutdetail
- De proxy is alleen bereikbaar op 127.0.0.1 — nooit van buiten
- En er is geen publieke hostnaam meer om te raden
De gateway is een kleine Node-server zonder dependencies die precies één ding doet: een gedeeld geheim vergelijken in constante tijd, en pas daarna doorlaten. Klein genoeg om in één keer te lezen — dat is het punt van een beveiligingslaag.
Wat er onder de motorkap zit
Native, niet in een container
Een agent die je infrastructuur beheert mag niet omvallen omdat de containerstack omvalt. Hermes draait als vier launchd-services met KeepAlive: valt er één om, dan herstart de host hem. Na een reboot komen ze alle vier terug zonder eerst het netwerk op te moeten.
Eén adres, 27 modellen
Al het modelverkeer gaat naar één lokale router, die kiest tussen 27 modellen en de aliassen r-cheap, r-reason en r-code. Daardoor landt elke call automatisch in de kostenledger — er is geen sluiproute langs de boekhouding.
Tot tien children tegelijk
De orkestrator splitst een opdracht op en laat subagents parallel werken: maximaal tien gelijktijdig, één niveau diep, met een harde iteratielimiet. Een subagent keurt zijn eigen werk niet goed.
Geheugen met houdbaarheidsdatum
Notities en een gebruikersprofiel in een lokale store, plus een curator die er wekelijks doorheen loopt: verouderd na 30 dagen, gearchiveerd na 90, altijd met vijf backups achter de hand. Geheugen dat niet opgeruimd wordt, wordt vanzelf onbetrouwbaar.
Bewijs per bewering
Een aparte bewijsdatabase legt vast waarop de agent zijn claims baseerde, en een verificatiestap dwingt af dat er gecontroleerd is voordat hij een taak afsluit. Verifiëren vóór je iets beweert staat niet in een handleiding maar in het startbestand dat hij elke sessie leest.
Gesprekken die niet vollopen
Boven een drempel wordt de context automatisch samengevat, met bescherming voor de eerste en de laatste berichten. Zo raakt een lange sessie niet halverwege zijn opdracht kwijt.
Agents die elkaar bellen
Hermes staat niet alleen. Via het agent-to-agent-protocol praat hij met drie andere runtimes, elk met een eigen token en een vooraf opgegeven lijst van wat die runtime kan.
nas-hermes
Synology NAS, via het LAN
terminal · research · mcp
champ
Lokaal én via het LAN
chat · coding · infra
claude
Lokale bridge
coding · research · terminal
Elke tegenpartij publiceert een agent-card op een vast adres, zodat de aanroeper weet wat hij mag verwachten voordat hij iets stuurt. Wat er over en weer gaat komt in een append-only auditbestand — dezelfde regel als bij Sentinel: wie iets doet, laat een spoor achter dat niet meer te wijzigen is.
Een agent met terminaltoegang is alleen bruikbaar als je weet waar hij stopt
- tirith
- Policy-engine die elke tool-aanroep vooraf beoordeelt, met een korte time-out zodat een trage check de agent niet vastzet.
- blast-radius-guard
- Schat de reikwijdte van een actie in en houdt te brede ingrepen tegen vóórdat ze worden uitgevoerd.
- command_allowlist
- Twaalf commando’s mogen zonder tussenkomst draaien. Al het andere valt onder het goedkeuringsregime.
- tool_loop_guardrails
- Eerst een waarschuwing, daarna een harde stop wanneer de agent in dezelfde lus blijft hangen.
- grok-quota-guard
- Bewaakt het verbruik op het abonnement, zodat een doorgedraaide sessie geen quotum leegtrekt.
- redact_secrets
- Filtert geheimen uit tool-uitvoer voordat ze in een transcript of een logregel belanden.
- allow_private_urls
- Staat uit: de agent haalt uit zichzelf geen interne netwerkadressen op.
- checkpoints
- Snapshots met retentiebeleid, plus een verplichte backup vóór elke update van de runtime zelf.
Hermes is niet Sentinel
Sentinel bewaakt de infrastructuur. Vier gescheiden lagen — ogen, brein, goedkeuring, handen — over 94 containers en 210 workflows, met één logboek dat niet te herschrijven is. Sentinel beslist óf er iets mag gebeuren.
Hermes is waar het werk gebeurt. De runtime waarin een agent leest, redeneert, code schrijft en collega-agents inschakelt. Hij voert uit, binnen de grenzen die Sentinel bewaakt.
De twee raken elkaar op één punt, en dat is met opzet: mutaties aan de infrastructuur lopen niet vanuit de agent zelf, maar via de brug. Backup vóór elke wijziging, nooit permanent verwijderen, en verifiëren vóór je iets beweert.
Wil je een agent die op jouw hardware draait?
Hermes draait in productie op ons eigen lab: op eigen hardware, zonder open poorten en zonder metered API-sleutels. Vraag een demo aan en we lopen de architectuur met je door.