// the find
tnm/zclaw
Your personal AI assistant at all-in 888KiB (~35KB in app code). Running on an ESP32. GPIO, cron, custom tools, memory, and more.
zclaw is a C firmware that turns an ESP32 into an LLM-backed personal assistant with GPIO control, cron scheduling, and persistent memory — all under a 888 KiB binary budget. It talks to Anthropic, OpenAI, OpenRouter, or local Ollama, and surfaces via Telegram or a hosted web relay. Aimed at hardware hackers who want a real AI agent on a $5 chip, not a demo.
The 888 KiB all-in size constraint is enforced by CI (firmware-size-guard.yml), not just aspirational — that's a meaningful engineering commitment. The tool system is genuinely extensible: add a C handler and a registry entry in builtin_tools.def, and the LLM can call it; user_tools.c gives a clean hook for runtime additions without reflashing. The provisioning story is solid — credentials go to NVS, separate from firmware, so you can reflash without re-entering secrets. Host-side test harness (test/host/) lets you run agent and JSON logic tests on your laptop without hardware, which is the right call for embedded C.
The LLM conversation runs over HTTPS on device, so latency per message is high by nature — Telegram polling adds another round trip, and the benchmark tooling exists precisely because this hurts in practice. NVS flash encryption is opt-in (--flash-mode secure), meaning most users will store API keys in cleartext flash, which is a real concern if the device ever leaves your hands. The rate limits (100/hour, 1000/day) are compile-time constants in config.h — changing them requires a reflash, not a config update, which is awkward for tuning. Memory for the LLM context is fixed at compile time too, so long conversations will silently truncate rather than degrade gracefully.