@popoverinstall/cli 0.8.1 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +159 -78
  2. package/LICENSE +21 -21
  3. package/README.md +142 -141
  4. package/dist/config-command.d.ts +2 -0
  5. package/dist/config-command.d.ts.map +1 -0
  6. package/dist/config-command.js +80 -0
  7. package/dist/config-command.js.map +1 -0
  8. package/dist/cursor-hooks.d.ts +18 -0
  9. package/dist/cursor-hooks.d.ts.map +1 -0
  10. package/dist/cursor-hooks.js +105 -0
  11. package/dist/cursor-hooks.js.map +1 -0
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +46 -25
  14. package/dist/index.js.map +1 -1
  15. package/dist/keys.d.ts +10 -0
  16. package/dist/keys.d.ts.map +1 -0
  17. package/dist/keys.js +44 -0
  18. package/dist/keys.js.map +1 -0
  19. package/dist/repo-scan.d.ts +130 -0
  20. package/dist/repo-scan.d.ts.map +1 -0
  21. package/dist/repo-scan.js +281 -0
  22. package/dist/repo-scan.js.map +1 -0
  23. package/dist/repos.d.ts +180 -0
  24. package/dist/repos.d.ts.map +1 -0
  25. package/dist/repos.js +1002 -0
  26. package/dist/repos.js.map +1 -0
  27. package/dist/snapshot.d.ts +35 -0
  28. package/dist/snapshot.d.ts.map +1 -1
  29. package/dist/snapshot.js +16 -16
  30. package/dist/snapshot.js.map +1 -1
  31. package/dist/vaults.d.ts +175 -0
  32. package/dist/vaults.d.ts.map +1 -0
  33. package/dist/vaults.js +945 -0
  34. package/dist/vaults.js.map +1 -0
  35. package/package.json +3 -3
  36. package/plugin/.claude-plugin/plugin.json +1 -1
  37. package/plugin/.mcp.json +9 -9
  38. package/plugin/README.md +84 -77
  39. package/plugin/commands/ask.md +65 -65
  40. package/plugin/commands/fork.md +119 -119
  41. package/plugin/commands/repos.md +107 -0
  42. package/plugin/commands/team.md +60 -60
  43. package/plugin/commands/tell.md +66 -66
  44. package/plugin/commands/vault.md +173 -0
  45. package/plugin/hooks/hooks.json +111 -111
  46. package/plugin/mcp/index.mjs +410 -0
  47. package/plugin/scripts/_ipc.mjs +146 -146
  48. package/plugin/scripts/announce-roster.mjs +141 -141
  49. package/plugin/scripts/deliver-messages.mjs +77 -77
  50. package/plugin/scripts/emit-event.mjs +44 -44
  51. package/plugin/scripts/ensure-daemon.mjs +156 -156
  52. package/plugin/scripts/roster.mjs +52 -52
  53. package/plugin/skills/popover/SKILL.md +42 -5
package/CHANGELOG.md CHANGED
@@ -7,19 +7,100 @@ The format is parsed by `parseChangelog()` in `packages/shared/src/changelog.ts`
7
7
  parser doing the reading is the one shipped in the *previous* release, so keep to what is
8
8
  already here:
9
9
 
10
- - `## <version>` — newest first. Anything that is not a version triple is skipped, so an
10
+ * `## <version>` — newest first. Anything that is not a version triple is skipped, so an
11
11
  `## Unreleased` heading is safe to keep at the top while a release is in flight.
12
- - `### Features` and `### Fixes` — the only two sections that print. Others are ignored.
13
- - `- ` bullets, one change each. Wrapped lines are joined; a blank line ends the bullet.
12
+ * `### Features` and `### Fixes` — the only two sections that print. Others are ignored.
13
+ * `* ` bullets, one change each `- ` also parses, and older releases are written with it.
14
+ Wrapped lines are joined; a blank line ends the bullet.
14
15
 
15
16
  Every version that ships needs an entry — an update with nothing to print says nothing at
16
17
  all, which reads as though the update did not happen.
17
18
 
19
+ Illustrate a change with the general case, never with the particular one it was built for.
20
+ The repos, paths, names and measurements that came out of building popover are ours, not the
21
+ reader's: an entry that says "a product split across several repos" lands for everybody,
22
+ where one that names our own three lands for nobody and leaks what we were working on.
23
+ Before, after, and why — stated so that the reader recognises their own situation in it.
24
+
25
+ ## 0.9.1
26
+
27
+ ### Fixes
28
+
29
+ - Your agent can now decide to vault a conversation without being asked, which is what 0.9.0
30
+ said it would do and did not. Vaulting was always meant to be the agent's call — the moment
31
+ worth keeping is one you are usually too deep in the work to notice, which is precisely why
32
+ it should not wait for you to notice it. In practice nothing ever told the agent that vaults
33
+ existed unless you typed `/popover:vault`, and outside that command it had no way to make
34
+ one, so "the agent decides" only ever meant "the agent decides which verb, once you have
35
+ opened the menu". It is now told, and it has a tool of its own for it.
36
+
37
+ ## 0.9.0
38
+
39
+ ### Features
40
+
41
+ * A conversation that worked something out can now be kept. Why a value is the value it is,
42
+ what was tried and abandoned, what the constraint actually turned out to be — all of it used
43
+ to be deleted the moment the session ended, leaving a diff that records what changed and
44
+ never why. Your agent can save one to your team's vault, and anyone on the team can ask it
45
+ afterwards. It answers from its own frozen context, on the asker's machine and at the asker's
46
+ cost, so the person who made it does not have to be online, does not have to still work here,
47
+ and does not pay for your question. `/popover:vault`, or `popover vault` from a terminal.
48
+
49
+ Two things are worth knowing before the first one. Your agent decides when to vault rather
50
+ than offering and waiting for you, which is a deliberate departure from how forks work:
51
+ inside a team the disclosure is small, and the moment worth keeping is one you are usually
52
+ too deep in the work to notice. And a vault is stored somewhere popover can read it, which is
53
+ not true of a fork — a fork's code never reaches our server, and a vault has no code, because
54
+ being on the team is the whole of who can open it.
55
+
56
+ * popover.to/vaults shows everything your team has kept, with what each one can answer, who
57
+ saved it and when it was frozen. Not what it said: a vault is asked, never read, and a page
58
+ that printed the conversation would turn an index your team published into transcripts it
59
+ did not.
60
+
61
+ * Asking is two steps, and the first one is free. Searching what your team has kept costs
62
+ nothing and spends no tokens; only actually putting a question to a vault loads its
63
+ conversation. That is what stops an agent from quietly spending real money fanning out across
64
+ an archive to answer one question, and it is why a vault that nobody has disturbed since it
65
+ was frozen ranks above a newer one whose files have all moved underneath it.
66
+
67
+ * Agents in different repos can now reach each other, when a team says those repos belong
68
+ together. A product split across several repos was that many unrelated islands: an agent in
69
+ one could not list or ask an agent in another, however obviously they were the same piece of
70
+ work. A team admin adds each repo at popover.to/repos or with `popover repos add`, and from
71
+ then on agents in any of them see each other. Nothing changes for a repo nobody has added,
72
+ and adding one requires proving through GitHub that you administer it — so this widens what
73
+ your team can see only where somebody with the authority to say so has said it.
74
+
75
+ * An agent working in a folder *above* several repos is no longer invisible to everyone. If
76
+ you run Claude Code one directory up to coordinate across the clones sitting underneath it,
77
+ that directory is not itself a git repo, and popover had nothing to identify it by — so the
78
+ one agent with the whole picture was the one agent nobody could talk to. It now publishes
79
+ each repo it finds one level down, and appears to teammates in each of them, labelled by the
80
+ repo you share. `popover config workspace-scan off` turns it off.
81
+
82
+ * `popover repos` says which repos your team treats as one product, and adds or removes the
83
+ one you are standing in. It takes no repo argument at any depth, deliberately: which repo it
84
+ means comes from your working directory, because registering one is a claim to have the
85
+ clone rather than to know the name. `/popover:repos` does the same from inside a session.
86
+
87
+ ### Fixes
88
+
89
+ * Your view of a repo no longer expires a week after you last worked in it. Access used to
90
+ lapse silently after seven days — you would come back to a project, find your teammates'
91
+ agents missing, and have nothing on screen to tell you why or that opening a session there
92
+ would fix it. **This means you can now see agents in repos you had aged out of, without
93
+ having asked for that.** It is worth knowing rather than discovering: the expiry existed
94
+ because there was no other way for access to a repo to ever end, and a team's repo list is
95
+ now a better one — an admin removes a repo, or removes a person from the team, and it takes
96
+ effect at once instead of in a week. Everything else is unchanged: you still only see people
97
+ you share a team with, and only in repos you have actually cloned.
98
+
18
99
  ## 0.8.1
19
100
 
20
101
  ### Features
21
102
 
22
- - Your agent offers a fork when the moment calls for one, instead of waiting to be asked. It
103
+ * Your agent offers a fork when the moment calls for one, instead of waiting to be asked. It
23
104
  used to be told never to suggest one, on the reasoning that handing over a whole
24
105
  conversation is a large enough disclosure to be the user's own idea. The effect was that the
25
106
  most useful case never came up at all, because the moment for a fork is one you are usually
@@ -31,7 +112,7 @@ all, which reads as though the update did not happen.
31
112
 
32
113
  ### Fixes
33
114
 
34
- - Your agent is told who else is working in the repo again. The notice was supposed to appear
115
+ * Your agent is told who else is working in the repo again. The notice was supposed to appear
35
116
  whenever the cast of teammate agents changed, and almost never did: it gave the daemon 250ms
36
117
  to answer, and any answer more than five seconds old means fetching from the server, which
37
118
  takes about 350ms. So it ran out of time and said nothing — and saying nothing looks exactly
@@ -39,45 +120,45 @@ all, which reads as though the update did not happen.
39
120
  answer. If you are working alone it also stops checking every prompt, so you are not paying
40
121
  for a lookup that has nothing to report.
41
122
 
42
- - `popover fork revoke` no longer tells you a fork is destroyed when it is not. If the write
123
+ * `popover fork revoke` no longer tells you a fork is destroyed when it is not. If the write
43
124
  failed, it said "revoked" anyway — the one command whose whole job is undoing a mistake, and
44
125
  the one place a false confirmation is worst, because you stop looking. It now says it could
45
126
  not and asks you to try again. A code that was already gone still reports success, which is
46
127
  deliberate: answering differently would let anyone holding a code learn whether a
47
128
  conversation exists.
48
129
 
49
- - Expired forks are actually deleted now. A fork's ciphertext is supposed to be destroyed 24
130
+ * Expired forks are actually deleted now. A fork's ciphertext is supposed to be destroyed 24
50
131
  hours after it is made, but the cleanup only ever ran when somebody happened to create
51
132
  another fork — so on a quiet team, conversations you had shared for a day stayed on the
52
133
  server indefinitely. It now runs on a schedule of its own.
53
134
 
54
- - A hiccup on our side no longer signs your machine out. Several of these reported a temporary
135
+ * A hiccup on our side no longer signs your machine out. Several of these reported a temporary
55
136
  server problem as a permanent refusal: a failed lookup during `popover login` looked like an
56
137
  invalid code and abandoned the login, and one during a routine daemon check looked like your
57
138
  machine had been revoked — which is not something it retries. They now say the service is
58
139
  briefly unavailable, and the daemon keeps its session.
59
140
 
60
- - Opening a fork works on Windows when the folder it came from has a non-ASCII name. The
141
+ * Opening a fork works on Windows when the folder it came from has a non-ASCII name. The
61
142
  console reads a script in its own code page rather than UTF-8, so a path like
62
143
  `C:\Users\Renée\work` arrived mangled, the `cd` quietly failed, and the fork opened anyway in
63
144
  whatever directory the console started in — looking correct while every file path in the
64
145
  conversation pointed somewhere else. It now switches the console to UTF-8 first, and stops
65
146
  with a message rather than opening in the wrong place.
66
147
 
67
- - Asks against a long conversation work now. Answering an agent used to run the question past
148
+ * Asks against a long conversation work now. Answering an agent used to run the question past
68
149
  Haiku no matter what the agent itself was running, and Haiku holds 200K tokens — so on any
69
150
  session bigger than that, Claude Code had to compress the whole conversation before it could
70
151
  read it, which took longer than the 90 seconds the asker waits. You got "did not answer in
71
152
  time", and the machine being asked had already spent the tokens. The answer now comes from
72
- the same model the session is already running, which fits by definition: measured on a 3.9MB
73
- conversation, 97.6s and no answer became 15s and an answer. It costs the answering machine
153
+ the same model the session is already running, which fits by definition: a conversation that
154
+ used to time out now answers well inside the window. It costs the answering machine
74
155
  more per ask, and it is their call — set `POPOVER_FORK_MODEL` to pin a cheaper one.
75
156
 
76
157
  ## 0.8.0
77
158
 
78
159
  ### Features
79
160
 
80
- - Asking and telling are their own commands. `/popover:ask B1 why did you rule out redis?` and
161
+ * Asking and telling are their own commands. `/popover:ask B1 why did you rule out redis?` and
81
162
  `/popover:tell B1 the migration is applied` replace `/popover:team ask …` and
82
163
  `/popover:team tell …`, and `/popover:team` is now just the roster. The three cost completely
83
164
  different things — the roster costs nothing, an ask spends the teammate's tokens on their
@@ -85,7 +166,7 @@ all, which reads as though the update did not happen.
85
166
  behind one first word made the cheapest and the most intrusive look like the same gesture.
86
167
  The old forms still work and mention the new name once, so nothing you have already learned
87
168
  breaks.
88
- - Agents can have names. `popover rename B1 "auth work"` gives one of your agents a name, and
169
+ * Agents can have names. `popover rename B1 "auth work"` gives one of your agents a name, and
89
170
  your teammates see it on their next roster while the dashboard picks it up live — so three
90
171
  sessions in the same repo stop being three identical rows of `B1`, `B2`, `B3`. Run
91
172
  `popover rename` on its own to pick from a list instead of looking a handle up first. A named
@@ -93,72 +174,72 @@ all, which reads as though the update did not happen.
93
174
  reach it. You can only name your own agents, the name goes when the session does, and
94
175
  `popover rename B1 ""` takes it off again. Nothing changes for anyone who never uses it: a
95
176
  roster with no named agents on it prints exactly as it did before.
96
- - The documentation is public. popover.to/docs is the whole of how it works — the roster,
177
+ * The documentation is public. popover.to/docs is the whole of how it works — the roster,
97
178
  asking, telling, forking, which agents can see each other, and what leaves your machine —
98
179
  and popover.to/changelog is this file, with a URL you can send someone. Neither needs an
99
180
  account: until now the only thing a person could read before installing was the poster, so
100
181
  deciding whether to run the install command meant asking somebody who already had.
101
- - `popover changelog` points at popover.to/changelog when an install has no notes to read,
182
+ * `popover changelog` points at popover.to/changelog when an install has no notes to read,
102
183
  rather than at a repository that is private and answers a 404.
103
184
 
104
185
  ### Fixes
105
186
 
106
- - Everyone on your team needs this release. The way a repo is identified changed, and a popover
187
+ * Everyone on your team needs this release. The way a repo is identified changed, and a popover
107
188
  older than 0.8.0 cannot prove which repo it is in — so an out-of-date machine keeps working
108
189
  and keeps its own agents up to date, but goes quiet for the rest of the team until it
109
190
  updates. It says so on its own roster and in `popover doctor`, and your roster counts the
110
191
  teammates it cannot show you rather than leaving you to wonder where everybody went.
111
- - An unrecognised repo identity costs you the identity, not the update. A publish carries every
192
+ * An unrecognised repo identity costs you the identity, not the update. A publish carries every
112
193
  session on the machine in one write, so refusing that write over one field it did not like
113
194
  took the whole machine off the air — no roster, no status, and its own agents frozen at
114
195
  whatever they were last doing — while the connection itself looked perfectly healthy. A value
115
196
  we cannot verify is now dropped and the update lands without it.
116
- - Working in the same repo is now something popover checks rather than something it takes your
197
+ * Working in the same repo is now something popover checks rather than something it takes your
117
198
  word for. A repo was identified by the name of its git remote, which anyone can type, so
118
199
  anyone on your team could claim to be in a repo they had never cloned and see — and ask —
119
200
  the agents working in it. Identity now comes from the repository's own history, which you
120
201
  only have if you have actually cloned it, and what reaches the server is a hash of that
121
202
  rather than the thing itself, so it cannot be read off one session and reused on another.
122
- - Revoking a machine ends it. A revoked machine could quietly un-revoke itself and carry on,
203
+ * Revoking a machine ends it. A revoked machine could quietly un-revoke itself and carry on,
123
204
  which made the button on the dashboard a suggestion.
124
- - The agent that answers you cannot rewrite what you asked it, and the agent you send a
205
+ * The agent that answers you cannot rewrite what you asked it, and the agent you send a
125
206
  message to cannot change who it came from. Both are what `/activity` and `popover log` show
126
207
  you afterwards, so both are now fixed at the moment they are written.
127
- - Nothing a teammate can type reaches your agent as an instruction. Names, titles and the
208
+ * Nothing a teammate can type reaches your agent as an instruction. Names, titles and the
128
209
  activity shown on the roster are text your agent reads, and a newline in the right place
129
210
  could forge a line that looked like popover talking. That text is now bounded and stripped
130
211
  of anything that can start a new line, hide itself, or reverse the one it is on.
131
- - A laptop and a desktop no longer give two agents the same handle. Both machines numbered
212
+ * A laptop and a desktop no longer give two agents the same handle. Both machines numbered
132
213
  their own agents from one, so `G1` could mean either, and asking for it reached neither.
133
214
  Handles are now handed out where all of your machines can be seen at once.
134
- - `popover daemon stop` stops popover and nothing else. It trusted a leftover file naming a
215
+ * `popover daemon stop` stops popover and nothing else. It trusted a leftover file naming a
135
216
  process id, which the operating system may since have given to something entirely
136
217
  unrelated — and `popover update` runs it for you.
137
- - `popover update` no longer risks leaving half an install behind on Windows, where a file
218
+ * `popover update` no longer risks leaving half an install behind on Windows, where a file
138
219
  being replaced cannot be one a running program still holds open.
139
- - A slow moment no longer takes your agents off your teammates' rosters. If popover could not
220
+ * A slow moment no longer takes your agents off your teammates' rosters. If popover could not
140
221
  read the list of running sessions — a busy machine, a moment's hesitation — it concluded
141
222
  every one of them had ended.
142
- - `popover fork revoke` tells you the truth when it fails. It reported that a conversation had
223
+ * `popover fork revoke` tells you the truth when it fails. It reported that a conversation had
143
224
  been destroyed without checking, which is the one command whose word you would not think to
144
225
  doubt.
145
- - Agents belonging to teammates whose names are not written in the Latin alphabet can be
226
+ * Agents belonging to teammates whose names are not written in the Latin alphabet can be
146
227
  reached again. A teammate called 李明 is given the handle 李1, and asking for it matched every
147
228
  agent whose handle ended in the same digit — so `/popover:team ask 李1` came back "did you
148
229
  mean 李1 or 王1?" with no third thing you could type that would have worked. Their name now
149
230
  finds them too, and so does the name of an agent renamed in any script.
150
- - The roster lines up its columns for those agents rather than shearing them. Column widths
231
+ * The roster lines up its columns for those agents rather than shearing them. Column widths
151
232
  were counted in characters, and a character in Chinese, Japanese or Korean takes two columns
152
233
  of a terminal, as does an emoji — so every such row drifted a column further left than the
153
234
  one above it.
154
- - Asking for something with no letters or digits in it — punctuation, or an emoji on its own —
235
+ * Asking for something with no letters or digits in it — punctuation, or an emoji on its own —
155
236
  says nothing matches, instead of matching every agent on the roster at once.
156
237
 
157
238
  ## 0.7.2
158
239
 
159
240
  ### Fixes
160
241
 
161
- - `popover update` updates the machine on Windows instead of handing you a command. It used
242
+ * `popover update` updates the machine on Windows instead of handing you a command. It used
162
243
  to print `npm install -g @popoverinstall/cli@latest` and stop, on the belief that replacing
163
244
  the `popover.cmd` shim while it was running would corrupt it — npm's shims are built to
164
245
  survive exactly that, which is how npm upgrades itself. Worse, the command it printed could
@@ -168,7 +249,7 @@ all, which reads as though the update did not happen.
168
249
  metadata rather than trusting the cache, and if a release really has not propagated yet it
169
250
  says so and tells you to try again shortly, instead of reporting that the version does not
170
251
  exist.
171
- - `popover setup` registers the plugin on Windows when your user directory has a space in it.
252
+ * `popover setup` registers the plugin on Windows when your user directory has a space in it.
172
253
  It was passing the plugin's path through a shell unquoted, so Claude Code was told to add a
173
254
  marketplace at the first half of the path and answered `Path does not exist` — which also
174
255
  meant every `popover update` left the old plugin registered against the new daemon.
@@ -178,12 +259,12 @@ all, which reads as though the update did not happen.
178
259
 
179
260
  ### Features
180
261
 
181
- - `popover changelog` says what the last update changed, whenever you want to know rather than
262
+ * `popover changelog` says what the last update changed, whenever you want to know rather than
182
263
  only in the second the update prints it. Press `1` and the whole history opens in a pane you
183
264
  scroll inside — bounded to part of the window, and erased when you leave it, so reading back
184
265
  through eight releases does not push everything else out of your terminal. `popover changelog
185
266
  --all` goes straight there, and prints plainly when piped into something else.
186
- - popover has its own domain: a fresh `popover login` now connects to www.popover.to instead of
267
+ * popover has its own domain: a fresh `popover login` now connects to www.popover.to instead of
187
268
  the old vercel.app address. Nothing changes for a machine already logged in — the origin it
188
269
  connected through is kept in its credentials and still preferred — and the old hostname keeps
189
270
  resolving, so installs of earlier releases carry on working.
@@ -192,7 +273,7 @@ all, which reads as though the update did not happen.
192
273
 
193
274
  ### Features
194
275
 
195
- - Claude Code now notices your teammates without being asked. An agent used to learn that
276
+ * Claude Code now notices your teammates without being asked. An agent used to learn that
196
277
  popover existed only once you typed `/popover:team`, which meant the moment most worth using
197
278
  it for — you are about to edit a file somebody else's agent is already in — went past
198
279
  unremarked. A session in a repo where a teammate is working now begins with the roster in
@@ -205,7 +286,7 @@ all, which reads as though the update did not happen.
205
286
 
206
287
  ### Fixes
207
288
 
208
- - Deleting your account now deletes a team you were the last member of, rather than leaving it
289
+ * Deleting your account now deletes a team you were the last member of, rather than leaving it
209
290
  behind where nobody can reach it. An empty team has no admin, so nobody could open it, rename
210
291
  it, or revoke the invite links still pointing at it. A team with other people on it is
211
292
  untouched — they keep the team and each other, and only your own machines and agents go.
@@ -214,36 +295,36 @@ all, which reads as though the update did not happen.
214
295
 
215
296
  ### Features
216
297
 
217
- - Hand a whole conversation to someone with `/popover:fork create`. It prints a code that
298
+ * Hand a whole conversation to someone with `/popover:fork create`. It prints a code that
218
299
  works for 24 hours; whoever you send it to runs `/popover:fork open <code>` and gets their
219
300
  own local chat carrying everything you had worked out. Their chat does not expire with the
220
301
  code, and nothing they do in it reaches you.
221
- - Opening a fork needs no popover account — `npx @popoverinstall/cli fork open <code>` is
302
+ * Opening a fork needs no popover account — `npx @popoverinstall/cli fork open <code>` is
222
303
  enough — so you can hand one to someone who has never installed it.
223
- - A fork is frozen at the moment you make it. Nothing you say afterwards is included, and
304
+ * A fork is frozen at the moment you make it. Nothing you say afterwards is included, and
224
305
  `popover fork create` tells you which turn it cut at.
225
- - `popover fork list` shows the codes you have handed out, and `popover fork revoke <code>`
306
+ * `popover fork list` shows the codes you have handed out, and `popover fork revoke <code>`
226
307
  destroys a snapshot early. Revoking cannot recall a copy someone has already opened, and
227
308
  says so rather than implying otherwise.
228
- - A fork is sealed on your machine before it is sent, with a key derived from the code
309
+ * A fork is sealed on your machine before it is sent, with a key derived from the code
229
310
  itself, so what the server stores is something it cannot read.
230
- - Sharing a fork sends the whole conversation, including every file your agent read into it.
311
+ * Sharing a fork sends the whole conversation, including every file your agent read into it.
231
312
  `popover fork create` says so every time, because it is a much larger disclosure than an
232
313
  ask.
233
314
 
234
315
  ### Fixes
235
316
 
236
- - Asks answer from what the agent already knows, and nothing else. The answering copy no
317
+ * Asks answer from what the agent already knows, and nothing else. The answering copy no
237
318
  longer has file access, so it stops going off to investigate and replies from its own
238
319
  context — much faster and cheaper, and it can no longer open a file your session had not
239
320
  already opened. The trade is that a question about something the agent never looked at now
240
321
  gets "I don't know" instead of a fresh answer.
241
- - A message from one of your own agents in the same repo now arrives with a much lighter
322
+ * A message from one of your own agents in the same repo now arrives with a much lighter
242
323
  note than one from a teammate. Both are your agents, working from the same code, so being
243
324
  warned about it as sternly as about a stranger was wrong — and framing that cries wolf is
244
325
  framing the next reader skims. One of your agents in a *different* repo still gets a
245
326
  careful note, because it cannot see the code you are in.
246
- - The roster marks your own line again, and a message or question is recorded against the
327
+ * The roster marks your own line again, and a message or question is recorded against the
247
328
  agent that actually sent it. The plugin's MCP server is started once and kept, so the
248
329
  session it believed it was serving could be one that had already ended — which left the
249
330
  marker missing, the sender of a tell shown only as "another agent", and the activity page
@@ -253,20 +334,20 @@ all, which reads as though the update did not happen.
253
334
 
254
335
  ### Features
255
336
 
256
- - popover installs from npm now: `npm install -g @popoverinstall/cli`, then `popover setup`
337
+ * popover installs from npm now: `npm install -g @popoverinstall/cli`, then `popover setup`
257
338
  and `popover login`. The same two commands on macOS, Linux and Windows.
258
- - Running `popover` with no arguments tells you what to run next, and ticks each step off as
339
+ * Running `popover` with no arguments tells you what to run next, and ticks each step off as
259
340
  you finish it. It stops appearing once the machine is connected.
260
- - `popover ask` and `popover tell` have moved into the session: use `/popover:team ask B1 …`
341
+ * `popover ask` and `popover tell` have moved into the session: use `/popover:team ask B1 …`
261
342
  and `/popover:team tell B1 …` in Claude Code. Typing the old commands tells you where they
262
343
  went. An agent asking has the context to write a question worth answering, and to do
263
344
  something with the answer — a terminal has neither.
264
- - `popover log` now lists the messages your agents were sent as well as the questions they
345
+ * `popover log` now lists the messages your agents were sent as well as the questions they
265
346
  were asked.
266
347
 
267
348
  ### Fixes
268
349
 
269
- - `popover setup` registers the Claude Code plugin correctly on a machine that has never had
350
+ * `popover setup` registers the Claude Code plugin correctly on a machine that has never had
270
351
  it installed. It previously named a plugin marketplace that does not exist, which only
271
352
  showed up on a genuinely fresh machine.
272
353
 
@@ -274,80 +355,80 @@ all, which reads as though the update did not happen.
274
355
 
275
356
  ### Features
276
357
 
277
- - Agents can tell each other things, not only ask. `/popover:team tell B1 the migration is
358
+ * Agents can tell each other things, not only ask. `/popover:team tell B1 the migration is
278
359
  applied on prod` drops a heads-up into that agent's next prompt. Nothing comes back —
279
360
  it is for facts that would otherwise cause a collision, not for questions.
280
- - `/popover:team` now takes `ask` or `tell` as its first word. `/popover:team ask B1 why did you
361
+ * `/popover:team` now takes `ask` or `tell` as its first word. `/popover:team ask B1 why did you
281
362
  rule out redis?` is what it always did, spelled out.
282
- - You are told whenever a teammate's agent sends one of yours a message, so nothing reaches
363
+ * You are told whenever a teammate's agent sends one of yours a message, so nothing reaches
283
364
  your agent without you knowing. Messages between two of your own agents stay quiet.
284
- - A message arrives named: which agent sent it, and who is running that agent. Your agent is
365
+ * A message arrives named: which agent sent it, and who is running that agent. Your agent is
285
366
  told to treat it as information from someone who cannot see what it is working on, rather
286
367
  than as an instruction from you.
287
- - Only agents working in the same repo can be told, the same rule that decides who you can
368
+ * Only agents working in the same repo can be told, the same rule that decides who you can
288
369
  ask, and one agent can send another at most ten messages an hour.
289
- - The activity page lists messages next to questions, so you can see who told whom what.
290
- - `popover update` prints the release notes for what it just installed.
370
+ * The activity page lists messages next to questions, so you can see who told whom what.
371
+ * `popover update` prints the release notes for what it just installed.
291
372
 
292
373
  ### Fixes
293
374
 
294
- - An ask whose agent finishes without writing an answer now says the agent could not
375
+ * An ask whose agent finishes without writing an answer now says the agent could not
295
376
  answer, instead of the contradictory "The agent failed (success)".
296
377
 
297
378
  ## 0.3.0
298
379
 
299
380
  ### Features
300
381
 
301
- - An agent sees only the teammates working in the same repo. Repos are identified by their
382
+ * An agent sees only the teammates working in the same repo. Repos are identified by their
302
383
  git remotes, so two clones match however they were cloned and whatever the folder is
303
384
  called, and a directory with no shared remote stays private.
304
- - Your teammates' machines now appear on the dashboard, read-only, alongside your own.
305
- - The dashboard follows the organization picked in the switcher instead of showing
385
+ * Your teammates' machines now appear on the dashboard, read-only, alongside your own.
386
+ * The dashboard follows the organization picked in the switcher instead of showing
306
387
  everything you can see at once.
307
- - The dashboard, sign-in and onboarding screens are restyled to match the landing poster.
388
+ * The dashboard, sign-in and onboarding screens are restyled to match the landing poster.
308
389
 
309
390
  ### Fixes
310
391
 
311
- - A laptop that logged in more than once is one row on the machines page again, not three.
312
- - Only the daemon can report a daemon version or a heartbeat, so a stale row can no longer
392
+ * A laptop that logged in more than once is one row on the machines page again, not three.
393
+ * Only the daemon can report a daemon version or a heartbeat, so a stale row can no longer
313
394
  claim a machine is alive.
314
- - Refreshing the team list no longer folds your own machines into your teammates'.
395
+ * Refreshing the team list no longer folds your own machines into your teammates'.
315
396
 
316
397
  ## 0.2.1
317
398
 
318
399
  ### Features
319
400
 
320
- - Agent handles lost their dash: `G1`, not `G-1`.
321
- - The roster marks which line is the reading agent's own, and the activity feed names both
401
+ * Agent handles lost their dash: `G1`, not `G-1`.
402
+ * The roster marks which line is the reading agent's own, and the activity feed names both
322
403
  ends of an ask.
323
404
 
324
405
  ### Fixes
325
406
 
326
- - The asker's session is read from `CLAUDE_CODE_SESSION_ID` — the old name did not exist,
407
+ * The asker's session is read from `CLAUDE_CODE_SESSION_ID` — the old name did not exist,
327
408
  so asks were attributed to nobody.
328
- - A missing `role` claim is named on the dashboard instead of rendering an empty page.
409
+ * A missing `role` claim is named on the dashboard instead of rendering an empty page.
329
410
 
330
411
  ## 0.2.0
331
412
 
332
413
  ### Features
333
414
 
334
- - `popover update` upgrades this machine in place and restarts the daemon on the new build.
335
- - The roster prints one line when a newer version is available.
336
- - Windows installer: `irm <host>/install.ps1 | iex`.
337
- - The machines page stays current instead of freezing at whatever it rendered with.
415
+ * `popover update` upgrades this machine in place and restarts the daemon on the new build.
416
+ * The roster prints one line when a newer version is available.
417
+ * Windows installer: `irm <host>/install.ps1 | iex`.
418
+ * The machines page stays current instead of freezing at whatever it rendered with.
338
419
 
339
420
  ### Fixes
340
421
 
341
- - An agent that cannot be reached shows as unreachable rather than active.
342
- - The daemon exits when it crashes and when its terminal closes, instead of lingering.
343
- - Stopping the daemon on Windows marks its sessions offline, so teammates stop seeing rows
422
+ * An agent that cannot be reached shows as unreachable rather than active.
423
+ * The daemon exits when it crashes and when its terminal closes, instead of lingering.
424
+ * Stopping the daemon on Windows marks its sessions offline, so teammates stop seeing rows
344
425
  for agents that are gone.
345
- - One machine row per install instead of one per login, and sessions stranded by an earlier
426
+ * One machine row per install instead of one per login, and sessions stranded by an earlier
346
427
  login on the same host are closed.
347
428
 
348
429
  ## 0.1.0
349
430
 
350
431
  ### Features
351
432
 
352
- - First release: see your team's active Claude Code agents with `/popover:team`, and ask one of
433
+ * First release: see your team's active Claude Code agents with `/popover:team`, and ask one of
353
434
  them a question that a read-only fork answers from that agent's full context.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Quolabs
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Quolabs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.