<?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[Sergey Sizov]]></title><description><![CDATA[Sergey Sizov]]></description><link>https://s1z0v.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/6ada3c556743863fd86713f5/324c11ea-f7ad-4ee3-a089-f0b085f513e9.jpg</url><title>Sergey Sizov</title><link>https://s1z0v.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 24 Oct 2026 18:25:52 GMT</lastBuildDate><atom:link href="https://s1z0v.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I Built an AI OS That Evolves on Demand]]></title><description><![CDATA[S1-ADV: an AI OS for Cardputer ADV. From a feature request to AI-assisted code, review and an approved update on real hardware. Watch the film.]]></description><link>https://s1z0v.hashnode.dev/building-a-handheld-interface-for-an-ai-agent-with-cardputer-adv</link><guid isPermaLink="true">https://s1z0v.hashnode.dev/building-a-handheld-interface-for-an-ai-agent-with-cardputer-adv</guid><category><![CDATA[ESP32]]></category><category><![CDATA[open source]]></category><category><![CDATA[embedded]]></category><dc:creator><![CDATA[Sergey Sizov]]></dc:creator><pubDate>Thu, 22 Oct 2026 18:22:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/6ada3c556743863fd86713f5/30a8f317-c7f8-4c1b-9796-f2baac0c04de.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I built S1-ADV, an AI OS for the M5Stack Cardputer ADV, around a simple idea: the next feature starts with a request. An idea can move through AI-assisted development, a build, review and an approved update, then be tried on real hardware.</p>
<p>The feature list is a starting point. The experiment is to keep extending what the device can do around the things I actually want to use, with a physical keyboard, screen and microphone to bring the result back into my hands.</p>
<p>Watch the full project walkthrough, with English and Russian subtitles:</p>
<p><a class="embed-card" href="https://www.youtube.com/watch?v=_0f9UTwefmo">https://www.youtube.com/watch?v=_0f9UTwefmo</a></p>

<p>Before going into the workflow, there is one useful question: which part runs in my hand, and which part runs on the host?</p>
<img src="https://cdn.hashnode.com/uploads/covers/6ada3c556743863fd86713f5/37687a90-ddd1-47ac-a77d-fd484f803a95.jpg" alt="The real Cardputer ADV in hand during the Chess demonstration" style="display:block;margin:0 auto" />

<p><em>The real Cardputer ADV during the Chess demonstration. Photo frame from my project footage.</em></p>
<h2>Three parts, with different jobs</h2>
<img src="https://cdn.hashnode.com/uploads/covers/6ada3c556743863fd86713f5/30a8f317-c7f8-4c1b-9796-f2baac0c04de.png" alt="S1-ADV architecture: Cardputer ADV connects over Wi-Fi to a Node.js bridge and an OpenClaw agent on a separate host" style="display:block;margin:0 auto" />

<p><em>The device handles physical interaction and local apps. The bridge, agent services and build tools run on the host.</em></p>
<p><strong>The Cardputer owns the interaction.</strong> Its ESP32-S3 handles the keys, display, microphone recording, speaker playback and local applications. Focus timer, notes, calculator and games are firmware features; local tools do not need a model to run. Settings live in NVS, with optional media on microSD.</p>
<p><strong>The bridge connects the two sides.</strong> A Node.js service translates device HTTP and WebSocket calls into the OpenClaw gateway’s session protocol. It handles the configured conversation, its history, media and update assets. Each bridge instance has one device identity, its own token and explicit routing.</p>
<p><strong>The host supplies the agent environment.</strong> OpenClaw, configured model and speech services, and firmware build tools belong on the computer or server. The Cardputer does not run an LLM. It carries a constrained bridge token; the gateway credentials remain on the host.</p>
<h2>Follow one voice turn</h2>
<p>With voice configured, a push-to-talk interaction travels through several stages:</p>
<ul>
<li>The device records the microphone input and sends it to the bridge.</li>
<li>Host-side speech services transcribe the request.</li>
<li>The configured agent produces a response.</li>
<li>Speech output is generated on the host and played by the device.</li>
</ul>
<p>The public bridge also exposes text turns, so voice is not the only way to talk to the agent. Starting with text makes the initial setup easier to inspect: send a question and check for its answer on the actual screen.</p>
<p>For readers who want to explore the implementation, these are three useful entry points:</p>
<table>
<thead>
<tr>
<th>Interface</th>
<th>Purpose</th>
</tr>
</thead>
<tbody><tr>
<td><code>POST /api/device-text-turn</code></td>
<td>Submit a text turn</td>
</tr>
<tr>
<td><code>POST /api/device-audio-turn-raw</code></td>
<td>Submit microphone audio</td>
</tr>
<tr>
<td><code>WS /api/cardputer/v1/stream</code></td>
<td>Receive live events and replay</td>
</tr>
</tbody></table>
<p>The <a href="https://github.com/s1z0v/s1-adv/blob/main/docs/ARCHITECTURE.md">architecture documentation</a> explains the surrounding ownership and routing rules. Use it with the implementation when writing a client.</p>
<h2>Extending the device adds another loop</h2>
<p>A conversation setup gives me an interface to the agent. Changing what the handheld can do adds source changes, a firmware build, review, an offered update, installation and a physical test.</p>
<p>That is the broader experiment: keep the tools that already work, then add the next useful thing. The physical result matters because a successful build can still feel awkward when the screen is small and the input is a tiny keyboard.</p>
<p>The development automation requires its own host services and permissions. It is optional, site-specific configuration beyond the basic chat installation. An agent connection alone does not configure a firmware development service or authorize an unattended update.</p>
<h2>Trying the project</h2>
<p>The supported starting point is the M5Stack Cardputer ADV. First setup needs a USB data cable, Wi-Fi, a computer with Python and PlatformIO, and a working OpenClaw environment with a supported Node.js runtime. Voice adds FFmpeg and configured STT/TTS backends on the host.</p>
<p>The <a href="https://github.com/s1z0v/s1-adv/blob/main/docs/GETTING-STARTED.md">getting-started guide</a> begins with text, then adds push-to-talk voice. This is experimental software. The public README currently notes that public builds have not yet been tested on a freshly provisioned physical device, so a complete new-user installation still needs validation.</p>
<h2>Follow the build or contribute</h2>
<p>The full film, <a href="https://youtu.be/_0f9UTwefmo">I Built an AI OS That Evolves on Demand</a>, shows the device and workflow. The <a href="https://github.com/s1z0v/s1-adv">source and setup guides are on GitHub</a>.</p>
<p>Attribution and license details for the source and its contributors are preserved in the repository. <a href="https://github.com/s1z0v/s1-adv/blob/main/CREDITS.md">Full credits</a>.</p>
<p>What would you ask your AI OS to build first?</p>
<p><em>Prepared with AI assistance from my project documentation and footage. Architecture drawing is explanatory; hardware photographs are real frames from the project.</em></p>
]]></content:encoded></item></channel></rss>