🔥 Discover this awesome post from Hacker News 📖
📂 **Category**:
✅ **What You’ll Learn**:

The smallest possible AI personal assistant for ESP32.
zclaw is written in C and runs on ESP32 boards with a strict all-in firmware budget target of <= 888 KiB on the default build. It supports scheduled tasks, GPIO control, persistent memory, and custom tool composition through natural language.
The 888 KiB cap is all-in firmware size, not just app code.
It includes zclaw logic plus ESP-IDF/FreeRTOS runtime, Wi-Fi/networking, TLS/crypto, and cert bundle overhead.
Fun to use, fun to hack on.
Use the docs site for complete guides and reference.
One-line bootstrap (macOS/Linux):
bash <(curl -fsSL https://raw.githubusercontent.com/tnm/zclaw/main/scripts/bootstrap.sh)
Already cloned?
Non-interactive install:
Setup notes
bootstrap.shclones/updates the repo and then runs./install.sh. You can inspect/verify the bootstrap flow first (includingZCLAW_BOOTSTRAP_SHA256integrity checks); see the Getting Started docs.- For encrypted credentials in flash, use secure mode (
--flash-mode securein install flow, or./scripts/flash-secure.shdirectly). - After flashing, provision WiFi + LLM credentials with
./scripts/provision.sh. - Default LLM rate limits are
100/hourand1000/day; change compile-time limits inmain/config.h(RATELIMIT_*). - Quick validation path: run
./scripts/web-relay.shand send a test message to confirm the device can answer. - If serial port is busy, run
./scripts/release-port.shand retry. - For repeat local reprovisioning without retyping secrets, use
./scripts/provision-dev.shwith a local profile file.
- Chat via Telegram or hosted web relay
- Timezone-aware schedules (
daily,periodic, and one-shotonce) - Built-in + user-defined tools
- GPIO read/write control with guardrails (including bulk
gpio_read_all) - Persistent memory across reboots
- Persona options:
neutral,friendly,technical,witty - Provider support for Anthropic, OpenAI, and OpenRouter
Tested targets: ESP32-C3, ESP32-S3, and ESP32-C6.
Other ESP32 variants should work fine (some may require manual ESP-IDF target setup).
Tests reports are very welcome!
Recommended starter board: Seeed XIAO ESP32-C3
Typical fast loop:
./scripts/test.sh host
./scripts/build.sh
./scripts/flash.sh --kill-monitor /dev/cu.usbmodem1101
./scripts/provision-dev.sh --port /dev/cu.usbmodem1101
./scripts/monitor.sh /dev/cu.usbmodem1101
Profile setup once, then re-use:
./scripts/provision-dev.sh --write-template
# edit ~/.config/zclaw/dev.env
./scripts/provision-dev.sh --show-config
./scripts/provision-dev.sh
# if Telegram keeps replaying stale updates:
./scripts/telegram-clear-backlog.sh --show-config
More details in the Local Dev & Hacking guide.
Show scripts
./scripts/flash-secure.sh– Flash with encryption./scripts/provision.sh– Provision credentials to NVS./scripts/provision-dev.sh– Local profile wrapper for repeat provisioning./scripts/telegram-clear-backlog.sh– Clear queued Telegram updates./scripts/erase.sh– Erase NVS only (--nvs) or full flash (--all) with guardrails./scripts/monitor.sh– Serial monitor./scripts/emulate.sh– Run QEMU profile./scripts/web-relay.sh– Hosted relay + mobile chat UI./scripts/benchmark.sh– Benchmark relay/serial latency./scripts/test.sh– Run host/device test flows./scripts/test-api.sh– Run live provider API checks (manual/local)
Current default esp32s3 breakdown (grouped loadable image bytes from idf.py -B build size-components; rows sum to total image size):
| Segment | Bytes | Size | Share |
|---|---|---|---|
zclaw app logic (libmain.a) |
35742 |
~34.9 KiB | ~4.1% |
| Wi-Fi + networking stack | 397356 |
~388.0 KiB | ~45.7% |
| TLS/crypto stack | 112922 |
~110.3 KiB | ~13.0% |
| cert bundle + app metadata | 99722 |
~97.4 KiB | ~11.5% |
| other ESP-IDF/runtime/drivers/libc | 224096 |
~218.8 KiB | ~25.8% |
Total image size from this build is 869838 bytes; padded zclaw.bin is 869952 bytes (~849.6 KiB), still under the cap.
Relay path benchmark (includes web relay processing + device round trip):
./scripts/benchmark.sh --mode relay --count 20 --message "ping"
Direct serial benchmark (host round trip + first response time). If firmware logs
METRIC request ... lines, the report also includes device-side timing:
./scripts/benchmark.sh --mode serial --serial-port /dev/cu.usbmodem1101 --count 20 --message "ping"
MIT
⚡ **What’s your take?**
Share your thoughts in the comments below!
#️⃣ **#tnmzclaw #personal #assistant #allin #888KiB #25KB #app #code #Running #ESP32 #GPIO #cron #custom #tools #memory**
🕒 **Posted on**: 1771764864
🌟 **Want more?** Click here for more info! 🌟
