- SKILL.md: full deployment guide covering prerequisites, config,
build, flash, verification, OTA, and troubleshooting
- deploy.sh: one-command build+flash script with auto port detection
- validate.sh: pre-deploy checklist (ESP-IDF, secrets, hardware)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds a heartbeat timer that reads /spiffs/config/HEARTBEAT.md every 30
minutes and sends a prompt to the agent if actionable tasks are found.
Skips empty lines, headers, and completed checkboxes. Includes a
heartbeat_trigger CLI command for manual testing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bring back two-layer configuration: build-time defaults from mimi_secrets.h
with runtime NVS overrides via serial CLI. NVS values take highest priority
so a pre-flashed board can be reconfigured anywhere with just a USB cable.
Restored CLI commands: wifi_set, set_tg_token, set_api_key, set_model,
set_proxy, clear_proxy, set_search_key. Added new commands: config_show
(displays all config with sensitive fields masked), config_reset (clears
all NVS overrides), and help (lists all commands).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All configuration is now done exclusively through mimi_secrets.h at build time.
Removed NVS read/write logic, CLI config commands (wifi_set, set_tg_token,
set_api_key, set_model, set_proxy, clear_proxy, set_search_key), and setter
functions from all modules. CLI retains debug/maintenance commands only.
Updated all documentation to reflect the change.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Move working indicator into ReAct loop so it fires before every
llm_chat_tools call (including tool-use iterations), and randomly
select from 5 cute phrases using esp_random().
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enable the agent to persist memories by adding 4 SPIFFS file tools
(read_file, write_file, edit_file, list_dir) with path validation,
and update the system prompt with memory guidelines pointing to
/spiffs/memory/MEMORY.md and daily notes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Send "mimi😗is working..." to user when processing starts.
List get_current_time in system prompt available tools so the agent
knows to call it for time/date queries. Remove auto time fetch from
system prompt builder — agent calls the tool on demand.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Fetches real time via HTTP Date header (works through proxy),
sets system clock, and returns formatted local time to the agent.
Also adds MIMI_TIMEZONE config and updates default model to claude-opus-4-5.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update READMEs with config file setup (Option A/B), tool section,
set_search_key command, and touch-before-build note. Update
ARCHITECTURE.md with ReAct data flow, tools module map, non-streaming
API protocol, and config priority. Mark tool use items done in TODO.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrite agent_loop.c with ReAct tool use loop: LLM call → tool
execution → repeat until end_turn (max 10 iterations). Add tool
guidance to system prompt. Add set_search_key CLI command.
Add mimi_secrets.h for build-time credentials with highest priority
over NVS/CLI values. All modules (wifi, telegram, llm, proxy,
web_search) check build-time secrets first, fall back to NVS.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace SSE streaming with non-streaming JSON for Anthropic API.
Add llm_chat_tools() returning structured llm_response_t with text
and tool_use blocks. Implement tool registry with dispatch-by-name
and web_search tool via Brave Search API (direct + proxy support).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
CLI task stack is 4KB; the 4096-byte stack buffer in cmd_memory_read
was overflowing and corrupting the heap. Use malloc instead.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add README_CN.md with proxy setup guide for users in China
- Add language switcher to both READMEs
- Add set_proxy/clear_proxy to More Commands section
- Update default model to claude-opus-4-6
- Add Nanobot to acknowledgments
- Update ARCHITECTURE.md: proxy module, stack sizes, NVS config
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Enable ESP32-S3 to reach api.telegram.org and api.anthropic.com through
an HTTP CONNECT proxy (e.g. Clash Verge), required in regions where
these services are blocked.
- New proxy module (http_proxy.c/h): CONNECT tunnel + TLS via esp_tls
with pre-connected socket injection (esp_tls_set_conn_sockfd)
- Telegram and LLM modules split into direct/proxy paths
- CLI commands: set_proxy <host> <port>, clear_proxy
- Proxy config persisted in NVS
- Fix TLS buffer: MBEDTLS_SSL_IN_CONTENT_LEN 4096 → 16384
- Increase task stacks for TLS overhead (poll 12KB, agent 12KB, outbound 8KB)
- Default model changed to claude-opus-4-6
- Capture raw error body for non-200 API responses
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All HTTP clients (Telegram, Claude API, OTA) were missing
crt_bundle_attach, causing TLS handshake failures. Add esp-tls
dependency to CMakeLists.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add app_update component to CMakeLists REQUIRES for OTA version
reporting. Add sdkconfig.defaults scaffold and gitignore nanobot
reference repo.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simplified language, plain diagrams, human-readable memory table.
Technical architecture stays in docs/ARCHITECTURE.md.
No Linux, inspired by OpenClaw.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
ARCHITECTURE.md covers system diagram, data flow, module map,
task layout, memory budget, flash partitions, NVS config,
protocols, and nanobot reference mapping.
TODO.md tracks unimplemented features vs nanobot (P0/P1/P2).
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Pre-built content for flashing to SPIFFS partition:
personality definition, user profile template, empty memory.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Wraps esp_https_ota for over-the-air updates via HTTPS.
Dual OTA partitions enable safe rollback.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
JSON protocol server using esp_http_server with WS upgrade.
Supports up to 4 concurrent clients, auto-assigned chat_id,
routes messages through the agent via message bus.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
MEMORY.md for long-term memory, daily YYYY-MM-DD.md notes.
JSONL session files per chat_id with ring buffer history
(max 20 messages). All persisted on SPIFFS.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Agent loop runs on Core 1: pops inbound messages, builds system
prompt from bootstrap files + memory, calls Claude API, saves
session, pushes response to outbound queue. PSRAM-allocated buffers.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Anthropic Messages API integration with streaming response.
Parses content_block_delta SSE events, accumulates text tokens.
API key and model stored in NVS.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Direct HTTPS long polling against Telegram Bot API (getUpdates),
JSON parsing with cJSON, auto-split at 4096 chars, Markdown
with plain-text fallback.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
mimi_msg_t carries channel/chat_id/content between tasks.
Decouples input channels from agent loop and output dispatch.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>