lf.Un taccuino indipendenteEnglish
Dal taccuino / 008liminalfinds.it

baremetal-agent non lascia nulla sotto di sé

Un agente LLM su Telegram che si avvia come la macchina. README e sorgente C non sempre coincidono.

Uno schizzo a grafite di una nuvoletta di chat collegata a una scheda rettangolare nuda, con sotto livelli mancanti tratteggiati e barrati.

Il make di serie su Linux è fallito: in link servivano sqrt e cos. Con -lm si ottiene un binario da 71.488 byte. È la build userspace ordinaria di bmagent.c, non l’immagine unikernel BareMetal attorno a cui gira il progetto.

baremetal-agent è un solo file C che interroga Telegram, chiama un modello su un endpoint chat compatibile OpenAI (predefinito gemini-2.5-flash), esegue tool e risponde. Su BareMetal dovrebbe essere la macchina avviabile: niente kernel, init o shell sotto, dentro un tetto di 16 MiB di RAM. Licenza MIT, autore Reza Tabibazar. Il 2 ottobre 2026 l’API GitHub riportava 0 stelle; il tip era 6a1f484 del 29 agosto 2026. Il README indica un’immagine unikernel di 2.883.040 byte. Nel sorgente IMAGE_BYTES vale 0 di default e lo riscrive lo script di deploy, così l’agente può dichiarare la propria dimensione quando il valore è noto.

main verifica un token Telegram con i due punti prima di interpretare --ask. Senza quel token il processo esce: la prova one-shot documentata richiede comunque un segreto a forma di Telegram anche se si voleva solo testare la chiave del modello. Superato il controllo, cJSON usa un’arena a bump da 1 MiB e malloc e simili vengono ridefiniti in DO_NOT_malloc, così una modifica successiva non può reintrodurre l’heap nel codice dell’agente. libcurl può comunque allocare al proprio interno; l’affermazione riguarda il percorso del programma.

Alcuni numeri del README non combaciano più con il sorgente controllato. REPLIES_PER_HOUR è 300 in bmagent.c, con un commento che 40 andava bene per una demo privata; tabella e paragrafo sul tetto di spesa nel README dicono ancora 40. NOTES_KEPT è 100 («Was 20»); il README parla ancora delle ultime 20 note a persona. remind_me prende in_seconds, non un timestamp assoluto — il racconto nel README delle chiamate malformate quando si chiedeva l’epoch Unix coincide con lo schema del tool nel file. I vettori di embedding troncati vengono normalizzati in parse_embeddings perché una fetta a 768 dimensioni di un vettore unitario a 3072 non è più unitaria.

Immagine BareMetal, avvio locale con Firecracker e il bot live @unikernel_bot non sono stati provati per questa nota. Sulla macchina di build non c’erano credenziali Telegram o Gemini. Controllati repository, licenza, compilazione Linux con -lm esplicito e le costanti e il flusso descritti sopra.

02 / La scoperta

baremetal-agent di Reza Tabibazar

Agente LLM su Telegram in un solo file C con licenza MIT, pensato per avviarsi come unikernel BareMetal in 16 MiB. Controllato su tip GitHub 6a1f484, affermazioni del README e build userspace Linux di bmagent.c il 2 ottobre 2026; deploy unikernel e bot live non eseguiti.

Visita il repository Leggi il resoconto dell’autore sulla settimana in 16 MB Vedi la piattaforma BareMetal a cui punta

Licenza: MIT