<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Cardputer-Adv as a physical approval key + live usage dashboard for AI coding agents]]></title><description><![CDATA[[[topic:post-is-deleted]]]]></description><link>https://community.m5stack.com/topic/8241/cardputer-adv-as-a-physical-approval-key-live-usage-dashboard-for-ai-coding-agents</link><generator>RSS for Node</generator><lastBuildDate>Sun, 31 May 2026 20:26:57 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/8241.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 31 May 2026 15:06:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Cardputer-Adv as a physical approval key + live usage dashboard for AI coding agents on Sun, 31 May 2026 15:54:30 GMT]]></title><description><![CDATA[<p dir="auto">I turned an <strong>M5Stack Cardputer-Adv</strong> into a physical control surface for an AI coding agent (Claude Code) over BLE +<br />
MCP. Built on top of <a href="https://github.com/dakshaymehta/cardputer-claude-os" target="_blank" rel="noopener noreferrer nofollow ugc">cardputer-claude-os</a>.</p>
<p dir="auto"><img src="https://raw.githubusercontent.com/loml13/cardputer-claude-mcp/main/docs/device.jpg" alt="device" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>Physical approval gate</strong> — a hook routes the agent's shell commands <em>and</em> file edits to the Cardputer. Read-only<br />
commands pass through; ordinary ones take a single <strong>Enter</strong> on the device; destructive ones (<code>rm -rf</code>, <code>git push</code>,<br />
<code>sudo</code>, editing secrets) need a sustained <strong>hold-Y</strong> gesture that prompt-injection can't fake. If the device is away,<br />
it falls back to the terminal — the Cardputer is an <em>optional</em> gate, never a dependency.</p>
<p dir="auto"><strong>Ordinary action — one Enter:</strong></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/loml13/cardputer-claude-mcp/main/docs/approve.jpg" alt="approve" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>Destructive action — hold Y for ~3s:</strong></p>
<p dir="auto"><img src="https://raw.githubusercontent.com/loml13/cardputer-claude-mcp/main/docs/danger.jpg" alt="danger" class=" img-fluid img-markdown" /></p>
<p dir="auto"><strong>Other bits</strong></p>
<ul>
<li>Always-on usage dashboard: today's spend, 5h/7d subscription utilization, battery %, and a resident pixel-crab<br />
mascot.</li>
<li>notify / ask / confirm tools so the agent can buzz a banner, ask a multiple-choice question, or demand confirmation.</li>
</ul>
<p dir="auto"><strong>Notes for fellow Adv owners</strong></p>
<ul>
<li>The Adv's ES8311 codec only makes sound if your main loop calls <code>M5.update()</code> every iteration — took me a while to<br />
track down.</li>
<li>The app is big, so it ships as compiled <code>.mpy</code> (source-form import OOMs the launcher), deployed into the<br />
cardputer-claude-os launcher bundle.</li>
</ul>
<p dir="auto">Code (MIT) + setup: <strong><a href="https://github.com/loml13/cardputer-claude-mcp" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/loml13/cardputer-claude-mcp</a></strong></p>
<p dir="auto">Feedback welcome</p>
]]></description><link>https://community.m5stack.com/post/31015</link><guid isPermaLink="true">https://community.m5stack.com/post/31015</guid><dc:creator><![CDATA[loml13]]></dc:creator><pubDate>Sun, 31 May 2026 15:54:30 GMT</pubDate></item></channel></rss>