Skip to content

v1.24.0

Choose a tag to compare

@flxmrk flxmrk released this 23 Jul 15:06
  • maiLink — manage your tabs and workspaces from the phone, not just chat with them. The phone app gains the tab-lifecycle actions you'd otherwise have to walk back to your desk for:
    • Rename a tab. The new name persists, survives a resume, and appears live on every desktop window's tab strip.
    • Close, archive, and restore. Archive a tab to tuck it away recoverably, restore it later (it respawns and resumes its agent), or close it outright. A new archived list shows what you've tucked away across all workspaces.
    • Wake a suspended workspace. The phone could see a suspended workspace's tabs but tapping Initialize dead-ended, because a suspended workspace has no terminals running. Suspended tabs now show a Resume workspace control instead, which respawns exactly the tabs that were live when you suspended and re-initializes their agents.
    • Mesh workspaces, with one-tap Initialize-all. Mesh workspaces are now badged in the inbox, and a single tap readies every member — each one triaged individually, so already-running agents are simply registered, exited ones are resumed, and live members are left alone.
  • maiLink is dramatically faster on big sessions and large tab counts. Opening a thread could take 10–25 seconds, and the app got slower the longer maiTerm ran. Several independent causes, all fixed:
    • Reading a conversation pulled in the entire session log — 155 MB on real machines — just to show the last few dozen turns; it now reads only the tail it needs.
    • The scrollback database walked every tab's full buffer to answer what looked like a trivial "when was this updated?" query, on every chat-list and every thread open. A covering index now answers it without touching the buffers, and metadata reads no longer queue behind buffer saves.
    • maiTerm's own background loops rebuilt the complete chat list every couple of seconds — phone connected or not — starving genuine requests. They now work from lightweight in-memory summaries, and per-tab conversation facts are cached and only re-read when a transcript actually changes.
  • maiLink shows the agent's reasoning effort (low/medium/high/xhigh/max) alongside the model and context gauge, for Claude agents that report it.
  • Fix a live, working agent showing as "dormant" on the phone. After a mesh or SSH resume, a fully running agent could be stuck reporting dormant forever — with an Initialize banner sitting over its live output. Two fixes: session registration no longer lets one tab claim a sibling tab's startup event (the root cause), and a tab with a live terminal that's actively producing output now corrects itself to "active" regardless.
  • Fix the phone's stop button leaving a tab stuck on "Working". Interrupting a turn from the phone stopped the agent but left the tab latched as active indefinitely, because Claude Code doesn't signal a turn ending on a user interrupt. The interrupt now settles the tab to idle itself — and self-corrects if the interrupt didn't actually land.
  • Mattermost threads: send and receive screenshots. Image attachments on a thread message are now staged where the agent can actually open and read them — including for agents running on a remote host over SSH — so a screenshot of the bug reaches the agent instead of being invisible to it. The agent can attach images to its own replies too, for before/after or visual proof of a fix.
  • Mattermost: editing a message no longer re-opens a resolved thread. Editing the original report of a just-closed thread re-served it as if it were brand new, and the whole thread got picked up again as fresh work. Edits can no longer summon.
  • Mattermost: a mention the bot already answered no longer re-summons. Confirming a fix could race the channel scan and re-bind the thread it had just closed — a zombie binding that consumed one of the tab's three thread slots and caused later, legitimate summons to draw spurious "at capacity" replies.
  • Mesh initialization now waits for each agent to settle instead of guessing. Sending the readiness command to a tab sitting at Claude Code's "restore as is / compact first" resume dialog answered the dialog and swallowed the command, leaving the row to time out. maiTerm now answers any startup dialog first, waits for the terminal to go quiet, then delivers the command exactly once — and the response window starts when it's actually delivered, so a long compaction no longer reads as a failure.
  • Fix duplicated tabs cross-rendering a single conversation. Two tabs sharing one session ID (from a duplicate or reload) could show each other's conversation in maiLink, and with auto-resume on, both could resume the same session — two live agents appending to one history. maiLink now renders a contested session only for the tab that actually hosted it last, and an auto-resume of a contested session branches into a fresh session instead: both tabs keep the full conversation and diverge cleanly from there.
  • Preferences: the Authorized and Pickup user fields use a two-column layout, matching the rest of the Integrations pane instead of stacking a full-width text box under the description.