@phnx-labs/agents-cli 1.22.114 → 1.22.115

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 (176) hide show
  1. package/CHANGELOG.md +110 -0
  2. package/README.md +22 -102
  3. package/dist/browser.js +0 -0
  4. package/dist/cli/command-registry.js +0 -7
  5. package/dist/commands/accounts.d.ts +3 -77
  6. package/dist/commands/accounts.js +13 -366
  7. package/dist/commands/audit.js +1 -1
  8. package/dist/commands/auth.js +0 -2
  9. package/dist/commands/browser.d.ts +53 -0
  10. package/dist/commands/browser.js +199 -9
  11. package/dist/commands/doctor.d.ts +2 -3
  12. package/dist/commands/doctor.js +0 -11
  13. package/dist/commands/events.d.ts +1 -3
  14. package/dist/commands/events.js +4 -7
  15. package/dist/commands/exec.d.ts +0 -1
  16. package/dist/commands/exec.js +2 -7
  17. package/dist/commands/feed-watch.js +52 -8
  18. package/dist/commands/focus.js +1 -1
  19. package/dist/commands/go.d.ts +0 -17
  20. package/dist/commands/go.js +2 -19
  21. package/dist/commands/logs.js +1 -1
  22. package/dist/commands/mcp.js +8 -83
  23. package/dist/commands/memory.js +4 -47
  24. package/dist/commands/message.js +4 -4
  25. package/dist/commands/plugins.js +1 -93
  26. package/dist/commands/repo.js +0 -44
  27. package/dist/commands/resume.js +4 -1
  28. package/dist/commands/secrets-passthrough.js +2 -2
  29. package/dist/commands/send.d.ts +4 -4
  30. package/dist/commands/send.js +6 -51
  31. package/dist/commands/sessions-backup-setup.js +1 -1
  32. package/dist/commands/sessions-resume.js +0 -1
  33. package/dist/commands/sessions-share.d.ts +5 -7
  34. package/dist/commands/sessions-share.js +98 -49
  35. package/dist/commands/sessions.js +1 -8
  36. package/dist/commands/setup-browser.js +18 -2
  37. package/dist/commands/setup-computer.js +20 -6
  38. package/dist/commands/setup-secrets.js +24 -4
  39. package/dist/commands/setup-terminal.d.ts +3 -0
  40. package/dist/commands/setup-terminal.js +22 -0
  41. package/dist/commands/setup.d.ts +1 -1
  42. package/dist/commands/setup.js +20 -10
  43. package/dist/commands/skills.js +0 -8
  44. package/dist/commands/ssh.d.ts +6 -0
  45. package/dist/commands/ssh.js +92 -233
  46. package/dist/commands/sync.js +14 -5
  47. package/dist/commands/teams.js +1 -1
  48. package/dist/commands/traces.js +1 -1
  49. package/dist/lib/accounts/add.d.ts +0 -5
  50. package/dist/lib/accounts/add.js +1 -7
  51. package/dist/lib/artifacts-client.d.ts +20 -0
  52. package/dist/lib/artifacts-client.js +46 -0
  53. package/dist/lib/auth-mint.js +2 -2
  54. package/dist/lib/browser/runtime-state.d.ts +55 -0
  55. package/dist/lib/browser/runtime-state.js +99 -18
  56. package/dist/lib/browser/service.js +21 -1
  57. package/dist/lib/cli-resources.js +3 -1
  58. package/dist/lib/cloud/dispatch.js +1 -1
  59. package/dist/lib/cloudflare/creds.d.ts +10 -0
  60. package/dist/lib/cloudflare/creds.js +46 -0
  61. package/dist/lib/cloudflare/provision.d.ts +35 -0
  62. package/dist/lib/cloudflare/provision.js +144 -0
  63. package/dist/lib/computer/sessions-list.d.ts +55 -0
  64. package/dist/lib/computer/sessions-list.js +168 -1
  65. package/dist/lib/daemon/daemon.js +8 -1
  66. package/dist/lib/daemon/feed-stream-service.d.ts +23 -0
  67. package/dist/lib/daemon/feed-stream-service.js +40 -0
  68. package/dist/lib/daemon-services.d.ts +1 -1
  69. package/dist/lib/daemon-services.js +5 -0
  70. package/dist/lib/devices/connect.d.ts +49 -5
  71. package/dist/lib/devices/connect.js +169 -21
  72. package/dist/lib/feed/envelope.d.ts +79 -0
  73. package/dist/lib/feed/envelope.js +23 -0
  74. package/dist/lib/feed/events.d.ts +6 -0
  75. package/dist/lib/feed/events.js +8 -0
  76. package/dist/lib/feed/hub-server.d.ts +86 -0
  77. package/dist/lib/feed/hub-server.js +334 -0
  78. package/dist/lib/feed/hub.d.ts +95 -0
  79. package/dist/lib/feed/hub.js +255 -0
  80. package/dist/lib/feed/tool-activity.d.ts +108 -0
  81. package/dist/lib/feed/tool-activity.js +313 -0
  82. package/dist/lib/feed/tools.d.ts +198 -0
  83. package/dist/lib/feed/tools.js +265 -0
  84. package/dist/lib/feed/watch.d.ts +50 -50
  85. package/dist/lib/feed/watch.js +147 -16
  86. package/dist/lib/format.d.ts +1 -1
  87. package/dist/lib/format.js +1 -1
  88. package/dist/lib/git.d.ts +0 -16
  89. package/dist/lib/git.js +0 -58
  90. package/dist/lib/helper-versions.js +1 -1
  91. package/dist/lib/hosts/remote-cmd.d.ts +51 -1
  92. package/dist/lib/hosts/remote-cmd.js +125 -8
  93. package/dist/lib/hosts/remote-cmd.test-fixture.d.ts +2 -0
  94. package/dist/lib/hosts/remote-cmd.test-fixture.js +22 -0
  95. package/dist/lib/mcp.js +17 -11
  96. package/dist/lib/probe.d.ts +4 -1
  97. package/dist/lib/probe.js +5 -2
  98. package/dist/lib/pwsh.d.ts +33 -0
  99. package/dist/lib/pwsh.js +56 -0
  100. package/dist/lib/redact.d.ts +8 -0
  101. package/dist/lib/redact.js +11 -0
  102. package/dist/lib/refresh.d.ts +6 -2
  103. package/dist/lib/refresh.js +92 -72
  104. package/dist/lib/secrets-cli.d.ts +11 -0
  105. package/dist/lib/secrets-cli.js +30 -0
  106. package/dist/lib/secrets-client.js +3 -2
  107. package/dist/lib/session/detached.d.ts +7 -0
  108. package/dist/lib/session/detached.js +29 -0
  109. package/dist/lib/session/remote/peer-stream.d.ts +24 -2
  110. package/dist/lib/session/remote/peer-stream.js +33 -6
  111. package/dist/lib/session/sync/backend.d.ts +3 -3
  112. package/dist/lib/session/sync/backend.js +3 -3
  113. package/dist/lib/session/sync/provision.d.ts +1 -1
  114. package/dist/lib/session/sync/provision.js +2 -2
  115. package/dist/lib/sessions-client.js +0 -3
  116. package/dist/lib/setup-tool-install.d.ts +3 -0
  117. package/dist/lib/setup-tool-install.js +26 -0
  118. package/dist/lib/setup-tool-status.d.ts +22 -0
  119. package/dist/lib/setup-tool-status.js +215 -0
  120. package/dist/lib/share-runtime.d.ts +11 -0
  121. package/dist/lib/share-runtime.js +63 -0
  122. package/dist/lib/smart-launch.d.ts +1 -5
  123. package/dist/lib/smart-launch.js +3 -11
  124. package/dist/lib/ssh-exec.d.ts +44 -0
  125. package/dist/lib/ssh-exec.js +119 -0
  126. package/dist/lib/startup/command-registry.d.ts +6 -4
  127. package/dist/lib/startup/command-registry.js +10 -7
  128. package/dist/lib/state.js +2 -2
  129. package/dist/lib/storage/selection.d.ts +2 -2
  130. package/dist/lib/storage/selection.js +2 -2
  131. package/dist/lib/sync-umbrella.d.ts +5 -0
  132. package/dist/lib/sync-umbrella.js +18 -10
  133. package/dist/lib/traces/backend.d.ts +1 -2
  134. package/dist/lib/traces/backend.js +1 -2
  135. package/dist/lib/traces/provision.d.ts +1 -1
  136. package/dist/lib/traces/provision.js +2 -2
  137. package/dist/lib/types.d.ts +8 -6
  138. package/package.json +2 -3
  139. package/dist/commands/artifacts-setup.d.ts +0 -53
  140. package/dist/commands/artifacts-setup.js +0 -161
  141. package/dist/commands/artifacts.d.ts +0 -18
  142. package/dist/commands/artifacts.js +0 -58
  143. package/dist/commands/attach.d.ts +0 -12
  144. package/dist/commands/attach.js +0 -86
  145. package/dist/commands/auth-mint.d.ts +0 -12
  146. package/dist/commands/auth-mint.js +0 -108
  147. package/dist/commands/reconnect.d.ts +0 -46
  148. package/dist/commands/reconnect.js +0 -115
  149. package/dist/commands/share.d.ts +0 -293
  150. package/dist/commands/share.js +0 -1424
  151. package/dist/lib/share/analytics.d.ts +0 -13
  152. package/dist/lib/share/analytics.js +0 -45
  153. package/dist/lib/share/backend.d.ts +0 -120
  154. package/dist/lib/share/backend.js +0 -176
  155. package/dist/lib/share/capture.d.ts +0 -31
  156. package/dist/lib/share/capture.js +0 -174
  157. package/dist/lib/share/config.d.ts +0 -72
  158. package/dist/lib/share/config.js +0 -211
  159. package/dist/lib/share/delete.d.ts +0 -123
  160. package/dist/lib/share/delete.js +0 -173
  161. package/dist/lib/share/html.d.ts +0 -20
  162. package/dist/lib/share/html.js +0 -88
  163. package/dist/lib/share/http-error.d.ts +0 -53
  164. package/dist/lib/share/http-error.js +0 -65
  165. package/dist/lib/share/og.d.ts +0 -26
  166. package/dist/lib/share/og.js +0 -84
  167. package/dist/lib/share/provision.d.ts +0 -127
  168. package/dist/lib/share/provision.js +0 -285
  169. package/dist/lib/share/publish.d.ts +0 -379
  170. package/dist/lib/share/publish.js +0 -818
  171. package/dist/lib/share/worker-template.d.ts +0 -27
  172. package/dist/lib/share/worker-template.js +0 -2424
  173. package/dist/lib/storage/index.d.ts +0 -14
  174. package/dist/lib/storage/index.js +0 -14
  175. package/dist/lib/storage/visibility.d.ts +0 -82
  176. package/dist/lib/storage/visibility.js +0 -99
package/CHANGELOG.md CHANGED
@@ -1,5 +1,115 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.22.115
4
+
5
+ - **Artifact sharing moved out to the standalone `artifacts` CLI (breaking).**
6
+ `agents artifacts`, `agents artifacts share` (and its `list`/`delete`/`open`/
7
+ `visibility`/`edit`/`revisions`/`update`/`setup`/`join`/`status`/`analytics`
8
+ subcommands), and `agents artifacts setup` are removed — artifact sharing now
9
+ lives entirely in `@phnx-labs/artifacts-cli` (`artifacts share …`,
10
+ `artifacts auth login`), mirroring the secrets (PHNX-3989) and computer
11
+ (PHNX-4075) extractions. Install it with `npm i -g @phnx-labs/artifacts-cli`.
12
+ `agents sessions share <id>` stays — it
13
+ renders the session locally and now publishes through `artifacts share`, so it
14
+ needs that CLI installed. `agents traces` and `agents sessions export`/`backup`
15
+ are unaffected (their own Cloudflare/R2 paths). The ordinary CLI release no
16
+ longer deploys the managed share Worker (`--deploy-worker` is gone); that deploy
17
+ moved to artifacts-cli's own release. Source: removed `cli/src/lib/share/` and
18
+ `cli/src/commands/{artifacts,artifacts-setup,share}.ts`; the generic Cloudflare
19
+ provisioning primitives `agents traces`/`agents sessions backup` borrowed now
20
+ live in `cli/src/lib/cloudflare/provision.ts`.
21
+
22
+ - **Browser tasks and computer runs ride the feed stream, and N readers now cost one
23
+ connection per peer (PHNX-3999).** `agents feed watch --json` carries a third row
24
+ kind alongside agents and attention: canonical tool rows for each browser task and
25
+ computer run, with the driven device, the owning agent session, captures, and — for
26
+ a still-bound browser task only — the commands that show a tab or close the task.
27
+ Switching an All/Agents/Browser/Computer filter launches no commands: every row for
28
+ every tab is already on the one stream. Computer runs are ledger history: they report `live: false` and carry no
29
+ stop/close affordance, because the process that performed them has exited. Task URLs
30
+ are redacted (userinfo stripped, credential-shaped query parameters replaced) before
31
+ they leave the producing machine. Source: `cli/src/lib/feed/tools.ts`,
32
+ `cli/src/lib/feed/tool-activity.ts`.
33
+ - **One shared fleet feed collector, owned by the daemon (PHNX-3999).** `watchFleetFeed`
34
+ opened a persistent `ssh <peer> agents feed watch --json --local` per dialable
35
+ device *per caller*, so three readers on a thirteen-device fleet held thirty-nine
36
+ ssh children carrying byte-identical NDJSON. The new `feed-stream` daemon service
37
+ runs exactly one fan-out and serves every reader over a socket; a late reader is
38
+ brought up to date from held per-scope state with no re-dial, and the fan-out is
39
+ demand-gated so a box with no reader open holds no peer connections at all.
40
+ `agents feed watch --json --local` is unchanged — it is the per-machine stream the
41
+ collector itself subscribes to. Source: `cli/src/lib/feed/hub.ts`,
42
+ `cli/src/lib/daemon/feed-stream-service.ts`.
43
+ - **The standalone browser and computer engines are read at their real source
44
+ (PHNX-3999).** The standalone `computer` engine always appends to its own
45
+ `<cache>/computer/actions/<day>.jsonl`, which never reaches agents-cli's
46
+ recorder — so a `computer` command run directly was invisible to every
47
+ agents-cli surface. `agents computer sessions` and the feed now merge that
48
+ ledger, deduped on `invocationId` (forwarding rewrites `ts`/`pid`, so a
49
+ timestamp dedupe double-counts), and attribute a record the producer left
50
+ unidentified to the machine whose ledger it came from instead of `unknown`.
51
+ Live browser tasks are read from `tasks.json`, so a task that has produced no
52
+ capture yet now appears — with its real tabs, and a `show`/`close` command that
53
+ names the host to run it on. Source: `cli/src/lib/computer/sessions-list.ts`,
54
+ `cli/src/lib/feed/tool-activity.ts`.
55
+ - **Tool setup readiness rides the feed (PHNX-3999).** `reset.setup` and
56
+ `setup.snapshot` carry each device's browser/computer/secrets readiness from the
57
+ setup cache, so a Settings surface needs no per-tool polling and no probe of its
58
+ own. Source: `cli/src/lib/feed/watch.ts`.
59
+ - **A long-offline peer is retired instead of dialed forever (PHNX-3999).** The 60 s
60
+ backoff cap bounded the delay but not the total work: a box off for a weekend was
61
+ dialed every 60 s for two days. After ten consecutive failures the re-dial drops to
62
+ 15 minutes, still waking immediately on a device-registry change. Source:
63
+ `cli/src/lib/session/remote/peer-stream.ts`.
64
+ - **`agents ssh --argv` delivers exact argv tokens (PHNX-3999).** The remote command
65
+ was assembled by joining tokens with a space, so any token containing a space or a
66
+ shell metacharacter was destroyed on the way to the peer — `--title "two words"`
67
+ arrived as two arguments and `a & b` arrived as a backgrounded command. Pass
68
+ `--argv '["prog","two words","a & b"]'` to deliver each element as exactly one
69
+ token. The positional form is unchanged and still parsed by the remote shell, so
70
+ the two are mutually exclusive. On Windows, where a process receives one string
71
+ and splits it itself, a native target is launched through `System.Diagnostics.Process`
72
+ with a `CommandLineToArgvW`-escaped argument string and a script or `.cmd`
73
+ launcher is invoked with a splatted array — PowerShell 5.1's own native
74
+ serializer drops an empty argument and eats embedded quotes. The Agents CLI itself
75
+ is launched through its package's declared entry rather than the npm `agents.ps1`
76
+ shim, because that shim splats its own `$args` into native `node.exe` and lost the
77
+ arguments one layer deeper — a quoted device name reached the parser unquoted. The
78
+ fleet-provenance
79
+ prefix is composed around the quoted argv rather than inside it; quoting it twice
80
+ broke any actor value containing a space or a quote. Source:
81
+ `cli/src/lib/devices/connect.ts`.
82
+ - **`agents browser show <path> --device <host>` views a capture held on another
83
+ machine (PHNX-3999).** The file is fetched into a private local path (0600 inside a
84
+ 0700 dir), bounded as it streams so an oversized file is refused rather than
85
+ transferred, and then opened with the normal local viewer — nothing is opened on
86
+ the remote box. `--device` here names where the FILE is; it requires an absolute
87
+ path and is refused together with a URL. Transport uses the device's canonical
88
+ auth, so a password-auth box and an explicit identity file both work, and the read
89
+ is platform-correct: POSIX gets `cat`, while Windows gets a .NET binary stream
90
+ because `cat` there is a text reader that corrupts a capture. Source:
91
+ `cli/src/commands/browser.ts`.
92
+ - **Setup from the menu uses a real terminal.** `agents setup browser|computer|secrets --terminal` hands interactive onboarding to the existing terminal engine and reports launch errors. Installation and readiness remain separate; only explicit checks run health probes, and concurrent checks share one probe.
93
+
94
+ - **AGI Menu 1.5.0 adds tool sessions and Setup.** The menu separates Agents, Browser and Computer activity, shows browser controls and recorded computer captures, and reports installation and readiness for Browser, Computer and Secrets CLI. It consumes the shared daemon feed without periodic tool subprocesses. The helper floor selects the signed and notarized `menubar/v1.5.0` release.
95
+
96
+ - **Replacing the browser daemon no longer kills a live browser (PHNX-3999).** The
97
+ daemon's startup reaper read "the daemon that launched this has exited" as "everything
98
+ it recorded is garbage" and SIGTERMed the browser — so activating the menu bar,
99
+ upgrading, or a daemon crash-restart closed a browser you were looking at, and the
100
+ runtime record was wiped so the survivor could not even be re-attached. But a live
101
+ browser outliving its daemon is the normal case: shutdown deliberately closes only
102
+ CDP, and on macOS the browser is spawned detached. A live local browser is now
103
+ preserved untouched, a dead record is cleared without signalling anything, and a
104
+ stale `ssh -L` tunnel — which genuinely cannot outlive its owner — is still reaped,
105
+ decided separately from the browser instead of sharing one kill path. Ownership of a
106
+ preserved browser transfers only after an identity-checked attach succeeds — including
107
+ the restart path that restores your open browser tasks — and that rewrites the
108
+ owning-daemon pid alone, keeping the original launch's metadata. Source:
109
+ `cli/src/lib/browser/runtime-state.ts`.
110
+
111
+ - **BREAKING — deprecated command shims are deleted; every surface has one spelling.** The hidden and warned aliases that kept "still works this release" paths alive are gone, not tombstoned: a script that still calls one now gets commander's `unknown command` / `unknown option` and exits non-zero. Removed → replacement: `agents notify` → `agents send --to owner` (or `agents feed post --level important` for a milestone that should reach the owner; a `feed.broadcast` sink that spawned `agents notify "{message}"` becomes `channel: owner`); `agents doctor --fix` → `agents sync <agent>@all` (doctor is diagnose-only); `agents accounts connect|name|label|attach|detach|switch|set-default` and the hidden `agents accounts mint` / `agents auth mint` → `agents accounts add <harness> [name]`, `agents accounts login <harness>#<name>`, `agents accounts default <harness> [name]`, `agents accounts rename`, and `agents run <harness>#<name>` (accounts select by name; installation bindings are gone); `agents sessions go` → `agents sessions resume --attach-only`; `agents sessions attach` and `agents reconnect` / `agents sessions reconnect` → `agents sessions resume [id]`; `agents repo refresh` → `agents sync`; `agents mcp register` → `agents sync --mcp`; `agents memory sync` → `agents sync --memory`; `agents plugins sync <name>` → `agents sync --plugin <name>`; `agents skills info` → `agents skills view`; `agents run --smart` → `agents run --device auto`; `agents events --audit` → `agents events audit` or `--include ops`; `agents devices prefer|unprefer <name>` → `agents devices config <name> auto-launch.preferred on|--unset`; `agents devices set-interactive [name]` → `agents config set interactive.host <name>` (or `agents devices config <name> interactive.host <name>`); `agents devices configure|note|set <name>` → `agents devices config <name> <key> <value>`. `agents devices enable|disable <name>` stay as first-class, visible sugar over `auto-launch.enabled` (no deprecation notice). Folding `mcp register` into `agents sync` also closed a gap in the replacement: sync's reconcile stage skipped every HTTP MCP server declared in `agents.yaml` (`refresh.ts` `continue`d on `transport: http`) while the removed command registered it — it now registers HTTP servers through the same `registerMcpToTargets` path (`codex mcp add <name> --url <url>`), and the yaml-resource writer's Codex arm no longer silently no-ops on HTTP either (`installMcpViaCodex`). Source: `cli/src/commands/send.ts`, `doctor.ts`, `accounts.ts`, `auth.ts`, `go.ts`, `sessions.ts`, `repo.ts`, `mcp.ts`, `memory.ts`, `plugins.ts`, `skills.ts`, `exec.ts`, `events.ts`, `ssh.ts`, `cli/src/lib/smart-launch.ts`.
112
+
3
113
  ## 1.22.114
4
114
 
5
115
  - **`agents projects prs <project>` — every open PR across a project's repos (PHNX-3999).** Reads the whole open PR board (drafts included, no author filter) straight from GitHub over REST, paginated, for the project's own attached repos only — unlike `projects status`, whose `openPrs` only carries PRs the fleet's sessions opened. `--repo <owner/repo>` restricts to one attached repo; `--repo … --number <n>` lazily enriches exactly that PR with its head-SHA checks and reviewDecision. A per-repo fetch failure is reported and marks the result partial, never relabeled as zero open PRs. Source: `cli/src/lib/github/project-prs.ts`, `cli/src/commands/projects.ts`.
package/README.md CHANGED
@@ -53,7 +53,7 @@ agents setup status # readiness for browser, computer, fleet,
53
53
  agents run claude "explain this repo" # run any agent on your existing subscription
54
54
  ```
55
55
 
56
- Everything here — and every other command in this README — is free and needs no account; the optional `agents auth login` unlocks the hosted surfaces — [team spaces](#sign-in) and managed, private-by-default sharing (`agents artifacts share` / `agents traces sync` with no Cloudflare setup). `agents setup` is interactive and idempotent -- safe to re-run on any machine. Once core setup exists, it opens a status-aware menu for browser, computer, secrets, fleet, share, watchdog, and device preferences; each choice delegates to the same wizard available under `agents setup <capability>`. In CI or another non-TTY, bare setup prints the checklist without prompting. The `agi-cli.sh` one-liner installs this same canonical `@phnx-labs/agents-cli` package. Prefer bun? `bun install -g @phnx-labs/agents-cli` works too.
56
+ Everything here — and every other command in this README — is free and needs no account; the optional `agents auth login` unlocks the hosted surfaces — [team spaces](#sign-in) and managed trace sync (`agents traces sync` with no Cloudflare setup). `agents setup` is interactive and idempotent -- safe to re-run on any machine. Once core setup exists, it opens a status-aware menu for browser, computer, secrets, fleet, watchdog, and device preferences; each choice delegates to the same wizard available under `agents setup <capability>`. In CI or another non-TTY, bare setup prints the checklist without prompting. The `agi-cli.sh` one-liner installs this same canonical `@phnx-labs/agents-cli` package. Prefer bun? `bun install -g @phnx-labs/agents-cli` works too.
57
57
 
58
58
  The command surface teaches setup through `agents setup` and group-level `--help`.
59
59
  The durable system model starts at [`cli/docs/README.md`](cli/docs/README.md).
@@ -943,8 +943,8 @@ agents plugins add hivemind@https://github.com/activeloopai/hivemind.git
943
943
  agents plugins add ./my-plugin
944
944
 
945
945
  # Apply to one agent (default version) or all supported
946
- agents plugins sync rush-toolkit claude
947
- agents plugins sync rush-toolkit
946
+ agents sync --plugin rush-toolkit claude
947
+ agents sync --plugin rush-toolkit
948
948
  ```
949
949
 
950
950
  A plugin is a directory with a manifest:
@@ -972,7 +972,7 @@ agents plugins add hivemind@https://github.com/activeloopai/hivemind.git \
972
972
  --allow-exec-surfaces
973
973
 
974
974
  # Same gate on re-sync (e.g., after upstream updates)
975
- agents plugins sync hivemind claude --allow-exec-surfaces
975
+ agents sync --plugin hivemind claude --allow-exec-surfaces
976
976
  ```
977
977
 
978
978
  Skills, commands, and subagents are declarative and never trip the gate. The gate is per-plugin, per-install: consenting to hivemind doesn't grant blanket exec-surface trust to anything else.
@@ -1150,7 +1150,7 @@ agents browser profiles create cloud \
1150
1150
 
1151
1151
  ## Sign in
1152
1152
 
1153
- Signing in is **optional**. Every local feature — `agents run`, sessions, teams, fleet dispatch, secrets, browser, computer — works with no account. Signing in unlocks the hosted surfaces: **team spaces** (`agents auth space`) and **managed sharing** — `agents artifacts share` and `agents traces sync` publish to our storage with **zero Cloudflare setup**, and a signed-in `agents artifacts share` is **private by default** (`me`, owner-only) unless you pass `--visibility org`/`public`. `agents auth` signs this machine in to **Phoenix ID**, the Phoenix Labs account layer behind these hosted surfaces. Sign-in is Google-only and runs a device-code flow: the CLI shows a code, your browser confirms it, and the CLI picks the session up.
1153
+ Signing in is **optional**. Every local feature — `agents run`, sessions, teams, fleet dispatch, secrets, browser, computer — works with no account. Signing in unlocks the hosted surfaces: **team spaces** (`agents auth space`) and **managed trace sync** — `agents traces sync` publishes to our storage with **zero Cloudflare setup**. `agents auth` signs this machine in to **Phoenix ID**, the Phoenix Labs account layer behind these hosted surfaces. Sign-in is Google-only and runs a device-code flow: the CLI shows a code, your browser confirms it, and the CLI picks the session up.
1154
1154
 
1155
1155
  ```bash
1156
1156
  agents auth login # shows a code, opens a Phoenix-branded page
@@ -1242,9 +1242,9 @@ is the only way a provider credential crosses machines.
1242
1242
 
1243
1243
  Selection order for a run is explicit `--account` / `<harness>#<name>`, then
1244
1244
  `accounts default` for that harness, then the harness's native/balanced behavior.
1245
- The hidden `connect` / `name` / `label` / `mint` / `attach` / `detach` /
1246
- `switch` / `set-default` verbs are still accepted this release and print their
1247
- replacement (`add` / `login` / `default` / `run <harness>#<name>`).
1245
+ The `connect` / `name` / `label` / `mint` / `attach` / `detach` / `switch` /
1246
+ `set-default` verbs are deleted; use `add` / `login` / `default` /
1247
+ `run <harness>#<name>` instead.
1248
1248
 
1249
1249
  ---
1250
1250
 
@@ -1281,7 +1281,7 @@ Merge order: profile env < `--secrets` < `--env K=V`. A missing keychain item ab
1281
1281
  ### Cross-machine sync
1282
1282
 
1283
1283
  Secrets are provided by the standalone [`@phnx-labs/secrets-cli`](https://github.com/phnx-labs/secrets-cli)
1284
- engine (`agents setup secrets` checks whether it's installed). Its `push`/`pull`
1284
+ engine (`agents setup secrets` installs it if missing). Its `push`/`pull`
1285
1285
  verbs move a bundle between machines by encrypting it and round-tripping it
1286
1286
  through `api.prix.dev` — no copy-paste, no `.env` files emailed to yourself:
1287
1287
 
@@ -1446,99 +1446,19 @@ Sources: a command's stdout (`--watch` / `--poll`), an HTTP endpoint (`--poll-ht
1446
1446
 
1447
1447
  ## Share
1448
1448
 
1449
+ Publishing an agent's HTML output to a shareable link now lives in the standalone
1450
+ `artifacts` CLI (`@phnx-labs/artifacts-cli`), not in `agents`. The `agents artifacts`
1451
+ command group was removed (PHNX-3992), the same split as secrets (PHNX-3989) and
1452
+ computer (PHNX-4075). Sign in and publish with it directly:
1453
+
1449
1454
  ```bash
1450
- # Signed in? Just publish — no Cloudflare setup.
1451
- agents auth login
1452
- agents artifacts share plan.html --visibility unlisted # → https://share.agents-cli.sh/<handle>/<slug>-<id>
1453
- agents artifacts share secret.html --protected # → https://share.agents-cli.sh/<handle>/<slug>-<id>?k=<token>
1454
-
1455
- # Or provision your own Cloudflare R2 (~$0).
1456
- agents artifacts setup # once: provision bucket + Worker on your CF
1457
- agents traces setup # provision the private traces Worker + R2 bucket
1458
- agents artifacts share plan.html --slug fleet --expire 30d # → https://<base>/fleet
1459
- agents artifacts share plan.html --label "Q3 fleet plan" --meta kind=plan # human title + structured metadata
1460
- agents artifacts share plan.html --json # URL object for plan-render hooks
1461
- agents artifacts share list --agent claude # public gallery, filterable
1462
- agents artifacts share list --meta kind=plan # exact, repeatable metadata filters
1463
- agents artifacts share list --all # include hidden unlisted/private/me/org pages
1464
- agents artifacts share list --scope me # just the owner-only pages
1465
- agents artifacts share edit fleet --label "Final fleet plan" --meta status=final
1466
- agents artifacts share revisions fleet # prior versions kept under a slug
1467
- agents artifacts share visibility fleet me # re-scope a published page in place (public|unlisted|me|org)
1468
- agents artifacts share open fleet # open your page signed in, so its in-page visibility control is live
1469
- agents artifacts share status # show the endpoint
1470
- agents artifacts unshare fleet # take a published link (+ its OG cover) down
1471
- ```
1472
-
1473
- `agents artifacts share` closes the loop: an agent makes work (a plan, a viz, a report),
1474
- publishes it, and you open the link to see it. **Signed-in users** publish to the
1475
- already-live managed endpoint (`share.agents-cli.sh/<handle>/…`) with the Phoenix session — no
1476
- Cloudflare account, bucket, or write token — and `share status` / `list` / `revisions`
1477
- / `unshare` talk to that same endpoint. The handle is the local-part of the signed-in
1478
- email (`muqsitnawaz@gmail.com` → `muqsitnawaz`); the page slug is readable plus a
1479
- short view-id. HTML is stored as one object: local images are inlined, `file://` TOC
1480
- links become in-page hashes, so the published page is actually viewable. The managed
1481
- Worker lazily renders and caches the branded 1200×630 Open Graph card at `<slug>.png`,
1482
- so publishing from Linux does not require a local Chromium; BYO endpoints keep the
1483
- local screenshot fallback. `--visibility unlisted` (hidden aliases
1484
- `--unlisted` / `--private`) is a capability URL: GET still works, the gallery hides it,
1485
- and the Worker sends `X-Robots-Tag: noindex`. `--protected` (`--visibility private`)
1486
- is token-gated: the published URL carries a secret `?k=` key (`Authorization: Bearer`
1487
- is accepted too) and GET returns 404 without it — treat the whole link as a secret.
1488
- `--visibility me` is visible only to
1489
- you (the signed-in owner); `--visibility org` is visible to anyone at your email
1490
- **domain** — derived from your own address, so it needs a **workspace** Google
1491
- account and is refused on a public-inbox domain (`gmail.com`, `outlook.com`,
1492
- `icloud.com`, …). Both need a Phoenix session and are identity-gated at read time (a
1493
- stranger is redirected to sign in, then 404s). `share visibility <target> <level>`
1494
- re-scopes an **already-published** page in place — the slug/URL is preserved and the
1495
- body is untouched (a metadata-only change, like `share edit`, so no revision) — so you
1496
- can promote a draft to `public` or pull a link back to `me`/`org` without re-publishing
1497
- (`me`/`org` need a Phoenix session; `org` needs a workspace domain). The served page
1498
- also carries an **in-page visibility control** — a chip you can switch right on the page
1499
- — but it is interactive only for the signed-in owner, and a plain link has no login;
1500
- `share open <target>` mints a short-lived, single-use login ticket and opens your page
1501
- with it so the chip becomes a live dropdown. Sign-in is a
1502
- single **Phoenix ID** (Google-only device-code OAuth, `agents auth login`) — see
1503
- [`docs/share.md`](cli/docs/share.md) for the full identity + visibility model.
1504
- **BYO Cloudflare** remains: `setup` reads
1505
- a Cloudflare API token from your `cloudflare.com` secrets bundle (or `--token`), creates
1506
- an R2 bucket, uploads a tiny Worker, and enables the free `*.workers.dev` subdomain (or
1507
- maps `--domain share.example.com` when the token owns the zone). Writes are bearer-gated
1508
- **through** the Worker (Phoenix bearer or static `WRITE_TOKEN`); public and unlisted
1509
- reads are **public** so a link outlives the agent, while `--protected` token-gates
1510
- reads on BYO too. R2 has zero egress + a 10 GB free tier, so BYO is still
1511
- effectively free.
1512
-
1513
- **Fleet mode:** provision one endpoint, then every fleet / cloud / ephemeral agent
1514
- publishes through it with a shared write token — `agents artifacts share join <baseUrl>` uses an
1515
- existing endpoint with no provisioning. `--expire 30d|12h|<date>` auto-expires a link.
1516
- `--json` emits `{ url, coverUrl, expiresAt, visibility, unlisted?, label, labelSource }` so plan-render automation can
1517
- publish the rendered HTML and post the returned link without scraping terminal text.
1518
-
1519
- **Every share carries provenance and a title.** Agent/session/host/repo/date are
1520
- captured automatically from the exec env and git — never invented, only sent when
1521
- present. `--label`/`--title` names a share (else one is derived from the HTML
1522
- `<title>`, frontmatter, or filename, with a nudge — never a blocking prompt); `--meta
1523
- key=value` attaches structured metadata (`kind`, `project`, `ticket`, `status`, ...).
1524
- `agents artifacts share list --agent <name> | --session <id> | --label-contains <substr>
1525
- | --meta <key=value>` filters by provenance, title, or exact structured metadata, so
1526
- the listing is a real "what have I shared" gallery, not just slugs. By default it mirrors
1527
- the public gallery; `--scope unlisted|me|org` (or `--all`) includes your hidden pages and
1528
- marks each row with its visibility so you can tell public from private at a glance.
1529
- `agents artifacts share edit <slug>` changes only the label/arbitrary metadata in place:
1530
- the URL, exact body, HTTP metadata, publication time, visibility, expiry, provenance,
1531
- cover, and revision history stay unchanged.
1532
- Republishing an existing slug keeps the prior version as a revision by default
1533
- (`--no-revision` to skip); `agents artifacts share revisions <slug>` shows the retained
1534
- history, newest first.
1535
-
1536
- `agents artifacts share delete <targets...>` (alias `agents artifacts unshare`) takes a page down — pass a
1537
- full URL, `<user>/<slug>`, or a bare slug (resolved against your own namespace); several
1538
- targets at once are fine. It also deletes the sibling `<slug>.png` OG cover by default
1539
- (`--keep-cover` opts out) and verifies the page actually 404s before reporting success —
1540
- the Worker's delete is idempotent, so `{"ok":true}` alone is never proof.
1541
- See the publication boundary in [observability](cli/docs/observability.md).
1455
+ artifacts auth login # Phoenix ID device-code sign-in
1456
+ artifacts share plan.html # publish the HTML and print the link
1457
+ ```
1458
+
1459
+ `agents sessions share <id>` stays in this CLI: it renders a session transcript to
1460
+ HTML locally, then shells out to `artifacts share` to publish it, so a conversation
1461
+ becomes a shareable link the same way any other artifact does.
1542
1462
 
1543
1463
  ---
1544
1464
 
@@ -1777,7 +1697,7 @@ Claude Code, Codex CLI, Antigravity, Grok Build, and others each have their own
1777
1697
 
1778
1698
  ### Is it free?
1779
1699
 
1780
- Yes — every feature, with no account and no signup. `agents run`, sessions, teams, fleet dispatch, secrets, browser, and computer automation all work the moment you install. The optional `agents auth login` unlocks the hosted surfaces — team spaces (`agents auth space`) and managed, private-by-default sharing (`agents artifacts share` / `agents traces sync`, no Cloudflare setup); there are no paid tiers. This developer tool is entirely free because we believe developers should have the best tools — fast and robust — so they can create the best products for their users.
1700
+ Yes — every feature, with no account and no signup. `agents run`, sessions, teams, fleet dispatch, secrets, browser, and computer automation all work the moment you install. The optional `agents auth login` unlocks the hosted surfaces — team spaces (`agents auth space`) and managed trace sync (`agents traces sync`, no Cloudflare setup); there are no paid tiers. This developer tool is entirely free because we believe developers should have the best tools — fast and robust — so they can create the best products for their users.
1781
1701
 
1782
1702
  ### Is this like `nvm` / `mise` / `asdf` for AI agents?
1783
1703
 
package/dist/browser.js CHANGED
File without changes
@@ -49,7 +49,6 @@ const loadMonitors = async () => (await import('../commands/monitors.js')).regis
49
49
  const loadProjects = async () => (await import('../commands/projects.js')).registerProjectsCommands;
50
50
  export const loadRun = async () => (await import('../commands/exec.js')).registerRunCommand;
51
51
  const loadOpen = async () => (await import('../commands/open.js')).registerOpenCommand;
52
- const loadReconnect = async () => (await import('../commands/reconnect.js')).registerReconnectCommand;
53
52
  const loadFork = async () => (await import('../commands/fork.js')).registerForkCommand;
54
53
  const loadConfig = async () => (await import('../commands/config.js')).registerConfigCommand;
55
54
  const loadModels = async () => (await import('../commands/models.js')).registerModelsCommand;
@@ -89,8 +88,6 @@ const loadMessage = async () => (await import('../commands/message.js')).registe
89
88
  const loadSend = async () => (await import('../commands/send.js')).registerSendCommand;
90
89
  const loadFeed = async () => (await import('../commands/feed.js')).registerFeedCommand;
91
90
  const loadMailboxes = async () => (await import('../commands/mailboxes.js')).registerMailboxesCommand;
92
- // Registers the `artifacts` group (`share` + `setup` + nested `unshare`).
93
- const loadArtifacts = async () => (await import('../commands/artifacts.js')).registerArtifactsCommands;
94
91
  const loadWebhooks = async () => (await import('../commands/webhook.js')).registerWebhooksCommand;
95
92
  const loadHumans = async () => (await import('../commands/humans.js')).registerHumansCommands;
96
93
  const loadAccounts = async () => (await import('../commands/accounts.js')).registerAccountsCommand;
@@ -108,7 +105,6 @@ export const loadReminders = async () => (await import('../commands/reminders.js
108
105
  // `roster` was a sessions --active alias — removed; use sessions --active.
109
106
  export const LAZY_COMMAND_NAMES = new Set([
110
107
  'sessions',
111
- 'reconnect',
112
108
  'teams',
113
109
  'cloud',
114
110
  'message',
@@ -165,7 +161,6 @@ export const COMMAND_LOADERS = {
165
161
  // tokens must lazy-load the same module so either resolves. See commands/open.ts.
166
162
  _callback: [loadOpen],
167
163
  open: [loadOpen],
168
- reconnect: [loadReconnect],
169
164
  fork: [loadFork],
170
165
  config: [loadConfig],
171
166
  models: [loadModels],
@@ -210,11 +205,9 @@ export const COMMAND_LOADERS = {
210
205
  cloud: [loadCloud],
211
206
  message: [loadMessage],
212
207
  send: [loadSend],
213
- notify: [loadSend],
214
208
  feed: [loadFeed],
215
209
  mailboxes: [loadMailboxes],
216
210
  mailbox: [loadMailboxes],
217
- artifacts: [loadArtifacts],
218
211
  webhooks: [loadWebhooks],
219
212
  humans: [loadHumans],
220
213
  daemon: [loadDaemon],
@@ -1,45 +1,7 @@
1
1
  import type { Command } from 'commander';
2
2
  import type { AgentId } from '../lib/types.js';
3
- import { collectRunCandidates, type RotateCandidate } from '../lib/accounting/rotate.js';
4
- import { type Profile } from '../lib/profiles.js';
5
3
  import { type NativeAccountCatalogRow, type ProviderAccountCatalogRow } from '../lib/account-catalog.js';
6
4
  import { type UnifiedAccount } from '../lib/account-registry.js';
7
- export declare function nativeIdentityFromSource(raw: string): Promise<{
8
- agent: AgentId;
9
- version: string;
10
- identityKey: string;
11
- identityLabel?: string;
12
- scope: 'version' | 'device';
13
- }>;
14
- type AttachTarget = {
15
- kind: 'installation';
16
- agent: AgentId;
17
- version: string;
18
- } | {
19
- kind: 'device-agent';
20
- agent: AgentId;
21
- } | {
22
- kind: 'profile';
23
- profile: Profile;
24
- };
25
- /**
26
- * Classify + validate an attach target, rejecting a typo BEFORE any binding is
27
- * written: it must be an existing custom-harness profile, an installed
28
- * `agent@version`, or a known harness id.
29
- */
30
- export declare function classifyAttachTarget(target: string): AttachTarget;
31
- /**
32
- * Persist the attached setup-token to a per-version `.oauth_token` file so an
33
- * INTERACTIVE Claude launch on a keychain-less Linux worker can authenticate from it.
34
- * Headless runs inject the token via `buildExecEnv`. Since PHNX-3502 an interactive
35
- * launch on a worker-role device ALSO injects it through `claudeAdapter.applyExecConfigEnv`
36
- * (only a headed `personal`/`desktop` device defers to its per-version native login), and
37
- * the shim's Linux fallback (`claudeAdapter.shimConfigEnvBash`) reads exactly this file —
38
- * so writing it is what makes a freshly-attached setup-token visible to that shim fallback
39
- * on a worker. macOS keeps the credential in the keychain, so `resolveClaudeSetupToken`
40
- * returns null there and this is a no-op off Linux.
41
- */
42
- export declare function writeClaudeInteractiveOauthToken(target: AttachTarget, targetAgent: AgentId, email?: string): void;
43
5
  export declare function parseBundleKey(raw: string): {
44
6
  bundle: string;
45
7
  key: string;
@@ -49,52 +11,17 @@ export declare function renderAccountList(native: NativeAccountCatalogRow[], pro
49
11
  harness?: AgentId;
50
12
  localDevice?: string;
51
13
  }): string;
52
- /** One labelable signed-in identity, folded across every version it is signed into. */
53
- export interface LabelIdentity {
54
- identityKey: string;
55
- email: string | null;
56
- versions: string[];
57
- isDefault: boolean;
58
- }
59
- /**
60
- * Fold signed-in run candidates into distinct identities — the unit a label
61
- * binds to. The same account signed into several versions is ONE row, so a
62
- * multi-version single-account harness never demands a selector. Candidates
63
- * with no stable identity (no accountKey, no email) are dropped: there is
64
- * nothing durable for a label to bind to. Default-version identity first.
65
- */
66
- export declare function groupLabelIdentities(candidates: Pick<RotateCandidate, 'version' | 'email' | 'accountKey'>[], defaultVersion: string | null): LabelIdentity[];
67
- export type LabelSelection = {
68
- kind: 'selected';
69
- identity: LabelIdentity;
70
- } | {
71
- kind: 'ambiguous';
72
- identities: LabelIdentity[];
73
- };
74
- /**
75
- * Resolve which signed-in login a bare-harness `accounts label` call means.
76
- * `collect` is injectable (the `resolveRunVersion` pattern) so tests drive the
77
- * real selection path against fixture candidates.
78
- */
79
- export declare function resolveLabelIdentity(agent: AgentId, accountSelector: string | undefined, collect?: typeof collectRunCandidates): Promise<LabelSelection>;
80
- /**
81
- * Body of `accounts label`, exported with the injectable candidate collector
82
- * so tests exercise everything but the TTY prompt itself.
83
- */
84
- export declare function runAccountsLabel(source: string, label: string | undefined, opts: {
85
- account?: string;
86
- }, collect?: typeof collectRunCandidates): Promise<void>;
87
- /** Named accounts that `set-default` / `switch` can pin for this harness. */
14
+ /** Named accounts that `accounts default` can pin for this harness. */
88
15
  export declare function listSwitchableAccounts(agent: AgentId): Promise<UnifiedAccount[]>;
89
16
  /**
90
- * Pin the per-harness default. Shared by `accounts set-default` and `accounts switch`.
17
+ * Pin the per-harness default — the `accounts default` write path.
91
18
  * Provider accounts must authenticate the harness; native accounts must belong to it.
92
19
  */
93
20
  export declare function setDefaultAccount(agentRaw: string, name: string): {
94
21
  agent: AgentId;
95
22
  account: UnifiedAccount;
96
23
  };
97
- export declare function runAccountsSwitch(harness: string, accountName: string | undefined, opts: {
24
+ export declare function runAccountsDefault(harness: string, accountName: string | undefined, opts: {
98
25
  json: boolean;
99
26
  }): Promise<void>;
100
27
  /**
@@ -118,4 +45,3 @@ export declare function resolveLogoutTarget(target: string): Promise<{
118
45
  version: string;
119
46
  }>;
120
47
  export declare function registerAccountsCommand(program: Command): void;
121
- export {};