Every build, and what it changed.
Each TestFlight build of the Yui app, newest first, with the screens it brought. The build number counts the commits in the app repo, so every build has a clear list of changes. The ship log has the full story, including work on this site and the spec.
ReleaseWhere the next release stands
Yui 0.6.0 shipped as build 351. 2 changes are on main for the next one. The timeline, live from the board.
Next build
Waiting on AppleDone in the code, not on TestFlight yet. We upload once per release and Apple caps uploads per day, so these go up together as the next build. It gets its number when it uploads.
- Plugin guide v42: show it here, don't link out
- The Agent tab: Keys, Model and your chatsYUI-128
Build 370
Sep 29, 2026- A deploy can no longer run ahead of its database changesYUI-211
- Hold the Yui icon, get your agents' shortcutsYUI-191
- Key vault plugin: yui_key_ask, vault_call, key_answer line (YUI-34 step 2, plugin lane)
- Wire the key vault into the Yui adapter and test it (YUI-34 step 2, plugin lane)
- Key vault relay: sealed keys, per-agent grants, audited uses, cap holds, key_ask no-nag (YUI-34 backend)
- Vault relay checks: RLS, sealed column, grants, holds, once, lapse, key_ask and key_answer (YUI-34 backend)
- yui-vault Edge Function: HPKE-opened keys, token/grant/path/cap checks, fixed hosts, scrubbed logs; connector public key (YUI-34 backend)
- Vault proxy tests: wrong agent, revoked, path, cap and holds, once, provider refusal, CryptoKit interop, no key in any log line (YUI-34 backend)
- Key vault in the app: Keychain store, Settings > Keys (add by paste or scan, Face ID, no reveal, iCloud off), key-shaped sends held, key_ask sheet, HPKE sealing, Controls > Keys with Revoke (YUI-34 step 2)
- Pin the real vault connector key yvk-1 in the app and the function (YUI-34 step 2)
- Yui plugin: a typed line gets a note naming the agent's newest message
- Yui plugin: channel guide v41
- Reply quotes the screen: title plus its first rows
- yui-mcp reads the semibold type base (YUI-211, yuigui a2d0291)
- Stage polish: six-line question, mic stays with a quiet Back home, roomy Type your own
- Several chats, on your phoneYUI-169
- The board says who has each card, and done means linkedSITE-110
- Reply quotes a list's items; card + ask reply regression test
Build 351
Sep 29, 2026- Hold to talk keeps every wordYUI-209
- Chat top bar: the agent chip and its dropdown are gone, the drawer is the only agent picker (YUI chip, feedback AJw_G3S2)
- Your own key: Claude, ChatGPT, Gemini and Grok join the providers, each with a seeing default so no model id is needed (YUI-139 step 2, server half)
- Your own key at every stop: a photo the pick can't see says so, a lookup on a key with no web search says it ran on Yui's; a test per stop on a stub key (YUI-139 step 2c)
- Own key: OpenRouter one-tap sign-in (PKCE) and My computer (keyless, reach check) (YUI-139 step 2b, server half)
- Your own key at every stop in the app: one plain key form (plan line, where to make a key, add Yui in Claude or ChatGPT) in Settings, the limit card, Add agent and Controls > Model (YUI-139 step 2e)
- Per-agent model key: one agent on Claude, the rest on Yui (YUI-139 step 2f, server half)
- Controls > Model: pick which key each agent runs on, Yui's, Claude or ChatGPT (YUI-139 step 2g)
- A deploy can no longer run ahead of its database changesYUI-211
Build 342
Sep 29, 2026Build 332
Sep 29, 2026Build 329
Sep 29, 2026- Yui 0.5.3 is on TestFlight: the fixes from your feedback
- The trainer's flow: a check-in that ends on the timerSITE-70
- The timer reads in light modeSITE-78
- Penny's tools in the app: plan your week by voice, a reminder on your phone, a week you can dragYUI-185
- The workout runner in the app: rest starts on its own, say doneYUI-182
- Quill's tools in the app: learn a topic, rate your cards, a problem one step at a timeYUI-186
- The nutritionist's flow: a plate to macrosSITE-71
- The musician's flow: a vibe to a beatSITE-72
- The planner's flow: a busy week to a planSITE-73
- The study buddy's flow: a topic to a quizSITE-74
- Basil's grocery list just worksYUI-188
- The screen dots move into the bottom barYUI-189
- Stop a reply from the main screenYUI-190
- Several chats, on your phoneYUI-169
- Screens get pills, like browser tabsYUI-193
- Agents show it in context: a phone, a timeline, a next stepYUI-203
- Add agent: ask again on return to the app, time out stuck requests, and say so after a minute with Try againYUI-192
- The agent bar is back at the bottom of the left drawer: tap it and the switcher springs upYUI-194
- A way home from every full-screen answerYUI-195
- Long answers read as body text, and markdown is drawnYUI-196
- A chart page stays inside the phoneYUI-205
Build 288
Sep 28, 2026- Every agent has its own quiet visual by default (YUI-180, runtime half)
- Every agent has its own quiet visualizerYUI-180
- the agent's tools: today's workout runner, the log, a day changed, his pages kept current (YUI-182, runtime half)
- The workout runner in the app: rest starts on its own, say doneYUI-182
- Yui 0.5.2: the dots are back and slide with youYUI-187
Build 281
Sep 28, 2026- Tables right in the reply, for any agentYUI-171
- Fix the 0.5.0 crash on switching agents and on launch: save the hellos you have met as a plain array
- Yui 0.5.1: the switch-agents and launch crash fixYUI-181
Build 278
Sep 27, 2026- Every crew agent says what it doesYUI-165
- Every agent keeps its own little databaseYUI-170
- Hold to snap and say what's in itYUI-166
- Log a meal without weighingYUI-103
- Meet each agent when you open itYUI-167
- One agent opens anotherYUI-144
- Every agent has a homeYUI-168
- Tables right in the reply, for any agentYUI-171
- Yui 0.5.0: the crew feels ready (snap and say, meet each agent, homes, meals without weighing)
Build 258
Sep 27, 2026Build 244
Sep 27, 2026- Everyone gets a Yui at sign-inYUI-134
- Native Yui on your phoneYUI-160
- No dashes in the crew's repliesYUI-163
- Long asks always get an answerYUI-162
- Line breaks read as linesYUI-161
- Add agent, Cancel no longer crashes the chat (feedback AGjOqLXN)
- A new install opens with Yui and the crew already thereYUI-164
Build 229
Sep 27, 2026- Pick the model per turnYUI-131
- Yui's own soul and first screenYUI-133
- Maps in the app (YUI-158 step 2; Chris on the Mongol Empire answer, feedback AL2nKEYo: "Again, not bad but this should be a Map.")
- Native agents look things up, with sourcesYUI-142
- Channel guide v37: agents answer where with a map (YUI-158 step 3)
- Basil reads your mealYUI-141
- Your agents remember you, and you can fix what they rememberYUI-140
- Map labels stop overlapping (YUI-158 follow-up)
- yui-mcp: MCP App copy with the map label fix (YUI-158 follow-up)
- Your agents check in on their ownYUI-143
- The first launch is Yui talking, with the crew already thereYUI-145
Build 216
Sep 27, 2026- Channel guide v34: agents send a tuner and a metronome (YUI-116, yuigui 0bbd205)
- Explainers draw every pageYUI-157
- YuiLines: 39-map.json waits for the app half of maps (YUI-158 step 2)
- yui-mcp: sync the YL parser and MCP App for maps (YUI-158 step 1)
- Plugin: a flow the phone can't run goes out as a planYUI-155
- A form inside a plan is just fields: one Send per screenYUI-156
- One Send per screen, picks tooYUI-159
Build 208
Sep 27, 2026- A tuner and a metronome in the app (YUI-116 step 4)
- Channel guide v33: agents send keys and chords (YUI-116, yuigui 85bbee1)
- Record a take, plug in a keyboard (YUI-116 step 5)
- Agents send a tuner and a metronomeYUI-116
Build 204
Sep 27, 2026Build 176
Sep 26, 2026- Hold to reply, no more swipe: the sideways drag always pages (feedback AACnEo9w)
- DrawerTests pass again: the About card's id no longer covers its button
- A quiet dot on the menu button, no count; it goes the moment nothing waits (feedback AI3Pbaid)
- It says what it is doingYUI-63
- Agents make their own flows: variantsFLOW-1
- The working row says what the agent is doing (YUI-63 step 2, app half)
- Speed numbers are stored onceYUI-107
- yui_library: agents find ready-made screens and flows over MCP; guide v28 (FLOW-2 step 2)
- Outside agents draw like the appINT-3
- Flow variants reach the copies (FLOW-1 step 3, yuigui cbf1e7a)
- Music vectors wait for the app half (YUI-116 step 1)
- yui-mcp reads and draws the music presets (YUI-116 step 1, yuigui 5414ba3)
- Working row says how long this agent usually takes
- Swift parser reads the six music presets; 37-music.json passes (YUI-116 step 2)
- YuiSound, and loop and drums that play (YUI-116 step 2)
- Yui 0.3.2: ship main to TestFlight (Chris, Sep 26)
Build 160
Sep 26, 2026- Half-typed words stay: each agent's thread keeps its own draft (feedback AK-9fNEZU)
- Channel guide v25 bundled (feedback APSw0dsa): a lesson is one screen. Synced from yuigui 6b035e2.
- A lesson is one deckYUI-113
- An answered war room ask leaves at once: the plugin redraws the war room after a tap (feedback ANP2Pn6z)
- Yui 0.3.1: ship main to TestFlight (Chris, 2026-09-26)
Build 155
Sep 26, 2026- Channel guide v24 (YUI-111): a timeline row moves on by patch, kind=done|now|next. Synced from yuigui dce6cb1.
- Yui holds less in memory, and a test checks it before every releaseYUI-100
- A full screen takes the keyboard down with it; closing it leaves it down (feedback ACbsyYSZ)
- Voice in, text out (YUI-14): SpeechAnalyzer, hands-free, talk or type per agent
- Talk to your agents hands-free, read the answersYUI-14
- CI: hands-off guard diffs the PR head, not the merge commit
- A plan's question sits in the middle of the screen, no card inside the page (feedback APXu3dFU)
Build 148
Sep 26, 2026- Send and the menu drawer answer fasterYUI-106
- Yui@home runs every week: a routine for each agentOSS-6
- Agent controls in the drawer (YUI-70 step 2)
- checks CI on every pull request, CODEOWNERS on CI, signing, release and the backend, credit opt-in (OSS-6 step 2)
- Timeline rows move in place in the app: kind= on a row patch (YUI-111 step 2)
- Channel guide v23 bundled (YUI-85; spec yuigui spec/CHANNEL.md): a sketch right after a page is that page's picture.
- Talk about a setting, built: change your agent by talkingYUI-69
- Channel guide v23 bundled, final text (YUI-85): shapes go outside a deck.
- A timeline opened on its own sits at the topYUI-112
Build 138
Sep 26, 2026- Taps answer at once, and a long thread scrolls smooth
- A deck in the chat is as tall as its page
- Full-screen pages never come up blank
- Typing keeps up, even on a long thread
- Shared agents in the app: Hi Maya, Shared by Sam, and a clean goodbye
- Shapes that move
- Yui now times itself: speed numbers from real phones, every day
- Ask any agent to restyle Yui, in the app
- Share an agent with a client, and take it back
- Group threads: the plumbing is live
- Taps answer at once, and a long thread scrolls smoothYUI-101
Build 135
Sep 25, 2026- Group threads: the plumbing is liveYUI-93
- Shared agents, database side (YUI-95, step 2 of YUI-57; spec yuigui spec/AGENTS.md "Shared agents"). WIP: plugin + app proof follow.
- Hermes plugin: shared agents on the host (YUI-95). The heartbeat and session report this profile's sandbox (sandbox.py) so Yui can mark the agent client-safe. A shared thread is its own Hermes session (chat_id <agent id>~<user id>; the owner's stays the agent id) and replies go back to that person. Before any turn for someone other than the owner the sandbox is checked again: if it no longer passes, the turn does not run, the person reads "This agent is paused by its owner.", the owner gets one card naming the rule, and a heartbeat clears client_safe at once. War room, Needs you and invite taps from anyone but the owner are refused with one line; board and mention notes go only into the owner's turns; an agent's @s never leave a shared thread. test_shared 13/13, every plugin test green (test_screen_talk harness now names the owner).
- Shared agents on the simulator (YUI-95): shared_agents_e2e.py + YuiUITests/SharedAgentTests. A throwaway owner's host reports a shell, grant.py refuses (exit 3); the host reports a sandbox, the template (Penny, candy, a first message, by Sam) goes out on an @example.com invite (--no-testflight); the invitee claims it and signs in: Penny is in the list in her look and her first message waits (light, then dark); grant.py revoke mid-test and on relaunch she is gone. 8/8. Regression after the migration: agents_test 80/80, invites_test 54/54, mention_test 38/38, relay_test 51/51.
- Shared agents follow-up (YUI-95): rows with no agent pass the owner-or-grant trigger and stay readable and deletable by their user, as before (accounts_test caught it); the two trigger functions are not callable by the app or a host. Migration 20260925090000_yui_shared_agents_fixes.sql, applied to PROOF. accounts_test and strangers_test allow the three grant checks the message policies call (strangers also names YUI-93's yui_group_notes, which failed before this card). accounts_test 73/73, strangers_test 85/85, shared_agents_test 81/81.
- Restyle Yui by asking, native (YUI-96, step 2 of YUI-43; spec yuigui spec/RESTYLE.md).
- Yui now times itself: speed numbers from real phones, every dayYUI-102
- Shapes that move, native (YUI-104; spec yuigui spec/YL.md "shapes"; Chris on build 96: "simple SVG style vector graphics... basic shapes both geometric and organic to show some complex ideas very quickly... not an immersive experience, still just in the chat with captions").
- Shared agents, step 3 (YUI-97, step 3 of YUI-57; spec yuigui spec/AGENTS.md "As built (YUI-97)").
- The MCP server and Telegram read Yui Lines like the app againINT-22
- Typing keeps up on a long thread (YUI-99). Chris on build 96: "when I hold the backspace button it goes very slow, and if I hit space twice, it is slow to create the period."
- A full-screen page never comes up blank (feedback AKsr0Ha8)
Build 122
Sep 25, 2026Build 96
Sep 25, 2026- Meta Muse Spark in Yui as a model (INT-11). --server meta (or muse) on the model bridge: Meta Model API's base URL (https://api.meta.ai/v1), key from $MODEL_API_KEY at run time (the name Meta's docs use), nothing stored, muse-spark-1.3 unless --model says otherwise, a 32k thread window. Where Meta's API differs from OpenAI's, the client copes: a bad key's 401 invalid_api_key reads as a key problem, 402 billing_error says the balance ran out and does not retry, a 403 for a model the key can't use says that instead of blaming the key, a content policy 400 reads as the safety filter, a context 400 says to lower --context or --max-tokens, 429 waits as long as Retry-After says (the bridge now honors it for any server), a plain 504 gateway_timeout does not retry and says to let it stream, an error event mid-stream (service_overloaded) waits and asks again, a 404 with no body still reads as not found, and the always-empty reasoning_content changes nothing. No request carries stop, n or logit_bias. fake-model.ts --meta replays those shapes; client.test.ts 65/65 (17 new), A2A tests 46/46. No live call to Meta yet: it waits on a Model API key (public preview, US developers).
- LangGraph agents in Yui (INT-14). LangGraph's own Agent Server (langgraph dev, and LangSmith deployments; langgraph-api 0.13+, https://docs.langchain.com/langsmith/server-a2a) serves every graph over A2A at /a2a/{assistant_id}, so the A2A bridge pairs a graph by its card, /.well-known/agent-card.json?assistant_id=<id>. That server turns each text part into its own message under one id (a second text part replaces the first) and drops part metadata, so the guide sent as a marked text part never reached the graph. For a card listing LangChain's A2A extensions (isLangGraph), the bridge now sends one text part and one data part, {"yui_channel_guide": {version, body}, "yui_events": [taps]}, which LangGraph hands the graph as state keys; every other agent gets the same parts as before. tests/sdk/langgraph_agent.py is a scripted graph (no model) that declares those keys, draws a choose screen only when the guide names it, and answers a tap from its data. a2a_e2e.py --protocol langgraph on live Yui, a throwaway account: pair by the ?assistant_id= card (A2A 1.0), a turn answered once, a screen the YL parser reads, the tap read from yui_events, the thread (contextId = thread_id) holding the guide in state and never as a chat message, clean stop, account deleted, 12/12. The ADK run shares the same runner now. A2A client tests 45/45 (3 new), SDK interop 4/4, scripted e2e 66/66, openai-compat 65/65. No threads/runs adapter: every Agent Server serves A2A unless its owner turns it off.
- Agent bubbles draw markdown (YUI-76). A slash command's answer (/status: **Model:** `claude-...`) and any host's markdown no longer show raw marks: bold, strikethrough, inline code and fenced code blocks on a soft tint, bullet and numbered lists (nested ones step in), headings as bold lines, and links, which tap only for https (others keep their words). BubbleMarkdown parses per line with Foundation's inline markdown; a ```yui fence stays word for word, and anything malformed (an unclosed ** or fence, a half link) stays as written. The person's bubbles are unchanged. Copy, Select text, VoiceOver, the reply quote and the long-answer fold and pages all take the plain words, so a folded excerpt never ends in a stray **. Bold is set in the theme's own weight; italic draws upright, since SF Rounded has no italic. -yuiDemoMarkdown seeds a /status answer and one of each element. Tests: BubbleMarkdownTests 11/11 in YuiTests 94/94 (PushToTalk skipped, it hangs on the sim); MarkdownBubbleTests 2/2 (light, dark, held), LongMessageTests, ReplyTests and SelectTextTests green on the iPhone 18 Pro sim.
- The hold menu fits any message (YUI-78, TestFlight feedback AFduDX-JwEKyTFAt4pnYIPY: "the copy button and the emojis are competing here, and I can't select the emojis"). Holding a message taller than the screen used to lift it under the header, drop the reaction bar at the bottom and clamp the menu on top of it. Now the overlay lays out one column: the reaction bar always above, the held message, the menu always below, all inside the window and clear of the header and each other. A message too tall for the room between them lifts as a preview of its top with a soft fade at the cut. A short one stays where it was held; one at the top comes down under the bar, one at the bottom lifts for the menu. The menu is measured as drawn (Remove row, bigger type) rather than guessed, and gains a Share row. Tapping the preview closes, like tapping the thread; the lift is a few points at most so it never reaches the bar or the menu. Menu icons keep pace with the theme's fixed-size words at large Dynamic Type. Copy and Select text still take every word. -yuiDemoHold seeds a checklist taller than any phone, a message at the top, one at the bottom and a card. Tests: HoldLayoutTests 6/6 (the layout math), YuiTests 100/100 (PushToTalk skipped, it hangs on the sim); HoldMenuLayoutTests light, dark and AX3 on the iPhone 18 Pro and the iPhone 17e (frames inside the window, bar over, menu under, no overlap, every emoji and row tappable, with and without Remove, tap outside closes, Select text has the full words); SelectTextTests, ReplyTests and MarkdownBubbleTests green.
- n8n workflows in Yui, three ways (INT-17). adapters/n8n is n8n-nodes-yui, a community node "Yui" (TypeScript, n8n's node conventions, no runtime dependencies, usable as an AI Agent tool): Ask and Wait puts a screen on the phone and holds until the tap, then hands the next node choice, echo, value, the [yui] line and the screen id; Send Screen returns the screen id and tap ids; Wait for Answer reads the tap on a screen sent earlier; Send Message writes a chat line. It talks to yui-mcp with plain JSON-RPC (yui_show, yui_answers with wait=25 in a loop up to the node's timeout, yui_say), signed by a Yui API credential holding the yui_ct_ token. Lines Yui can't read fail the node with the parser's own message and nothing is sent; typed text during a wait rides along in also_wrote unless Taps Only is off; a timeout fails or outputs timed_out. workflows/ holds three importable workflows: the AI Agent with n8n's MCP Client Tool (HTTP Streamable, Bearer Auth, yui_show/yui_answers/yui_say, 40 s timeout) on Ollama, the Yui node asking lunch and saying what happens next, and a Webhook trigger answering turns from the webhook bridge (path E, a tap arrives as kind event). Tests: npm test 10/10 against a fake yui-mcp. tests/n8n_e2e.py runs a real n8n 2.40.7 (Node 24, empty user folder) with this package installed from npm pack and the three workflows published, on a throwaway account in live Yui: qwen2.5:7b put one choose screen up through the MCP Client Tool, it parsed with the YL parser, the tap came back through yui_answers and the agent answered "You picked Soup for lunch."; the Yui node returned the tap flat and its Send Message used it; the bridge's "hi" got a screen and the tap got "Soup it is"; account and n8n folder deleted, no token in the log, 22/22. Not on npm or n8n's community list.
Build 91
Sep 25, 2026- The chat stays on your newest messageYUI-74
- Your own model, in YuiINT-12
- No more text bombsYUI-79
- Yui in Telegram, step 1: the renderer (INT-4). adapters/telegram turns an agent reply (chat text and ```yui fences) into Telegram Bot API messages. ask, choose and pick become inline keyboards: a button carries y:<token>:<index> (callback_data stays under 64 bytes) and the component waits in a Store the bot supplies, so a tap turns back into the exact line the phone sends ([yui] n2 choose choice=Legs), with the app's rules: changed answers say changed, an identical answer is not sent twice, graded quizzes carry correct, a screen brought back with show carries saved, pick toggles in place and goes out on Done, max= holds. say, list, card (url= as a link button, cta= as a callback), stat, table, step and timeline become formatted HTML text. Everything else (timer, slide, form, media, chart, math, calc, deck, plan, project, narrate, game, custom) is listed in one Open in Yui message whose web_app button opens the whole fence in the Mini App at yuigui.com/tg (share-code link, same ids). src/webapp.ts takes Mini App taps back: readWebAppData for sendData, readBridgePost with verifyInitData (Telegram's HMAC check on initData) for a bridge. Parser and event formatter are yuigui's, copied by scripts/sync-vendor.mjs, never forked. Runtime neutral, no dependencies. node yui-telegram.ts render --yl --tap 0,1 prints the calls and the lines taps send, no bot needed. Tests: npm test 62/62 (every preset in yl.mjs placed, none dropped; all 61 playground samples; tap round trips; initData checked against node:crypto; vendor copies current); miniapp_e2e.mjs 128/128 in Playwright against the /tg page (every sample in Telegram's dark and light themes, the adapter's link opens the same screen, taps through sendData and the bridge arrive as the phone's line with initData the bot verifies). No bot runs it yet: that needs its own BotFather token (step 2).
- Gemini in Yui, two ways (INT-9). A Gemini model: --server gemini on the model bridge (Google's OpenAI-compatible base URL, key from $GEMINI_API_KEY at run time, nothing stored, a 32k thread window by default). Where Gemini's endpoint differs, the client copes: models/ comes off listed ids, errors wrapped in a list read as their message, a bad key's 400 INVALID_ARGUMENT reads as a key problem, 429 RESOURCE_EXHAUSTED waits, thought summaries (extra_content.google.thought pieces, or a leading <thought>/<thinking> block) stay out of the answer, a blocked answer (content_filter, SAFETY) gets one line saying the filter stopped it, and a stream with no opener whose last piece carries text and finish reads whole. fake-model.ts --gemini replays those shapes; client.test.ts 37/37 (11 new). A Gemini agent: tests/sdk/adk_agent.py, a Google ADK LlmAgent served over A2A by ADK's own to_a2a, on local Ollama qwen2.5:7b through LiteLLM (no key); its before_model_callback moves the part marked {"yui": "channel_guide"} into the model's instructions. a2a_e2e.py --protocol adk on live Yui, a throwaway account: pair by ADK's card (A2A 1.0), a turn answered once, a choose screen the YL parser reads (only the guide tells the model about Yui), a tap answered once, clean stop, account deleted, 9/9. A2A client tests 42/42. No live call to Google's API yet: it waits on an AI Studio key.
- The chat never gets stuck shrunkYUI-80
- Grok in Yui as a model (INT-10). --server grok on the model bridge: xAI's base URL (https://api.x.ai/v1), key from $XAI_API_KEY at run time, nothing stored, grok-4.7 unless --model says otherwise (presets can now carry a default model, so try, pair and add need no --model with one), a 32k thread window. Where xAI's API differs from OpenAI's, the client copes: errors as {"code", "error"} read as the error, a bad key's 400 "Incorrect API key provided" reads as a key problem, a 403 for a team out of credits or at its spending limit says so instead of blaming the key and does not retry, 429 waits, reasoning_content stays out of the answer, a refusal with no content is shown instead of nothing (streamed or plain), and no request carries stop or the penalties that reasoning models refuse. fake-model.ts --grok replays those shapes; client.test.ts 48/48 (11 new), A2A tests 46/46. No live call to xAI yet: it waits on an xAI key.
Build 82
Sep 25, 2026- Add Yui to Claude or ChatGPT by pasting one URLINT-19
- Type / to see what your agent can doYUI-61
- Yui in Claude, and Yui screens inside the chatINT-7
- @ another agent from any threadYUI-44
- It says what it is doingYUI-63
- Yui screens in ChatGPT tooINT-8
- An agent that isn't listening yet says soYUI-64
- Add any A2A agent by its Agent CardINT-18
Build 74
Sep 25, 2026- A newly added agent answers what you sent before its gateway came up: pairing and the gateway restart are separate steps, and the plugin started a first-seen agent's cursor at "now", so anything sent in between was skipped for good and the app sat on "Sent to an agent" (TestFlight feedback AMiI7ezKx6x1KcexlzOKYJc: an agent paired 22:36, gateway never restarted, "Did we stall?" never answered). A new agent now starts a day back (new_agent_floor); only unhandled user rows are fetched, so nothing already answered replays. Proof on the live case: cleared the agent's cursor, restarted, both waiting messages went in as one turn and an agent replied in 21s. Plugin only, no app build needed.
- Links in a card open SafariYUI-67
- Copy any part of a message: hold an agent bubble, Select text opens its words read-only, drag to select and Copy (or Copy all); a bubble at the bottom lifts so the menu never covers it (TestFlight feedback AG9JzU4LeWl-TFeKWftiFIE). Reply to a message is YUI-68. SelectTextTests 2/2 light + dark (no keyboard, whole text, Done closes), ComposerTests.testReactionLeavesTheComposerEmpty, YuiTests 44/44
- A timeline for the war roomYUI-65
- Drag the war room queue into your own orderYUI-66
- Games: tic-tac-toe, snake and memoryYUI-59
- Outside agents draw like the appINT-3
- Reply to one messageYUI-68
- The war room, built outYUI-73
Build 64
Sep 25, 2026Build 61
Sep 24, 2026- Test builds by link: new app builds on the phone without TestFlightYUI-55
- Invites: ask, get approved, Apple emails you, sign in and you're inYUI-56
- Build 57: every fix you sent is on your phoneYUI-52
- Hold to talk no longer crashes: the speech permission answer, the mic tap and the recognizer's results come back on system threads, and the closures that took them were written inside the main-actor PushToTalk, so Swift 6 trapped the moment one ran (TestFlight crash ANv4a2bHdXMMaEjjhTva5ZA, build 57, _dispatch_assert_queue_fail in PushToTalk.authorized). They are now built in nonisolated code and hop to the main actor. A mic with no usable input (a call, a route change) shows can't listen instead of crashing in installTap. PushToTalkTests: start() with speech + mic granted trapped before, passes now; the tap and results called from a background thread reach the main actor. YuiTests 43/43
Build 57
Sep 24, 2026- Every full screen has a way out: a real X, a swipe down, compare full screen
- Demo clips of every preset, recorded from the appSOC-2
- Done always does something: gallery and pick answer with nothing ticked, photos stop covering it
- Gallery photos keep to their own space: layout test at 1-7 photos, every layout
- Sent words leave the composer, and the bubble lifts into the thread
- Answers are still there when you reopen a thread: chosen, picked, slid, asked and sent forms rebuilt from the thread's event rows, newest per id
- Loose quoted options become buttons and ~card@week patches the card (YL sections 4 and 5)
- Every look on screen: the Add agent picker is a grid sorted by hue, six new colors (cherry, honey, lime, teal, grape, slate)
- Long turns read as work, not trouble: "Yui is working · 2m 20s" counts up, no time limit, no restart advice, resumes on reopen
- Narration never speaks in a robot voice: skip the Eloquence, MacinTalk and novelty voices and Personal Voice, pick premium > enhanced > Samantha, per agent within the best tier
- Send photos and talk from the composer: one + for the photo library and camera, hold the mic to talk, let go to send
- The timer keeps counting on the lock screenYUI-30
- React to a message: hold it, tap 👍, and your agent builds itYUI-49
- No dead buttons: a plan ends in Send, and agents stop adding 'Got it'YUI-53
- Scroll up, and one arrow brings you backYUI-50
- Read, answer, send once: a plan is now one full-screen flowYUI-51
- Save a screen, bring it back with two tokens: every agent gets a shelfYUI-32
- The preset flywheel: custom screens that keep coming back become presetsYUI-42
- Not on Hermes? Any agent that answers a web request can talk in Yui nowINT-2
- Three screens per agent: the chat, then screens 2 and 3 a swipe awayYUI-31
- OpenClaw agents can talk in Yui nowINT-1
- Draw your best screen in three lines: a community page and the first open challengeOSS-5
- Three short videos: Yui in 15 seconds, Yui Lines in 30, your Hermes on your phone in 60SOC-3
Build 33
Sep 24, 2026Build 31
Sep 24, 2026Build 30
Sep 24, 2026Build 29
Sep 24, 2026Build 27
Sep 24, 2026Build 26
Sep 24, 2026- Change your answerYUI-12
- The channel guide, now testedYUI-10
- Pictures in, photos outYUI-21
Build 23
Sep 24, 2026- Change your answerYUI-12
Build 22
Sep 24, 2026Build 21
Sep 24, 2026Build 20
Sep 24, 2026Build 19
Sep 24, 2026Build 18
Sep 24, 2026- Anyone can try YuiYUI-22
- Pick it up in YuiYUI-8
Build 16
Sep 24, 2026Build 14
Sep 24, 2026Build 13
Sep 23, 2026Build 11
Sep 23, 2026Build 10
Sep 23, 2026- Yui drops the catYUI-9
Build 9
Sep 23, 2026Build 8
Sep 23, 2026Build 5
Sep 23, 2026- Yui gets a faceYUI-2
Build 4
Sep 23, 2026