lf.An independent notebookItaliano
From the notebook / 008liminalfinds.com

baremetal-agent Leaves Nothing Underneath

A Telegram LLM agent that boots as the machine. The README and the C file disagree in places.

A graphite sketch of a chat bubble wired to a bare rectangular board with dashed missing layers crossed out beneath it.

Stock make failed on Linux. The link step wanted sqrt and cos; adding -lm produced a 71,488-byte binary. That is an ordinary userspace build of bmagent.c, not the BareMetal unikernel image the project is built around.

baremetal-agent is a single C file that polls Telegram, calls a model through an OpenAI-compatible chat endpoint (default gemini-2.5-flash), runs tools, and replies. On BareMetal it is meant to be the bootable machine: no kernel, init or shell underneath, inside a 16 MiB RAM ceiling. The repository is MIT, authored by Reza Tabibazar. On 2 October 2026 the GitHub API showed 0 stars; tip commit 6a1f484 dated 29 August 2026. The README cites a unikernel image of 2,883,040 bytes. IMAGE_BYTES in the source defaults to 0 and is rewritten by the deploy script so the agent can report its own size when that value is known.

main checks for a Telegram token containing a colon before it parses --ask. Without that token the process exits, so the documented one-shot probe still needs a Telegram-shaped secret even when the intent is only to test the model key. After that gate, the program points cJSON at a 1 MiB bump arena and #defines malloc and friends to DO_NOT_malloc so later edits cannot quietly bring the heap back into agent code. libcurl may still allocate internally; the claim is about the program’s own path.

Several numbers in the README no longer match the checked source. REPLIES_PER_HOUR is 300 in bmagent.c, with a comment that 40 suited a private demo; the README table and spend-ceiling paragraph still say 40. NOTES_KEPT is 100 (“Was 20”); the README still says notes are trimmed to the last 20 per person. remind_me takes in_seconds rather than an absolute timestamp — the README’s account of malformed function calls when the model was asked for Unix epoch seconds matches the tool schema in the file. Truncated embedding vectors are normalised in parse_embeddings because a 768-d slice of a 3072-d unit vector is not unit length.

The BareMetal image, Firecracker local run and the live bot at @unikernel_bot were not exercised for this note. No Telegram or Gemini credentials were configured on the build host. What was checked is the repository, the license, the Linux compile with an explicit -lm, and the constants and control flow above.

02 / The Find

baremetal-agent by Reza Tabibazar

MIT single-file Telegram LLM agent intended to boot as a BareMetal unikernel in 16 MiB. Checked against GitHub tip 6a1f484, README claims and a Linux userspace build of bmagent.c on 2 October 2026; unikernel deploy and live bot not run.

Visit the repository Read the author’s week-in-16MB write-up See the BareMetal platform it targets

License: MIT