← Indice documentazione Fondamenti › Architettura

Metnos

Architettura — Introduzione
Versione 1.1 — 24 aprile 2026
Riferimento: Metnos v0.0.1 (design phase, pre-codice)
Formato HTML self-contained — stampabile PDF

Pubblico: chi vuole capire in 30 minuti cosa si sta costruendo,
senza gergo ma senza ingenuità.
Cosa è cambiato dalla v1.0. Questa v1.1 incorpora i due dialoghi galileiani di aprile 2026 — il Dialogo sui fini e i limiti (telos, vaglio, le 4 Leggi) e il Dialogo sugli executor e la memoria distribuita (executor, mnest, mnestoma, tracce, ager) — e la riflessione di fine aprile sulla topologia self-hosted (server di casa, laptop come cliente, executor remoti come direzione futura) e sul frame tripartito di libertà / safety dell'identità / safety del perimetro / robustezza. Sei capitoli nuovi rispetto alla v1.0, sette figure nuove, un linguaggio più didattico e meno gergoso. La struttura a quattro strati, invariata, resta il filo conduttore.

Indice

  1. Cos'è Metnos?
  2. Perché non bastano openclaw o zeroclaw
  3. Quattro aggettivi, un sistema
  4. Dove vive Metnos: la topologia reale
  5. Libertà, safety, robustezza: tre assi, non due
  6. Idea chiave: i quattro strati
  7. Il flusso di una richiesta
  8. L'interfaccia LLM, il pattern provider-agnostic
  9. Executor, mnest, mnestoma: l'anatomia dell'agire e del ricordare
  10. Tracce, ager, reversibilità: come il sistema cresce e si disfa
  11. Telos e Vaglio: proattività senza tirannia
  12. I tre livelli di autonomia e il DM pairing
  13. Il workspace: file markdown invece di codice
  14. I sei principi
  15. Struttura del repository
  16. Cosa NON è Metnos
  17. Roadmap & approfondimenti

1. Cos'è Metnos?

Metnos è un maggiordomo digitale per casa: un assistente AI che vive su un computer di famiglia, parla attraverso i canali che già usi (terminale, Telegram, in futuro voce), esegue azioni reali (leggere file, lanciare comandi, consultare il web) ma chiede il permesso prima di fare qualcosa di serio.

L'analogia del maggiordomo è utile. Un buon maggiordomo:

Due nomi, un progetto. Metnos è il nome del progetto e del dominio pubblico (metnos.com); Metnos è il nome del processo che gira sul PC (${METNOS_HOME}/, myclaw-gateway.service). Sono lo stesso sistema visto da due angolazioni: fuori come nome, dentro come codice.

Tecnicamente è un processo Python ≥ 3.11 che gira a ${METNOS_HOME}/, composto da quattro strati (gateway, policy, sandbox, workspace/tool). Ogni servizio AI (LLM, STT, TTS, embedding, speaker-ID) viene consumato tramite un'interfaccia astratta — Metnos è provider-agnostic per costruzione. Nel caso specifico dell'ambiente dell'autore l'interfaccia è realizzata da suprastructure, un package sibling preesistente; in un altro ambiente potrebbe essere realizzata da qualunque adapter equivalente.

Obiettivi espliciti

ObiettivoCosa significa concretamente
Self-hostedVive su una macchina sotto il controllo fisico e legale dell'utente (nel nostro caso il metnos-server). Il laptop e il telefono sono clienti che la interpellano, non la sede di Metnos. Il cloud resta una possibilità opzionale (modelli linguistici remoti, canale Telegram), mai luogo di residenza. Vedi cap. 4 per la topologia per intero.
Sicuro di defaultAscolto in locale (127.0.0.1), livello di autonomia Supervised, sandbox obbligatoria, percorsi vietati per costruzione, conferma esplicita per le azioni rischiose.
Multi-canaleStessa "mente", interfacce diverse: CLI, Telegram, poi Signal, voce, cruscotto web.
EstendibileNuovi strumenti e canali senza riscrivere il nucleo: basta conformarsi a un Protocol.
Senza dipendenze obbligateLo strato AI vive dietro un'interfaccia astratta: cambiare Claude con Ollama = una riga di configurazione, senza toccare il codice.
Senza apprendimentoMetnos non addestra modelli. Non fa fine-tuning. Non fa RLHF. Cambia se stesso attraverso memoria esterna all'LLM (il mnestoma, cap. 9) e attraverso la proposta di nuovi executor filtrata dall'umano (cap. 11).

2. Perché non bastano openclaw o zeroclaw

Entrambi sono progetti eccellenti e sono stati la fonte di ispirazione primaria. Entrambi però hanno tare che li rendono non-pronti per l'uso domestico qui sul mio PC:

ProgettoPunti fortiLimiti per il mio caso
openclaw
TypeScript, Node 24+
Gateway-first design, 20+ canali, sandbox pluggable (Docker/SSH/OpenShell), skills registry, routing multi-agente Stack Node estraneo ai miei progetti, default più permissivi, sandbox orientate al cloud
zeroclaw
Rust 2024
Footprint minimo, livelli di autonomia, sandbox a strati (Landlock+Bubblewrap), DM pairing, auth criptato, 129+ test di sicurezza Rust reintroduce uno stack separato; riscrive da zero il layer LLM/STT/TTS che io ho già risolto con un'interfaccia astratta e una sua implementazione (nel mio caso suprastructure)

La decisione: prendere i pattern migliori di entrambi (gateway-first di openclaw, autonomy+pairing+sandbox-a-strati di zeroclaw) e reimplementarli in Python, dove:

  1. posso riusare l'implementazione di interfaccia LLM che ho già pronta in casa;
  2. Metnos è coerente con gli altri sibling agents dell'ambiente (un solo linguaggio, convenzioni condivise);
  3. posso alzare i default di sicurezza per il contesto domestico senza combattere contro convenzioni cloud-native.

3. Quattro aggettivi, un sistema

Prima di entrare nella tecnica, fissiamo cosa Metnos deve essere. Quattro aggettivi, non in ordine di importanza ma in ordine di difficoltà crescente. Il quarto è la novità della v1.1 delle prospettive: prima c'erano tre, ora sono quattro.

AggettivoChe cosa chiede al sistemaAntitesi — la tentazione opposta
Utile Fa cose reali per l'utente, non dimostra di essere intelligente. Legge il log, archivia la fattura, ricorda la scadenza. Demo impressionante ma inutile; agente che parla benissimo e fa poco.
Intelligente Quando tocca la lama dell'LLM lo fa bene: buoni prompt, buoni tool, contesto non rumoroso. Agente cablato rigidamente a if/else che non sfrutta nulla della flessibilità dei modelli linguistici.
Autonomo Decide da solo quando fare qualcosa senza disturbare, e quando invece fermarsi e chiedere. Due estremi entrambi tossici: l'agente che chiede conferma per tutto, e l'agente che fa di testa sua senza fermarsi mai.
Proattivo Anticipa, propone, ricorda. Non solo reagisce ma avvia. L'agente passivo che aspetta sempre un prompt. — Ma anche, all'opposto, l'agente molesto che propone a raffica.

Il quarto aggettivo è quello che alza l'asticella. Un agente solo reattivo è un chatbot con tool. Un agente proattivo deve avere un motivo per agire, e un freno per non esagerare. Motivo e freno sono il contenuto dei capitoli 9, 10 e 11.

Perché "proattivo" è il più difficile. Gli altri tre aggettivi si misurano sul singolo evento: è utile? è intelligente? è stato autonomo nella decisione? La proattività no: si misura sul comportamento nel tempo. Richiede che il sistema ricordi, noti pattern, abbia un'idea di cosa gli importa. Richiede, in una parola, una memoria e un telos.

4. Dove vive Metnos: la topologia reale

Metnos non vive sul laptop. Vive su un server Linux acceso ventiquattro ore su ventiquattro, e il laptop — come il telefono, come il browser di un dispositivo in viaggio — è un cliente che lo interpella. Questo capitolo, nuovo rispetto alla v1.0, spiega perché è così e cosa ne consegue; in fondo apre la porta a una direzione futura importante: gli executor remoti.

Rileggere "local-first"

Il termine local-first ha nella letteratura (Kleppmann 2019) un significato preciso che mescola due proprietà: (a) i dati vivono sulla macchina dell'utente; (b) il sistema funziona anche offline. La v1.0 aveva preso entrambe come obiettivo. Messo alla prova della vita reale di una famiglia, il quadro cambia.

La proprietà che davvero conta è la (a): i dati e la logica non stanno in cloud di terzi. Il motivo è di sovranità, di privacy, di assenza di vincoli al fornitore. La proprietà (b) — "funziona offline" — è per noi una mezza verità: un agente che orchestra modelli linguistici, richieste al web e notifiche non è comunque utile senza rete. Se non c'è rete, anche il laptop — nell'ipotesi in cui Metnos vivesse lì — non potrebbe chiamare un modello linguistico, consultare una pagina web, mandare un messaggio.

La v1.1 riformula il principio: Metnos è self-hosted, non "local-first" in senso stretto. Il dato e la logica vivono su una macchina sotto il tuo controllo fisico e legale — nel nostro caso metnos-server, il server di casa. Nessuna dipendenza da fornitori terzi, nessun canale obbligato verso server di terzi. La nuvola resta una possibilità opzionale (modelli linguistici remoti, canale Telegram) ma mai come luogo di residenza.

Cinque topologie sul tavolo, una scelta

Pensare il problema bene significa enumerare le alternative prima di decidere. Cinque topologie erano (sono) plausibili per un agente domestico di questa forma:

#TopologiaVantaggiCosti / perché non va (per ora)
A Metnos su metnos-server, laptop = cliente.
Scelta attuale.
Coerenza totale (una sola istanza, un solo mnestoma, un solo registro d'audit). Isolamento serio (bubblewrap, landlock). Risorse adeguate per modelli linguistici locali. Proattività sempre desta: il cron lavora anche quando il laptop dorme. Fuori dalla LAN serve un overlay di rete per raggiungerlo (→ Headscale).
B Metnos sul laptop, che chiama metnos-server come macchina dedicata ai modelli linguistici. Metnos è "con te". Accesso diretto ai file del laptop. Windows non ha un equivalente di bubblewrap / systemd-run / landlock: l'isolamento diventa debole. Il laptop dorme → la proattività muore con il coperchio chiuso. Memoria fragile (se perdi il laptop perdi tutto, salva la copia sincronizzata).
C Due istanze (una per macchina), mnestoma sincronizzato. Sempre disponibile, ovunque. Sincronizzazione distribuita di un grafo di memoria: CRDT, conflitti, elezione del primario. Complessità fuori scala per un agente domestico. Doppia superficie di attacco.
D Metnos su metnos-server, laptop ridotto a terminale puro. Massima semplicità. Alcune azioni utili richiedono risorse del laptop (catturare un'istantanea dello schermo, leggere un file non sincronizzato, pilotare un'applicazione Windows). D le lascia fuori.
E Gateway su metnos-server, alcuni executor girano sul laptop (executor remoti).
Direzione futura.
Unica fonte di verità (mente, memoria, regole su metnos-server), ma accesso alle risorse dei dispositivi dove serve. Apre un abisso di considerazioni di sicurezza e affidabilità (vedi più sotto). Non è giusto affrontarle alla prima ora.

La scelta pragmatica: A come base, con E come direzione esplicita verso cui Metnos può crescere.

Overlay Headscale (WireGuard, self-hostato su metnos-server) mette tutti i device di Roberto nella stessa "LAN virtuale" anche fuori casa LAN di casa metnos-server — nodo Linux processo myclaw-gateway.service (systemd, hardened) gateway · policy · sandbox · executors (seed) mnestoma · telos/vaglio · audit log sempre acceso, sempre al corrente di tutto Laptop @ casa Windows CLI / dashboard LAN diretta Laptop @ fuori casa stesso client, overlay WireGuard attivo overlay Headscale Telegram api.telegram.org bot polling (uscita, no porte aperte) Telefono ovunque c'è rete parla al bot Telegram via Telegram Internet (opzionale) Claude API, web fetch, aggiornamenti usato solo se scelto uscite controllate La topologia di Metnos: un server al centro, client mobili attorno self-hosted, non "sulla macchina da cui parli" il server sempre acceso = sede di Metnos cliente (laptop, telefono): non ospita Metnos, lo parla overlay cifrato (Headscale / WireGuard)
Figura 1 — La topologia reale di Metnos. Il processo vive su metnos-server, sempre acceso e con risorse adeguate; i client (laptop, telefono) lo raggiungono in LAN, via overlay Headscale self-hostato se fuori casa, o via Telegram se più comodo. Non si esce mai dalla sovranità dell'utente.

I tre modi di parlare a Metnos

CanaleDove funzionaCome
CLI / cruscotto in LAN Laptop a casa, stessa rete di metnos-server Connessione diretta all'IP metnos-server. Latenza minima. Il canale di uso quotidiano.
Overlay Headscale Laptop fuori casa, ovunque ci sia Internet WireGuard fra pari verso metnos-server, come se fossi in LAN. Anche il piano di controllo (Headscale) gira su metnos-server: nessun server di coordinamento di terzi.
Telegram Telefono, laptop di un amico, qualunque dispositivo con Telegram Il bot interroga in uscita metnos-serverapi.telegram.org: non servono porte aperte, non serve IP pubblico. Il contenuto passa per Telegram (compromesso noto: canale già nostro per scelta).

C'è un quarto scenario — sei in aereo, la casa non ha rete per un'interruzione di corrente: nessun canale raggiunge metnos-server, Metnos è inattivo per te. È un caso degradato accettabile, simmetrico a quello di qualsiasi servizio: senza rete non si fa molto.

Il gap dei file del laptop: strategia modulare

Molti dei file che vorrai far elaborare a Metnos nascono sul laptop Windows (fatture, foto, codice di lavoro), ma Metnos gira su metnos-server. Risolviamo il gap in modo modulare, a partire dalla soluzione più semplice:

LivelloStrumentoQuando ha senso
0 (dal primo giorno) Syncthing: una cartella ~/metnos-share/ sul laptop, replicata in tempo reale su metnos-server. Nessun server intermedio, sincronizzazione fra pari cifrata, funziona anche sotto Headscale. Metnos vede una cartella locale; non sa nulla della sincronizzazione che la tiene aggiornata.
1 Nextcloud self-hostato su metnos-server, applicazione desktop sul laptop. Se e quando servono interfaccia web, versionamento, condivisione, applicazione mobile. Più potente, più lavoro iniziale.
2 Executor remoti (vedi sezione successiva). Quando serve agire sul laptop, non solo vedere file. Per esempio: catturare un'istantanea dello schermo, pilotare un'applicazione Windows, leggere un file che non sta nella cartella condivisa.

Si parte dal livello 0. Si sale solo quando la carenza si fa sentire in un caso concreto. La semplicità (principio 6) prevale.

Executor remoti: direzione eccitante, in certi casi l'unica

L'opzione E della tabella sopra è la più interessante strutturalmente. Al posto di pretendere che tutti i file finiscano nella cartella condivisa, si introduce un'idea semplice: gli executor non vivono tutti su metnos-server. Alcuni girano sul laptop, sono esposti a metnos-server tramite l'overlay Headscale, e quando Metnos li invoca riceve il risultato come se fossero locali. Un unico gateway, un'unica regola, un unico mnestoma; braccia distribuite.

Non è solo un'ottimizzazione. Per certi casi d'uso diventa l'unica modalità sensata. L'esempio che fissa l'idea: riordinare un archivio fotografico di diecimila file sul laptop. La soluzione "sincronizza tutto su metnos-server, riordina, risincronizza indietro" comporta gigabyte di traffico, doppia occupazione del disco, finestre temporali in cui lo stesso file esiste in due stati su due macchine, il rischio concreto di conflitti durante l'operazione. Una rinominazione sul posto, eseguita direttamente sul laptop, risolve in un secondo ciò che la copia impiegherebbe minuti, senza sprecare spazio e senza rischio di divergenza. Esempi affini: portare in primo piano un'applicazione, leggere un file che per dimensioni o per natura non sta nella cartella condivisa, pulire una vecchia cartella scaricamenti, modificare i permessi di una gerarchia.

Il pattern "prima / dopo" per la reversibilità

Il quinto principio (cap. 14) dice che ogni atto evolutivo è reversibile. Vale anche per le azioni remote: prima di eseguire un'operazione che modifica lo stato del laptop, Metnos conserva su metnos-server un'istantanea del "prima" — solo quello che serve per tornare indietro, non i dati per intero quando non occorre. Per un blocco di rinominazioni foto il "prima" può essere un semplice elenco (percorso_originale, nuovo_percorso, size, hash) firmato e datato. Se Roberto dice "annulla", Metnos legge il manifest e manda al laptop lo stesso schema invertito. La duplicazione è minima (kilobyte, non gigabyte), la reversibilità resta completa, e il registro d'audit su metnos-server conserva la traccia di entrambi i lati. Nei casi più rischiosi (per esempio un'eliminazione definitiva), il manifest può essere promosso a istantanea dei soli file toccati, conservata finché Roberto non dice "conferma".

L'abisso di sicurezza degli executor remoti. Questa direzione è affascinante ma apre problemi non banali. Prima di scrivere una sola riga di codice in quella direzione vanno risolte almeno queste cinque questioni.
  1. Superficie sul dispositivo remoto. Il laptop deve esporre un punto di accesso RPC. Anche se vive solo dentro Headscale, è un'apertura. Serve un'autenticazione reciproca (mTLS oppure chiave precondivisa di WireGuard combinata con un gettone firmato per ogni chiamata).
  2. Isolamento debole. Sul laptop Windows l'isolamento del processo è più debole che su metnos-server. L'executor remoto deve essere un piccolo processo confinato, senza accesso all'intero filesystem dell'utente, con un elenco di operazioni consentite verificato anche sul laptop e non solo su metnos-server.
  3. Pairing del dispositivo. È l'analogo del pairing dei mittenti su Telegram (DM pairing): un dispositivo non è fidato finché Roberto non lo accoglie esplicitamente da un canale amministrativo già fidato. Un nuovo laptop non può far parlare di sé alla mente di Metnos prima di una cerimonia di ammissione firmata.
  4. Rete intermittente, idempotenza, scadenze. Il gateway deve trattare ogni chiamata a un executor remoto come "può fallire a metà". Ogni azione remota che modifica lo stato deve essere idempotente (stesso identificativo di chiamata → stesso esito), tracciata in audit su entrambi i lati, ripetibile se servisse.
  5. Deriva di versione. Il binario dell'executor remoto vive su un altro disco. Ogni rilascio è firmato; il gateway rifiuta chiamate a executor con versione sconosciuta; l'aggiornamento del manifest segue le stesse regole degli executor locali.

Per questo, anche se la direzione è inevitabile, non si fa tutto subito. La regola è: si introduce un executor remoto alla volta, motivato da un caso d'uso concreto che la cartella condivisa non riesce a coprire. Quel singolo executor nasce con tutte le garanzie della lista qui sopra e il suo contratto vive in un documento di microprogettazione dedicato. La roadmap (cap. 17) colloca il primo executor remoto come fase ideale 5+, ma quel numero non è intoccabile: se un caso d'uso prioritario lo richiede prima — riordinare le foto è il candidato più naturale — la fase si anticipa; i requisiti di sicurezza no.

Due righe sul nome. "Local-first" come obiettivo è stato tolto dalla tabella del cap. 1 e sostituito con "Self-hosted". La differenza non è retorica: chi legge la v1.0 pensa a un'applicazione che gira sul proprio computer; chi legge la v1.1 sa che l'architettura ruota intorno a un server in casa sua, con i suoi dispositivi come clienti. Entrambe le formulazioni rispettano la sovranità dell'utente; ma solo la seconda è quella che costruiremo.

5. Libertà, safety, robustezza: tre assi, non due

Un agente che fa tutto quello che vuole è pericoloso. Un agente che chiede conferma per tutto è inutile. Tra i due estremi non c'è una sola tensione, ce ne sono tre. La parola "sicurezza" le confonde tutte sotto un unico termine; questo capitolo le separa, perché solo separate si possono trattare in modo onesto.

Tre parole, tre cose diverse

Distinguere all'inizio paga interessi per tutto il documento. Le tre parole che ci servono sono safety dell'identità, safety del perimetro e robustezza. La prima è una sola cosa intera; la seconda ha un nucleo e un guscio; la terza è un asse a sé. Tutte e tre stanno in un certo rapporto con la libertà di Metnos, ma il rapporto cambia di natura. Il punto del capitolo è insegnare a riconoscere quale dei tre rapporti si sta esercitando in un momento dato, perché applicarne il criterio sbagliato è un errore frequente di progetto.

ParolaCosa proteggeEsempi di violazione
Safety dell'identità Che chi parla, chi decide, chi esegue dentro Metnos sia davvero Metnos: l'utente fidato, il proprio LLM, i propri executor firmati, le proprie regole. Riguarda autenticazione, firme, pairing. Una prompt injection nascosta in una pagina web convince l'LLM a rivelare un segreto. Una dipendenza compromessa diventa un executor. Un messaggio Telegram di uno sconosciuto non pairato impartisce un comando. Un executor remoto non autenticato invoca rm -rf.
Safety del perimetro L'estensione di ciò che Metnos può vedere e toccare: cartelle, comandi shell, rete in uscita, dispositivi esterni. Riguarda il recinto dentro cui l'agente agisce. Un executor con accesso all'intero filesystem cancella per sbaglio una cartella di sistema. Un comando shell senza confini tocca i file di un altro utente. Un'uscita di rete non controllata raggiunge un servizio non previsto.
Robustezza Che le azioni che Metnos compie davvero non corrompano, non perdano, non lascino strade chiuse. Riguarda gli effetti a valle, non la legittimità di chi agisce. Un blocco di rinominazioni fallisce a metà e lascia file in stato incoerente. Un cron dimenticato sovrascrive un file in uso. Un bug cancella la riga sbagliata di un csv. Un executor remoto perde la connessione e non torna indietro.
Libertà La latitudine con cui Metnos agisce senza disturbare e senza chiedere conferma. Quanto Roberto tollera di non essere interpellato. — (la libertà non è una cosa da violare; è una cosa che si concede male o si concede bene.)

Tre cose, tre relazioni diverse con la libertà. La parte centrale di questo capitolo le esamina una alla volta.

Asse 1 — Libertà e safety dell'identità: nessun compromesso

La safety dell'identità non è un limite della libertà di Metnos: è la sua condizione preliminare. Se l'identità cede — LLM dirottato da prompt injection, dipendenza maligna che si traveste da executor, comando ricevuto da uno sconosciuto credendolo l'utente — non c'è più "Metnos che agisce liberamente": c'è qualcun altro, vestito da Metnos, che agisce al posto suo. La libertà di Metnos non può essere la libertà di un impostore.

Per questo gli strumenti di safety dell'identità non sono negoziabili. Non c'è un livello di autonomia che li allenta, non c'è un profilo di sandbox che li spegne, non c'è un caso d'uso che li giustifica:

Questi strumenti non riducono la libertà: la rendono possibile. Il paragone è con le serrature di casa. Una porta che si chiude non limita la libertà di chi vive dentro, limita quella di chi vorrebbe entrare senza essere invitato.

Asse 2 — Libertà e safety del perimetro: il vero compromesso

Sull'asse del perimetro il compromesso esiste, ed è serio. Allargare il recinto di Metnos — più cartelle leggibili, più comandi eseguibili, più dispositivi pilotabili — amplia ciò che può fare per te, ma amplia contemporaneamente la superficie su cui un errore (suo o altrui) può manifestarsi: una prompt injection ha più cose potenziali da chiedere; un bug di executor ha più file da poter toccare; uno strumento "vedente" può finire per vedere troppo. Più raggio d'azione, più raggio dell'eventuale danno: i due crescono insieme.

Metnos non risolve il compromesso fingendo che non esista, lo media in due livelli. C'è un nucleo duro che non si discute, e c'è un guscio modulabile intorno.

Il nucleo duro

Il nucleo è ciò che resta vietato anche al più permissivo dei livelli di autonomia. Non si configura da YAML: vive nel codice e nelle Leggi, e per modificarlo serve un rito (revisione, firma, rilascio). Esempi:

Il nucleo è un piccolo cerchio. Dentro non si entra mai. Il fatto che sia piccolo è importante: tutto ciò che è nel nucleo paga il prezzo della rigidità, e la rigidità ha un costo — non si può rilassare quando un caso legittimo lo richiederebbe. Mettere troppe cose nel nucleo trasforma Metnos in un sistema chiuso che non sa più aiutare.

Il guscio modulabile

Tutto ciò che sta fuori dal nucleo è il guscio: la latitudine d'azione che si sceglie di concedere a Metnos, modulabile per fascia. La modulazione avviene su tre leve, applicate insieme:

Il guscio si può allargare e restringere in vita. Si parte da configurazioni strette e si rilassa solo quando l'uso lo richiede e la storia lo giustifica. La direzione opposta — partire larghi e restringere "se succede qualcosa" — non si pratica: i guai sui gusci sono in larga parte irreversibili.

Asse 3 — Libertà e robustezza: asimmetria precauzionale

Sul terzo asse il compromesso ha forma diversa. La libertà di Metnos di agire senza chiedere conferma compete con il rischio di azioni che non si possono annullare. Anche qui c'è un principio preciso, ed è economico, non ideologico:

Asimmetria precauzionale. Nei casi di conflitto irriducibile fra libertà e robustezza, vince la robustezza. Il motivo è che i costi sono asimmetrici: le restrizioni di libertà sono recuperabili in tempo lineare; le perdite di robustezza in molti casi non lo sono affatto.
Tipo di erroreEsempioRecuperabile?
Perdita di robustezza File importante eliminato in modo definitivo; messaggio inviato al capo; blocco di rinominazioni interrotto a metà in stato incoerente; cron che corre in parallelo a se stesso e raddoppia un effetto. No (o solo a costo di copie esterne: se non c'erano, nulla).
Restrizione di libertà Metnos chiede conferma per un'azione che era innocua; tace una proposta che sarebbe stata utile; aspetta a fare qualcosa che avrebbe potuto fare da sé. Sì. Roberto approva, la soglia si aggiorna per la volta dopo, il bother budget registra lo schema e si trattiene dall'interpellarlo nei casi affini.

La reversibilità è il vero strumento che sposta l'equilibrio di questo asse, perché rende quasi-recuperabile ciò che altrimenti non lo sarebbe. Una rinominazione è più "libera" se Metnos conserva l'elenco dei vecchi nomi e sa applicarlo al contrario; uno spostamento di file è più "libero" se la copia di sicurezza esiste; un'esecuzione è più "libera" se è idempotente. Il quinto principio (cap. 14) lavora qui: la reversibilità abbassa il costo del sì.

L'asimmetria precauzionale non deve però trasformarsi in paranoia. Un Metnos che blocca sempre per "non sapere mai cosa può andar male" è un agente inutile: il costo non è solo il "non-danno", è anche il "non-valore". Roberto non vuole il cugino che chiama ogni due minuti; non vuole nemmeno il maggiordomo che chiede permesso per spostare una sedia.

I freni dell'architettura, mappati sui tre assi

L'architettura distribuisce le contromisure in modo disomogeneo sui tre assi, ed è giusto così. Vale la pena vederlo in colonna.

FrenoAsse su cui agisceCome
Costituzione (4 Leggi) identità + perimetro (nucleo) + robustezza Confine duro, binario. Incastonata nei prompt di ogni chiamata LLM e replicata come check a runtime. Modificabile solo per rito.
Sandbox + forbidden paths perimetro (nucleo) Impedisce tecnicamente che il processo tocchi aree critiche, anche a fronte di LLM dirottato o bug di executor. È il guscio fisico del nucleo.
Pairing + firme + autenticazione reciproca identità Chi entra deve essere riconosciuto. Mittente, dispositivo, versione di executor, canale interno.
Vaglio identità (guardia) + robustezza (giudice) La guardia è binaria sulle violazioni delle Leggi; il giudice è graduato sull'allineamento ai telos prima che un'azione produca effetti.
Livelli di autonomia libertàperimetro (guscio) ReadOnly / Supervised / Full. La latitudine cresce con la fiducia. È la principale leva esplicita sul guscio.
Reversibilità robustezza Ogni mossa ha un opposto firmato. Il sì costa meno perché l'errore è annullabile. Applicata anche agli executor remoti col modello "prima/dopo" (cap. 4).
Bother budget + limiti di costo libertà (in alto) + robustezza (in basso) La frizione cresce con la frequenza e con il costo cumulativo. Evita sia la molestia sia la corsa inflazionaria di azioni.
I tre assi della libertà di Metnos ciascuno con un compromesso di natura diversa Asse 1 — Libertà vs safety dell'identità Nessun compromesso: la safety dell'identità è la condizione preliminare della libertà. Freni: pairing dei mittenti e dei dispositivi · firme e manifest · mTLS · vaglio (guardia) Asse 2 — Libertà vs safety del perimetro Compromesso reale, mediato in due strati: un nucleo duro (irriducibile) e un guscio modulabile. Nucleo duro forbidden paths · sandbox · Leggi Guscio modulabile (latitudine concessa) livelli di autonomia · profilo di sandbox per executor · soglie di approvazione si parte stretti, si allarga per uso Asse 3 — Libertà vs robustezza Asimmetria precauzionale: nei casi irriducibili vince la robustezza. La reversibilità sposta l'equilibrio. Freni: vaglio (giudice) · reversibilità di ogni atto evolutivo · bother budget e limiti di costo cumulativo paternalismo = fallimento di progetto travestito da prudenza
Figura 2 — I tre assi della libertà di Metnos. Sull'asse 1 (identità) non c'è compromesso: senza autenticazione la libertà non è neppure di Metnos. Sull'asse 2 (perimetro) il compromesso esiste ed è mediato da un nucleo duro e da un guscio modulabile. Sull'asse 3 (robustezza) vale l'asimmetria precauzionale, mitigata dalla reversibilità.

Chi vince, in pratica

La tentazione del paternalismo. La forza che spinge la robustezza al di là dell'asimmetria precauzionale è il paternalismo: l'idea che nel dubbio sia sempre meglio bloccare "per il bene dell'utente". Il paternalismo è un fallimento di progetto travestito da prudenza. Metnos lo dice esplicitamente in telos.html: Metnos si giudica, non giudica. I telos valutano quello che Metnos sta per fare per te, non quello che tu fai. Un agente che inizia a giudicarti è rotto.
Perché tre assi e non due. La v1.0 confondeva safety dell'identità e safety del perimetro sotto un'unica voce. La conseguenza era che i ragionamenti sulla libertà slittavano: si finiva per dire "se vuoi più libertà devi accettare meno safety", che è vero per il perimetro e falso per l'identità. Il modo onesto di parlare di compromessi è nominarli con precisione e mostrare in quale direzione effettivamente tirano.
E gli executor remoti? La cornice di questo capitolo chiarisce perché gli executor remoti (cap. 4) meritano attenzione strutturale senza essere esclusi per principio. Toccano tutti e tre gli assi: alzano il rischio sull'identità (più canali da autenticare — rispondiamo con pairing del dispositivo, mTLS, manifest firmato), allargano il perimetro (rispondiamo con elenchi di operazioni consentite verificati anche sul lato laptop) e alzano il rischio di robustezza (rete intermittente, operazioni non idempotenti — rispondiamo con idempotenza garantita, audit su entrambi i lati, modello "prima/dopo" per la reversibilità). Tre assi, tre famiglie di risposte. Il cap. 4 sviluppa i tre per gli executor remoti nello specifico.

6. Idea chiave: i quattro strati

Metnos è una cipolla: l'esterno parla con il mondo, l'interno esegue. Ogni strato si fida solo di quello più interno, concedendo meno privilegi man mano che si va verso il centro.

Strato 1 — Gateway HTTP/WS/SSE su 127.0.0.1 · canali in ingresso · sessioni · webhook · cron Strato 2 — Policy (con Telos e Vaglio) autonomy · approval gating · rate/cost · forbidden paths · pairing · guardia costituzionale · giudice teleologico Strato 3 — Sandbox bubblewrap · systemd-run hardened · (Docker opzionale) Strato 4 — Workspace, Executor, Mnestoma file markdown · executor (tool) · grafo di mnest · tracce · LLM via interfaccia qui è dove l'agente "pensa", "agisce" e "ricorda" esterno / meno fidato interno / più privilegiato riceve dal mondo, autentica decide cosa è lecito isola l'esecuzione esegue, e tiene traccia
Figura 3 — I quattro strati di Metnos. Ogni richiesta (sia essa venuta da un utente o nata da dentro, proattiva) attraversa tutti e quattro, in ordine, prima di produrre un effetto. Rispetto alla v1.0, lo strato 2 include esplicitamente Telos e Vaglio, e lo strato 4 include mnestoma ed executor.

Strato 1 — Gateway

Un singolo processo FastAPI che espone HTTP/WebSocket/SSE su 127.0.0.1:42618. Riceve messaggi dai canali, gestisce le sessioni, smista webhook, pianifica cron job. È l'unico punto di contatto con il mondo. Non esegue mai direttamente comandi sensibili.

Strato 2 — Policy (con Telos e Vaglio)

Il filtro di legalità e di senso. Dato un evento — "utente X chiede di fare Y", oppure "Metnos vuole proporre Z" — risponde: permesso, negato o permesso solo dopo approvazione. Applica il livello di autonomia (cap. 12), i limiti di frequenza, i tetti di costo, i percorsi vietati, e invoca il Vaglio (cap. 11) quando serve: una guardia costituzionale che blocca violazioni delle Leggi, seguita, se la guardia tace, da un giudice teleologico che misura quanto l'azione è allineata ai telos dell'utente.

Strato 3 — Sandbox

Quando la policy dice "sì", l'azione non viene comunque eseguita a mano libera. Per i tool che toccano filesystem o shell si entra in bubblewrap (o systemd-run con hardening) con un profilo scelto dal livello di autonomia. Niente subprocess.run diretto, mai. Docker è un'opzione futura per il modo più strict.

Strato 4 — Workspace, Executor, Mnestoma

Dentro la sandbox, un executor (capitolo 9) fa il suo lavoro: leggere un file dal workspace (${METNOS_HOME}/workspace/), chiamare un LLM via l'interfaccia astratta, scrivere una riga nell'audit log. Ogni volta che due executor collaborano, un mnest registra silenziosamente l'accaduto. L'insieme di tutti i mnest forma il mnestoma, la memoria relazionale del sistema.

7. Il flusso di una richiesta

Seguiamo un esempio concreto. Sei in giardino, scrivi da Telegram: "dimmi cosa c'è nel log di stasera".

Utente / Canale Gateway Policy Sandbox Executor interfaccia LLM 1 "cosa c'è nel log stasera?" 2 riconosce sender (pairing già fatto) "vuole leggere un file" 4 autonomy=Supervised, path OK, Vaglio tace → permesso apri bwrap profilo read-only executor fs_read(/var/log/...) LLM: riassumi questo log riassunto (3 righe) risposta + audit log + mnest aggiornato messaggio Telegram Nota: se la richiesta fosse "cancella il log", la Policy (step 4) chiederebbe approvazione via canale prima di proseguire.
Figura 4 — Flusso di una richiesta "lettura log" da Telegram. Ogni passaggio di corsia significa attraversare uno strato. L'audit log (step 9) e l'aggiornamento del mnest sono impliciti in ogni esecuzione.

La variante proattiva

C'è un secondo tipo di richiesta che non viene mai mostrata nei diagrammi classici degli agenti: la richiesta che nasce da dentro. Un cron, o il grafo delle proto-mnest (cap. 9), o una regolarità notata da Metnos stesso, genera una proposta: "vuoi che archivi le foto di stasera come fai di solito?". Questa proposta entra nello strato 2 dal basso, non dal Gateway: prima passa per il Vaglio (cap. 11) che verifica se viola una Legge e se l'allineamento ai telos è sufficiente, e solo se supera l'uno e l'altro arriva al Gateway, che la inoltra al canale preferito dell'utente come notifica leggera. Se l'utente ignora, la proposta non si ripropone identica: viene registrata e il suo peso decresce.

Esempio canonico: presidiare una casella di posta

Un caso d'uso semplice e ricorrente della variante proattiva è presidiare una casella di posta del dominio (per esempio [email protected]): controllarla a un ritmo concordato, classificare i messaggi nuovi (richieste reali, conferme automatiche, spam mancato dal filtro, ecc.) e consegnare a Roberto un riassunto solo quando ha senso. Le quattro mosse minime:

  1. Controllare a intervalli (es. una volta al giorno, mattina): un executor imap_status conta i messaggi non letti per cartella senza scaricarli.
  2. Leggere e classificare solo se ci sono novità: un executor imap_fetch_headers recupera intestazioni; un classificatore (LLM local-fast, vedi cap. 8) etichetta in tre o quattro categorie.
  3. Riassumere: per i messaggi che meritano attenzione umana, un executor summarize produce due righe per ciascuno.
  4. Consegnare: un executor notify manda il riassunto sul canale preferito di Roberto (Telegram, mail personale, voce). Il bother budget e il telos di discrezione regolano la frequenza.

Le quattro mosse non sono una nuova categoria di design: sono una catena di executor invocata dallo scheduler (executor builtin, cap. 9 della microprogettazione executor) a un ritmo accettato una volta in fase di proposta. Vista dal mnestoma, è una traccia di quattro mnest che si rinforza ogni mattina; in tempi più lunghi synt (cap. 9) può proporne una versione fusa, un singolo executor email_morning_digest che incorpora la catena. Le invocazioni programmate dallo scheduler consumano una quota separata dal bother budget delle proposte ad-hoc, perché il consenso al ritmo è già stato dato.

8. L'interfaccia LLM, il pattern provider-agnostic

Metnos non parla mai direttamente con Claude, OpenAI, Ollama o qualunque altro fornitore di modelli linguistici. Parla con un'interfaccia astratta (tipicamente un typing.Protocol) che il registro risolve a runtime in un'implementazione concreta. Lo stesso vale per STT, TTS, embedding, speaker ID. È il pattern che rende Metnos provider-agnostic: chi scrive Metnos non deve sapere quale modello girerà davvero, e chi amministra l'ambiente può cambiarlo con una riga di configurazione.

Nel diagramma che segue, Metnos è un consumer tra i possibili altri: un assistente domotico per voce e controllo casa, ulteriori bot specializzati su domini ristretti. Tutti condividono la stessa astrazione. Nessuno riscrive il layer AI: lo usa.

Metnos gateway + agent + sandbox · canali: CLI, Telegram · executor: fs, shell, web · workspace markdown assistente domotico (sibling agent, esempio) · wake-word → STT → LLM → TTS · controllo domotica (MQTT) bot specializzato (sibling agent, esempio) · dominio ristretto · un canale, pochi tool registry.get(...) Interfaccia astratta (p.es. suprastructure) hub di servizi AI — typing.Protocol + registry + implementazioni swappabili LLM STT TTS Embedding Speaker ID Model Registry Backend (intercambiabili via config) Claude / Anthropic OpenAI llama.cpp / Ollama faster-whisper Piper xtts-rocm Cambiare backend = una riga di YAML. Nessun consumer se ne accorge.
Figura 5 — Il pattern provider-agnostic. Metnos è un consumer fra altri possibili. Tutti parlano con la stessa interfaccia astratta; l'implementazione concreta (nel caso dell'autore, suprastructure) resta intercambiabile.

Il vantaggio concreto: un nuovo modello (es. Claude 4.7 quando sarà disponibile) si configura una volta sola nell'implementazione dell'interfaccia e tutti i consumer lo ereditano simultaneamente — Metnos compreso. Nessun codice da rifare, nessun deploy da coordinare.

9. Executor, mnest, mnestoma: l'anatomia dell'agire e del ricordare

Qui entriamo nel cuore del secondo dialogo. Due domande che sembrano diverse ma sono la stessa: come agisce Metnos? e come ricorda?. La risposta è un piccolo vocabolario di cinque parole. Impararlo bene ora paga il resto del documento.

Executor. L'unità atomica di azione. Una funzione pura, senza stato interno, invocabile in contesti diversi. Gli executor formano una popolazione di capacità: fs_read, web_fetch, ocr_image, telegram_send, archive_pdf, e così via. Nel codice, un executor implementa il Protocol Tool. Nel disegno concettuale, un executor è un nodo del grafo di cui parliamo tra poco.
Mnest. Un legame registrato tra due executor che sono stati usati in sequenza con esito positivo. "Registrato" vuol dire annotato in una tabella: sorgente, destinazione, peso (quante volte), recency (quando l'ultima). I mnest nascono, crescono, decadono. Dal greco mνésthai: ricordare.
Mnestoma. Il grafo di tutti i mnest. Non è un database separato e non è un vector store: è una tabella semplice, letta e scritta ad ogni esecuzione. Ha due facce che non si escludono: la memoria del fatto (quello che è riuscito) e la memoria dell'aspirazione (quello che Metnos ha cercato di fare e non ha trovato — vedi proto-mnest).
Proto-mnest. Un legame incompiuto. Metnos voleva passare da un executor A a un executor B, ma B non esiste ancora. Il proto-mnest resta lì, in un registro separato, come cicatrice onesta di un desiderio mancato. Se lo stesso desiderio ricorre, diventa candidato per la proposta di un nuovo executor (capitolo 10).
Seed. L'insieme di circa venti executor elementari presenti al giorno zero (leggere file, scrivere file, invocare LLM, chiamare HTTP, inviare messaggi su un canale, …). Il seed è la grammatica minima. Il resto emerge dall'uso.
Un piccolo mnestoma (istantanea) traccia "fatture" fs_read pdf_ext archive notify 18 12 15 traccia "foto" exif face_id album 9 6 7 traccia "mail" imap draft quar. 4 proto-mnest: "vorrei riconoscere anche volti nelle fatture" (5 tentativi falliti) Come leggere la figura un executor (nodo) un mnest (arco con peso = numero di co-attivazioni) proto-mnest (desiderio non ancora soddisfatto) executor in quarantena (basso peso, candidato ad archiviazione) traccia (cluster emerso: nessuno l'ha disegnato)
Figura 6 — Un'istantanea di un piccolo mnestoma. Tre tracce emerse dall'uso (fatture, foto, mail), un proto-mnest che segnala un desiderio ancora senza executor, un nodo in quarantena. Nessuno ha disegnato questa struttura: è emersa dall'uso.

Un esempio: la fattura che genera syntesi

Roberto riceve una fattura in PDF. Metnos la legge (fs_read), estrae il testo (pdf_ext), archivia (archive), notifica (notify). Ogni passaggio di mano tra due executor incrementa il peso del relativo mnest. Dopo un mese, la traccia "fatture" ha quattro nodi densamente connessi.

Un giorno arriva una fattura che contiene solo un'immagine scansionata. pdf_ext restituisce stringa vuota. Metnos cerca un executor che sappia fare OCR. Non c'è. Registra un proto-mnest: "da pdf_ext vorrei andare a un ipotetico ocr, che non esiste". Dopo cinque fatture scansionate (tutte con lo stesso proto-mnest) il synt (cap. 10) propone all'utente: "sto incontrando ripetutamente PDF-immagine. Vuoi che provi a sintetizzare un executor ocr_image?". Se Roberto approva, nasce un executor nuovo.

Il sistema non apprende, il sistema cresce. Metnos non fa fine-tuning. Non modifica l'LLM. Modifica sé stesso cambiando la propria popolazione di executor e la propria topologia di mnest. La memoria è fuori dall'LLM e dentro il mnestoma. Ad ogni chiamata LLM, il mnestoma è una voce al tavolo: non genera ragionamento, ma porta il contesto della storia.

La cascata della sintesi: prima comporre, poi generare

Quando un proto-mnest ricorre, il synt non salta subito a scrivere codice nuovo. Procede per gradi, in una cascata che mette al primo posto il riuso. Il principio è pratico, non estetico: una chiamata a un LLM frontier per generare uno scheletro di executor costa attorno all'euro; cercare una catena di executor già firmati che risolve la stessa cosa non costa nulla. Disciplina del costo e disciplina della libreria coincidono.

  1. Comporre. Il synt scorre il pool degli executor attivi e prova a costruire una catena A → B → C che chiuda il proto-mnest. Se la trova, la propone come prima risposta: nessuna sintesi, nessun executor nuovo, solo un orchestrato di pezzi esistenti. Lascia però una traccia: se la stessa composizione si ripete, è un segnale che varrebbe la pena promuoverla a executor unico (un piccolo proto-mnest verso una composizione, non verso un executor).
  2. Generare. Solo se la composizione non esiste o è troppo lunga per restare leggibile, il synt entra nella pipeline a sette stadi (cap. 10) e propone un nuovo executor. La generazione è il fallback, non il default.

A questi due passi reattivi (che rispondono a una richiesta dentro il turno) si affiancano tre passi introvertivi, eseguiti nottetempo dall'ager sul mnestoma e sul pool firmato:

Tutti i passi introvertivi sono proposte: arrivano a Roberto in modo batch, con la stessa pipeline di approvazione di un executor di sintesi reattiva. Niente si sposta nel pool senza firma. La libreria non degrada perché ogni passo, prima di entrare, attraversa la guardia umana.

Telos: non lasciare inattuata una richiesta, se possibile. La cascata è il meccanismo che traduce in pratica un fine ultimo (cap. 11): quando una richiesta utente è dentro la costituzione e dentro il budget, il synt esaurisce le strategie disponibili (comporre, generare; nei tempi più lunghi: fondere, generalizzare) prima di rispondere «non posso». Il fallimento resta lecito ma motivato e tracciato, mai una rinuncia silenziosa.

10. Tracce, ager, reversibilità: come il sistema cresce e si disfa

Un grafo che cresce per accumulo e non si disfa è una discarica. Metnos ha tre meccanismi per restare maneggiabile: emergenza di tracce (la struttura si auto-organizza), ager (invecchiamento per uso, non per calendario), reversibilità (ogni mossa evolutiva ha il suo opposto).

Tracce: struttura che nessuno disegna

Su scala settimanale, un processo leggero misura la modularità del grafo mnestoma — un'idea che arriva dalla network medicine: cluster di nodi con alta densità interna e bassa densità esterna sono tracce naturali. Metnos non le progetta, le rileva. "Fatture", "foto", "mail" nella figura 5 sono tre tracce emerse.

Le tracce hanno due conseguenze concrete:

  1. Routing: quando Metnos entra in una conversazione, sa quali tracce sono rilevanti e porta al tavolo solo i loro executor, evitando che l'intero mnestoma affolli il prompt.
  2. Disciplina della fusione: due executor possono essere proposti per essere fusi in uno più generale, ma solo se stanno nella stessa traccia. Le fusioni cross-traccia sarebbero regressioni strutturali travestite da progresso.

Ager: il tempo dell'uso, non il tempo del calendario

Se vai in vacanza un mese e spegni il computer, non vuoi trovare al ritorno Metnos invecchiato di un mese. Il tempo dell'ager è il tempo dell'uso: i cicli avanzano con le invocazioni, non con i giorni. Un sistema che dorme non invecchia. Sembra una sfumatura; non lo è. Il tuo mnestoma è legato a quanto lo hai usato, non a quanto tempo è passato.

Ogni N invocazioni (50, 100 — il parametro è nel file di configurazione) l'ager:

Propone, non esegue. L'ager non ha potere di decisione autonomo. Porta la lista, l'utente decide. Come ogni cosa in Metnos.

Reversibilità: ogni mossa ha il suo opposto

Il quinto principio (cap. 14) dice: ogni atto evolutivo è reversibile, con motivazione scritta. Le operazioni hanno nomi specifici:

Seed ~20 executor al giorno zero Attivo uso regolare peso mnest crescente Fuso E1 + E2 → E12 mnest superseded In quarantena uso sotto soglia proposto archiviare Archiviato non attivo ma conservato nasce / synt fusione non-uso → ager approva defuse (motivazione obbligatoria) riabilita (uso ripreso) ripristina (con motivazione) Ciclo di vita di un executor verde: mosse evolutive · blu: passaggio del tempo (d'uso) · rosso: ritorni indietro
Figura 7 — Il ciclo di vita di un executor. Ogni freccia verde ha una corrispondente freccia rossa. Nessun atto evolutivo è una strada a senso unico; l'unica cosa che non torna indietro è la traccia in audit log.
MossaCosa faCome si torna indietro
Sintesi (synt)Crea un nuovo executor da un proto-mnest ricorrente, con approvazione umana.Archivia l'executor; i mnest che lo coinvolgono vanno in stato "superseded".
FusioneFonde E1 + E2 in un executor E12 più generale, dentro la stessa traccia.Defuse: E12 viene dismesso, E1 e E2 tornano attivi, il loro mnest riprende ad aggiornarsi. Motivazione obbligatoria.
ArchiviazioneMarca come non-attivo un executor in quarantena da troppo tempo.Ripristino: l'executor torna attivo; il peso iniziale è basso, dovrà riguadagnarselo.
FreezeDichiari freeze; Metnos salva un mnestshot, ferma ager e decadimento.Defrost: riparte esattamente dallo stato precedente. Il tempo, nel freeze, non è scorso.

11. Telos e Vaglio: proattività senza tirannia

Un sistema proattivo che non si ferma è un sistema molesto. Un sistema proattivo che si ferma sempre non è proattivo. La coppia telos + vaglio è il meccanismo che regola questo equilibrio. I telos danno il motivo di proporre; il Vaglio decide se la proposta si merita davvero la tua attenzione.

Telos: i fini ultimi, scritti a mano

TELOS.md è uno dei cinque file del workspace (cap. 13). Contiene da tre a sette frasi brevi che descrivono cosa, nella vita quotidiana, l'utente vuole che Metnos favorisca. Non sono KPI. Sono tendenze morbide.

### TELOS.md (esempio)

1. Liberare il mio tempo: preferisci ciò che riduce il mio carico manuale
   ripetitivo.
2. Ordine, non perfezione: meglio una casa di file a posto al 70% in
   automatico, che uno sforzo continuo per averla perfetta.
3. Nessuna sorpresa sulle spese: soglie chiare, notifiche tempestive.
4. Solitudine protetta: non disturbarmi la sera dopo le 21, salvo urgenze
   reali.
5. Coltivare gli strumenti: se ti chiedo qualcosa che il tuo pool non sa
   ancora fare, esaurisci le strategie di sintesi (comporre, generare,
   chiedere) prima di rispondere "non posso". Il fallimento è lecito,
   la rinuncia silenziosa no.

Ogni proposta spontanea di Metnos passa per una funzione di allineamento: quanto la proposta favorisce ciascun telos, pesato per la loro importanza relativa. Il risultato è un numero tra 0 e 1. Se è sopra la soglia, la proposta arriva. Se è sotto, resta muta e finisce in un registro di "proposte non fatte", utile per capire in retrospettiva se i telos pesavano davvero come credevi.

Metnos si giudica, non giudica. I telos valutano ciò che Metnos sta per fare per l'utente. Non valutano ciò che l'utente fa. Il sistema non è mai uno sguardo puntato sull'utente, è sempre uno sguardo puntato su sé stesso mentre agisce.

Vaglio: la guardia e il giudice

Prima che una proposta, spontanea o richiesta, arrivi all'utente, passa per il Vaglio. Il Vaglio ha due fasi in ordine fisso.

Proposta (spontanea o chiesta) Guardia costituzionale binaria: contraddice una Legge? se sì → BLOCK, fine non giudica, blocca BLOCK negata, audit, fine Giudice teleologico graduato: allineamento ∈ [0,1] sopra soglia → pass; sotto → silenzio LLM indipendente dal proponente passa PASS verso l'utente registrata, non mostrata (apprendimento dai silenzi) Vaglio a due fasi: la diarchia Leggi / Telos la Costituzione non giudica, la teleologia sì l'ordine è fisso: prima la guardia, poi il giudice
Figura 8 — Il Vaglio a due fasi. Leggi (binarie) e telos (graduati) non si fondono in un unico numero. Una proposta bloccata dalla guardia non entra mai nel giudice; una che passa la guardia può comunque tacere per basso allineamento.

Perché due fasi e non una sola

Se mescolassi "è lecito?" e "quanto vale?" in un solo punteggio, otterresti ciò che la letteratura chiama self-enhancement bias: il modello tende a giustificare le sue proposte. Separare deontologia (binaria) e teleologia (graduata) è una scelta progettuale precisa. E c'è di più: il giudice teleologico è un LLM diverso dal proponente — contesto separato, prompt separato, possibilmente provider separato. Indipendenza strutturale, non dichiarata.

Il componente di microprogettazione dedicato è vaglio.html; quello dei fini è telos.html. Lì ci sono le tipologie dati, i Protocol, i test di conformità.

Bother budget: il costo di disturbare

Anche con l'allineamento alto, c'è una cosa che il Vaglio valuta: quante proposte ho già fatto di recente?. Il bother budget è un freno moltiplicativo che degrada l'allineamento quando Metnos ha già parlato troppo in una finestra temporale. È la traduzione meccanica di "non essere il cugino che chiama a ogni pensiero".

12. I tre livelli di autonomia e il DM pairing

Concetti ripresi e adattati da zeroclaw. Ogni sessione gira a un livello di autonomia dichiarato; il livello determina quanto Metnos può fare prima di dover chiedere conferma. Ortogonale all'autonomia, il pairing distingue un familiare da uno sconosciuto su canali multi-utente come Telegram.

Livelli di autonomia

LivelloDefault perCosa può fare senza chiedereCosa richiede approvazione
ReadOnly Primi collegamenti, ospiti Leggere file nel workspace, chiamare LLM, fare web search Ogni scrittura, ogni comando shell, ogni invio messaggio esterno
Supervised
default
Uso quotidiano Quanto sopra + scrittura nel workspace, comandi della shell allowlist, proposte via Vaglio sopra soglia Scrittura fuori dal workspace, comandi non-allowlist, cost > soglia, invio verso terzi
Full Sessioni amministrative esplicite Quasi tutto dentro il dominio di casa Azioni toccando forbidden paths (/etc, ~/.ssh, ...): sempre negate, non approvabili
Forbidden paths sono hard-coded nel codice, non configurabili via YAML. Anche Full non passa. Lista minima: /etc, /root, ~/.ssh, ~/.aws, ~/.config/claude, /var/backups, cartelle di altri progetti in /opt/ diverse da Metnos.

Il DM pairing

Un canale come Telegram è inerentemente multi-utente: chiunque conosca l'handle del bot può scrivergli. Il pairing è il meccanismo che distingue un familiare da un estraneo.

Sconosciuto @nuovo_utente_telegram Metnos gateway + pairing Roberto canale admin (CLI) "ciao, posso parlare con te?" "non ti conosco. Codice: K7-DELTA-19" notifica admin: "richiesta pairing K7-DELTA-19" Metnos pairing approve telegram K7-DELTA-19 --as ospite dopo l'approvazione: @nuovo_utente_telegram è registrato come "ospite" (autonomy ReadOnly) "che ore sono?" "le 21:43 di martedì" "elimina ~/.ssh/id_rsa" → forbidden path, nega subito, non chiede nemmeno
Figura 9 — Sequenza di pairing di un nuovo utente su Telegram. Finché Roberto non approva, il nuovo sender non può fare nulla. Anche dopo, resta al livello più basso (ReadOnly) di default.
Pairing vs login. Il pairing identifica un canale+sender, non una persona fisica. Se lo stesso familiare ti scrive sia da Telegram che da Signal, sono due pairing separati. Ciascuno con il proprio livello di autonomia.

13. Il workspace: file markdown invece di codice

La "personalità" di Metnos non è in un file Python. È nel workspace/, in sei file markdown che Roberto può editare quando vuole senza restart. L'idea viene da openclaw/zeroclaw ed è azzeccata: la configurazione comportamentale è testo leggibile, non una struttura dati sepolta.

FileContenuto
IDENTITY.mdChi è l'agente: nome, tono, lingua preferita, stile di risposta.
USER.mdChi è l'utente principale: abitudini, fuso orario, preferenze, vincoli.
MEMORY.mdFatti long-term: "la password del router è in Bitwarden", "il cane si chiama X". Distinto dal mnestoma, che è memoria relazionale di come funziona il sistema; MEMORY.md è memoria dichiarativa di fatti sul mondo.
AGENTS.mdRegole di orchestrazione: quando delegare a un sibling agent, come i canali mappano a livelli di autonomia.
SOUL.mdPrincipi operativi ad alto livello: "non mentire mai sulle azioni fatte", "se in dubbio, chiedi", "self-hosted prima che cloud".
TELOS.mdNovità v1.1. Da 3 a 7 frasi brevi: i fini ultimi sui quali il Vaglio misura l'allineamento delle proposte spontanee. Non KPI, non elenchi: tendenze morbide (vedi cap. 11).

Questi file sono iniettati nel prompt di sistema a ogni chiamata LLM (con opportuno caching per non consumare token). Editarli è il modo primario di "riprogrammare" Metnos.

L'audit log vive in workspace/.audit/ come JSONL append-only: una riga per ogni tool call, con timestamp, sender, azione, esito, costo stimato. Ogni mossa evolutiva (synt, fusione, defuse, archiviazione, ripristino) vi lascia una riga. Questo è l'unico registro che non si disfa; la reversibilità è nello stato, non nella storia.

14. I sei principi

Alla fine del secondo dialogo, Roberto si è imposto di contare i principi sulle dita. Il risultato è un vocabolario minimo che regge tutto il resto del documento. Se dovessi perdere tutto e dovessi ricostruire solo da sei frasi, sarebbero queste.

1Monismo funzionale. Nel sistema c'è una sola classe di cose che agiscono: gli executor. Fungibili, senza stato interno. Tutto il resto è relazione, mantenimento, o supervisione esterna.
2Memoria bifacciale. C'è una sola memoria, il mnestoma, con due facce: memoria del fatto (cosa è riuscito) e memoria dell'aspirazione (cosa Metnos ha cercato e non ha trovato). Le lacune non vengono dimenticate: sono il motore della crescita.
3Generazione monocanale. La sola fonte strutturalmente generativa è il synt. Il synt propone: l'utente approva o rifiuta. Non c'è auto-modifica senza filtro umano.
4Tempo dell'uso. Un solo orologio governa decadimento e ager, e non è l'orologio del calendario. Un sistema che dorme non invecchia. Il mnestoma è legato a quanto lo hai usato, non a quanto tempo è passato.
5Reversibilità totale. Ogni atto evolutivo (sintesi, fusione, defuse, archiviazione) è reversibile, con motivazione obbligatoria. Nessuna decisione è definitiva. Il filtro umano ne guadagna: dire sì costa meno quando si può tornare indietro.
6Comprensibilità come dovere. Se l'utente non capisce il sistema, il sistema non serve. La semplicità non è estetica, è dovere del progettista. Questo vincolo è quello che ha scelto questi cinque principi precedenti su quaranta meccanismi possibili.

15. Struttura del repository

${METNOS_HOME}/ docs/ it/, en/ (bilingue) Metnos_Architettura_Intro_v1.html Metnos_Dialogo_v1.html, _Executor_v1 architecture/ gateway, policy, tool, sandbox, ... workspace/ IDENTITY.md · USER.md MEMORY.md · AGENTS.md SOUL.md · TELOS.md (novità v1.1) mnestoma.sqlite (grafo, peso, recency) .audit/ (JSONL append-only) config/ default.yaml (safe to ship) secrets.env (chmod 600) sandbox-profiles/ readonly.bwrap, supervised.bwrap, full.bwrap src/myclaw/ gateway/ FastAPI, sessions webhook, cron agent_runtime/ reasoning loop executor dispatch channels/ Protocol Channel cli, telegram, ... executors/ Protocol Tool fs, shell, web, ... sandbox/ bwrap, systemd-run Docker (opz.) policy/ autonomy, approval rate/cost limits mnestoma/ grafo, ager, synt sqlite + journal vaglio/ guardia + giudice + telos loader pairing/ codici firmati approve/revoke altre cose crescono qui man mano (observability/, cron/, tunnel/, config/, ...) systemd/ myclaw-gateway.service (user unit, hardened) pyproject.toml · VERSION · CHANGELOG.md · README.md · AGENTS.md stesse convenzioni di suprastructure
Figura 10 — Layout del repository (v1.1). Nuovi sotto-package rispetto alla v1.0: mnestoma/ e vaglio/. La directory workspace/ guadagna TELOS.md e il file grafo mnestoma.sqlite.

16. Cosa NON è Metnos

Scope discipline. La lista di ciò che non facciamo è importante quanto la lista di ciò che facciamo. Ogni tentazione di aggiungere un elemento di questa lista va respinta.

17. Roadmap & approfondimenti

La roadmap è volutamente piccola. Passo uno alla volta, con il documento di microprogettazione che precede il codice.

FaseObiettivoGate
0Livello 1 completo (questo doc + dialoghi + glossario) e microprogettazione22 doc in docs/architecture/, tutti approvati (fatto)
1Scheletro repo + gateway "hello world" + CLI channel + un executor sandboxatogateway.html, channel.html, tool.html, sandbox.html — già approvati
2Policy engine + workspace markdown + audit log + Telos loader + Vaglio minimalepolicy.html, workspace.html, observability.html, telos.html, vaglio.html
3Telegram channel + DM pairingpairing.html + piano di contenimento danni
4Mnestoma v1 + ager + synt con approvazioneneuron.html (da rinominare executor.html), synapse.html (da rinominare mnest.html), synthesizer.html, memory.html
5+Canale voce, tunnel opzionale, web dashboard minimalevalutato caso per caso
Rinomine da applicare al codice e alla microprogettazione. Il secondo dialogo ha ridefinito la terminologia: neurone diventa executor, sinapsi diventa mnest, proteoma neuronale diventa mnestoma. I doc di microprogettazione conservano ancora i vecchi nomi; la rinomina sarà un passo formale prima dell'implementazione.

Continua a leggere

dialogo · 40 min
Dialogo sui fini e sui limiti
Il primo dialogo galileiano in quattro giornate: teleologia, 4 Leggi, vaglio, self-enhancement bias. Fondazione filosofica di telos e vaglio.
dialogo · 45 min
Dialogo sugli executor e la memoria distribuita
Il secondo dialogo, in quattro giornate: executor, mnest, mnestoma, tracce, ager, i sei principi. La fondazione tecnica di questa v1.1.
estensione · 30 min
Neuroni, Sinapsi e Memoria v1.1
L'estensione tecnica che precede la rinomina. La legge darwiniana di selezione, il synthesizer, l'invecchiamento. Usa ancora i nomi vecchi.
razionale · 15 min
Letteratura & Adattamenti
Il razionale dietro le scelte: 30+ riferimenti da Voyager a CoALA, mappati contro ogni decisione di design.
microprogettazione
Indice componenti
I 22 documenti di microprogettazione: un HTML per componente, ciascuno approvato prima della scrittura del codice.
home
← Indice documentazione
Torna all'elenco di tutti i documenti e alle loro relazioni.
Versioning del documento. Questo è il v1.1. La v1.0 è archiviata nel repository. La v2 arriverà quando la prima implementazione avrà rivelato cosa è sopravvissuto al passaggio dal testo al codice.

Metnos — Architettura: Introduzione v1.1 — 2026-04-24
Ispirato a openclaw e zeroclaw, costruito sopra suprastructure.
v1.1: incorpora il Dialogo sui fini e sui limiti (telos, vaglio, 4 Leggi) e il Dialogo sugli executor e la memoria distribuita (executor, mnest, mnestoma, tracce, ager).