Shipped a full-duplex agent architecture for Aiden: real-time voice model handles the live conversation, a separate stronger model handles device-control tasks in the background, coordinated async through a task queue instead of one shared loop.
Grounded in full-duplex speech research (Moshi's parallel-stream model, dual-tower dialogue modeling), not just voice bolted onto an existing agent pipeline.
A few design choices worth sharing: task "completed" and "successful" are tracked as separate signals so the agent never reports a stalled task as done. Backend results get a 500ms aggregation window before reaching the foreground, so closely-timed results don't trigger competing responses. Device tasks run strictly one at a time: ambiguous screen/input ownership wasn't worth the complexity of parallelizing.
Sharing a small but instructive fix from Aiden's firmware. Before PR #586, giving the agent a remote skill URL didn't reliably route to an installation action: it could just as easily be read as a general content-retrieval request, with the agent reaching for a web scraper, shelling out to curl, creating files manually, and patching them in step by step. Every individual tool call worked. The composition was still the wrong shape for a request with one clear, singular intent.
The fix gives skill installation its own dedicated action. A supported HTTP(S), GitHub tree, or GitHub blob Skill URL now routes to skill_manage install, which stages SKILL.md and companion files, validates the staged content against supported requirements, and only then publishes atomically, never exposing partial files mid-install.
👋 Quick update on what shipped in Aiden's firmware this week, it is mostly developer-experience stuff, but genuinely useful if you're building against the agent:
Native Anthropic support: pick Claude models right in the config page now, streaming + tool calls included No hardware? No problem: new Docker sandbox lets you run Config Web + Agent Web without a dev board, connects to MobileGym/ADB Two HDMI bridge chips supported (RK628D + TC358743), auto-detected, RK628D gets you up to 1080p60 Python packages now persist across sessions instead of disappearing every restart Provider switching got smarter: remembers your last model, less manual config-syncing between LLM/TTS/STT
👋 Quick update on what shipped in Aiden's firmware this week, it is mostly developer-experience stuff, but genuinely useful if you're building against the agent:
Native Anthropic support: pick Claude models right in the config page now, streaming + tool calls included No hardware? No problem: new Docker sandbox lets you run Config Web + Agent Web without a dev board, connects to MobileGym/ADB Two HDMI bridge chips supported (RK628D + TC358743), auto-detected, RK628D gets you up to 1080p60 Python packages now persist across sessions instead of disappearing every restart Provider switching got smarter: remembers your last model, less manual config-syncing between LLM/TTS/STT
Spent a while chasing a genuinely strange iOS bug while building Aiden (a physical agent that drives phones over USB HID): modifier-key shortcuts like Cmd+V would silently fail while plain keystrokes worked fine every time.
Turned out iOS was routing the command to the wrong process (SpringBoard, not the actual foreground app) whenever a keyboard and mouse were both present at the same time as AssistiveTouch. Confirmed it wasn't specific to our hardware, reproduced it on a completely unrelated gaming keyboard and a Bluetooth keyboard too.
Spent a while chasing a genuinely strange iOS bug while building Aiden (a physical agent that drives phones over USB HID): modifier-key shortcuts like Cmd+V would silently fail while plain keystrokes worked fine every time.
Turned out iOS was routing the command to the wrong process (SpringBoard, not the actual foreground app) whenever a keyboard and mouse were both present at the same time as AssistiveTouch. Confirmed it wasn't specific to our hardware, reproduced it on a completely unrelated gaming keyboard and a Bluetooth keyboard too.