00
AlloyLogger / initialising stream
ALLOYLOGGER.
MCU → Alloy Mesh Storage
GitHub ↗ Start free ↗
esp32 · i2c 0x28 · 100 Hz
depth L0 / surface
Scroll to descend

ALLOYLOGGER

The easiest telemetry layer for your microcontroller.
Follow one number from the pin to the prompt.
Layer 01 / ESP32

The wobble happens.

Your control loop reads the IMU over I²C at 100 Hz. Each reading lives for one loop tick, then it's overwritten. Without a logger, it's gone.

pitch → 8.2° · about to vanish
Layer 02 / AlloyLogger

The number gets a name.

alloy.log("bno055").set("pitch", pitch) memcpys the value into a RAM buffer in microseconds; your loop never blocks. A background task on core 0 batches rows and uploads over TLS every 4 s, store-and-forward across WiFi drops. No SD card, no flash wear.

bno055.pitch = 8.2 · buffered · core 0
Layer 03 / Alloy Mesh Storage

It lands on the timeline.

Every power-on becomes one run under your mesh path. When it ends, Alloy assembles one indexed .mcap mission plus a meta.json semantics sidecar: replayable, scrubbable, and queryable in place with SQL.

robots/sbr · run-47 · t+3.4s → 8.2°
Layer 04 / Alloy MCP

Claude reaches in.

One command connects Claude to your mesh: claude mcp add alloy. It gets real tools — list_missions, query_mesh_storage — read-only SQL over every run you have ever streamed. No exports, no CSVs.

SELECT pitch WHERE run = 47 → 8.2
Layer 05 / The answer

The number comes back.

> why did run #47 fall over?
⏺ alloy · query_mesh_storage (MCP)
⏺ bno055 stalled for 400 ms. The loop ran blind, pitch blew past 8.2°. That's the fall.
Surface again

Three lines.
Every run, forever.

AlloyLogger · MIT · ESP32 / ESP32-S3 · built on Alloy