Det här sätter du upp
Hermes Agent är en AI-agent med öppen källkod från Nous Research. Den ansluter till en AI-modell hos den leverantör du väljer, kör kommandon, söker på webben, minns det den lär sig om dig och kör schemalagda uppgifter. Du pratar med den från en chattapp. På en server fortsätter den att vara igång när din dator är avstängd.
Här körs den i rootless Podman under en egen användare som heter hermes, och du pratar med den end-to-end-krypterat via Matrix-servern från Matrix-guiden. Kommandona den kör hålls inne i dess container, under den oprivilegierade användaren, så agenten kommer inte åt dina andra appar. Den öppnar inga portar: den ansluter bara utåt, till modelleverantören och till Matrix.
Varje steg nedan har körts på en VC-P Alloy (2 vCPU, 8 GB) hos Melonslab med Debian 13, med Matrix-servern från vår guide på samma maskin:
- I en krypterad chatt i Element svarade agenten, körde
uname -rnär den ombads och kom ihåg något den fått veta tidigare, även i en ny session. - Inifrån dess container gick det inte att nå en app som bara lyssnar på serverns loopback-adress.
- Med OpenRouters gratismodeller stannade API-nyckelns förbrukning på noll.
- Allt startade igen av sig självt efter en omstart av servern.
Hermes använde omkring 290 MB minne. Dess avbild tar 2,8 GB disk.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, gärna med ufw från säkerhetsguiden. Hermes behöver inga öppna portar;
- en Matrix-server som i Matrix-guiden, och ett eget konto på den;
- en API-nyckel från en modelleverantör. Den här guiden använder OpenRouter, som har gratismodeller: skapa en nyckel på openrouter.ai/keys och ge den en utgiftsgräns.
Exemplen använder example.com som din Matrix-domän, matrix.example.com som Matrix-servern och @anna:example.com som ditt eget konto. Byt ut dem genomgående.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash hermes
loginctl enable-linger hermes
2. Skapa ett Matrix-konto åt agenten
Agenten får ett eget Matrix-konto. Som root byter du till användaren matrix med machinectl shell matrix@. Skapa kontot och svara no på frågan om det ska vara administratör:
podman exec -it matrix-synapse register_new_matrix_user -c /data/homeserver.yaml http://localhost:8008
Döp det till hermes. Hermes loggar in med en åtkomsttoken i stället för lösenordet, så att den behåller samma enhet för sina krypteringsnycklar. Hämta en token så här, med lösenordet du just valde i stället för BOT_PASSWORD:
curl -s -X POST https://matrix.example.com/_matrix/client/v3/login \
-H 'Content-Type: application/json' \
-d '{"type": "m.login.password", "identifier": {"type": "m.id.user", "user": "hermes"}, "password": "BOT_PASSWORD", "initial_device_display_name": "Hermes Agent"}'
Svaret innehåller "access_token":"...". Kopiera värdet och förvara det säkert: det är agentens inloggning.
3. Definiera containern
Gå tillbaka till root med exit och byt sedan till användaren hermes med machinectl shell hermes@:
mkdir -p ~/.config/containers/systemd
Skapa ~/.config/containers/systemd/hermes.container:
[Unit]
Description=Hermes Agent
[Container]
ContainerName=hermes
Image=docker.io/nousresearch/hermes-agent:latest
Volume=hermes-data:/opt/data
# The Matrix server runs on this server too: reach it through the host, not the container itself.
AddHost=matrix.example.com:host-gateway
Exec=gateway run
AutoUpdate=registry
[Service]
Restart=always
[Install]
WantedBy=default.target
Allt Hermes sparar finns i volymen hermes-data: dess inställningar, din API-nyckel, dess minne och dess chattsessioner. Raden AddHost finns där eftersom en rootless-container delar serverns egen adress, så utan den skulle agenten försöka nå matrix.example.com inne i sin egen container. Utelämna den om ditt Matrix-konto finns på en annan server, som matrix.org.
Starta den:
systemctl --user daemon-reload
systemctl --user start hermes
systemctl --user enable --now podman-auto-update.timer
Vid första starten laddas avbilden ner, omkring 1 GB, och det tar en eller två minuter.
4. Välj modellen
podman exec -it hermes hermes model
Välj OpenRouter med piltangenterna och Enter, och klistra in din API-nyckel när den frågar efter OPENROUTER_API_KEY. Hermes listar sedan OpenRouters modeller med deras priser. Välj en som är märkt free, eller välj Enter custom model name och skriv openrouter/free, som skickar varje förfrågan till en av OpenRouters gratismodeller. Behåll den föreslagna resonemangsnivån med Enter.
Gratismodeller är långsammare och har begränsningar för hur ofta de får användas. Vill du ha pålitligare svar väljer du en betald modell: utgiftsgränsen på din nyckel håller kostnaden i schack. Hermes loggar en varning om att openrouter/free "may incur real spend", eftersom namnet inte slutar på :free. I våra tester stannade förbrukningen på noll.
5. Anslut den till Matrix
Ge Hermes servern, token från steg 2 och din egen adress, så att bara du kan prata med den:
podman exec hermes hermes config set MATRIX_HOMESERVER https://matrix.example.com
podman exec hermes hermes config set MATRIX_ACCESS_TOKEN ACCESS_TOKEN
podman exec hermes hermes config set MATRIX_ALLOWED_USERS @anna:example.com
podman exec hermes hermes config set MATRIX_E2EE_MODE required
podman exec hermes hermes config set MATRIX_RECOVERY_KEY_OUTPUT_FILE /opt/data/matrix-recovery-key.txt
systemctl --user restart hermes
Element krypterar direktchattar, så MATRIX_E2EE_MODE required får agenten att hantera kryptering och vägra starta utan den. Vid första starten med de här inställningarna sätter Hermes upp korssignering för sitt konto, vilket låter dina appar lita på dess enhet, och sparar kontots återställningsnyckel i matrix-recovery-key.txt i sin volym.
Kontrollera efter en halv minut att den har anslutit:
podman exec hermes grep "matrix connected" /opt/data/logs/gateway.log
6. Prata med den
Starta en direktchatt med @hermes:example.com i Element. Agenten går med av sig själv. Dess första meddelande handlar om en hemkanal, chatten dit den skickar resultaten av schemalagda uppgifter: svara !sethome för att göra den här chatten till den kanalen.
Fråga den sedan vad som helst. Den markerar varje meddelande med ✅ när den har läst det och svarar på det. Be den köra ett kommando, så visar den kommandot den körde. Berätta något om dig själv, så sparar den det i sitt minne, som finns kvar när du startar en ny session.
Element reserverar kommandon som börjar med / för sig själv, så ge Hermes dess kommandon med ! i stället. !new startar en ny session och ber dig bekräfta med !approve.
7. Vad agenten kan nå
Kommandon som agenten kör hålls inne i dess container:
- de körs som användaren
hermes, så de kan inte läsa filer som tillhör dina andra appar eller root; - appar som bara lyssnar på serverns loopback-adress, som apparna i våra andra guider gör bakom Caddy, går inte att nå från containern;
- internet, och allt som din server gör tillgängligt på internet, går att nå.
Bara Matrix-användarna i MATRIX_ALLOWED_USERS kan ge den instruktioner. Hermes har också en webbpanel, som lagrar API-nycklar: den här guiden lämnar den avstängd, och Hermes egen dokumentation varnar för att exponera den mot internet.
8. Håll den uppdaterad
Timern från steg 3 uppdaterar avbilden varje dag. Taggen latest följer Hermes stabila versioner. podman auto-update --dry-run visar om en uppdatering väntar.
9. Säkerhetskopiera
Som hermes:
mkdir -p ~/backup
systemctl --user stop hermes
podman volume export hermes-data --output ~/backup/hermes-data.tar
systemctl --user start hermes
Det sparar inställningarna, minnet och chattsessionerna, och även din API-nyckel, agentens åtkomsttoken för Matrix och återställningsnyckeln. Kopiera ~/backup till en annan maskin och förvara den säkert.
Felsökning
Agenten svarar aldrig. Kontrollera att MATRIX_ALLOWED_USERS är hela din adress, som börjar med @, och läs podman exec hermes tail -30 /opt/data/logs/gateway.log.
Loggen visar att den inte når hemservern. Om din Matrix-server körs på den här servern saknas raden AddHost från steg 3, eller så anger den ett annat värdnamn.
Element visar "Unrecognised command" för /new. Använd !new.
Svaren är långsamma eller uteblir en stund. Gratismodeller är begränsade. Välj en annan modell enligt steg 4, eller en betald.