@usepowerplant/cli 0.4.15 → 0.4.16
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.
- package/README.md +31 -152
- package/dist/cli.js +542 -455
- package/dist/menubar/Powerplant.app.zip +0 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -6,9 +6,7 @@ Rule: docs/desktop-engineering-rules.md, "Releases".
|
|
|
6
6
|
|
|
7
7
|
# @usepowerplant/cli
|
|
8
8
|
|
|
9
|
-
Set up a machine for [Powerplant](https://powerplant.sh): enroll it into
|
|
10
|
-
your org, run the session sync service in the background, and connect your
|
|
11
|
-
coding agents so they can read your team's work.
|
|
9
|
+
Set up a machine for [Powerplant](https://powerplant.sh): enroll it into your org, run the session sync service in the background, and connect your coding agents so they can read your team's work.
|
|
12
10
|
|
|
13
11
|
Requires Node 20 or newer.
|
|
14
12
|
|
|
@@ -19,75 +17,23 @@ npm install -g @usepowerplant/cli
|
|
|
19
17
|
powerplant init
|
|
20
18
|
```
|
|
21
19
|
|
|
22
|
-
`powerplant init` is one setup pass with three steps, and it is safe to
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
2. **Install the background service.** The sync service watches your local
|
|
30
|
-
coding-agent sessions (Claude Code, Codex, and Cursor) and uploads the
|
|
31
|
-
ones in scope. If recent sessions name repositories under a macOS-protected
|
|
32
|
-
location such as Documents, init lists the location and asks once before
|
|
33
|
-
reading Git metadata there; declining leaves those sessions local, and a
|
|
34
|
-
yes covers locations that appear later (init still explains before macOS
|
|
35
|
-
asks). A location macOS refused is re-checked on every init until you
|
|
36
|
-
enable it in System Settings. The service
|
|
37
|
-
starts on login and keeps itself running. On macOS, init also installs
|
|
38
|
-
the Powerplant menu bar app from this package into `~/Applications` and
|
|
39
|
-
launches it; the app registers itself to start at login (turn that off
|
|
40
|
-
from its More menu), and the background service keeps it on the same
|
|
41
|
-
version as the CLI after every update.
|
|
42
|
-
3. **Add MCP to your agents.** Init lists the agents it found — Claude Code,
|
|
43
|
-
Codex, and Cursor — as checked boxes. They all start selected; use the arrow
|
|
44
|
-
keys and Space to turn off any you want to skip, then press Enter (`--yes`,
|
|
45
|
-
or running without a terminal, adds MCP to everything without asking).
|
|
46
|
-
Each selected agent is pointed at the Powerplant MCP server and signed in:
|
|
47
|
-
for Claude Code and Codex the sign-in opens a browser window; for Cursor,
|
|
48
|
-
the Cursor app opens so you can approve the Powerplant server and sign in
|
|
49
|
-
there. This is how your agents read
|
|
50
|
-
the team's sessions, review rooms, and search. If you skip or cancel
|
|
51
|
-
a sign-in, nothing breaks: finish later with `powerplant connect`
|
|
52
|
-
(add `--client claude|codex|cursor` for just those — repeatable). Each
|
|
53
|
-
agent's own sign-in output prints as it runs. Connect supports Claude Code
|
|
54
|
-
2.1.186, Codex 0.134.0, and Cursor 3.4 or newer; an older installation is
|
|
55
|
-
reported with an update hint and, when the machine holds another copy of
|
|
56
|
-
the same agent, that copy is tried instead.
|
|
57
|
-
|
|
58
|
-
The background service is macOS-only today. On other platforms, init still
|
|
59
|
-
enrolls the machine and adds MCP to your agents, and points you at running
|
|
60
|
-
`powerplant sync` on a schedule instead.
|
|
20
|
+
`powerplant init` is one setup pass with three steps, and it is safe to re-run at any time — finished steps are skipped with a note:
|
|
21
|
+
|
|
22
|
+
1. **Enroll this machine.** Your browser opens so you can approve the machine into your org. On macOS, the credential is encrypted in a local file with its key in Keychain; other platforms use a file only your user can read.
|
|
23
|
+
2. **Install the background service.** The sync service watches your local coding-agent sessions (Claude Code, Codex, and Cursor) and uploads the ones in scope. If recent sessions name repositories under a macOS-protected location such as Documents, init lists the location and asks once before reading Git metadata there; declining leaves those sessions local, and a yes covers locations that appear later (init still explains before macOS asks). A location macOS refused is re-checked on every init until you enable it in System Settings. The service starts on login and keeps itself running. On macOS, init also installs the Powerplant menu bar app from this package into `~/Applications` and launches it; the app registers itself to start at login (turn that off from its More menu), and the background service keeps it on the same version as the CLI after every update.
|
|
24
|
+
3. **Add MCP to your agents.** Init lists the agents it found — Claude Code, Codex, and Cursor — as checked boxes. They all start selected; use the arrow keys and Space to turn off any you want to skip, then press Enter (`--yes`, or running without a terminal, adds MCP to everything without asking). Each selected agent is pointed at the Powerplant MCP server and signed in: for Claude Code and Codex the sign-in opens a browser window; for Cursor, the Cursor app opens so you can approve the Powerplant server and sign in there. This is how your agents read the team's sessions, review rooms, and search. If you skip or cancel a sign-in, nothing breaks: finish later with `powerplant connect` (add `--client claude|codex|cursor` for just those — repeatable). Each agent's own sign-in output prints as it runs. Connect supports Claude Code 2.1.186, Codex 0.134.0, and Cursor 3.4 or newer; an older installation is reported with an update hint and, when the machine holds another copy of the same agent, that copy is tried instead.
|
|
25
|
+
|
|
26
|
+
The background service is macOS-only today. On other platforms, init still enrolls the machine and adds MCP to your agents, and points you at running `powerplant sync` on a schedule instead.
|
|
61
27
|
|
|
62
28
|
## What gets uploaded
|
|
63
29
|
|
|
64
|
-
By default, only sessions in repos your org's sync policy allows (the
|
|
65
|
-
repos it chose in Settings, or its GitHub-owned repos until it chooses) are
|
|
66
|
-
uploaded; everything else stays on your machine. Transcripts are redacted
|
|
67
|
-
on your machine before upload. To narrow further, enroll with
|
|
68
|
-
`--scope <path>` (repeatable) to sync only sessions under given
|
|
69
|
-
directories; `powerplant folders add <path>` opts in extra folders later.
|
|
70
|
-
Allowing Git metadata discovery in a macOS-protected location does not opt
|
|
71
|
-
the folder into syncing; the org's repo policy still applies. There is no
|
|
72
|
-
sync-everything option.
|
|
30
|
+
By default, only sessions in repos your org's sync policy allows (the repos it chose in Settings, or its GitHub-owned repos until it chooses) are uploaded; everything else stays on your machine. Transcripts are redacted on your machine before upload. To narrow further, enroll with `--scope <path>` (repeatable) to sync only sessions under given directories; `powerplant folders add <path>` opts in extra folders later. Allowing Git metadata discovery in a macOS-protected location does not opt the folder into syncing; the org's repo policy still applies. There is no sync-everything option.
|
|
73
31
|
|
|
74
32
|
## Error reporting
|
|
75
33
|
|
|
76
|
-
When the CLI itself hits a bug — a crash or an unexpected error — it sends
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
is no setting to turn it off for free users. Paid users can arrange an opt-out
|
|
80
|
-
through [support](mailto:support@forestwalk.ai). A report contains the error and its
|
|
81
|
-
stack trace, the CLI version and environment, which enrolled machine and
|
|
82
|
-
org the background service belongs to, and diagnostic details such as ids
|
|
83
|
-
and counts. It never contains session transcripts, code, or file contents,
|
|
84
|
-
and secret-shaped values (tokens, keys, passwords) are removed on your
|
|
85
|
-
machine before the report is sent. Errors whose fix is printed on screen
|
|
86
|
-
(like "run `powerplant enroll` first") are not reported at all.
|
|
87
|
-
|
|
88
|
-
If sending error reports is a problem for your machine or org, email
|
|
89
|
-
[support@forestwalk.ai](mailto:support@forestwalk.ai) and we'll work
|
|
90
|
-
something out.
|
|
34
|
+
When the CLI itself hits a bug — a crash or an unexpected error — it sends an error report to [Sentry](https://sentry.io) so we can fix the problem without asking you to dig through logs. This is on by default, and there is no setting to turn it off for free users. Paid users can arrange an opt-out through [support](mailto:support@forestwalk.ai). A report contains the error and its stack trace, the CLI version and environment, which enrolled machine and org the background service belongs to, and diagnostic details such as ids and counts. It never contains session transcripts, code, or file contents, and secret-shaped values (tokens, keys, passwords) are removed on your machine before the report is sent. Errors whose fix is printed on screen (like "run `powerplant enroll` first") are not reported at all.
|
|
35
|
+
|
|
36
|
+
If sending error reports is a problem for your machine or org, email [support@forestwalk.ai](mailto:support@forestwalk.ai) and we'll work something out.
|
|
91
37
|
|
|
92
38
|
## Day to day
|
|
93
39
|
|
|
@@ -102,19 +48,7 @@ powerplant disconnect # remove the Powerplant MCP (and its sign-in) from your ag
|
|
|
102
48
|
powerplant sync # run one upload pass now, in the foreground
|
|
103
49
|
```
|
|
104
50
|
|
|
105
|
-
`status` tells you whether the machine is enrolled, whether the service is
|
|
106
|
-
running, when it last uploaded, and what (if anything) is failing — with the
|
|
107
|
-
command that fixes it. `pause` is safe for as long as you need: the background
|
|
108
|
-
service uploads nothing while paused, every later command reminds you, `init`
|
|
109
|
-
offers to resume, and `resume` goes back and covers everything the pause
|
|
110
|
-
skipped. `sync` is the manual alternative to the background service — the
|
|
111
|
-
day-to-day upload path on machines that can't run it; asked for explicitly, it
|
|
112
|
-
still runs while paused and says so. `disconnect` is the
|
|
113
|
-
inverse of `connect`: it removes each agent's Powerplant MCP entry and the
|
|
114
|
-
sign-in stored with it, and agents that were never connected just say so.
|
|
115
|
-
Use `powerplant disconnect --client claude` to remove only Claude's connection.
|
|
116
|
-
The `--client` option also accepts `codex` and `cursor`, and can be repeated.
|
|
117
|
-
Omitting it disconnects all detected agents.
|
|
51
|
+
`status` tells you whether the machine is enrolled, whether the service is running, when it last uploaded, and what (if anything) is failing — with the command that fixes it. `pause` is safe for as long as you need: the background service uploads nothing while paused, every later command reminds you, `init` offers to resume, and `resume` goes back and covers everything the pause skipped. `sync` is the manual alternative to the background service — the day-to-day upload path on machines that can't run it; asked for explicitly, it still runs while paused and says so. `disconnect` is the inverse of `connect`: it removes each agent's Powerplant MCP entry and the sign-in stored with it, and agents that were never connected just say so. Use `powerplant disconnect --client claude` to remove only Claude's connection. The `--client` option also accepts `codex` and `cursor`, and can be repeated. Omitting it disconnects all detected agents.
|
|
118
52
|
|
|
119
53
|
## Updating
|
|
120
54
|
|
|
@@ -122,51 +56,17 @@ Omitting it disconnects all detected agents.
|
|
|
122
56
|
powerplant update
|
|
123
57
|
```
|
|
124
58
|
|
|
125
|
-
That reinstalls `@usepowerplant/cli` with whichever package manager put it
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
When the install can't be replaced this way (a folder only an administrator
|
|
133
|
-
can write, or a layout the CLI doesn't recognise), `update` says why and
|
|
134
|
-
prints the command to run instead. `powerplant status` tells you when a
|
|
135
|
-
newer version is available, and the menu bar app offers the update as one
|
|
136
|
-
click; it runs in the background and the menu shows its progress.
|
|
137
|
-
|
|
138
|
-
`powerplant init` asks once whether to keep the CLI up to date
|
|
139
|
-
automatically (yes is the default at the prompt, and a non-interactive
|
|
140
|
-
init says it took that default). With that on, the background sync checks
|
|
141
|
-
the registry hourly (and at boot) and installs a new release the same way,
|
|
142
|
-
then restarts itself onto it. The choice is per machine and only an
|
|
143
|
-
explicit yes counts: a machine set up before the question existed stays
|
|
144
|
-
off until someone turns it on. `powerplant status` and `powerplant doctor`
|
|
145
|
-
report the current choice, and `powerplant update --automatic on` or
|
|
146
|
-
`--automatic off`, or the menu bar's More menu, change it. Turning it on
|
|
147
|
-
(there, or at init's question) makes the sync check within seconds, so a
|
|
148
|
-
release already out installs now rather than at the next hourly check. A
|
|
149
|
-
release that fails to install is not retried by itself; the menu bar shows
|
|
150
|
-
the failure with a retry and the update log, and the next release clears it.
|
|
151
|
-
The one exception is a registry that does not serve the release yet (npm's
|
|
152
|
-
cache can lag a publish by a few minutes): the sync tries that release
|
|
153
|
-
again on its next hourly checks, up to three times, and the menu says so.
|
|
154
|
-
|
|
155
|
-
Powerplant offers your machine a release only after the team has tested
|
|
156
|
-
it, so the version it offers can be older than the newest version listed on
|
|
157
|
-
npm. Powerplant never offers or automatically installs a version older
|
|
158
|
-
than the one you have.
|
|
159
|
-
|
|
160
|
-
Powerplant also publishes the oldest version it still supports. When yours
|
|
161
|
-
is older, `powerplant status`, `powerplant doctor`, the menu bar app, and
|
|
162
|
-
the sync service log all say so and point you at `powerplant update`. Nothing
|
|
163
|
-
stops working on that notice — an unsupported version keeps syncing, but
|
|
164
|
-
it is no longer tested or fixed, so update when you see it.
|
|
59
|
+
That reinstalls `@usepowerplant/cli` with whichever package manager put it on this machine (npm, pnpm, bun, or yarn), so the copy that is running is the copy that gets replaced, then restarts the background sync onto the new version. When this machine already has the newest version available to it, `update` says so and changes nothing. Running the manager's own global install yourself works too: the service notices the new version on disk and restarts itself within moments. When the install can't be replaced this way (a folder only an administrator can write, or a layout the CLI doesn't recognise), `update` says why and prints the command to run instead. `powerplant status` tells you when a newer version is available, and the menu bar app offers the update as one click; it runs in the background and the menu shows its progress.
|
|
60
|
+
|
|
61
|
+
`powerplant init` asks once whether to keep the CLI up to date automatically (yes is the default at the prompt, and a non-interactive init says it took that default). With that on, the background sync checks the registry hourly (and at boot) and installs a new release the same way, then restarts itself onto it. The choice is per machine and only an explicit yes counts: a machine set up before the question existed stays off until someone turns it on. `powerplant status` and `powerplant doctor` report the current choice, and `powerplant update --automatic on` or `--automatic off`, or the menu bar's More menu, change it. Turning it on (there, or at init's question) makes the sync check within seconds, so a release already out installs now rather than at the next hourly check. A release that fails to install is not retried by itself; the menu bar shows the failure with a retry and the update log, and the next release clears it. The one exception is a registry that does not serve the release yet (npm's cache can lag a publish by a few minutes): the sync tries that release again on its next hourly checks, up to three times, and the menu says so.
|
|
62
|
+
|
|
63
|
+
Powerplant offers your machine a release only after the team has tested it, so the version it offers can be older than the newest version listed on npm. Powerplant never offers or automatically installs a version older than the one you have.
|
|
64
|
+
|
|
65
|
+
Powerplant also publishes the oldest version it still supports. When yours is older, `powerplant status`, `powerplant doctor`, the menu bar app, and the sync service log all say so and point you at `powerplant update`. Nothing stops working on that notice — an unsupported version keeps syncing, but it is no longer tested or fixed, so update when you see it.
|
|
165
66
|
|
|
166
67
|
### Moving from @powerplant-sh/cli
|
|
167
68
|
|
|
168
|
-
Releases up to 0.2.1 were published as `@powerplant-sh/cli`. That package
|
|
169
|
-
cannot update itself onto this one, so switch by hand:
|
|
69
|
+
Releases up to 0.2.1 were published as `@powerplant-sh/cli`. That package cannot update itself onto this one, so switch by hand:
|
|
170
70
|
|
|
171
71
|
```bash
|
|
172
72
|
npm uninstall -g @powerplant-sh/cli
|
|
@@ -174,11 +74,7 @@ npm install -g @usepowerplant/cli
|
|
|
174
74
|
powerplant init
|
|
175
75
|
```
|
|
176
76
|
|
|
177
|
-
The uninstall comes first: both packages provide the `powerplant` command,
|
|
178
|
-
and npm refuses to install a second package over an existing one. Enrollment,
|
|
179
|
-
connections, and settings are untouched — `powerplant init` only sees that
|
|
180
|
-
the sync service points at the removed bundle and reinstalls it onto the new
|
|
181
|
-
one.
|
|
77
|
+
The uninstall comes first: both packages provide the `powerplant` command, and npm refuses to install a second package over an existing one. Enrollment, connections, and settings are untouched — `powerplant init` only sees that the sync service points at the removed bundle and reinstalls it onto the new one.
|
|
182
78
|
|
|
183
79
|
## Uninstalling
|
|
184
80
|
|
|
@@ -188,35 +84,18 @@ powerplant uninstall # remove the background service
|
|
|
188
84
|
powerplant uninstall --forget # also delete this machine's stored credentials
|
|
189
85
|
```
|
|
190
86
|
|
|
191
|
-
`uninstall` removes the background service only — your coding agents keep
|
|
192
|
-
their Powerplant MCP connection until you run `powerplant disconnect` (and
|
|
193
|
-
uninstall reminds you when that's the case). Disconnecting is local to this
|
|
194
|
-
machine: the access you granted the agents stays on your Powerplant account
|
|
195
|
-
until you revoke it from your Profile page in the web app.
|
|
87
|
+
`uninstall` removes the background service only — your coding agents keep their Powerplant MCP connection until you run `powerplant disconnect` (and uninstall reminds you when that's the case). Disconnecting is local to this machine: the access you granted the agents stays on your Powerplant account until you revoke it from your Profile page in the web app.
|
|
196
88
|
|
|
197
89
|
## Troubleshooting
|
|
198
90
|
|
|
199
|
-
- **`status` says "not enrolled"** — run `powerplant init` (or
|
|
200
|
-
|
|
201
|
-
-
|
|
202
|
-
|
|
203
|
-
- **
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
- **A deprecation warning prints on every command under Node 20** — it
|
|
207
|
-
comes from a dependency and is harmless; Node 22 or newer doesn't print
|
|
208
|
-
it.
|
|
209
|
-
- **None of that fixed it** — run `powerplant doctor` and paste its output
|
|
210
|
-
into an email to [support@forestwalk.ai](mailto:support@forestwalk.ai).
|
|
211
|
-
It prints a diagnostics summary (status plus the tail of the sync service's
|
|
212
|
-
log with credentials redacted) and uploads nothing — you choose what to
|
|
213
|
-
share.
|
|
214
|
-
|
|
215
|
-
The CLI is Powerplant's connector and installer only; agents read Powerplant
|
|
216
|
-
through its MCP server, never through this command.
|
|
91
|
+
- **`status` says "not enrolled"** — run `powerplant init` (or `powerplant enroll` to redo just the enrollment).
|
|
92
|
+
- **`status` says the service is installed but not loaded, or a daemon is stalled** — run `powerplant restart`.
|
|
93
|
+
- **An agent's sign-in was cancelled or expired** — run `powerplant connect`; it skips agents that are already signed in and only finishes what's missing.
|
|
94
|
+
- **A deprecation warning prints on every command under Node 20** — it comes from a dependency and is harmless; Node 22 or newer doesn't print it.
|
|
95
|
+
- **None of that fixed it** — run `powerplant doctor` and paste its output into an email to [support@forestwalk.ai](mailto:support@forestwalk.ai). It prints a diagnostics summary (status plus the tail of the sync service's log with credentials redacted) and uploads nothing — you choose what to share.
|
|
96
|
+
|
|
97
|
+
The CLI is Powerplant's connector and installer only; agents read Powerplant through its MCP server, never through this command.
|
|
217
98
|
|
|
218
99
|
## About this package
|
|
219
100
|
|
|
220
|
-
Powerplant's source code is private today, so this package carries no
|
|
221
|
-
repository link — it ships the compiled CLI only. Questions or problems:
|
|
222
|
-
[support@forestwalk.ai](mailto:support@forestwalk.ai).
|
|
101
|
+
Powerplant's source code is private today, so this package carries no repository link — it ships the compiled CLI only. Questions or problems: [support@forestwalk.ai](mailto:support@forestwalk.ai).
|