@shardflux/cli 0.20.0 → 0.23.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 (124) hide show
  1. package/CHANGELOG.md +312 -1
  2. package/README.md +242 -75
  3. package/dist/account-args.js +7 -2
  4. package/dist/account-commands.js +56 -106
  5. package/dist/account-pool.d.ts +19 -15
  6. package/dist/account-pool.js +47 -96
  7. package/dist/account-scope.d.ts +65 -0
  8. package/dist/account-scope.js +246 -0
  9. package/dist/acp-journal.js +58 -6
  10. package/dist/acp-login.d.ts +13 -5
  11. package/dist/acp-login.js +37 -8
  12. package/dist/acp-models.d.ts +6 -1
  13. package/dist/acp-models.js +29 -19
  14. package/dist/acp.js +120 -14
  15. package/dist/agent-commands.d.ts +4 -1
  16. package/dist/agent-commands.js +110 -42
  17. package/dist/agent-config-return.d.ts +46 -2
  18. package/dist/agent-config-return.js +110 -4
  19. package/dist/agent-credentials.js +7 -3
  20. package/dist/agent-repository.d.ts +16 -3
  21. package/dist/agent-repository.js +149 -74
  22. package/dist/agent-setup.d.ts +14 -3
  23. package/dist/agent-setup.js +78 -36
  24. package/dist/agent-target-commands.d.ts +20 -1
  25. package/dist/agent-target-commands.js +73 -31
  26. package/dist/agent-targets.js +6 -1
  27. package/dist/args.d.ts +1 -1
  28. package/dist/args.js +95 -54
  29. package/dist/bin.js +5 -1
  30. package/dist/browser.d.ts +13 -2
  31. package/dist/browser.js +30 -14
  32. package/dist/claude-cloud-login.d.ts +24 -2
  33. package/dist/claude-cloud-login.js +151 -11
  34. package/dist/cli-proxy-hub.d.ts +61 -25
  35. package/dist/cli-proxy-hub.js +202 -54
  36. package/dist/cli-proxy.d.ts +44 -1
  37. package/dist/cli-proxy.js +177 -28
  38. package/dist/client-settings.d.ts +39 -0
  39. package/dist/client-settings.js +91 -0
  40. package/dist/codex-cloud.d.ts +14 -4
  41. package/dist/codex-cloud.js +135 -31
  42. package/dist/codex-linux.d.ts +14 -0
  43. package/dist/codex-linux.js +69 -0
  44. package/dist/command-center-actions.js +18 -5
  45. package/dist/command-center-model.d.ts +2 -0
  46. package/dist/command-center-model.js +6 -1
  47. package/dist/command-center.js +3 -3
  48. package/dist/commands.js +173 -24
  49. package/dist/conversation-commands.d.ts +5 -0
  50. package/dist/conversation-commands.js +8 -5
  51. package/dist/conversation-terminal.d.ts +10 -2
  52. package/dist/conversation-terminal.js +78 -13
  53. package/dist/conversations.d.ts +86 -1
  54. package/dist/conversations.js +306 -23
  55. package/dist/desktop-linux.js +16 -3
  56. package/dist/device-bridge.d.ts +1 -1
  57. package/dist/device-bridge.js +6 -4
  58. package/dist/device-helper.js +43 -22
  59. package/dist/errors.d.ts +29 -2
  60. package/dist/errors.js +50 -7
  61. package/dist/filesystem-commands.d.ts +16 -9
  62. package/dist/filesystem-commands.js +133 -57
  63. package/dist/format.d.ts +2 -1
  64. package/dist/format.js +10 -1
  65. package/dist/handlers.js +3 -1
  66. package/dist/initial-prompt.d.ts +8 -0
  67. package/dist/initial-prompt.js +43 -1
  68. package/dist/large-media.d.ts +14 -0
  69. package/dist/large-media.js +100 -0
  70. package/dist/linux-terminal.d.ts +5 -3
  71. package/dist/linux-terminal.js +6 -20
  72. package/dist/local-sessions.d.ts +26 -2
  73. package/dist/local-sessions.js +113 -24
  74. package/dist/machine-setup.d.ts +11 -1
  75. package/dist/machine-setup.js +69 -22
  76. package/dist/machine-status.d.ts +67 -0
  77. package/dist/machine-status.js +140 -0
  78. package/dist/main.js +11 -13
  79. package/dist/menubar.d.ts +6 -5
  80. package/dist/menubar.js +38 -28
  81. package/dist/move-worktrees-restore.py +144 -0
  82. package/dist/move-worktrees.d.ts +69 -0
  83. package/dist/move-worktrees.js +252 -0
  84. package/dist/move.d.ts +10 -1
  85. package/dist/move.js +111 -16
  86. package/dist/onboarding.d.ts +11 -7
  87. package/dist/onboarding.js +63 -29
  88. package/dist/prepared-repository.d.ts +204 -0
  89. package/dist/prepared-repository.js +860 -0
  90. package/dist/prepared-repository.py +1307 -0
  91. package/dist/project-preparation.d.ts +62 -0
  92. package/dist/project-preparation.js +316 -0
  93. package/dist/project-sync-manifest.d.ts +4 -0
  94. package/dist/project-sync-manifest.js +5 -1
  95. package/dist/project-sync-transfer.js +1 -1
  96. package/dist/project-sync.d.ts +22 -4
  97. package/dist/project-sync.js +34 -8
  98. package/dist/project-template-setup.d.ts +33 -1
  99. package/dist/project-template-setup.js +59 -2
  100. package/dist/secret-ask.d.ts +72 -0
  101. package/dist/secret-ask.js +351 -0
  102. package/dist/seed-phases.d.ts +8 -1
  103. package/dist/seed-phases.js +17 -2
  104. package/dist/setup-cache.d.ts +7 -0
  105. package/dist/setup-cache.js +32 -0
  106. package/dist/t3-launch.d.ts +2 -1
  107. package/dist/t3-launch.js +12 -6
  108. package/dist/t3-mode.d.ts +8 -2
  109. package/dist/t3-mode.js +19 -4
  110. package/dist/t3-phone.d.ts +4 -2
  111. package/dist/t3-phone.js +12 -4
  112. package/dist/t3-proxy.d.ts +81 -0
  113. package/dist/t3-proxy.js +325 -0
  114. package/dist/terminal-apps.d.ts +168 -0
  115. package/dist/terminal-apps.js +574 -0
  116. package/dist/terminal-onboarding.js +6 -1
  117. package/dist/this-computer.d.ts +11 -0
  118. package/dist/this-computer.js +36 -0
  119. package/dist/thread-on-computer.js +4 -1
  120. package/dist/update.d.ts +2 -0
  121. package/dist/update.js +43 -9
  122. package/dist/worktree-twin.d.ts +10 -2
  123. package/dist/worktree-twin.js +27 -9
  124. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -1,6 +1,317 @@
1
1
  # Changelog
2
2
 
3
- ## 0.20.0 (not yet published)
3
+ ## 0.23.0 (2026-10-14)
4
+
5
+ - Codex Cloud enable and setup report when a ChatGPT sign-in is required, with `codex login` and `shard setup` as the next steps. Setup offers the sign-in action.
6
+
7
+ - On macOS, the installed CLI records a matching stable Node.js path for the menu bar, so Homebrew upgrades and
8
+ cleanup keep its actions available.
9
+ - On Linux, the desktop records the installed Node.js and CLI paths for its actions and existing autostart entry,
10
+ keeping them available after the launching shell's fnm multishell links expire.
11
+ - Opening a moved Claude or Codex conversation by its full key resolves the conversation from any folder, including
12
+ `--in auto` in the desktop menus and explicit app/web targets. A computer key opens its bound conversation's session.
13
+ - Move to cloud moves the session's checkout, uncommitted edits included, in any repository: also one with other
14
+ local branches, other worktrees or a worktree whose folder is gone. Those stay on this computer, so `shard move`,
15
+ the menu bar's and the Linux app's **Move to cloud** and the MCP tool go straight ahead without a scope choice
16
+ (`--this-worktree-only` is now the default). When the session also worked in another worktree, the move names it
17
+ in one line and `--json` lists it as `other_worktrees`. `--preserve-all-worktrees` skips registrations whose folder
18
+ is gone (`stale_registrations` in `--plan`); their branches move with the other local refs.
19
+ - Open Codex Cloud chats in the browser on every platform. `agents open --original` opens the original history; `--history <thread-id>` opens any earlier linked chat. JSON includes all previous history links.
20
+
21
+ - Opening a conversation from a coding agent's shell (Codex, Claude Code, Cursor) opens exactly one terminal, and the
22
+ conversation attaches there. The terminal no longer inherits the agent shell's variables, and a terminal Shardflux
23
+ opened never opens another, so it no longer reopens terminals in a loop that steals focus. A Codex Cloud conversation
24
+ opens in Codex before any terminal is considered, also when given its computer's key.
25
+ - Inherits completed forward-helper verification reuse from SDK 0.27.0 on a reused workspace client; each ownership epoch and helper version is verified again.
26
+ - Historical template file-list GETs wait for checksum-verified cache reconstruction, honoring Retry-After within the SDK admission deadline. File history and contents remain stored; POSTs never replay for file_list_indexing.
27
+
28
+ - Plan-derived API budgets (0.23.0+, SDK 0.27.0): `--json` error output includes `rate_limit` and `retry_after_seconds`; the text hint names the shared scope and delay. API request pacing follows the SDK admission timeout and preserves the request body. Reuse workspace credentials and reduce status polling when the returned budget asks for a delay.
29
+
30
+ - T3 Code conversations on Shardflux follow your T3 Code proxy setup (CLIProxyAPI, or any Claude- or
31
+ OpenAI-compatible proxy). What your T3 Code Claude provider runs with (its environment variables, and Claude Code's
32
+ settings.json `env`: `ANTHROPIC_BASE_URL`, its token, models and headers) reaches the conversation's Claude Code, and
33
+ your Codex `model_provider` (its `base_url`, `wire_api` and the key `env_key` names) reaches its Codex. CLIProxyAPI
34
+ on this computer (`127.0.0.1:8317`, or the port it had before `shard cli-proxy import`) is reached through your
35
+ hosted CLIProxyAPI, as on this computer; a proxy at another address is used as written. A Claude Code conversation
36
+ that goes through your proxy with its own token starts without a Shardflux Claude sign-in. T3 Code's default
37
+ provider is the one followed while it is enabled.
38
+ - `shard agents new --in t3` and `shard agents open t3` give the VM's own T3 Code (SSH and the T3 app) the same Claude
39
+ Code and Codex provider settings, with tokens in its secret store.
40
+ - Sign in on the Shardflux provider in T3 Code (`shard acp --login`) offers to move the CLIProxyAPI your T3 Code setup
41
+ uses into your account, so cloud conversations use it too. Claude Code that goes through it is connected then.
42
+ - Your hosted CLIProxyAPI routes requests across your logins exactly as its config says (round-robin, fill-first,
43
+ session affinity): `shard cli-proxy import` brings every login as it is on your computer, enabled or disabled, and
44
+ nothing changes them afterwards. `shard cli-proxy use <login>` serves a provider with that one login; `shard
45
+ cli-proxy use --all` uses every login again. `--use` on import is the same choice for a login you move.
46
+ - `ws exec-cancel` displays pending/unverified kernel drain and the follow command; `exec-read` keeps the real foreground state and reason.
47
+ - `shard template save` and `shard template` on your computer use the newest conversation this checkout started whose
48
+ VM is still there (a restored one too), else the project's workspace from before conversations. They no longer
49
+ refuse with "Run shard ./ for this project" after `shard ./`.
50
+ - `shard agents logs <conversation>` of a Codex Cloud conversation says its output is in its Codex thread and names
51
+ the commands that show it: `shard agents open <id>` opens the thread, `shard c wait <id>` waits for its reply and
52
+ `shard c get <id>` shows it.
53
+ - `shard agents new --in terminal --prompt <text>` (or `--prompt-file`, `--image`) starts a new conversation with that
54
+ first message, as without `--in`; a new Codex conversation says it opens in Codex Cloud. Before, it was refused
55
+ with a message that recommended the same command. A first message with `--name`, `--like`, an agent argument or
56
+ another `--in` target names the option it cannot be combined with.
57
+ - `shard projects sync add <path> --wait` reports a project setup that stopped as `project_setup_failed` (it was
58
+ `internal_error`): the message names the step and what it needs, such as a lockfile to commit,
59
+ `details.step` and `details.error_code` identify it, and the hint gives the way forward.
60
+ - `shard agents open` (and Open in the menus) of a Codex Cloud chat that switching the active Codex account or turning
61
+ Codex Cloud off and on stopped continues it in a new Codex chat of the same conversation, on its computer and branch,
62
+ instead of reporting that its executor was removed.
63
+ - ACP journal followers retry temporary lifecycle interruptions with bounded backoff and their saved sequence, without resubmitting a turn; permanent loss stops promptly.
64
+ - SSH inherits the SDK cold helper race repair.
65
+ - Inherits SDK 0.27.0 safe replay of truncated JSON lifecycle and exec answers.
66
+ - Uses SDK 0.27.0: workspace exec retries a lost start response with the same session ID.
67
+
68
+ - A T3 Code (`shard acp`) conversation starts the way a terminal one does: from its prepared revision, sending only
69
+ what the project cache lacks (nothing for a returning project), so its session is ready ~2.5–3 s sooner. Large files
70
+ still on their way stay out of the first file reconcile and land by themselves.
71
+ - A T3 Code (`shard acp`) conversation's first prompt reaches the agent ~1 s sooner: the agent's session starts while
72
+ the project files are reconciled, instead of after. `SHARDFLUX_TRACE_SEED=1` also marks each step of that
73
+ connection (`acp_*`). Each message to the agent up to 192 KiB (every one but a long prompt) now takes one request
74
+ to your VM instead of four.
75
+ - `shard agents open t3` and `shard agents new --in t3` with T3 Code 0.0.45 bring T3 up only once the workspace's T3
76
+ Connect link is linked: T3 lists the project only then. A link in progress is waited for (at most 30 s, within
77
+ `--wake-timeout`). A refused link is the `t3_link_failed` error with the API's remedy (for T3 Connect's environment
78
+ limit, Settings → Connections, with `details.recovery`); a link still in progress is `t3_link_pending`. Both carry
79
+ `workspace_key`, `conversation_id` and any started `t3_thread_id`, so the menu bar and the Linux app offer Open for
80
+ what exists rather than a new start. Before, `--json` answered `opened: true` with `t3_link.status: linking`.
81
+ - `shard agents open t3 <conversation>` for a Codex Cloud conversation opens its existing Codex chat, as
82
+ `shard agents open` does, instead of setting its VM up in T3 Code, which cannot show that chat. It neither wakes the
83
+ VM nor needs T3 Code.
84
+ - The Codex app on Linux: OpenAI's ChatGPT app for Linux (`chatgpt.desktop`) or a community build, found as the desktop
85
+ entry that handles codex://. `shard agents open <conversation>` and `shard agents open codex-app <conversation>` open
86
+ a Codex Cloud conversation's existing thread in it, through that entry, and `agents open codex-app` of a Cloud
87
+ conversation opens its thread on macOS too (it set up an SSH environment before). Its SSH environments stay a macOS
88
+ target.
89
+ - On a computer without the Codex app, opening or starting a Codex Cloud conversation says where its chat is,
90
+ whether it is waiting for your answer, and how to answer and follow it from here (`shard conversations send <id>
91
+ "<answer>"`, `shard conversations get <id>`), instead of failing to open its codex:// link. `--json` adds
92
+ `codex_app` and `reply_command`.
93
+ - The command center (`shard` with no arguments) lists a Codex Cloud chat as **needs you** or **working** from Codex
94
+ even while its computer is parked, and Enter opens it in Codex without waking that computer. Includes the Linux
95
+ desktop 0.1.10 payloads: Codex Cloud chats in the top-bar panel.
96
+ - `shard menubar start`, `stop` and `status` act on the Shardflux app for this config directory wherever it runs from
97
+ (menu bar 0.8.4+, one app per config directory), and an update stops that app before the new one starts, so no
98
+ older app stays behind. A start that races another one for the same directory hands over without opening the
99
+ launcher.
100
+
101
+ ## 0.22.0 (2026-10-13)
102
+
103
+ - **Starts send only what changed.** A new conversation's project travels as Git packs into a project cache its VMs
104
+ share: a start sends only what the cache lacks (a second chat on the same state sends nothing; a one-file edit sends
105
+ its delta), in 8 MiB binary parts, four at a time, resumable after an interruption. Dirty and untracked files go
106
+ once, not as a copy and again in the snapshot.
107
+ - **Large media follow the first prompt.** Untracked images, audio and video of 256 KiB and more stay out of the twin
108
+ snapshot and land in the conversation's worktree as files its Git ignores, as yours does; above 32 MiB they keep
109
+ arriving after the agent has your prompt. The device helper finishes them while the VM is awake. A file the agent
110
+ writes first is kept.
111
+ - **History from origin.** A project whose cache holds none of its history takes it from origin inside the cloud: the
112
+ fetch the VM makes of the branch while it boots (coding 53+), or one of its own; only commits origin lacks go from
113
+ this computer.
114
+ - **Selected projects, prepared ahead.** `shard projects sync add <path>` keeps a project ready for new chats: the
115
+ device helper puts its current state in the project cache, and when its dependency files change, installs them and
116
+ saves the project template, each time in a short-lived VM it deletes after. `pause`, `remove` and `list` manage the
117
+ selection. Only selected projects are prepared.
118
+ - A Codex Cloud start that outlives the launcher's deadline is not lost: the conversation stays accepted, and opening it
119
+ (or the device helper) continues the same start, with the state it captured, and sends the prompt once.
120
+ - Uses SDK 0.26.0 (`projectTemplates.prepare`).
121
+ - New conversations set the project up: in a repository whose project has no template for its current dependency
122
+ files, the conversation's VM prepares its worktree in the background (toolchains, dependencies, build and tests)
123
+ once the agent has its first prompt, and saves the project template the next conversation starts from, dependencies
124
+ installed. This covers `shard ./` in a terminal, with `--json` and opened in Claude Desktop or claude.ai, `shard agents
125
+ new` and the launcher.
126
+ - Conversation previews and `shard ws tunnel` reach the guest on either loopback (SDK 0.26.0): a preview of a dev
127
+ server bound to `localhost` opens wherever the guest resolves localhost to `::1` first, and guest clients of
128
+ `localhost` reach a tunnel on the first try.
129
+ - `shard agents accounts` suggests `use` only for accounts you can make active (the API's `can_activate`); a member is
130
+ told an owner or admin chooses the active account.
131
+ - `shard agents accounts use <account>` makes an account the active one of its provider (`--json` prints the updated
132
+ list and the account). New conversations start with its login and running conversation VMs get it; running Claude
133
+ conversations bring Remote Control back by themselves, and Codex Cloud moves to the active ChatGPT account. The list
134
+ marks the active account `active`.
135
+ - Removed: `shard agents accounts move`, `shard agents accounts pool`, `add --api-key-stdin` and `add --scope`. The
136
+ account you mark active stays active until you choose another; usage windows and status are shown for each account.
137
+ - `shard agents open` and T3 Code no longer special-case pooled conversations.
138
+ - The forwarder on this computer keeps your hosted CLIProxyAPI at one login per provider without waking it: at its
139
+ start, at the first request after the hosted copy slept, every minute while it sleeps and every 15 minutes while it
140
+ runs. A login chosen with `--use` on import arrives disabled and is enabled after the others are disabled.
141
+ - `shard cli-proxy use <email|file>` makes a login its provider's active one in your hosted CLIProxyAPI (`--json` lists
142
+ the active and disabled logins). One login per provider serves requests, the others stay in the hub disabled, and
143
+ `shard cli-proxy` marks the active one. `--use <email>` on import picks it when this computer has several.
144
+
145
+ - `shard machine save --wait` and `shard template save --wait`: a version larger than the plan's workspace disk says
146
+ so in plain words (its size and the plan's disk), with `retryable: false` and a hint that names both ways forward:
147
+ delete what the VM does not need (`shard machine open`), then save again, or move to a plan with a larger disk
148
+ (`shard billing plans`). It no longer suggests running the same save again or sending a bug report. The JSON error's
149
+ `details` add the build's `error_code` and its `limit`, `value` and `actual` (bytes). Any other save failure the same
150
+ VM cannot pass is `retryable: false` too. `shard machine setup --status` and the apps' machine row read it as too
151
+ large: "Cloud machine not saved: over the plan’s 2 GiB disk". Uses SDK 0.26.0.
152
+ - Codex conversations open in your terminal app on macOS too, as Claude's do and as they already did on Linux:
153
+ `shard agents targets --open-in codex=terminal` (a bare `--open-in terminal` now covers both apps). The menu bar and
154
+ the Linux app offer it in each agent's **Open in**.
155
+ - `shard agents targets --json` adds `open_in_targets`: every place each app's conversations can open on this computer,
156
+ so clients offer exactly what `--open-in` takes.
157
+ - New conversations reach their first prompt sooner. The sign-in check and the conversation API check run beside the
158
+ project's local snapshot; this computer's changes are read while the VM starts; the repository's Git config, exclude
159
+ rules, branch and start-state snapshot take 4-6 fewer requests; credential fill is configured beside the first
160
+ prompt. With a VM whose platform has `sf-agent conversation first-prompt`, the VM types the first prompt itself, in
161
+ one request (it waits for the input box, pastes, waits for the paste to show, then presses Enter); `--json` still
162
+ reports `initial_prompt.submitted` the same way, and a prompt the VM could not type goes to the conversation's
163
+ inbox at once (`initial_prompt.queued`). When the VM has already fetched the repository's history from its remote
164
+ (platforms that start that fetch at boot), the seed adopts it and fetches only what is newer; the history apply and
165
+ the repository's config are one request, and the checkout writes files in parallel.
166
+ - T3 Code: a new conversation's agent config from this computer is copied once its first prompt is on its way, as for
167
+ terminal conversations, and its agent starts with fewer serial steps (a prompt that opened the connection does not
168
+ reconcile the project files twice).
169
+ - T3 Code: prompts in a repository with symbolic links are no longer refused with "mode changed during sync"; a link
170
+ is identified by its target on both sides.
171
+ - T3 Code: a file edited on this computer before a conversation's first prompt reaches its VM as this computer's edit,
172
+ not a conflict: no `.shard-conflict-acp-…` copy lands in the checkout.
173
+ - Each command starts ~0.1 s sooner: V8's compiled code for the CLI's modules is kept in the OS temp directory and
174
+ reused (Node's module compile cache).
175
+ - `SHARDFLUX_TRACE_SEED=1` marks each start phase with its wall clock (`@<epoch ms>`) and runs to the first prompt's
176
+ Enter.
177
+ - `shard conversations list`, `get`, `resume`, `wait` and `land` show **New conversation** for a conversation still
178
+ named by its generated id (it has not had a prompt yet), not the id a second time. A name you chose stays; `--json`
179
+ keeps the API's title.
180
+ - `shard agents accounts` names every Codex window by its length, as the apps do: **Weekly**, **5-hour**, and **2-day**
181
+ or **90-minute** for other lengths (it read "Primary"/"Secondary" for anything but 5 hours and a week).
182
+ - `shard ./` starts from a shallow clone (`git clone --depth N`): the conversation's repository gets the same shallow
183
+ history.
184
+ - T3 Code ACP threads synchronize project files before each prompt and before reporting its completion. Remote edits, new files and deletions appear in T3’s Changes and checkpoints; local edits reach the next remote turn. Reopening retains the conversation’s sync baseline, including after a VM restore. Conflicting edits retain both copies using the existing project-sync rules. No idle file watcher is added.
185
+ - `shard move` no longer asks for `--this-worktree-only` in a repository the live twin has snapshotted: Shardflux's own `refs/shard/*` refs are not counted as local refs the move would leave behind.
186
+ - A conversation whose account setup cache cannot be mounted starts without a message in the terminal: setup caches in
187
+ the conversation's own workspace, as before, and the reason (API code, reason and request id) is a JSON line in
188
+ `setup-cache.log` of the config directory. `shard template` still reports `cache_scope`.
189
+ - The editor sign-in also starts as `shard --login`, the form ACP registry clients run (they replace `acp` with the sign-in method's arguments); T3 Code's `shard acp --login` is unchanged.
190
+ - Includes the desktop launch-card release: menu bar 0.8.3 and Linux desktop 0.1.8. Submitted prompts release the
191
+ launcher immediately and track startup independently in an overlapping card deck. Linux payload pins move to 0.1.8.
192
+ - `shard operations progress <id>` reports actual suspension phase/deadline and safe next action. `shard operations cancel <id>` requests pre-capture cancellation; `--wait --timeout 5m` waits for confirmed original-workspace recovery. Acceptance remains distinct from recovery; a capture that has started is refused. Uses SDK 0.26.0 in this same batch.
193
+
194
+ - **Breaking consent default:** `shard feedback` previews without sending; `--yes` submits only after review and explicit user authorization. Agent help and error nudges require user-directed reporting and preserve request/error IDs. Manual approved submissions, session fallback, validation, duplicate and rate-limit behavior remain supported.
195
+ - Machine and template saves show source size and an estimated duration, then queued/build state and phase updates immediately. With `--json`, progress events go to stderr and the final stdout document includes `preflight` and `phases`. Failures flush the latest counters even within the update throttle and retain `details.last_progress` plus build/recovery pointers. Older APIs emit a structured `save_started` event when build progress cannot be read. Missing final host reports preserve the last observed progress.
196
+ - Inspect separates `connections_ready` (legacy `ready`) from `machine_ready`. Failed saves, no saved version,
197
+ queue progress, older APIs and failed status checks stay visible. Unknown versions remain `null`; readiness
198
+ requires a positive saved version. Terminal onboarding names agent connections instead of claiming the whole
199
+ environment is ready. Conversations remain available while a machine is being set up.
200
+
201
+ - **Your cloud machine as your account has it, everywhere:** `shard machine setup --status` reads the machine from your
202
+ account, so it always agrees with `shard machine`, and `shard setup --inspect` carries the same row
203
+ (`onboarding.machine`) next to your agents. It is ready (the version in use), saving (your agent setting it up, or
204
+ the save with its place in the queue), not saved with the reason in one line ("Cloud machine not saved: it’s too
205
+ large · version 2 stays in use") and what to run (`Save again`: `shard machine save --wait`, or `Retry`: `shard
206
+ machine setup --from-this-computer`), or not set up yet. The menu bar, the Linux app and the terminal's first run
207
+ show it. `--json` adds `machine: {state, version, line, reason, error, progress, action}`; `state` keeps its four
208
+ values (saving reads as `running`) and `machine_version` is the version in use.
209
+ - `shard machine save` saves the machine VM that is there: a deleted one is skipped.
210
+ - **On Linux, Linux words:** the first run's steps name the launcher shortcut you set in the Shardflux app (Alt+Shift+Space
211
+ unless you changed it), and every line and help text says "this computer" and "your computer".
212
+ - **`shard move` follows where a session worked:** a session that began in another folder (such as Claude Desktop's
213
+ scratch folder) and went on in your repository is listed under the repository in `shard move --list` (and under the
214
+ folder it began in), `--last` picks it there, and `--path <repository>` moves it, with its working directories in
215
+ the repository moved to the VM's folder. A session's `cwd` is where most of its latest records are; `--json` adds
216
+ `cwds`, every folder it worked in.
217
+ - A move confirms its repository from structured transcript metadata, including records between the discovery head
218
+ and tail. Nested tool inputs and outputs cannot confirm another folder; path rewriting preserves them and signed
219
+ history. Session listing accepts whitespace in JSON records.
220
+ - The device helper also keeps its latest agent-config line ("Claude saved the skill deploy-checks in the cloud: it's on
221
+ this computer now") in `agent-config-notice.json` in the config folder, so the Linux app's top-bar panel shows it as
222
+ the Mac menu does (desktop-linux 0.1.8).
223
+ - Pins `@shardflux/desktop-linux-x64` and `@shardflux/desktop-linux-arm64` 0.1.8.
224
+ - **T3 Connect works in an account with more than one organization.** Every T3 sign-in (`shard setup --inspect
225
+ --t3-connect`, the onboarding and Settings, `shard agents open|new --in t3`) is scoped to an organization: `--project`
226
+ (id or slug), else a project of `--org`, else the API key's project, else the saved default project; the phone link
227
+ signs in for the workspace's own project. Before, a person in two organizations got 422 "project_id is required when
228
+ you belong to more than one organization" whatever they set.
229
+ Onboarding status uses the same person and project as sign-in, even when another organization is already
230
+ connected or no API key is saved. Its Connect command retains `--org`/`--project`; an explicit selection leaves
231
+ the default target's remembered status unchanged. A saved session or `SHARDFLUX_SESSION_TOKEN` starts sign-in.
232
+ - **A default from an organization you left is said plainly.** `shard whoami` warns when the API key or the saved
233
+ default organization belongs to an organization you are no longer in, with the fix (`shard orgs use <org>`, `shard
234
+ setup --org <org> --new-key`); `--json` adds `warnings` (`code`, `message`, `fix`). Account commands name the gone
235
+ default and list your organizations instead of only "pick one with --org", and `shard setup` says the saved key's
236
+ organization is gone.
237
+ - `whoami` also warns after switching defaults while a key belongs to another organization you still belong to.
238
+ Switch warnings distinguish a departed key from an accessible key elsewhere, retaining credentials until you
239
+ accept replacement. Environment keys take precedence; recovery names `unset SHARDFLUX_API_KEY`, and
240
+ `setup --json` includes an `api_key_environment_override` warning when the saved key is still overridden.
241
+ - `shard orgs use` and `shard projects use` say when the API key acts in another organization (workspace, agent and
242
+ usage commands use the key) and name the command that makes a key for the new default; in a terminal they offer to
243
+ make it (`[y/N]`). `--json` adds `api_key` and `warnings`.
244
+ - `shard usage --org <another organization>` reads it with your signed-in session (a project key answers 404 for any
245
+ other organization; `--org` also takes a slug when you are signed in). Without a session it says which organization
246
+ the key belongs to, with `shard auth login` and `shard setup --org <org> --new-key`.
247
+ - Organization usage keeps a real 404 from the key's own organization, and a key in `SHARDFLUX_API_KEY` names the
248
+ `unset SHARDFLUX_API_KEY` step after saving a replacement. Summary, estimate and series use the same membership
249
+ checks; workspace usage keeps its project-key scope.
250
+ - `shard setup` in more than one organization says how the choice is kept: the organization you pick becomes this
251
+ computer's default, with an API key for it, and `shard setup --org <org> --new-key` switches.
252
+ - T3 Connect inspections keep permanent workspace link errors and their remediation visible, without restarting links or replacing an approved sign-in. After freeing a T3 environment slot, explicitly open the project in T3 again to retry.
253
+ - Clarify machine save source selection and recovery: save from the machine VM, or explicitly select an existing
254
+ machine source with the SDK/MCP. A conversation or unmarked fork returns `filesystem_source_mismatch`; copy
255
+ intended changes into the machine VM before saving. Native VM access stays bound to its own workspace.
256
+ - `shard move --plan` reports registered worktree paths, transcript reference hits, file counts and bytes before
257
+ upload. `--preserve-all-worktrees` copies all local refs and registered worktrees, including ignored files, with
258
+ exact indices, staged/unstaged status and hash checks; Git location pointers and transcript path fields map to
259
+ the VM. The selected tree uses the conversation branch; original branches/HEADs stay in a durable, immutable
260
+ migration-time recovery archive. Recovery refuses nonempty folders. `--this-worktree-only` explicitly leaves
261
+ other trees local. Source files, indices, refs and unrelated sibling folders stay untouched.
262
+ - `shard update` keeps its npm prefix in the displayed install command. A permission failure offers an explicit user-directory install and executable path, leaving npm config, PATH and other packages unchanged; it no longer recommends sudo.
263
+ - Machine setup requires a completed successful VM command and a structured setup report before saving. A refused
264
+ agent-config copy stops setup instead of publishing a machine without that configuration. An explicit Claude
265
+ Code tool permission refusal stops without trying another agent; ordinary connectivity or agent failures can
266
+ still fall back.
267
+ - The setup agent receives the machine's actual disk grant and its limiting source before installing tools. It checks
268
+ available space and package sizes, uses small batches without recommended packages, and reports tools that do not
269
+ fit as skipped. It never changes your plan or disk caps.
270
+ - Agent-led setup stops an action refused by a permission system or auto-mode classifier and gives the user an
271
+ exact command plus a non-secret confirmation to resume. It never bypasses the refusal through permission
272
+ changes, scripts or alternate tools. `setup --guide --json` checks saved account state without printing a key;
273
+ an exit code or a saved key alone is not evidence that onboarding worked.
274
+
275
+ - **Start a project over from your machine** with `shard template delete`: the project template of this folder's
276
+ repository and its saved versions go, it is no longer rebuilt when your machine or the platform changes, and new
277
+ conversations start from your machine until setup after `shard ./` (or `shard template save`) saves a new one. VMs
278
+ running on it keep their files; builds still running for it are stopped. In a terminal it asks first (`[y/N]`, No
279
+ keeps it); elsewhere it needs `--yes`. It prints `template: deleted (3 saved versions); new conversations start from
280
+ your machine until setup saves a new one`, and `--json` the API's body (`template.versions`, `canceled_builds`).
281
+ Nothing saved for the repository is exit 3, `not_found` (`details.reason` `filesystem_not_found`).
282
+ - `shard template` says when a template no conversation, VM or save used for 30 days follows your machine on its next
283
+ use (`platform …@4, follows your machine on next use`): it is rebuilt when a conversation starts on it, and that
284
+ conversation's VM moves onto the rebuilt version at its next safe point.
285
+ - The agent-config loop follows activity: every 2 s while one of your conversations works or ended a turn in the last
286
+ 5 minutes, backing off to every 60 s otherwise, with one small request every 10 s that snaps it back when a
287
+ conversation starts working anywhere (staging: 1.1 s p50, 2.3 s max over 6 turns; idle, 9.7 requests a minute
288
+ instead of 54 with 0.20.0).
289
+ - **Your coding agent runs the setup; you only decide.** `shard setup --guide` (and `shard` in a coding agent's shell)
290
+ now tells the agent to do every step itself, ask one multiple-choice question at a time with the recommended answer
291
+ first, and keep each message to a sentence or two. It sets your cloud machine up from this computer by default (`shard
292
+ machine setup --from-this-computer`), asks where conversations open, and ends by opening your first conversation;
293
+ `--json` carries `rules` and each step's `choices`.
294
+ - **Secrets without your agent seeing them:** `shard secrets create NAME --ask` (and `rotate`) opens a one-time page on
295
+ this computer where you type the value; it goes straight to your project's secrets and the agent only sees that it
296
+ was saved. In a coding agent's shell this is the default when nothing is piped; on a terminal you get a hidden
297
+ prompt. `shard files write <key> <path> --ask` does the same for a secret file such as `~/.npmrc` on your machine.
298
+ `--json` prints `{"event":"open","url":…}` first; the page closes after one use or 10 minutes.
299
+ - **Claude sign-in from your coding agent:** `shard agents credentials login claude` runs in a coding agent's shell
300
+ (or with `--json`): it opens the claude.ai sign-in and a page for its code in your browser, then finishes by itself.
301
+ - **Conversations open in your app:** `shard agents targets --terminal <ghostty|iterm|terminal|wezterm|kitty|alacritty|warp>`
302
+ (`:tab` or `:window`) saves where terminal conversations open, and `agents targets --json` lists the terminals on
303
+ this computer (`terminals`, the one shard runs in as `current_terminal`). `shard agents open <ref> --in terminal`
304
+ opens a new tab in that app (Ghostty 1.3+, iTerm2, WezTerm, kitty, Warp; a window in Terminal and Alacritty) in the
305
+ project folder, and `shard ./` from a coding agent's shell opens the new conversation there. When the app can't be
306
+ driven it opens the next one and says why in one line.
307
+ - When a browser can't be opened, commands print the link to open instead (the opener's failure is detected).
308
+ - Installs desktop-linux 0.1.8 on Linux.
309
+ - **Mark your cloud conversations your way:** `shard settings --title-prefix <text|none|default>` sets the marker your
310
+ Claude conversations' titles start with in claude.ai and the Claude app (default `☁`: "☁ Fix login bug ·
311
+ todo-app"; `none` for no marker). `shard settings` shows it with where conversations open; `--json` too. New
312
+ conversations and threads you start on an existing computer carry it.
313
+
314
+ ## 0.20.0 (2026-10-12)
4
315
 
5
316
  - **A save waits in line instead of failing** when your plan's build slots are in use: `shard machine save` and `shard
6
317
  template save` print where the build is (`machine: saving version 5; queued behind 3 builds · about 40 s; …`), with