InksPet Firmware
Changelog.

Every version is digitally signed, archived, and available through the web installer. You can always roll back to any previous release.

InksPet follows semantic versioning. Major versions introduce new agent states or breaking changes to the hook protocol. Minor versions add display features or new LED effects. Patch versions ship bug fixes only โ€” always safe to install.

v1.1.1

Patch release โ€” Claude desktop Hardware Buddy window now shows device stats (battery, heap, uptime, approvals, denials, level) instead of "No response". The root cause was a non-standard fw field and a missing bat.mA in our {cmd:"status"} ack โ€” strict schema parsers on the desktop side silently dropped the whole frame. Recommended upgrade for anyone running v1.1.0.

๐Ÿ›  Fixed
Status ack now strictly conforms to REFERENCE.md โ€” removed the non-spec fw field, added bat.mA (reads 0 since the device has no current shunt)
Added diagnostic log line that prints the serialised ack payload โ€” future schema drifts surface in pio device monitor

v1.1.0

Native Bluetooth LE integration with the official Claude desktop app โ€” pair your device as a Hardware Buddy over LE Secure Connections, receive live session snapshots (running / waiting / tokens_today / recent transcript), approve tool calls with the physical buttons, and watch GIF character packs render on the e-paper with 1-bit dithering. Full Chinese text rendering on the HUD.

๐Ÿ“ก Bluetooth / Claude Desktop
NimBLE Nordic UART Service advertises as Claude-XXXX, fully implements the Hardware Buddy protocol โ€” snapshot, turn events, time sync, owner name, status ack, unpair
LE Secure Connections + Passkey pairing โ€” device is DisplayOnly, the 6-digit passkey renders on the e-paper when macOS prompts for it; bond survives reboot
Physical-button approval flow โ€” when Claude requests a tool permission, the InksPet shows the tool name + target and A/B/C physically answer once/always/deny, routed back to Claude over BLE as {cmd:permission,decision:once|deny}
Buddy HUD on the e-paper shows upstream-authoritative fields: one-line msg summary, Today: X.XK tokens, up to 3 recent transcript entries, bonded indicator in the footer
Folder push โ€” drag a GIF character pack onto the Hardware Buddy window and InksPet receives it over BLE, writes to LittleFS, hot-swaps the renderer
๐ŸŽจ Display
Chinese text rendering โ€” Buddy HUD and permission screen auto-switch to u8g2_font_wqy12_t_chinese2 when content contains multi-byte UTF-8; UTF-8-safe truncation prevents tofu on boundary overflow
GIF character pack player โ€” AnimatedGIF decoder piped into a 1-bit Bayer-8ร—8 dithered framebuffer so colour GIFs degrade gracefully on the monochrome panel; idle array rotation honours manifest
HUD de-duplication โ€” snapshot keepalives fire every ~10s even when nothing changed; display skips the refresh if the fingerprint is identical (protects e-paper lifetime)
๐Ÿ›  Reliability
Permission source tagging โ€” BLE-originated approvals now reply over BLE, HTTP-originated approvals reply over the webhook, fixing cross-channel decision leakage when both transports are connected
Idle snapshots (running=0 waiting=0) no longer fabricate a THINKING state โ€” stale sessions age out via the existing 30s timeout
ArduinoJson buffer 4KB โ†’ 6KB to accommodate larger turn events
๐Ÿ“ฆ Footprint
Flash: 31% โ†’ 41% (+10 percentage points, mostly NimBLE stack, still ample headroom on 4MB flash)
RAM: 24.9% steady โ€” NimBLE + WiFi co-exist cleanly

v1.0.2

Version bump to validate the release pipeline. No functional changes from v1.0.1.

๐Ÿ”ง Internals
Version bump only โ€” confirms end-to-end build, packaging, and web installer pipeline is working correctly

v1.0.1

Display quality fix โ€” the e-paper panel no longer fades after repeated updates. The screen now redraws only when content actually changes, keeping refreshes to a minimum and contrast consistently sharp.

๐Ÿ–ฅ Display
Replaced partial refresh with full refresh โ€” eliminates the progressive contrast fade (screen going lighter) that appeared during long working sessions
Content-change detection: display skips a refresh cycle when state, agent, tool, file, and task progress are all unchanged โ€” no wasted refresh on identical frames
Session elapsed time now shown only when the agent reaches Completed state (total task duration), rather than updating every 10 seconds during work
Fixed: _forceFullRefresh flag was silently ignored in Time Mode after wake from hibernate
Fixed: double full-refresh immediately after waking from idle hibernate (anti-ghosting timer now resets on wake)
๐Ÿ”ง Internals
Removed dead fullRefresh() / partialRefresh() stub methods that were no-ops
Extracted buildAgentDisplayInfo() helper โ€” state-change callback and periodic refresh now share a single implementation
Removed 10-second periodic refresh timer that triggered unnecessary screen updates

v1.0.0

First public release of InksPet firmware โ€” Clawd the crab lives on your EleksCava e-paper display, reacting in real time to Claude Code and other AI coding agents. Pixel-art states, RGB LED sync, physical button approval, and a zero-config web dashboard.

โœจ Agent Experience
12 pixel-art Clawd crab states: idle, thinking, working, typing, testing, reviewing, celebrating, confused, error, permission, sleeping, offline
RGB LED color sync โ€” the physical LED matches the current agent state
Partial e-paper refresh for smooth state transitions without full-screen flicker
Real-time tool call statistics (read / write / bash / search) on the dashboard
๐Ÿ”˜ Physical Controls
Hardware buttons A / B / C map to Approve / Always Allow / Deny for agent permission prompts
No more window switching โ€” approve AI tool calls without leaving your editor
Long-press button C to enter captive-portal WiFi provisioning mode
๐ŸŒ Connectivity & Setup
Captive-portal WiFi provisioning โ€” connect to the InksPet_XXXX hotspot from any phone
mDNS discovery โ€” open the dashboard at http://inkspet.local with no IP lookup
WebSocket live event stream for zero-latency state updates from the AI assistant
One-click Hook Setup โ€” copy a single prompt and paste it into Claude Code / Cursor / Aider / any AI assistant; hooks configure themselves
๐Ÿ”ง Hardware & Firmware
ESP32 + 1.54" e-paper display support (EleksCava reference board)
Browser-based USB-C flashing via ESP Web Tools โ€” no drivers, no IDE, no command line
SPIFFS assets partition for pixel art & web dashboard โ€” OTA-ready for future versions
Low-power idle: device sleeps to <5mA between agent events
๐Ÿ“š Documentation
Full setup guide at /guide/
Open-source hardware schematics & firmware under MIT license
Install or upgrade โ€” pick any version from the web installer, accept the terms, and click Install. Current firmware is auto-erased before the new version is written, so downgrading is always safe.
Future versions will appear here. Follow the GitHub repository for release notifications.