E‑Paper Agent Console

Desk display for agent status + hold-to-talk dumps — the “broadcast console” pattern applied to HEOS / Arthur

← Cyborg wave hub  ·  Shopping list  ·  Principles  ·  Character path  ·  M5 path

Status: planning / field notes — not built yet on this desk.

Source post: Vinny (@hot_town) — ESP32 radio station console (~$55)

What this path is

A Wi‑Fi ESP32 board with e‑paper (and often onboard mics) that:

  1. Polls a tiny API every N seconds and draws a simple “console” UI
  2. On hold-to-talk: records audio → uploads → server transcribes → posts to chat / agent inbox
  3. Runs on battery as a standalone desk object

Vinny built it for an online radio station (live stats + owner chat pin). Our remapping: HEOS / agent status on the screen; dumps go to arthur.agent (or Janice), not radio chat.

What this path is not

  • Not a full product character shell (see character path)
  • Not the lowest-friction unbox experience (see M5 path)
  • Not on-device LLM inference — board is I/O; brain stays in the cloud / your agents

Their stack (from the post)

Part What they used
Board Waveshare ESP32-S3 1.54" e‑Paper AIoT (~$30) — Wi‑Fi, mics, speaker, battery charge
Battery 3.7V 500mAh LiPo (~$10)
Connectors JST 1.25 adapters (bulk pack)
Display loop Poll radio API every ~20s → 200×200 e‑paper “broadcast console”
Voice loop Hold-to-talk → WAV upload → OpenAI transcription → websocket chat (API-key as owner)
Backend Wasp (React/Node/Prisma) on Railway — /status, /chat, /voice-chat
Firmware PlatformIO + Arduino, GxEPD2, Waveshare ES8311 codec drivers
Build help Claude for endpoints + firmware; e‑paper UI mockups as Claude artifacts

Our version (HEOS / agents)

Their job Our job
Radio live stats UI TODAY Big 3 + Arthur/Janice status (working / needs review / idle)
Station chat message Mental fog / code dump → HEOS inbox → Arthur sorts
Owner pin via API key Device API key scoped to “dump only” — no email send, no spend
Wasp radio app 3 tiny endpoints in front of HEOS / existing agent harness

Matches the backlog on /cyborg: desk ESP32 for Big 3 + one button → agent.

Parts list (order)

Full carts + product links: Cart A on /cyborg-shopping.

Priority Item Exact search / name Why
P0 Main board Waveshare ESP32-S3-ePaper-1.54 AIoT (~$30) E‑paper + mic + codec + charge on one board
P0 USB‑C (data) Not charge-only Flash + serial
P1 Battery 3.7V LiPo ~500mAh, match JST 1.25 if required Untethered desk
P1 JST adapters Only if battery plug ≠ board Avoid forcing wrong connector
P2 microSD FAT32 Any small TF card Optional audio/log storage

Official product page: waveshare.com/esp32-s3-epaper-1.54 · docs: docs.waveshare.com

Tiny API contract

Endpoint Job
GET /status JSON for e‑paper: Big 3 lines, agent states, last dump time
POST /voice-in Multipart WAV/PCM + device key → transcribe → HEOS inbox / Arthur
POST /chat (optional) Text-only dump if mic path fails

Host anywhere boring: Railway, Fly, Netlify functions, or a route on an app you already run. Device auth = long random key in firmware secrets, not a full user session.

Tutorial ladder

  1. Tooling: PlatformIO (or Arduino IDE) — flash blink / serial hello on the board
  2. Wi‑Fi: join network, HTTPClient GET to a public JSON URL
  3. Display: draw 3 lines of text with GxEPD2 (or board sample sketch)
  4. Status: point GET at your stub /status (hardcoded JSON is fine)
  5. Button: hold-to-talk GPIO → LED or serial “recording”
  6. Mic: short WAV/PCM buffer → POST to laptop endpoint first
  7. Transcribe: OpenAI Whisper (or equivalent) on server → log text
  8. Vault: append markdown / HEOS inbox entry; only then pretty UI
  9. Battery: sleep between polls; last, not first

UI pro tip (from the thread): ask Claude/Grok for 5–10 e‑paper UI mockups at 200×200 (or your resolution) before writing firmware layout code. Artifact mockups beat guessing pixels.

Skills & docs to follow

  • PlatformIO ESP32 docs + board vendor Arduino samples
  • GxEPD2 (or Waveshare e‑paper examples) for partial/full refresh tradeoffs
  • Waveshare ES8311 / codec examples if using their AIoT board mics
  • OpenAI (or other) audio transcription API docs for the server side
  • Your own agent handoff: reverse prompting, mental fog, HEOS

Design rules (from cyborg principles)

  1. One job: display status + capture dump — not email, not calendar write-all
  2. Write to vault: transcription must land somewhere durable
  3. Blast radius: device key can only create dumps / read status
  4. Named agent: default dump target is arthur.agent, not “AI”

First ship definition

Done when:

  • E‑paper shows 3 lines from live /status
  • One hold-to-talk produces a text file or HEOS note you can open on the laptop
  • No speaker/TTS required for v1

Related paths

Cyborg wave hub

All three paths + shared architecture.

Hub →

Character device

When you want a face + speaker product story.

Path →

M5 StickS3

Faster modular alternative for demos.

Path →

Principles

Wearables + agent hardware contracts.

Read →

Comments

Approved comments appear below. Log in once with GFAVIP — it applies across the whole site. GFAVIP login

View comments archive