Follow @plannotator on X for updates
Missed recent releases?
Release
Highlights
v0.28.64
Installs and updates download a smaller, compressed copy, a Videos filter on the Artifacts page, GitLab comments on a whole file get their own thread, pull request pictures and videos show in the Inbox
v0.28.63
Pair Grok Bot and other cloud agents from Settings, Hermes Agent, OpenClaw and Muse Code can use the Inbox, add a thread to Priority to keep it on top, tag threads, and find each tag in the sidebar, Pull requests board as a table, with bulk Merge
v0.28.62
Agents started from the Inbox now work on Windows, pick a model and effort when you start an agent, rules for your agents, written in your own words, post a thread's decisions on its pull request, the Inbox loads faster on a slow connection
v0.28.61
Updates now update the Claude Code plugin too, an agent's chosen face shows on every icon of it, filter the Inbox list by pull request state, Modern dark shows section bands and the Reply button, one conversation no longer shows as two agents
v0.28.60
Click a word to highlight it, a one-time Themes dialog, Settings → Rows rebuilt, tell your agent how you want your rows, starred threads as pills above the list, a pill for new messages out of view, a half-circle face picker with ten Glass colours, a new phone sidebar and reply box
v0.28.59
A quieter Agents section in the sidebar, machine names only when agents run on more than one machine, agent icons that are always gently alive and lean toward your pointer
v0.28.58
Start Codex from New message, an Agents section in the sidebar, start an agent in a folder on any drive, play audio attachments and comment at a moment, Claude Code's Plannotator tools work on Windows
v0.28.57
Pin artifacts, and see every artifact on one page, filter the list by project, date or agent, a thread shows its pull requests and their state, choose what the sidebar shows, and in what order, Ask AI starts from Side in the selection bar
v0.28.56
Questions can show trade-offs and a prototype to try, a thread with many big pictures no longer crashes the tab, Escape closes New message and keeps your draft, read threads stop being bold and keep their place, agent messages that name no thread start a new one
v0.28.55
Floating reply drafts, now a setting under Experimental, open questions sit next to Reply again, a comment box that keeps unsent comments as Drafts, choose how your list looks: Minimal, Balanced or Detailed, update an older linked machine from this Inbox
v0.28.53
Start an agent in a new folder, or from a git URL, "+" on each project row starts a session there, a reaction tray, a thread's Links, Settings → Activity, New message offers the open thread's files, Bro mode: agents write to you in plain words
v0.28.52
Start agents from the Inbox, on by default, a new reply box, Ask AI for everyone, Insights in Settings → Decision data, Plannotator reloads itself after an update
What's New in v0.28.65
TL;DR
- New: Take back a reply your agent has not received yet
- Changed: Over Tailscale, Plannotator opens only for your own account
- New: Tag a linked machine's threads; one tag across machines
- Changed: T3 Code threads get the Inbox with no setup
- Fixed: Long threads open on slow connections
0.28.65 lets you take back a reply your agent has not received yet. Over Tailscale, Plannotator now opens only for the account that owns the computer. Tags now work across linked machines, and a T3 Code thread gets the Inbox without any setup. The release has 25 PRs. One is from an outside contributor, @stjepanvrbic, who made a first contribution.
Take back a reply before your agent gets it
Before, once you sent a reply, you could not change it while it waited for the agent. To correct it, you had to send a second message, which could leave two different instructions in the queue. Now a reply that no agent has received yet has a Take back button. It shows beside Send now on the waiting band, on the reply's delivery line, and in the message's ⋯ menu.
Take back saves what you are typing first. Then it puts the reply's words and files back above it in your reply box, with the line "Taken back. Claude Code never got it. Send it again when it's ready." If the reply was the only message in its thread, the thread goes away and New message opens with the same words, files and recipient. When you send again, it goes as a new message.
The Inbox keeps one rule for every agent: a message either is still yours or has been handed over. Once an agent has the message (it was delivered, an agent read the thread, or it went into Codex's queue or a T3 or cloud send), Take back is no longer offered. If you press it at the wrong moment, a quiet line explains why: "Claude Code already has this message, so it can't be taken back. Reply below to change it." A message that has been handed over now reads "Handed to Codex; it takes this at its next step." instead of offering Send now. A taken-back message is gone from every agent's read, from search, from Activity and from decision exports. There is no keyboard shortcut.
#3290, #3291, #3293, #3294, requested in #3229 by @Arobotmaster
Over Tailscale, only the account that owns this computer
Plannotator has no sign-in and is for one person. Over Tailscale, the Inbox now opens only for the Tailscale account that owns the computer. That account gets the full Inbox from any of its devices. Any other Tailscale account is refused. A browser gets a short page that says "This Inbox belongs to this computer's owner" and names the account that tried. An API call, the event stream and /mcp get a 403 with tailnet_identity_refused.
This is a behavior change. Before, the Inbox let in any other login listed in config.json inboxTailscaleAllow as a guest with a smaller Inbox. Sessions started with plannotator review --tailscale or plannotator annotate --tailscale opened for anyone on the tailnet. Both now refuse every account except the owner's. On a machine where Tailscale names an owner, inboxTailscaleAllow is ignored, and startup prints one line that says so. The key still names the owner on a tagged machine, which Tailscale gives no owner. A --tailscale session on a tagged machine with no inboxTailscaleAllow cannot tell who the owner is, so it does not start, and it says why.
Phones and linked Macs are unchanged, because they connect through their own doors. If you shared an Inbox or a --tailscale review with another Tailscale account, that account can no longer open it.
Tags across linked machines
With two linked Inboxes, such as a MacBook and a Mac mini, you can now tag a thread that lives on the other machine. Add tag is in the row's right-click menu, the phone's long-press sheet and the thread's ⋯ menu, when the other machine runs this version. Tags with the same name are one tag. Spaces at the ends and letter case are ignored, so "Release" and "release" match. When you open a tag in the sidebar, it lists the threads from both machines together, and its counts include them.
Rename, Delete tag and the delete's Undo now change the tag on every linked machine that holds it, from the sidebar and from the Board's Tags dialog. If a machine is asleep, the change waits and applies when the machine is back. An older machine keeps its own tags, and nothing is sent to it. The Board's tag filter and Tags dialog also list tags that only the other machine holds.
T3 Code threads get the Inbox with no setup
Before, a Claude thread in T3 Code needed three steps to use the Inbox: plannotator t3 login, a claude mcp add entry and a restart. Now the Claude Code plugin runs in a T3 thread's Claude by itself. The model gets the plannotator_inbox tool. Its messages are filed as that T3 thread, and your reply goes in as a new turn of the running session. T3 keeps its own Plan mode. The T3 sign-in stays useful as a fallback: T3 stops an idle Claude after 30 minutes, and after that the T3 wake sends what still waits.
The plugin now also runs in claude -p, in other Agent SDK apps and in Claude Desktop. There the model gets plannotator_inbox and can write to your Inbox. Nothing wakes those sessions, so the send tells the agent to read the thread later. Plan review and reviews in those sessions work as before.
When a reply to a T3 thread cannot go in, the Inbox now says why under the reply: no T3 sign-in, a sign-in that ran out, a sign-in that cannot send into that thread, or T3 not answering. Where signing in fixes it, the line shows the sign-in command with Copy. The line goes away once the reply is delivered.
T3 threads also get two fixes. The Inbox now wakes every kind of T3 thread, not only threads made in the app. That includes threads made over T3's MCP, launched by an agent, scheduled, delegated or provider threads. A reply to a T3 thread also stays owed to that thread when another agent reads the Inbox thread first.
#3362, #3365, #3261 by @stjepanvrbic closing #3311 reported by @agents-nils, #3348 closing #3339 reported by @stjepanvrbic
Long threads open on slow connections
On a slow link, a long thread could fail to open at all. The thread read had an 8-second limit for the whole answer. A 450-message thread is about 450 KB, so at 50 KB/s it could never finish, and the Inbox retried forever. Now the limit counts from the last bytes received, so a slow answer that keeps arriving is read in full. In a test at 50 KB/s, that thread opened in 8.8 s. A read whose bytes stop still fails, and a read cut off partway now shows as a failure instead of an empty answer.
An attached HTML page is now sent compressed both ways, which cuts the bytes for each open from about 617 KB to 175 KB. The Inbox also sends less on its first load: Tater mode's pictures left the Inbox's script, which went from 2,510 KB to 1,991 KB. Switching threads, opening Settings, opening search and picking a file in code review redraw much less. The PR's measurements show these steps 10 to 25% faster.
The Inbox's SQLite store is removed
0.28.63 added an Inbox store in SQLite, off by default. It is now removed, and the Inbox keeps its records in its files only. If you never turned it on, nothing changes. If your Inbox was on SQLite, it moves back to its files at the next start, with every message, and prints one line in the terminal or inbox.log. The database is kept as a read-only backup in a dated backup-…-sqlite folder inside the Inbox's data folder. If the database cannot be read, the Inbox does not start and does not change anything. It says where the messages are and how much disk to free. The inboxSqlite setting, PLANNOTATOR_INBOX_SQLITE, Settings → Storage's Backup group and plannotator inbox export are gone.
Code review in the Inbox: off by default
These show only with Code review turned on in Settings → Capabilities.
- Close pull requests from the board. Select mode on the Pull requests board has a Close N action. It closes the picked PRs one at a time through your own
ghorglab. A toast says "Closed N" with Undo, and Undo reopens exactly those PRs. If a PR cannot be closed, the reason shows under the bar in the forge's words. Only the window can close a PR. No agent tool or command can. #3287 - Post a GitLab review after new commits. Posting a review on a GitLab merge request that got new commits after you read it used to be refused. It now posts at the commit you read, as GitHub already did, with line comments placed on that version of the merge request. #3244
Additional Changes
- A self-managed GitLab at any address. A merge request, issue or work item link on a company's own GitLab, such as
git.acme.com, is now recognized by its path, gets the GitLab mark, and attaches to a thread. Withglabsigned in to that host, it also shows live state. The Inbox learns such hosts from glab's own config file (host names only). Post decisions now runs only against github.com, gitlab.com or a host yourghorglabis signed in to. #3305 - One Claude Code session is one participant. A Claude Code session that wrote through a hand-added
plannotator inbox mcpentry could show up as "An agent" and "An agent 2" beside "Claude Code" in a thread's reply picker. It now shows as one participant, and a reply wakes it. #3336, reported in #3309 by @Arobotmaster - A sandboxed agent no longer replaces your Inbox. An agent whose shell cannot reach the Inbox's local address could start a second Inbox and stop yours, so the window had to ask for notifications again. Such a start now refuses with "Could not reach the running Inbox: …" and leaves yours running. #3354
- Start lines in the debug log. With the Inbox's debug log on, each process that starts or waits for an Inbox writes what it waits for to
inbox.log. This helps track down leftover Inbox processes. #3352, for #3350 reported by @zane668 - Sidebar header buttons line up. In the sidebar, Agents' buttons now read Add machine, then Add agent, so Add agent sits under Tags' "+". While a section is closed, its buttons show when you hover or focus its header. #3328
- A killed start no longer blocks the next one. A start that was killed while it took the start lock could make every start in the next 30 seconds fail with "try again". #3300
- The agent face moves to the shared UI, so other parts of Plannotator can show the same animated agent face. The Inbox is unchanged. #3344
- Test and guidance upkeep: #3307, #3327
Install / Update
macOS / Linux:
curl -fsSL https://plannotator.ai/install.sh | bashWindows:
irm https://plannotator.ai/install.ps1 | iexClaude Code Plugin: The install script above also updates the plugin when claude is on your PATH. Otherwise, in a terminal:
claude plugin marketplace update plannotator
claude plugin update plannotator@plannotator --scope userThen restart Claude Code. Inside Claude Code, run /plugin marketplace update plannotator, then open /plugin → Installed → plannotator → Update now.
Pi:
pi update npm:@plannotator/pi-extensionOpenCode: Re-run the install script above. It also clears the OpenCode 2 plugin cache.
What's Changed
- Inbox: post a GitLab review after new commits, at the commit read by @backnotprop in #3244
- Inbox PR review tests: load the TypeScript grammar before the first test by @backnotprop in #3307
- Inbox: a start killed while taking the start lock no longer blocks the next start by @backnotprop in #3300
- Inbox: remove the SQLite backend; an Inbox on it returns to its files by @backnotprop in #3320
- Inbox: take back an undelivered message (server) by @backnotprop in #3290
- Inbox: taken-back messages leave lists and counts; a handed item says so by @backnotprop in #3291
- Inbox window: Take back an undelivered message by @backnotprop in #3293
- Inbox take back: docs, and the relay, launch and old-plugin proofs by @backnotprop in #3294
- Inbox way back: a starter no longer gives up as the Inbox finishes starting; the test holds on a file by @backnotprop in #3326
- Agent guidance: one experience across a person's linked machines by @backnotprop in #3327
- Inbox: recognise a self-managed GitLab at any address by @backnotprop in #3305
- Frontend performance, batch 1: no bytes or redraws nobody asked for by @backnotprop in #3317
- Inbox: one Claude Code session is one participant in a thread by @backnotprop in #3336
- Inbox: tag a thread from any linked machine; one tag across machines by @backnotprop in #3330
- fix(inbox): wake T3 Code threads whatever id T3 gives them by @stjepanvrbic in #3261
- Inbox sidebar: Tags and Agents headers place and show their add buttons the same way by @backnotprop in #3328
- Inbox: Close picked pull requests from the board, with Undo by @backnotprop in #3287
- T3: a reply stays owed to its thread when another agent reads first by @backnotprop in #3348
- Inbox: with the debug log on, each start says what it waits for (diagnostic for #3350) by @backnotprop in #3352
- Inbox: a starter that cannot reach a running Inbox does not start a second one by @backnotprop in #3354
- Share the Inbox's living agent face with the rest of the UI by @backnotprop in #3344
- Over Tailscale, only the account that owns this computer by @backnotprop in #3141
- Frontend performance, batch 2: slow links (long threads open; HTML pages sent compressed) by @backnotprop in #3356
- Claude Code mod: active in every session, interactive or not by @backnotprop in #3362
- Inbox: a reply waiting on T3 says why and what to do by @backnotprop in #3365
New Contributors
- @stjepanvrbic made their first contribution in #3261
Contributors
@stjepanvrbic wrote the fix that lets the Inbox wake T3 Code threads whatever id T3 gives them (#3261). The fix covers MCP, launched, scheduled, delegated and provider threads. He tested it against a real T3 Code and ran the full CI on his fork. He then reported the case it left open (#3339): another agent's read could take a reply meant for a T3 thread. He also warned that holding such a reply for good would strand a dead thread's reply. That warning shaped the fix in #3348.
Community reports and requests that shaped this release:
- @agents-nils reported that T3 threads made over MCP were never woken (#3311)
- @sx4im opened a fix for the same
mcp:case (#3313), closed in favor of the broader #3261 - @Arobotmaster asked for a way to change a message before the agent gets it (#3229), which became Take back, and reported one Claude Code session showing as several anonymous agents (#3309)
- @zane668 reported leftover background Inbox processes and found a reproduction (#3350), which led to the debug start lines and the sandbox fix
Full Changelog: v0.28.64...v0.28.65