@popoverinstall/cli 0.8.1 → 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 (53) hide show
  1. package/CHANGELOG.md +147 -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 +276 -0
  32. package/dist/vaults.d.ts.map +1 -0
  33. package/dist/vaults.js +1224 -0
  34. package/dist/vaults.js.map +1 -0
  35. package/package.json +47 -47
  36. package/plugin/.claude-plugin/plugin.json +19 -19
  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 +585 -355
  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 +175 -168
package/CHANGELOG.md CHANGED
@@ -7,19 +7,88 @@ 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
+
18
87
  ## 0.8.1
19
88
 
20
89
  ### Features
21
90
 
22
- - Your agent offers a fork when the moment calls for one, instead of waiting to be asked. It
91
+ * Your agent offers a fork when the moment calls for one, instead of waiting to be asked. It
23
92
  used to be told never to suggest one, on the reasoning that handing over a whole
24
93
  conversation is a large enough disclosure to be the user's own idea. The effect was that the
25
94
  most useful case never came up at all, because the moment for a fork is one you are usually
@@ -31,7 +100,7 @@ all, which reads as though the update did not happen.
31
100
 
32
101
  ### Fixes
33
102
 
34
- - Your agent is told who else is working in the repo again. The notice was supposed to appear
103
+ * Your agent is told who else is working in the repo again. The notice was supposed to appear
35
104
  whenever the cast of teammate agents changed, and almost never did: it gave the daemon 250ms
36
105
  to answer, and any answer more than five seconds old means fetching from the server, which
37
106
  takes about 350ms. So it ran out of time and said nothing — and saying nothing looks exactly
@@ -39,45 +108,45 @@ all, which reads as though the update did not happen.
39
108
  answer. If you are working alone it also stops checking every prompt, so you are not paying
40
109
  for a lookup that has nothing to report.
41
110
 
42
- - `popover fork revoke` no longer tells you a fork is destroyed when it is not. If the write
111
+ * `popover fork revoke` no longer tells you a fork is destroyed when it is not. If the write
43
112
  failed, it said "revoked" anyway — the one command whose whole job is undoing a mistake, and
44
113
  the one place a false confirmation is worst, because you stop looking. It now says it could
45
114
  not and asks you to try again. A code that was already gone still reports success, which is
46
115
  deliberate: answering differently would let anyone holding a code learn whether a
47
116
  conversation exists.
48
117
 
49
- - Expired forks are actually deleted now. A fork's ciphertext is supposed to be destroyed 24
118
+ * Expired forks are actually deleted now. A fork's ciphertext is supposed to be destroyed 24
50
119
  hours after it is made, but the cleanup only ever ran when somebody happened to create
51
120
  another fork — so on a quiet team, conversations you had shared for a day stayed on the
52
121
  server indefinitely. It now runs on a schedule of its own.
53
122
 
54
- - A hiccup on our side no longer signs your machine out. Several of these reported a temporary
123
+ * A hiccup on our side no longer signs your machine out. Several of these reported a temporary
55
124
  server problem as a permanent refusal: a failed lookup during `popover login` looked like an
56
125
  invalid code and abandoned the login, and one during a routine daemon check looked like your
57
126
  machine had been revoked — which is not something it retries. They now say the service is
58
127
  briefly unavailable, and the daemon keeps its session.
59
128
 
60
- - Opening a fork works on Windows when the folder it came from has a non-ASCII name. The
129
+ * Opening a fork works on Windows when the folder it came from has a non-ASCII name. The
61
130
  console reads a script in its own code page rather than UTF-8, so a path like
62
131
  `C:\Users\Renée\work` arrived mangled, the `cd` quietly failed, and the fork opened anyway in
63
132
  whatever directory the console started in — looking correct while every file path in the
64
133
  conversation pointed somewhere else. It now switches the console to UTF-8 first, and stops
65
134
  with a message rather than opening in the wrong place.
66
135
 
67
- - Asks against a long conversation work now. Answering an agent used to run the question past
136
+ * Asks against a long conversation work now. Answering an agent used to run the question past
68
137
  Haiku no matter what the agent itself was running, and Haiku holds 200K tokens — so on any
69
138
  session bigger than that, Claude Code had to compress the whole conversation before it could
70
139
  read it, which took longer than the 90 seconds the asker waits. You got "did not answer in
71
140
  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
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
74
143
  more per ask, and it is their call — set `POPOVER_FORK_MODEL` to pin a cheaper one.
75
144
 
76
145
  ## 0.8.0
77
146
 
78
147
  ### Features
79
148
 
80
- - 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
81
150
  `/popover:tell B1 the migration is applied` replace `/popover:team ask …` and
82
151
  `/popover:team tell …`, and `/popover:team` is now just the roster. The three cost completely
83
152
  different things — the roster costs nothing, an ask spends the teammate's tokens on their
@@ -85,7 +154,7 @@ all, which reads as though the update did not happen.
85
154
  behind one first word made the cheapest and the most intrusive look like the same gesture.
86
155
  The old forms still work and mention the new name once, so nothing you have already learned
87
156
  breaks.
88
- - 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
89
158
  your teammates see it on their next roster while the dashboard picks it up live — so three
90
159
  sessions in the same repo stop being three identical rows of `B1`, `B2`, `B3`. Run
91
160
  `popover rename` on its own to pick from a list instead of looking a handle up first. A named
@@ -93,72 +162,72 @@ all, which reads as though the update did not happen.
93
162
  reach it. You can only name your own agents, the name goes when the session does, and
94
163
  `popover rename B1 ""` takes it off again. Nothing changes for anyone who never uses it: a
95
164
  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,
165
+ * The documentation is public. popover.to/docs is the whole of how it works — the roster,
97
166
  asking, telling, forking, which agents can see each other, and what leaves your machine —
98
167
  and popover.to/changelog is this file, with a URL you can send someone. Neither needs an
99
168
  account: until now the only thing a person could read before installing was the poster, so
100
169
  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,
170
+ * `popover changelog` points at popover.to/changelog when an install has no notes to read,
102
171
  rather than at a repository that is private and answers a 404.
103
172
 
104
173
  ### Fixes
105
174
 
106
- - 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
107
176
  older than 0.8.0 cannot prove which repo it is in — so an out-of-date machine keeps working
108
177
  and keeps its own agents up to date, but goes quiet for the rest of the team until it
109
178
  updates. It says so on its own roster and in `popover doctor`, and your roster counts the
110
179
  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
180
+ * An unrecognised repo identity costs you the identity, not the update. A publish carries every
112
181
  session on the machine in one write, so refusing that write over one field it did not like
113
182
  took the whole machine off the air — no roster, no status, and its own agents frozen at
114
183
  whatever they were last doing — while the connection itself looked perfectly healthy. A value
115
184
  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
185
+ * Working in the same repo is now something popover checks rather than something it takes your
117
186
  word for. A repo was identified by the name of its git remote, which anyone can type, so
118
187
  anyone on your team could claim to be in a repo they had never cloned and see — and ask —
119
188
  the agents working in it. Identity now comes from the repository's own history, which you
120
189
  only have if you have actually cloned it, and what reaches the server is a hash of that
121
190
  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,
191
+ * Revoking a machine ends it. A revoked machine could quietly un-revoke itself and carry on,
123
192
  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
193
+ * The agent that answers you cannot rewrite what you asked it, and the agent you send a
125
194
  message to cannot change who it came from. Both are what `/activity` and `popover log` show
126
195
  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
196
+ * Nothing a teammate can type reaches your agent as an instruction. Names, titles and the
128
197
  activity shown on the roster are text your agent reads, and a newline in the right place
129
198
  could forge a line that looked like popover talking. That text is now bounded and stripped
130
199
  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
200
+ * A laptop and a desktop no longer give two agents the same handle. Both machines numbered
132
201
  their own agents from one, so `G1` could mean either, and asking for it reached neither.
133
202
  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
203
+ * `popover daemon stop` stops popover and nothing else. It trusted a leftover file naming a
135
204
  process id, which the operating system may since have given to something entirely
136
205
  unrelated — and `popover update` runs it for you.
137
- - `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
138
207
  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
208
+ * A slow moment no longer takes your agents off your teammates' rosters. If popover could not
140
209
  read the list of running sessions — a busy machine, a moment's hesitation — it concluded
141
210
  every one of them had ended.
142
- - `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
143
212
  been destroyed without checking, which is the one command whose word you would not think to
144
213
  doubt.
145
- - 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
146
215
  reached again. A teammate called 李明 is given the handle 李1, and asking for it matched every
147
216
  agent whose handle ended in the same digit — so `/popover:team ask 李1` came back "did you
148
217
  mean 李1 or 王1?" with no third thing you could type that would have worked. Their name now
149
218
  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
219
+ * The roster lines up its columns for those agents rather than shearing them. Column widths
151
220
  were counted in characters, and a character in Chinese, Japanese or Korean takes two columns
152
221
  of a terminal, as does an emoji — so every such row drifted a column further left than the
153
222
  one above it.
154
- - 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 —
155
224
  says nothing matches, instead of matching every agent on the roster at once.
156
225
 
157
226
  ## 0.7.2
158
227
 
159
228
  ### Fixes
160
229
 
161
- - `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
162
231
  to print `npm install -g @popoverinstall/cli@latest` and stop, on the belief that replacing
163
232
  the `popover.cmd` shim while it was running would corrupt it — npm's shims are built to
164
233
  survive exactly that, which is how npm upgrades itself. Worse, the command it printed could
@@ -168,7 +237,7 @@ all, which reads as though the update did not happen.
168
237
  metadata rather than trusting the cache, and if a release really has not propagated yet it
169
238
  says so and tells you to try again shortly, instead of reporting that the version does not
170
239
  exist.
171
- - `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.
172
241
  It was passing the plugin's path through a shell unquoted, so Claude Code was told to add a
173
242
  marketplace at the first half of the path and answered `Path does not exist` — which also
174
243
  meant every `popover update` left the old plugin registered against the new daemon.
@@ -178,12 +247,12 @@ all, which reads as though the update did not happen.
178
247
 
179
248
  ### Features
180
249
 
181
- - `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
182
251
  only in the second the update prints it. Press `1` and the whole history opens in a pane you
183
252
  scroll inside — bounded to part of the window, and erased when you leave it, so reading back
184
253
  through eight releases does not push everything else out of your terminal. `popover changelog
185
254
  --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
255
+ * popover has its own domain: a fresh `popover login` now connects to www.popover.to instead of
187
256
  the old vercel.app address. Nothing changes for a machine already logged in — the origin it
188
257
  connected through is kept in its credentials and still preferred — and the old hostname keeps
189
258
  resolving, so installs of earlier releases carry on working.
@@ -192,7 +261,7 @@ all, which reads as though the update did not happen.
192
261
 
193
262
  ### Features
194
263
 
195
- - 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
196
265
  popover existed only once you typed `/popover:team`, which meant the moment most worth using
197
266
  it for — you are about to edit a file somebody else's agent is already in — went past
198
267
  unremarked. A session in a repo where a teammate is working now begins with the roster in
@@ -205,7 +274,7 @@ all, which reads as though the update did not happen.
205
274
 
206
275
  ### Fixes
207
276
 
208
- - 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
209
278
  behind where nobody can reach it. An empty team has no admin, so nobody could open it, rename
210
279
  it, or revoke the invite links still pointing at it. A team with other people on it is
211
280
  untouched — they keep the team and each other, and only your own machines and agents go.
@@ -214,36 +283,36 @@ all, which reads as though the update did not happen.
214
283
 
215
284
  ### Features
216
285
 
217
- - 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
218
287
  works for 24 hours; whoever you send it to runs `/popover:fork open <code>` and gets their
219
288
  own local chat carrying everything you had worked out. Their chat does not expire with the
220
289
  code, and nothing they do in it reaches you.
221
- - 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
222
291
  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
292
+ * A fork is frozen at the moment you make it. Nothing you say afterwards is included, and
224
293
  `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>`
294
+ * `popover fork list` shows the codes you have handed out, and `popover fork revoke <code>`
226
295
  destroys a snapshot early. Revoking cannot recall a copy someone has already opened, and
227
296
  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
297
+ * A fork is sealed on your machine before it is sent, with a key derived from the code
229
298
  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.
299
+ * Sharing a fork sends the whole conversation, including every file your agent read into it.
231
300
  `popover fork create` says so every time, because it is a much larger disclosure than an
232
301
  ask.
233
302
 
234
303
  ### Fixes
235
304
 
236
- - 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
237
306
  longer has file access, so it stops going off to investigate and replies from its own
238
307
  context — much faster and cheaper, and it can no longer open a file your session had not
239
308
  already opened. The trade is that a question about something the agent never looked at now
240
309
  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
310
+ * A message from one of your own agents in the same repo now arrives with a much lighter
242
311
  note than one from a teammate. Both are your agents, working from the same code, so being
243
312
  warned about it as sternly as about a stranger was wrong — and framing that cries wolf is
244
313
  framing the next reader skims. One of your agents in a *different* repo still gets a
245
314
  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
315
+ * The roster marks your own line again, and a message or question is recorded against the
247
316
  agent that actually sent it. The plugin's MCP server is started once and kept, so the
248
317
  session it believed it was serving could be one that had already ended — which left the
249
318
  marker missing, the sender of a tell shown only as "another agent", and the activity page
@@ -253,20 +322,20 @@ all, which reads as though the update did not happen.
253
322
 
254
323
  ### Features
255
324
 
256
- - 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`
257
326
  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
327
+ * Running `popover` with no arguments tells you what to run next, and ticks each step off as
259
328
  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 …`
329
+ * `popover ask` and `popover tell` have moved into the session: use `/popover:team ask B1 …`
261
330
  and `/popover:team tell B1 …` in Claude Code. Typing the old commands tells you where they
262
331
  went. An agent asking has the context to write a question worth answering, and to do
263
332
  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
333
+ * `popover log` now lists the messages your agents were sent as well as the questions they
265
334
  were asked.
266
335
 
267
336
  ### Fixes
268
337
 
269
- - `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
270
339
  it installed. It previously named a plugin marketplace that does not exist, which only
271
340
  showed up on a genuinely fresh machine.
272
341
 
@@ -274,80 +343,80 @@ all, which reads as though the update did not happen.
274
343
 
275
344
  ### Features
276
345
 
277
- - 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
278
347
  applied on prod` drops a heads-up into that agent's next prompt. Nothing comes back —
279
348
  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
349
+ * `/popover:team` now takes `ask` or `tell` as its first word. `/popover:team ask B1 why did you
281
350
  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
351
+ * You are told whenever a teammate's agent sends one of yours a message, so nothing reaches
283
352
  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
353
+ * A message arrives named: which agent sent it, and who is running that agent. Your agent is
285
354
  told to treat it as information from someone who cannot see what it is working on, rather
286
355
  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
356
+ * Only agents working in the same repo can be told, the same rule that decides who you can
288
357
  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.
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.
291
360
 
292
361
  ### Fixes
293
362
 
294
- - 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
295
364
  answer, instead of the contradictory "The agent failed (success)".
296
365
 
297
366
  ## 0.3.0
298
367
 
299
368
  ### Features
300
369
 
301
- - 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
302
371
  git remotes, so two clones match however they were cloned and whatever the folder is
303
372
  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
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
306
375
  everything you can see at once.
307
- - 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.
308
377
 
309
378
  ### Fixes
310
379
 
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
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
313
382
  claim a machine is alive.
314
- - 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'.
315
384
 
316
385
  ## 0.2.1
317
386
 
318
387
  ### Features
319
388
 
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
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
322
391
  ends of an ask.
323
392
 
324
393
  ### Fixes
325
394
 
326
- - 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,
327
396
  so asks were attributed to nobody.
328
- - 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.
329
398
 
330
399
  ## 0.2.0
331
400
 
332
401
  ### Features
333
402
 
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.
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.
338
407
 
339
408
  ### Fixes
340
409
 
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
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
344
413
  for agents that are gone.
345
- - 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
346
415
  login on the same host are closed.
347
416
 
348
417
  ## 0.1.0
349
418
 
350
419
  ### Features
351
420
 
352
- - 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
353
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.