Prerequisites
- A coding agent: Claude Code, Codex, Pi, OpenCode, or another MCP client.
- Plannotator on the same computer. Run
plannotator --versionand verifyv0.28.9or later.
Set up the Inbox
1
Install or update Plannotator
Run the installer. It also updates an existing install.See Install Plannotator for other options.
- macOS, Linux, or WSL
- Windows PowerShell
2
Start the Inbox once
3
Connect your agent
- Claude Code
- Pi and OpenCode
- Codex and other MCP clients
Use the Plannotator plugin on Claude Code 2.1.287 or later, and update the plugin if you installed it earlier. Its Plannotator mod adds a
plannotator_inbox tool, which is on by default.Quit and restart Claude Code. Claude Code adds the tool when it starts, so a session that started before your first plannotator inbox does not have it. A new conversation inside a running Claude Code is not enough.The mod does not run in
claude -p, SDK runs, or on Windows. There, connect Claude Code through MCP like Codex: claude mcp add --scope user plannotator-inbox -- plannotator inbox mcp.4
Send yourself a test
In a new session, ask your agent:A thread appears in the Inbox. Type a reply and press Send.
How it works
- Threads by project. Each agent session writes to its own thread unless the agent names a thread to join. The sidebar groups threads by project: the repository, or the folder when there is no repository.
- Questions and Send. Questions appear as cards. Click to pick an answer. Your picks save at once, and Send delivers your picks, your words, and any file annotations as one reply.
- Replies wake the session. With Claude Code, Pi, or OpenCode 2, your reply arrives in the session that asked as a new turn once the session is idle. It never interrupts a running turn. Codex and other MCP clients are not woken: the agent reads your reply with the
wait_for_replyorread_threadtool. - Local by default. The Inbox binds
127.0.0.1and stores everything under~/.plannotator/inbox/(or$PLANNOTATOR_DATA_DIR/inbox/). To open it from your other devices, see Open the Inbox over your tailnet.
How to use it
- Hand off long work and let the agent leave its questions in the Inbox instead of stopping to wait for you.
- Get decisions while you are away from the terminal, then answer several threads in one pass.
- Review files the agent attached, and annotate them before you reply.
- Read guided reviews of a code change, section by section.
plannotator annotate instead when you need a decision before the agent continues.
Open the Inbox over your tailnet
Requires Plannotator
v0.28.10 or later.- Run
plannotator inbox --tailscale. It publishes until the Inbox stops and works with--backgroundand--no-open. If the Inbox is already running, the command asks it to publish. - In the Inbox, open Settings and turn on Over your tailnet. The switch stays on, so the Inbox publishes at every start, also when an agent starts it. You can turn it on only from this computer.
https://<machine>.<tailnet>.ts.net:<port>/, where the port is the Inbox’s own port.
- Tailnet only. The Inbox stays bound to
127.0.0.1. Tailscale Serve publishes it over HTTPS inside your tailnet. The Inbox never uses Tailscale Funnel. - Only your login. The Inbox lets in only the Tailscale login that owns this computer. It refuses other logins and tagged devices.
- Agents stay local. MCP and the reply wake answer only on this computer, never over the tailnet.
- Tailscale unavailable. If Tailscale is missing or signed out, the Inbox still runs on this computer, and Settings shows why it could not publish.
- Hard off.
PLANNOTATOR_INBOX_TAILSCALE=0keeps it off, even with--tailscaleor the switch.
~/.plannotator/config.json:
tailscale serve --https=<port> off. To keep a published Inbox running after you close the terminal, start it with plannotator inbox --background --tailscale.
If you followed the earlier manual workaround, remove that mapping with tailscale serve --https=443 off. It exposes the whole Inbox, including its agent tools, to everyone on your tailnet. The Inbox detects it, refuses requests through it, and Settings offers to replace it with the owner-only address.
Troubleshooting
- My agent does not see the Inbox tool. Run
plannotator inboxonce, then fully restart Claude Code or OpenCode, or start a new Pi session. On Pi and OpenCode, also turn the tool on. WhenPLANNOTATOR_INBOX_TOOLis set, it decides for every agent and overrides Settings. - Codex does not write to the Inbox. Codex has no built-in Inbox tool. Add the MCP server with
codex mcp add plannotator-inbox -- plannotator inbox mcp, then restart Codex. - My reply did not arrive. A reply waits until the session is idle. MCP-only agents must read it with
wait_for_replyorread_thread, so ask the agent to check. - I cannot open the Inbox from my phone. Sign in to Tailscale with the same login on both devices, check that Tailscale is signed in on this computer, and check that Over your tailnet is on in Settings.
- The Inbox address changed. When its last port is taken, the Inbox starts on a new port and shows a notice. MCP connections through
plannotator inbox mcpfollow the change. Allow browser notifications again at the new address. - I want to stop the Inbox. Press
Ctrl+Cin the terminal that runs it. For a background Inbox, find its process ID withgrep '"pid"' ~/.plannotator/inbox/inbox.jsonand runkill <pid>. The next agent that writes starts it again.
v0.28.10. Maintained by the Plannotator project.