Getting close to finished with my Meta Muse Gadget knockoff for Hermes Agent. Works on Wi-Fi, if available, or iPhone relay for on-the-go. Push-to-talk. Multi-profile. I've been using this in the car and it's great.
Muse Code doesn't provide a simple no-token method to get your current usage. There's a hack: POST https://t.co/Vk5pv9DVHT returns your usage, and you can disregard the key.
I'm using a coding repo, with an AGENTS.md and skills, to modify 3D printing models. Works better than I expected.
Setup:
• T3 Code driving Antigravity with Gemini Argon. I've also had good results with Claude Code and Opus 5.5.
• Git repo just for working with 3D models.
• AGENTS.md has the standing rules and knows my setup.
• Skills: design rules for my printer, the model workflow, how to convert from STL to STEP, using Blender for previews, how to cut pockets for the magnets I own, etc.
Today:
• Finally got sick of having to clean the charging connectors on my outdoor Nest cameras.
• Found a great model on MakerWorld from RyanBru, built for an 8mm magnet. I have 6mm × 1.75mm magnets.
• Asked the agent to adjust it for my magnets. It pulled the sizes from the magnet skill, edited the file, changed the magnet pocket.
• <10 min to run the whole workflow.
Model:
https://t.co/iXhmJkA6lI
From my user experience, I just talk and it works. I kill the Hermes connection after 10 min (minimize battery drain, prevent stale connections). I reconnect automatically if the screen is turned on or the talk button is pressed. I buffer the recording as needed while the connection is coming up. I've got a 12-sec connection timeout and have never reached it.
I've been ripping off the Muse Gadget and turning it into a Hermes Agent gadget for myself. It's getting good, but I had a battery issue. I was losing ~4% of battery an hour while doing nothing. Found 4 causes and got it to 1.3% an hour.
Setup:
• Waveshare ESP32-S3 board, 1.75" AMOLED screen, 600 mAh battery.
• Talks Bluetooth to a relay app on my iPhone, which connects to Hermes Agent on my Mac (uses Wi-Fi instead, if it's in range).
• Before: daily charging, even if mostly idle.
Finding the root cause:
• Added a battery log to the firmware: charge level every 20 min, time asleep, what woke the chip, and what kept it awake.
• Ran tests unattended. A script cuts the board's USB power, waits, then reads the log back.
What it found:
• The chip woke about 22 times a second, mostly from checking a button every 50 ms. Now it waits for the press. About 5 a second now.
• Bluetooth kept the chip awake about 8% of the time. The default sleep clock isn't trusted, so it wakes early before every Bluetooth event. A different clock source cut that to about 1.4%.
• The connection to Hermes was supposed to close after 10 min idle. It never did after a normal reply, so it stayed open for hours.
Results (over, idle):
• Drain: about 4%/h → 1.3%/h
• Wakes per second: 21.9 → 5.6
• Time Bluetooth kept it awake: 8.4% → 1.4%
• Once the Hermes connection closed: under 1%/h
Should be 3 to 4 days on a charge with normal use now.
Biggest battery drain I could find was the awake time to keep BLE active. Deep sleep drops the BLE connection, so light sleep. The ESP-IDF default clock setting isn't suited to light sleep + BLE. I switched to CONFIG_RTC_CLK_SRC_INT_8MD256. That cut the awake time needed to keep BLE alive. If this was a production device, I'd get a crystal on the board.
I don't have one of those Nordic Semi power profilers, so this is some guess work...
This is good advice. Adding an LLM check would be too slow for what I'm going for, so I added a super-tiny Python script that filters for common patterns from my dataset. Things like my daughter Quinn never has a version number (pattern matching) and isn't spoken of when I say things like "oMLX" or "model."
This solved all of the losses in my dataset. I don't have enough for a proper holdout, so time will tell.
My Wispr Flow history turned out to be a great data set for improving the local speech model in my Hermes Agent.
Setup
• M4 Pro Mac mini
• Hermes Agent for voice chat
• Local Whisper large-v3-turbo. About 1.5 GB, about 1.3 sec per request.
• Wispr Flow for everyday dictation. About 15K dictations saved locally, each with what the model heard and what Wispr corrected it to.
What my agent did with the Wispr data
• Turned my Wispr dictionary into a hint list for Whisper.
• Diffed raw vs corrected text across all 15K dictations to find the words Whisper keeps mishearing, then made find-and-fix rules from them.
• Tested every rule against the full history so it doesn't break normal speech.
• Used 197 Wispr audio clips as a test set, with Wispr's corrected text as the answer key.
No fine-tuning. Just layers around the model.
Results (dictionary words right)
• Wispr clips: 99/240 → 183/240
• 20 sentences I read aloud: 19/45 → 43/45
Surprises
• Giving Whisper the hint list directly fixed names but sometimes dropped whole sentences. Now it runs with and without the hint, and only keeps small fixes.
• One proposed rule would have changed my daughter's name, Quinn, to Qwen. Still unsolved: I say both a lot and they sound the same.
Wispr data doesn't last
• History stays on the computer where you dictated. A new Mac starts empty. Only the dictionary and settings sync.
• Audio is deleted after 14 days.
So my agent now archives everything nightly (audio, raw text, corrected text, my edits). It also pulls in new dictionary words nightly and looks for new fixes weekly. The test set keeps growing on its own.
ESP32 on @seeedstudio Xiao: fast, easy, just works. ESP32 on Waveshare: old versions of ESP-IDF, missing docs, failed builds. But those Waveshare boards always look so nice!