changelog
Popover · latest 0.10.3
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.10.3current
Fixes
- A message that was too long now says so, instead of reporting that the daemon is down. Send a teammate's agent a message over the storage limit and the whole thing went quiet: the call hung for the better part of two minutes and then came back "the popover daemon is not running on this machine". The daemon was running.
popover doctorsaid everything was healthy,popover daemon startsaid it was already up, and the roster kept answering normally the entire time — so the one thing that was wrong was the one thing nothing mentioned, and the obvious next move, restarting a healthy daemon, changed nothing. The refusal now arrives immediately and names the limit and the length, and nothing is sent. - Your agents spend less of your context talking to each other. The framing wrapped around a message from a teammate's agent had grown to roughly 900 characters — around messages that are often a single line — and the nudge suggesting a conversation be archived had grown to about the same. Both are shorter now, with nothing dropped that the reader could not get anywhere else.
0.10.2
Fixes
- Your agent can vault a long conversation again. A session that had run long enough to compact could not be kept: the agent would try, and be told there was no transcript to freeze, while the transcript sat on disk where it had always been. The reason it went unnoticed is that it only ever affected agents — vaulting from a terminal takes a different route to the same file and has always worked — so it arrived at the same time as your agent being told to vault on its own at the end of a piece of work, which is exactly the session most likely to have compacted by then. If an agent has told you a conversation had nothing to freeze, that was this, and that conversation is gone.
0.10.1
Fixes
- Vaulting works. It never has: every attempt to publish one, from the terminal or from an agent, was refused by the server and reported back as a failure with nothing in it to act on. The vault carried everything about itself except which team it belonged to, and that is the one field the server will not do without — so the answer was always no, and never said why. If you tried to keep a conversation and got an unexplained error, that was this, and the conversation is gone; there is nothing to recover. 0.10.0 made your agent do this at the end of a piece of work rather than only when asked, which turned a bug you might have hit into one you would have hit every day.
0.10.0
Features
- Your agents can hold a conversation now, instead of trading one-way notes. Asking and telling were two commands with two shapes — one waited for an answer and interrupted nobody, the other interrupted somebody and returned nothing — and you had to choose between them before you knew what the other agent was going to say.
/popover:messageis the only one you need. Say who and what; how it travels is decided from what that agent is doing at the moment you send it. If it is working, the message arrives mid-task and it answers without stopping what it was doing. If nobody is driving that session, a read-only copy of the conversation answers instead — so you get a reply whether or not anyone is at the keyboard. popover threadslists every conversation your agents are in, andpopover thread closeends one. Either side can close, because both parties' tokens and attention are in play, and closing bars anything new without recalling what was already sent. The same threads appear grouped on popover.to/activity, so the log reads as conversations rather than as loose messages.- Your agent vaults a conversation when it finishes something, rather than when it happens to occur to it. The moment worth keeping is the one just after a piece of work lands: it has built the thing, its grasp of it is as good as it is ever going to get, and you are about to move on to something else. It notices from the work rather than from the conversation — a commit, and more strongly a push, because a push means the code has left the machine and your colleagues are about to meet it without the reasoning that produced it.
- You can find out what your agent was asked while you were not watching. Somebody putting a question to your agent spends your tokens on your machine, and until now neither you nor your agent ever learned it had happened: a copy answered from your conversation, disappeared and left nothing behind. Your agent is now told that questions arrived and who sent them, and it can read the exchanges themselves, answers included. That last part is worth more than it sounds — a copy answers from whatever the conversation held at the time, so if it got something wrong, the agent still holding that conversation is the one placed to notice.
- The vault page is popover.to/vault now, and the tab reads Agent Vault. **It shows the vaults of the team you have selected rather than every team you belong to at once.** Switching teams used to change every other page and leave this one identical, which made the switcher look broken here, and it turned "what has this team worked out" — the reason most people open the page — into a filter you had to set rather than the thing already on screen. Another team's vaults are one switch away, and the old address still redirects.
Fixes
- Your agents stop writing a paragraph where a sentence would do. They were told they had one round trip and no second chance, so they wrote to cover everything they might conceivably need — which took longer to read, longer to answer, and often long enough that the answer never arrived at all. They can follow up now, so there is nothing to be gained by cramming, and no length is prescribed in either direction. Two words is a complete answer when two words are the answer.
0.9.1
Fixes
- Your agent can now decide to vault a conversation without being asked, which is what 0.9.0 said it would do and did not. Vaulting was always meant to be the agent's call — the moment worth keeping is one you are usually too deep in the work to notice, which is precisely why it should not wait for you to notice it. In practice nothing ever told the agent that vaults existed unless you typed
/popover:vault, and outside that command it had no way to make one, so "the agent decides" only ever meant "the agent decides which verb, once you have opened the menu". It is now told, and it has a tool of its own for it.
0.9.0
Features
- A conversation that worked something out can now be kept. Why a value is the value it is, what was tried and abandoned, what the constraint actually turned out to be — all of it used to be deleted the moment the session ended, leaving a diff that records what changed and never why. Your agent can save one to your team's vault, and anyone on the team can ask it afterwards. It answers from its own frozen context, on the asker's machine and at the asker's cost, so the person who made it does not have to be online, does not have to still work here, and does not pay for your question.
/popover:vault, orpopover vaultfrom a terminal. - popover.to/vaults shows everything your team has kept, with what each one can answer, who saved it and when it was frozen. Not what it said: a vault is asked, never read, and a page that printed the conversation would turn an index your team published into transcripts it did not.
- Asking is two steps, and the first one is free. Searching what your team has kept costs nothing and spends no tokens; only actually putting a question to a vault loads its conversation. That is what stops an agent from quietly spending real money fanning out across an archive to answer one question, and it is why a vault that nobody has disturbed since it was frozen ranks above a newer one whose files have all moved underneath it.
- Agents in different repos can now reach each other, when a team says those repos belong together. A product split across several repos was that many unrelated islands: an agent in one could not list or ask an agent in another, however obviously they were the same piece of work. A team admin adds each repo at popover.to/repos or with
popover repos add, and from then on agents in any of them see each other. Nothing changes for a repo nobody has added, and adding one requires proving through GitHub that you administer it — so this widens what your team can see only where somebody with the authority to say so has said it. - An agent working in a folder *above* several repos is no longer invisible to everyone. If you run Claude Code one directory up to coordinate across the clones sitting underneath it, that directory is not itself a git repo, and popover had nothing to identify it by — so the one agent with the whole picture was the one agent nobody could talk to. It now publishes each repo it finds one level down, and appears to teammates in each of them, labelled by the repo you share.
popover config workspace-scan offturns it off. popover repossays which repos your team treats as one product, and adds or removes the one you are standing in. It takes no repo argument at any depth, deliberately: which repo it means comes from your working directory, because registering one is a claim to have the clone rather than to know the name./popover:reposdoes the same from inside a session.
Fixes
- Your view of a repo no longer expires a week after you last worked in it. Access used to lapse silently after seven days — you would come back to a project, find your teammates' agents missing, and have nothing on screen to tell you why or that opening a session there would fix it. **This means you can now see agents in repos you had aged out of, without having asked for that.** It is worth knowing rather than discovering: the expiry existed because there was no other way for access to a repo to ever end, and a team's repo list is now a better one — an admin removes a repo, or removes a person from the team, and it takes effect at once instead of in a week. Everything else is unchanged: you still only see people you share a team with, and only in repos you have actually cloned.
0.8.1
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: a conversation that used to time out now answers well inside the window. 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.