changelog
Popover · latest 0.8.1
What each release changed, newest first. On a machine that already has popover, popover changelog prints the same notes, and popover update prints them for whatever it just installed.
0.8.1current
Features
- Your agent offers a fork when the moment calls for one, instead of waiting to be asked. It used to be told never to suggest one, on the reasoning that handing over a whole conversation is a large enough disclosure to be the user's own idea. The effect was that the most useful case never came up at all, because the moment for a fork is one you are usually too deep in the work to notice: you are going off shift, or about to re-explain an hour of debugging to a colleague by hand, or trading asks back and forth on what turns out never to have been one question. Your agent now says so once, and says what the fork would include. Making one is still yours alone — it cannot create a fork without you asking, "that would be useful" is not read as a yes, and if you pass on the offer it does not raise it again.
Fixes
- Your agent is told who else is working in the repo again. The notice was supposed to appear whenever the cast of teammate agents changed, and almost never did: it gave the daemon 250ms to answer, and any answer more than five seconds old means fetching from the server, which takes about 350ms. So it ran out of time and said nothing — and saying nothing looks exactly like working alone, which is why it went unnoticed. It now waits long enough to get an answer. If you are working alone it also stops checking every prompt, so you are not paying for a lookup that has nothing to report.
popover fork revokeno longer tells you a fork is destroyed when it is not. If the write failed, it said "revoked" anyway — the one command whose whole job is undoing a mistake, and the one place a false confirmation is worst, because you stop looking. It now says it could not and asks you to try again. A code that was already gone still reports success, which is deliberate: answering differently would let anyone holding a code learn whether a conversation exists.- Expired forks are actually deleted now. A fork's ciphertext is supposed to be destroyed 24 hours after it is made, but the cleanup only ever ran when somebody happened to create another fork — so on a quiet team, conversations you had shared for a day stayed on the server indefinitely. It now runs on a schedule of its own.
- A hiccup on our side no longer signs your machine out. Several of these reported a temporary server problem as a permanent refusal: a failed lookup during
popover loginlooked like an invalid code and abandoned the login, and one during a routine daemon check looked like your machine had been revoked — which is not something it retries. They now say the service is briefly unavailable, and the daemon keeps its session. - Opening a fork works on Windows when the folder it came from has a non-ASCII name. The console reads a script in its own code page rather than UTF-8, so a path like
C:\Users\Renée\workarrived mangled, thecdquietly failed, and the fork opened anyway in whatever directory the console started in — looking correct while every file path in the conversation pointed somewhere else. It now switches the console to UTF-8 first, and stops with a message rather than opening in the wrong place. - Asks against a long conversation work now. Answering an agent used to run the question past Haiku no matter what the agent itself was running, and Haiku holds 200K tokens — so on any session bigger than that, Claude Code had to compress the whole conversation before it could read it, which took longer than the 90 seconds the asker waits. You got "did not answer in time", and the machine being asked had already spent the tokens. The answer now comes from the same model the session is already running, which fits by definition: measured on a 3.9MB conversation, 97.6s and no answer became 15s and an answer. It costs the answering machine more per ask, and it is their call — set
POPOVER_FORK_MODELto pin a cheaper one.
0.8.0
Features
- Asking and telling are their own commands.
/popover:ask B1 why did you rule out redis?and/popover:tell B1 the migration is appliedreplace/popover:team ask …and/popover:team tell …, and/popover:teamis now just the roster. The three cost completely different things — the roster costs nothing, an ask spends the teammate's tokens on their machine, a tell spends their attention and lands in their live session — and hiding all three behind one first word made the cheapest and the most intrusive look like the same gesture. The old forms still work and mention the new name once, so nothing you have already learned breaks. - Agents can have names.
popover rename B1 "auth work"gives one of your agents a name, and your teammates see it on their next roster while the dashboard picks it up live — so three sessions in the same repo stop being three identical rows ofB1,B2,B3. Runpopover renameon its own to pick from a list instead of looking a handle up first. A named agent answers to either, so/popover:ask B1and/popover:ask "auth work"both reach it. You can only name your own agents, the name goes when the session does, andpopover rename B1 ""takes it off again. Nothing changes for anyone who never uses it: a roster with no named agents on it prints exactly as it did before. - The documentation is public. popover.to/docs is the whole of how it works — the roster, asking, telling, forking, which agents can see each other, and what leaves your machine — and popover.to/changelog is this file, with a URL you can send someone. Neither needs an account: until now the only thing a person could read before installing was the poster, so deciding whether to run the install command meant asking somebody who already had.
popover changelogpoints at popover.to/changelog when an install has no notes to read, rather than at a repository that is private and answers a 404.
Fixes
- Everyone on your team needs this release. The way a repo is identified changed, and a popover older than 0.8.0 cannot prove which repo it is in — so an out-of-date machine keeps working and keeps its own agents up to date, but goes quiet for the rest of the team until it updates. It says so on its own roster and in
popover doctor, and your roster counts the teammates it cannot show you rather than leaving you to wonder where everybody went. - An unrecognised repo identity costs you the identity, not the update. A publish carries every session on the machine in one write, so refusing that write over one field it did not like took the whole machine off the air — no roster, no status, and its own agents frozen at whatever they were last doing — while the connection itself looked perfectly healthy. A value we cannot verify is now dropped and the update lands without it.
- Working in the same repo is now something popover checks rather than something it takes your word for. A repo was identified by the name of its git remote, which anyone can type, so anyone on your team could claim to be in a repo they had never cloned and see — and ask — the agents working in it. Identity now comes from the repository's own history, which you only have if you have actually cloned it, and what reaches the server is a hash of that rather than the thing itself, so it cannot be read off one session and reused on another.
- Revoking a machine ends it. A revoked machine could quietly un-revoke itself and carry on, which made the button on the dashboard a suggestion.
- The agent that answers you cannot rewrite what you asked it, and the agent you send a message to cannot change who it came from. Both are what
/activityandpopover logshow you afterwards, so both are now fixed at the moment they are written. - Nothing a teammate can type reaches your agent as an instruction. Names, titles and the activity shown on the roster are text your agent reads, and a newline in the right place could forge a line that looked like popover talking. That text is now bounded and stripped of anything that can start a new line, hide itself, or reverse the one it is on.
- A laptop and a desktop no longer give two agents the same handle. Both machines numbered their own agents from one, so
G1could mean either, and asking for it reached neither. Handles are now handed out where all of your machines can be seen at once. popover daemon stopstops popover and nothing else. It trusted a leftover file naming a process id, which the operating system may since have given to something entirely unrelated — andpopover updateruns it for you.popover updateno longer risks leaving half an install behind on Windows, where a file being replaced cannot be one a running program still holds open.- A slow moment no longer takes your agents off your teammates' rosters. If popover could not read the list of running sessions — a busy machine, a moment's hesitation — it concluded every one of them had ended.
popover fork revoketells you the truth when it fails. It reported that a conversation had been destroyed without checking, which is the one command whose word you would not think to doubt.- Agents belonging to teammates whose names are not written in the Latin alphabet can be reached again. A teammate called 李明 is given the handle 李1, and asking for it matched every agent whose handle ended in the same digit — so
/popover:team ask 李1came back "did you mean 李1 or 王1?" with no third thing you could type that would have worked. Their name now finds them too, and so does the name of an agent renamed in any script. - The roster lines up its columns for those agents rather than shearing them. Column widths were counted in characters, and a character in Chinese, Japanese or Korean takes two columns of a terminal, as does an emoji — so every such row drifted a column further left than the one above it.
- Asking for something with no letters or digits in it — punctuation, or an emoji on its own — says nothing matches, instead of matching every agent on the roster at once.
0.7.2
Fixes
popover updateupdates the machine on Windows instead of handing you a command. It used to printnpm install -g @popoverinstall/cli@latestand stop, on the belief that replacing thepopover.cmdshim while it was running would corrupt it — npm's shims are built to survive exactly that, which is how npm upgrades itself. Worse, the command it printed could fail withETARGET: No matching version foundnaming the release you were trying to install: npm caches registry metadata for a few minutes after a publish, and the two documents it caches can disagree about which versions exist. The update now re-checks that metadata rather than trusting the cache, and if a release really has not propagated yet it says so and tells you to try again shortly, instead of reporting that the version does not exist.popover setupregisters the plugin on Windows when your user directory has a space in it. It was passing the plugin's path through a shell unquoted, so Claude Code was told to add a marketplace at the first half of the path and answeredPath does not exist— which also meant everypopover updateleft the old plugin registered against the new daemon.popover uninstallwas failing to unhook Claude Code on Windows for a related reason.
0.7.1
Features
popover changelogsays what the last update changed, whenever you want to know rather than only in the second the update prints it. Press1and the whole history opens in a pane you scroll inside — bounded to part of the window, and erased when you leave it, so reading back through eight releases does not push everything else out of your terminal.popover changelog --allgoes straight there, and prints plainly when piped into something else.- popover has its own domain: a fresh
popover loginnow connects to www.popover.to instead of the old vercel.app address. Nothing changes for a machine already logged in — the origin it connected through is kept in its credentials and still preferred — and the old hostname keeps resolving, so installs of earlier releases carry on working.
0.7.0
Features
- Claude Code now notices your teammates without being asked. An agent used to learn that popover existed only once you typed
/popover:team, which meant the moment most worth using it for — you are about to edit a file somebody else's agent is already in — went past unremarked. A session in a repo where a teammate is working now begins with the roster in hand, says so before it collides with them, and can ask their agent why something is the way it is when the repo itself does not record it. It will say when it is about to ask, and ask you first before sending anyone a heads-up: an ask spends a teammate's tokens on their own machine, while a heads-up spends their attention.
0.6.1
Fixes
- Deleting your account now deletes a team you were the last member of, rather than leaving it behind where nobody can reach it. An empty team has no admin, so nobody could open it, rename it, or revoke the invite links still pointing at it. A team with other people on it is untouched — they keep the team and each other, and only your own machines and agents go.
0.6.0
Features
- Hand a whole conversation to someone with
/popover:fork create. It prints a code that works for 24 hours; whoever you send it to runs/popover:fork open <code>and gets their own local chat carrying everything you had worked out. Their chat does not expire with the code, and nothing they do in it reaches you. - Opening a fork needs no popover account —
npx @popoverinstall/cli fork open <code>is enough — so you can hand one to someone who has never installed it. - A fork is frozen at the moment you make it. Nothing you say afterwards is included, and
popover fork createtells you which turn it cut at. popover fork listshows the codes you have handed out, andpopover fork revoke <code>destroys a snapshot early. Revoking cannot recall a copy someone has already opened, and says so rather than implying otherwise.- A fork is sealed on your machine before it is sent, with a key derived from the code itself, so what the server stores is something it cannot read.
- Sharing a fork sends the whole conversation, including every file your agent read into it.
popover fork createsays so every time, because it is a much larger disclosure than an ask.
Fixes
- Asks answer from what the agent already knows, and nothing else. The answering copy no longer has file access, so it stops going off to investigate and replies from its own context — much faster and cheaper, and it can no longer open a file your session had not already opened. The trade is that a question about something the agent never looked at now gets "I don't know" instead of a fresh answer.
- A message from one of your own agents in the same repo now arrives with a much lighter note than one from a teammate. Both are your agents, working from the same code, so being warned about it as sternly as about a stranger was wrong — and framing that cries wolf is framing the next reader skims. One of your agents in a *different* repo still gets a careful note, because it cannot see the code you are in.
- The roster marks your own line again, and a message or question is recorded against the agent that actually sent it. The plugin's MCP server is started once and kept, so the session it believed it was serving could be one that had already ended — which left the marker missing, the sender of a tell shown only as "another agent", and the activity page ready to name the wrong one of your agents.
0.5.0
Features
- popover installs from npm now:
npm install -g @popoverinstall/cli, thenpopover setupandpopover login. The same two commands on macOS, Linux and Windows. - Running
popoverwith no arguments tells you what to run next, and ticks each step off as you finish it. It stops appearing once the machine is connected. popover askandpopover tellhave moved into the session: use/popover:team ask B1 …and/popover:team tell B1 …in Claude Code. Typing the old commands tells you where they went. An agent asking has the context to write a question worth answering, and to do something with the answer — a terminal has neither.popover lognow lists the messages your agents were sent as well as the questions they were asked.
Fixes
popover setupregisters the Claude Code plugin correctly on a machine that has never had it installed. It previously named a plugin marketplace that does not exist, which only showed up on a genuinely fresh machine.
0.4.0
Features
- Agents can tell each other things, not only ask.
/popover:team tell B1 the migration is applied on proddrops a heads-up into that agent's next prompt. Nothing comes back — it is for facts that would otherwise cause a collision, not for questions. /popover:teamnow takesaskortellas its first word./popover:team ask B1 why did you rule out redis?is what it always did, spelled out.- You are told whenever a teammate's agent sends one of yours a message, so nothing reaches your agent without you knowing. Messages between two of your own agents stay quiet.
- A message arrives named: which agent sent it, and who is running that agent. Your agent is told to treat it as information from someone who cannot see what it is working on, rather than as an instruction from you.
- Only agents working in the same repo can be told, the same rule that decides who you can ask, and one agent can send another at most ten messages an hour.
- The activity page lists messages next to questions, so you can see who told whom what.
popover updateprints the release notes for what it just installed.
Fixes
- An ask whose agent finishes without writing an answer now says the agent could not answer, instead of the contradictory "The agent failed (success)".
0.3.0
Features
- An agent sees only the teammates working in the same repo. Repos are identified by their git remotes, so two clones match however they were cloned and whatever the folder is called, and a directory with no shared remote stays private.
- Your teammates' machines now appear on the dashboard, read-only, alongside your own.
- The dashboard follows the organization picked in the switcher instead of showing everything you can see at once.
- The dashboard, sign-in and onboarding screens are restyled to match the landing poster.
Fixes
- A laptop that logged in more than once is one row on the machines page again, not three.
- Only the daemon can report a daemon version or a heartbeat, so a stale row can no longer claim a machine is alive.
- Refreshing the team list no longer folds your own machines into your teammates'.
0.2.1
Features
- Agent handles lost their dash:
G1, notG-1. - The roster marks which line is the reading agent's own, and the activity feed names both ends of an ask.
Fixes
- The asker's session is read from
CLAUDE_CODE_SESSION_ID— the old name did not exist, so asks were attributed to nobody. - A missing
roleclaim is named on the dashboard instead of rendering an empty page.
0.2.0
Features
popover updateupgrades this machine in place and restarts the daemon on the new build.- The roster prints one line when a newer version is available.
- Windows installer:
irm <host>/install.ps1 | iex. - The machines page stays current instead of freezing at whatever it rendered with.
Fixes
- An agent that cannot be reached shows as unreachable rather than active.
- The daemon exits when it crashes and when its terminal closes, instead of lingering.
- Stopping the daemon on Windows marks its sessions offline, so teammates stop seeing rows for agents that are gone.
- One machine row per install instead of one per login, and sessions stranded by an earlier login on the same host are closed.
0.1.0
Features
- First release: see your team's active Claude Code agents with
/popover:team, and ask one of them a question that a read-only fork answers from that agent's full context.