Vuoi un agente AI a cui puoi mandare messaggi dal telefono, che continui a funzionare anche dopo aver chiuso il portatile e che si riavvii da solo dopo un riavvio? Hermes Agent fa proprio questo: funziona come un gateway con cui parli tramite Telegram e, una volta configurato correttamente, si riavvia da solo dopo un crash o un'interruzione di corrente.
Ho configurato la stessa identica configurazione su due macchine, un VPS cloud economico e un Mac Mini sulla mia scrivania, in modo da poter scrivere l'intero percorso senza saltare nulla. È un unico percorso. La macchina cambia solo in due punti: il comando di installazione e la parte che mantiene attivo il gateway. Tutto il resto è identico.
Tutto ciò che segue è stato eseguito sul mio hardware. Il percorso Linux è un Hetzner CX23 (x86, 2 vCPU, 4 GB di RAM, 40 GB di disco) su Ubuntu 24.04.4 LTS - il percorso Mac è un Mac Mini M4 su macOS 15. Entrambi eseguivano Hermes Agent v0.16.0.
Cosa avrai alla fine
- Hermes Agent installato, eseguito come utente normale, non come root
- Un bot Telegram a cui mandi messaggi dal telefono, bloccato solo per il tuo account
- Il gateway eseguito come servizio gestito, in modo che si riavvii dopo un crash o un riavvio
- Sul VPS, una macchina blindata: solo accesso SSH con chiave, nessun login come root, un firewall
Scegli la tua macchina
Un VPS è il modo più economico. Qualsiasi macchina x86 con 4 GB di RAM e circa 20 GB di spazio libero sul disco può eseguirlo; la mia è un Hetzner CX23 a $7,79/mese (prezzi Hetzner USA, 18/06/2026). Noleggialo ed è sempre acceso per definizione.
Un Mac che già possiedi è l'altra opzione. Qualsiasi Mac con chip Apple Silicon che rimane acceso funziona e il costo di gestione è zero oltre al modello. Il compromesso è che il livello di durabilità è più complesso su macOS, cosa che tratto alla fine.
Hai bisogno di una chiave SSH sulla tua macchina (ssh-keygen -t ed25519 se non ne hai una), un account Telegram e un modello per l'agente. Questa guida punta a Nous Portal, che utilizza OAuth, quindi non c'è una chiave API da tenere in un file. Hermes ha bisogno di un modello con almeno 64k di contesto.
Passo 1: prepara la macchina
su un VPS
Crea il server dal tuo provider: Ubuntu 24.04, un'istanza x86 (non Arm, vedi la nota sui costi) e incolla la tua chiave pubblica SSH al momento della creazione.
Una nuova macchina pubblica ha bisogno di qualche minuto di blindatura prima di metterci un agente. Lo script secure-box.sh nella ricetta fa tutto in un colpo solo: un aggiornamento apt, un file di swap da 2 GB, un utente sudo non root con la tua chiave, SSH solo con chiave con login root disattivato e un firewall che permette solo SSH. Modifica le due variabili all'inizio, copialo, eseguilo come root:
1scp secure-box.sh root@<indirizzo-ip-del-tuo-vps>:2ssh root@<indirizzo-ip-del-tuo-vps> 'bash secure-box.sh'
Questa immagine Ubuntu aveva PasswordAuthentication impostato su yes, anche se ho creato la macchina con una chiave SSH. Lo script lo disattiva. Prima di chiudere la sessione root, apri un secondo terminale e conferma che il nuovo utente riesca ad accedere, in modo che un errore non ti blocchi fuori:
1ssh hermes@<indirizzo-ip-del-tuo-vps>
Da qui in poi sei hermes, non root.
su un Mac
Nessuna blindatura. È la tua macchina sulla tua rete, non una macchina pubblica. Installa Homebrew se non ce l'hai (il programma di installazione lo usa nel passaggio successivo) e sei pronto.
Passo 2: installa Hermes
L'installazione è un unico comando, uguale su entrambe le macchine, eseguito come utente normale:
1curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash2source ~/.bashrc3hermes --version
Il programma di installazione rileva il tuo sistema operativo e scarica la propria toolchain (uv, Python 3.11, Node.js 22, ripgrep, ffmpeg, un Playwright Chromium per gli strumenti del browser) in ~/.hermes, quindi non tocca mai il Python di sistema. Sul mio Hetzner ha installato Hermes Agent v0.16.0 su Python 3.11.15.
Questo è il passaggio pesante. Sul VPS ha portato il disco da 1,2 GB usati a 7,8 GB, circa 6,6 GB, la maggior parte dei quali è il motore del browser e Node. Prevedi 20 GB liberi e smetti di preoccuparti. Eseguilo con un semplice comando SSH senza terminale, il programma di installazione stampa "Setup wizard skipped (no terminal available)", il che va bene, la configurazione è il passaggio successivo.
Su un Mac lo stesso comando viene eseguito, con un piccolo intoppo: installa prima Homebrew. Con Homebrew presente, il programma di installazione scarica git e le sue dipendenze senza chiedere nulla. Senza, ricade sugli Apple Command Line Tools, che possono aprire una finestra di dialogo di macOS che devi cliccare, e una finestra di dialogo non va bene su SSH (questo è nel ramo macOS del programma di installazione). Dopodiché è lo stesso flusso di cui sopra.
Passo 3: puntalo a un modello
1hermes setup --portal
Questo è OAuth contro Nous Portal: stampa un URL e un codice, lo approvi nel browser e ora la macchina parla con un modello senza una chiave API in un file. Nous Portal ha un livello gratuito e ho eseguito l'intera cosa su un modello gratuito. Se preferisci usare il tuo provider, esegui hermes model e scegline uno; la chiave finirà in ~/.hermes/.env.
Passo 4: parlaci
su un VPS
Nel momento in cui la tua connessione SSH cade, una sessione in primo piano muore con essa. tmux mantiene la sessione attiva: avvia dentro tmux, stacca e continua a funzionare.
1sudo apt-get install -y tmux2tmux new -s hermes # poi, dentro: hermes
Stacca con Ctrl-b e poi d, e riconnettiti più tardi da qualsiasi luogo:
1ssh hermes@<indirizzo-ip-del-tuo-vps>2tmux attach -t hermes
Il primo avvio dell'agente interattivo richiede un momento. Il mio ha impiegato circa 30 secondi per caricare il modello e le abilità prima che apparisse il prompt. Una volta avviato, i comandi con barra funzionano.
/goal è quello che vale la pena mostrare: imposta un obiettivo permanente su cui l'agente lavora attraverso i turni, con un modello giudice che controlla dopo ogni turno se è stato raggiunto.
1/goal controlla la RAM totale e il disco libero di questa macchina usando gli strumenti della shell, poi riporta entrambi su una riga e segna l'obiettivo come completato
Il mio ha eseguito il comando shell da solo ed è tornato con "RAM totale VPS: 3.7 GiB, spazio libero su disco: 28 GB" in circa 15 secondi. Questo è l'agente che usa i propri strumenti.
Tieni a mente due concetti: tmux mantiene una sessione interattiva aperta attraverso una connessione SSH caduta, ma non attraverso un riavvio. Per un gateway senza supervisione che sopravvive a un riavvio, vuoi un servizio gestito, che è il passo 6.
su un Mac
Sei seduto davanti alla macchina, quindi puoi eseguire hermes in un terminale. tmux aiuta comunque se ti connetti via SSH dal tuo portatile, ma qui è opzionale.
Passo 5: il gateway Telegram
Questa parte è identica su entrambe le macchine. Crea un bot: manda un messaggio a @BotFather su Telegram, invia /newbot e copia il token. Ottieni il tuo ID utente numerico da @userinfobot. Poi configura il gateway:
1hermes gateway setup
Scegli Telegram, incolla il token e imposta gli utenti consentiti sul tuo ID numerico in modo che solo tu possa parlarci. Il token finisce in ~/.hermes/.env, il resto in ~/.hermes/gateway.json.
La configurazione scrive solo la configurazione. Non avvia nulla, quindi il bot rimane in silenzio, e questo coglie di sorpresa molte persone: niente sta ancora interrogando Telegram. Avvialo in primo piano una volta per verificare che si connetta:
1hermes gateway run
Vuoi vedere, nel log:
1gateway.run: Connessione a Telegram...2[Telegram] Connesso a Telegram (modalità polling)3gateway.run: ✓ telegram connesso
La modalità polling significa che il gateway contatta Telegram; niente si connette alla tua macchina, motivo per cui il firewall non ha bisogno di porte in entrata oltre alla SSH. Manda un messaggio al tuo bot; dovrebbe rispondere. Poi ferma il gateway in primo piano con Ctrl-C, perché non puoi avere due cose che interrogano lo stesso token contemporaneamente, e il passo successivo lo esegue come servizio.
Passo 6: fallo sopravvivere a un riavvio
Questo è l'unico punto in cui le due macchine divergono.
su un VPS: systemd
hermes gateway install registra il gateway come servizio systemd in modo che si riavvii in caso di crash e torni dopo un riavvio. In questa versione, il programma di installazione fa due domande [Y/n] e non c'è un flag per saltarle. Eseguilo con un comando SSH non interattivo, la cosa naturale quando si scripta una macchina, e non riceve risposta, si interrompe e non installa nulla. Fornisci le risposte su stdin:
1printf 'n\nY\n' | hermes gateway install
Le due domande sono "avviare il gateway ora?" e "avviare automaticamente all'accesso/avvio?". La n seguita da Y dice: non avviarlo in questo momento, ma abilitalo all'avvio. Il programma di installazione attiva anche il "lingering" della sessione utente, che è ciò che consente a un servizio utente di essere eseguito prima che tu abbia effettuato l'accesso. Confermalo, perché questo è ciò che rende vero "sopravvive al riavvio" e non solo "sopravvive al logout":
1loginctl show-user $USER -p Linger # vuoi: Linger=yes
Avvialo e verificalo:
1hermes gateway start2systemctl --user status hermes-gateway
Vuoi "active (running)" e "NRestarts=0". Sulla mia macchina, il gateway utilizzava circa 280 MB e l'intera macchina era a circa 556 MB, comoda su 4 GB.
Ora il vero test. Riavvia e non toccarlo:
1sudo reboot
Il mio è tornato in circa 15 secondi, il gateway si è avviato da solo, si è riconnesso a Telegram e ha risposto al messaggio successivo con la cronologia della conversazione precedente al riavvio intatta. Questo è il punto centrale.
su un Mac: launchd e un watchdog
macOS usa launchd, non systemd, e c'è una trappola. Su macOS 15 con Hermes v0.16.0, hermes gateway start può non riuscire a registrare il servizio launchd e ripiegare, senza dirtelo, su un processo in background non supervisionato. Vedi questo:
1Bootstrap fallito: 5: Errore di input/output2⚠ launchd non può gestire il gateway su questa versione di macOS (launchctl exit 5)3✓ Avviato il gateway come processo in background4 NON si avvierà automaticamente all'accesso né si riavvierà automaticamente in caso di crash.
Se avevi un lavoro launchd funzionante prima, il comando lo ha scaricato e il fallback funziona bene fino al primo crash o riavvio, poi il tuo agente è sparito senza che nessuno te lo dica. launchctl grezzo funziona dove la CLI fallisce, anche su SSH:
1launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.hermes.gateway.plist2launchctl print gui/$(id -u)/ai.hermes.gateway | grep state # vuoi: state = running
Il plist avvia il gateway all'accesso ma non lo riavvia in caso di crash. Un watchdog cron colma entrambe le lacune e cron viene eseguito all'avvio senza bisogno di accesso. La ricetta include gateway-watchdog.sh; controlla ogni 5 minuti se il processo del gateway è vivo e lo riavvia se non lo è. Installalo in una schedule:
1(crontab -l 2>/dev/null; echo '*/5 * * * * $HOME/scripts/gateway-watchdog.sh >/dev/null 2>&1') | crontab -
Ho visto questa sequenza recuperare un gateway degradato sul mio stesso Mac Mini. Riavvia e conferma che il gateway sia tornato entro cinque minuti senza effettuare l'accesso.
Verifica la tua configurazione
- Il servizio è attivo:
systemctl --user status hermes-gatewaysu Linux (active (running)), olaunchctl print gui/$(id -u)/ai.hermes.gateway | grep statesu macOS (state = running) - Manda un messaggio al tuo bot: ti risponde e ignora chiunque non sia nei tuoi utenti consentiti
- Su Linux,
loginctl show-user [$USER](https://x.com/search?q=%24USER&src=cashtag_click) -p Lingerlegge "Linger=yes" - Riavvia la macchina, aspetta, manda di nuovo un messaggio al bot senza effettuare nuovamente l'accesso: risponde
Costi
Sul VPS, la macchina è l'unica spesa. La mia è un Hetzner CX23 a $0,012/ora, con un massimo di $7,79/mese (prezzi Hetzner USA, 18/06/2026; il CX22 UE è della stessa forma e più economico).
Sul Mac, è una macchina che già possiedi, zero servizi extra. Il modello è gratuito sul livello gratuito di Nous Portal in entrambi i casi.
Qui, la memoria non è il limite: il gateway utilizzava circa 280 MB, l'intera macchina circa 556 MB, quindi 1 GB di RAM è più che sufficiente. Il disco è il vero limite: l'installazione è di circa 6,6 GB, quindi un'immagine da 1 GB o 10 GB è stretta, dagli 20 GB. E usa x86, è la scelta sicura.
Eseguilo da solo e cosa c'è dopo
Entrambe le macchine hanno una ricetta completa con gli script esatti, eseguibili così come sono:
- Il percorso VPS: cheap-vps
- Il percorso Mac: mac-mini-24-7
Ora hai un agente sempre attivo su Telegram che sopravvive a un riavvio.
Il prossimo Flightplan si basa su questo: lavori programmati che ti mandano un messaggio solo quando qualcosa è importante, un workspace sincronizzato con git che l'agente legge e scrive, e il flusso di bozza e approvazione che mantiene un umano su ogni azione pubblica.
Grazie per aver letto.





