← Indice documentazione Fondamenti › Architettura

myclaw

Architettura — Introduzione
Versione 1.0 — 21 aprile 2026
Riferimento: myclaw v0.0.1 (design phase)
Formato HTML self-contained — stampabile PDF

Pubblico: Roberto, chi vuole capire in 20 minuti cosa si sta per costruire.
Stato: solo documentazione. Nessuna riga di codice ancora scritta. Questo documento fissa il "cosa" e il "perché"; la microprogettazione di ogni componente vivrà in docs/architecture/*.html.

Indice

  1. Cos'è myclaw?
  2. Perché non bastano openclaw o zeroclaw
  3. Idea chiave: i quattro strati
  4. Il flusso di una richiesta
  5. L'interfaccia LLM, il pattern provider-agnostic
  6. I tre livelli di autonomia
  7. Il DM pairing
  8. Il workspace: file markdown invece di codice
  9. Struttura del repository
  10. Cosa NON è myclaw
  11. Roadmap & approfondimenti

1. Cos'è myclaw?

myclaw è 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 WhatsApp o 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:

Tecnicamente è un processo Python ≥ 3.11 che gira a /opt/myclaw/, composto da quattro strati (gateway, policy, sandbox, workspace/tool). Ogni servizio AI (LLM, STT, TTS, embedding, speaker-ID) viene consumato tramite un'interfaccia astratta — myclaw è 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
Local-firstGira sul PC di casa. Nessun dato obbligatoriamente in cloud. Il cloud è solo opzionale (es. LLM provider remoti, tunnel).
Sicuro di defaultBind su 127.0.0.1, autonomy Supervised, sandbox obbligatoria, path forbidden, approvazione per azioni rischiose.
Multi-canaleStessa "mente", interfacce diverse: CLI, Telegram, poi Signal, voce, web dashboard.
Open-endedNuovi tool e canali senza riscrivere il core: basta conformarsi a un Protocol.
Senza lock-inIl layer AI è dietro un'interfaccia astratta: cambiare Claude con Ollama = una riga di configurazione, senza toccare il codice. Nell'ambiente dell'autore il pattern è implementato da suprastructure.

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 (nel mio caso suprastructure) invece di riscriverla;
  2. myclaw è 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. Idea chiave: i quattro strati

myclaw è un cipolla: l'esterno parla con il mondo, l'interno esegue. Ogni strato fidandosi solo dello strato più interno, e 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 autonomy level · approval gating · rate/cost limits · forbidden paths · pairing Strato 3 — Sandbox bubblewrap · systemd-run hardened · (Docker opzionale) Strato 4 — Workspace & Tool file markdown (IDENTITY, USER, MEMORY, ...) · Tool Protocol · LLM via supra qui è dove l'agente "pensa" e "agisce" esterno / meno fidato interno / più privilegiato riceve dal mondo, autentica decide cosa è lecito isola l'esecuzione esegue il lavoro effettivo
Figura 1 — I quattro strati di myclaw. Ogni richiesta attraversa tutti e quattro, in ordine, prima di produrre un effetto.

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

Il filtro di legalità. Dato un evento ("utente X chiede di fare Y"), risponde: permesso, negato o permesso solo dopo approvazione. Applica il livello di autonomia (vedi cap. 6), i rate-limit, i cost-cap (quanto spendere in LLM al giorno), le forbidden paths e lo stato del pairing (cap. 7).

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 & Tool

Dentro la sandbox, il tool fa il suo lavoro: leggere un file dal workspace (/opt/myclaw/workspace/), chiamare un LLM via registry.get(LLMProvider) di suprastructure, scrivere una riga nell'audit log. Il workspace è la "casa" dell'agente: ci vivono i suoi file markdown di personalità e memoria (cap. 8).

4. 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 Tool suprastructure 1 "cosa c'è nel log stasera?" 2 riconosce sender (pairing già fatto) "vuole leggere un file" 4 autonomy=Supervised, path OK → permesso apri bwrap profilo read-only tool fs_read(/var/log/...) LLM: riassumi questo log riassunto (3 righe) risposta + audit log scritto messaggio Telegram Nota: se la richiesta fosse "cancella il log", la Policy (step 4) chiederebbe approvazione via canale prima di proseguire.
Figura 2 — Flusso di una richiesta "lettura log" da Telegram. Ogni passaggio di corsia significa attraversare uno strato. L'audit log (step 9) è implicito in ogni esecuzione.

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

myclaw 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 myclaw provider-agnostic: chi scrive myclaw non deve sapere quale modello girerà davvero, e chi amministra l'ambiente può cambiarlo con una riga di configurazione.

Nel diagramma che segue, myclaw è 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.

myclaw gateway + agent + sandbox · canali: CLI, Telegram · tool: 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(...) suprastructure hub di servizi AI — interfacce 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 3 — Il pattern provider-agnostic. myclaw è un consumer fra altri possibili (qui un assistente domotico e un bot specializzato a titolo esemplificativo). 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 — myclaw compreso. Nessun codice da rifare, nessun deploy da coordinare.

6. I tre livelli di autonomia

Concetto ripreso e adattato da zeroclaw. Ogni sessione gira a un livello di autonomia dichiarato. Il livello determina quanto myclaw può fare prima di dover chiedere conferma.

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 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 myclaw.

Il livello può essere alzato temporaneamente con un comando esplicito (myclaw session --level full --for 10m), loggato e a scadenza automatica.

7. 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 myclaw 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" myclaw 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 4 — 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.

8. Il workspace: file markdown invece di codice

La "personalità" di myclaw non è in un file Python. È nel workspace/, in cinque 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. Es: "sei un maggiordomo formale ma asciutto, rispondi in italiano".
USER.mdChi è l'utente principale: Roberto, abitudini, fuso orario, preferenze, vincoli.
MEMORY.mdFatti long-term accumulati: "la password del router è in Bitwarden", "il cane si chiama X", "ogni domenica chiama la zia".
AGENTS.mdRegole di orchestrazione: quando delegare a un sub-agente, come i canali mappano a livelli di autonomia.
SOUL.mdPrincipi operativi di alto livello: "non mentire mai sulle azioni fatte", "se in dubbio, chiedi", "local-first".

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" myclaw.

L'audit log vive in workspace/.audit/ come JSONL append-only: una riga per ogni tool call, con timestamp, sender, azione, esito, costo stimato.

9. Struttura del repository

/opt/myclaw/ docs/ index.html Myclaw_Architettura_Intro_v1.html Myclaw_Survival_Kit_v1.html architecture/ gateway.html, policy.html, ... workspace/ IDENTITY.md USER.md MEMORY.md AGENTS.md · SOUL.md .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/ reasoning loop tool dispatch channels/ Protocol Channel cli, telegram, ... tools/ Protocol Tool fs, shell, web, supra sandbox/ bwrap, systemd-run Docker (opz.) policy/ autonomy, approval rate/cost limits memory/ Protocol Memory sqlite, jsonl pairing/ codici firmati approve/revoke config/ pydantic schema loader altre cose crescono qui man mano (observability/, cron/, tunnel/, ...) systemd/ myclaw-gateway.service (user unit, hardened) pyproject.toml · VERSION · CHANGELOG.md · README.md · AGENTS.md stesse convenzioni di suprastructure
Figura 5 — Layout del repository. Stessa filosofia di suprastructure: docs accanto alla root, src/ contiene il package, systemd/ il service file, config/ i defaults.

10. Cosa NON è myclaw

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.

11. Roadmap & approfondimenti

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

FaseObiettivoGate
0 (ora)Questo documento + survival kitRoberto approva l'architettura d'insieme
1Scheletro repo + gateway "hello world" + CLI channel + shell tool sandboxatogateway.html, channel.html, tool.html, sandbox.html scritti e approvati
2Policy engine + workspace markdown + audit logpolicy.html, workspace.html, observability.html
3Telegram channel + DM pairingpairing.html + piano di contenimento danni
4Memory persistente + provider failover via suprastructurememory.html; suprastructure ≥ v0.4 se serve
5+Canale voce (riusa STT/TTS di supra), tunnel opzionale, web dashboard minimalevalutato caso per caso

Continua a leggere

estensione · 30 min
Neuroni, Sinapsi e Memoria v1.1
L'estensione naturale: come un agente costruisce attuatori nuovi quando quelli esistenti falliscono, con legge darwiniana di selezione.
pratico · 10 min
Survival Kit — cosa potrò fare
Stesso sistema, visto dall'utente. Cosa potrai farci il giorno 1, con dialoghi-tipo e comandi.
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 documenti di microprogettazione (gateway, policy, sandbox, tool, ...) — cresce progressivamente.
home
← Indice documentazione
Torna all'elenco di tutti i documenti e alle loro relazioni.
Versioning del documento. Questo è il v1. Modifiche non-marginali incrementano il numero; il file precedente resta accessibile per tracciare l'evoluzione del pensiero architetturale.

myclaw — Architettura: Introduzione v1.0 — 2026-04-21
Ispirato a openclaw e zeroclaw, costruito sopra suprastructure.