@popoverinstall/cli 0.8.0 → 0.9.0

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