symbiot 0.44.1 → 0.46.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.
package/CHANGELOG.md ADDED
@@ -0,0 +1,458 @@
1
+ # Changelog
2
+
3
+ What each Symbiot release brought, newest first. When Approve bumps the version, it writes that release here from the tasks it approved, worded as release notes by your connected AI (or in the tasks' own words without one). The app shows the releases newer than yours under "What's new" when it offers an update, and once more after you update.
4
+
5
+ ## 0.46.0 — 2026-10-06
6
+
7
+ - **The Symbiot look on every part.** Whatever you open pools over the liquid as glass, with a slow silver edge: cards are glass, the main buttons chrome, the map's nodes small silver spheres.
8
+ - **Watch an agent work, as it works.** What it's doing right now, its own to-do list ticking off (with a progress ring), each step in plain words with how long it took, test results, the files it changed, its pace, its model, turns, tokens and cost, and finally its answer.
9
+ - **Update prompts show again.** Since 0.45.0 the "Update & restart" bar was hidden behind the liquid; it now sits on top, as a chrome bar at the top of the window.
10
+ - **Calm, readable droplets.** Droplets keep clear of each other, past where their metal would merge, so none of them flicker or shake their labels; when a screen can't hold them all, the least used go under "more" instead of crowding.
11
+ - **See Symbiot think.** Under each chat reply: what it did to answer (what it recalled, the links it looked up, that it matched how you talk, what it handed over or remembered).
12
+
13
+ ## 0.45.0 — 2026-10-06
14
+
15
+ - **The liquid.** Symbiot's home is now one surface of liquid silver that shapes itself to you, with no settings. Its droplets are what only you can do, what's new on what you watch, and the parts of the app, which pool open over it. Talk to it in the bar at the bottom; leave it alone and it rests as one orb.
16
+ - It learns how you work: what you open, in what order and at what time of day decides each part's size and distance (Fitts's law, Hick's law, entropy), and it only rearranges when it wakes from rest, so nothing moves under your hand.
17
+ - It matches how you talk: every chat and agent brief is told your style (short or long, casual, requests or questions, Afrikaans words kept as they are).
18
+ - It follows your system's colours, live: light or dark, high contrast, reduced transparency, forced colours, reduced motion, your accent colour, dimmer at night.
19
+ - WhatsApp lines that don't name their sender are no longer read as coming from the other person.
20
+ - Linked mail connectors reach agent runs (or you're told they aren't wired up), runs don't start again until the file a "👤 You" step names has changed, near-duplicate tasks are merged, and this changelog shows what's new when you update.
21
+
22
+ ## 0.44.1 — 2026-10-06
23
+
24
+ - Add a **Skip** button to each idea in the Agents tab, so you can turn down an idea you don't want and the next one moves up, without having to open the rest with "more ideas"
25
+ - Tasks whose work was approved as "changes without a task" come back on the next send: all seven in this round were already done in #93, with nothing ticked, so this run only checked and ticked them.
26
+
27
+ ## 0.44.0 — 2026-10-06
28
+
29
+ - Version bump only.
30
+
31
+ ## 0.43.1 — 2026-10-06
32
+
33
+ - Changed agents' questions to two options at a time, each saying what it changes for the project and the company, with the recommended one judged on evidence first.
34
+ - `symbiot watch chat <id> "question"`: a Dashboard card's chat from a terminal, so an agent can go over what's new with you too
35
+ - A 👤 step done in Settings (Allow command, a connector) changes the agent command, not a file in the repo, so the run waiting on it needs **Start it now**.
36
+ - Don't start an agent run when the files that the open "👤 You:" answers point to (here `.env`) haven't changed since the last run.
37
+ - Added a 💬 chat on each Dashboard card, to agree a reply with the agent before it drafts one.
38
+ - Show a repo's open questions in the Agents tab after the app restarts.
39
+ - `symbiot watch board --line`: one line like "2 emails · 1 WhatsApp message", for a status bar with no `jq`
40
+ - An "Open in WhatsApp" button on a WhatsApp reply that's been drafted.
41
+ - Whole page for Gmail too: scroll the list of mail inside the page and put the pieces together, so a whole inbox is one screen
42
+ - When an answer picks a "👤 You:" option, remind the user that the step is still theirs to do, and don't start the next run until the file it names has changed.
43
+
44
+ ## 0.43.0 — 2026-10-06
45
+
46
+ - TASKS.md lists two items twice in slightly different words: the webhook tunnel restart (Aug 03 and Aug 04) and setting `WA_WABA_ID` (templates and Flows).
47
+ - Connectors linked in Symbiot (mail, Drive) don't reach agent runs, because `--allowedTools` lists only `Bash(...)` entries.
48
+
49
+ ## 0.42.0 — 2026-10-06
50
+
51
+ - Changes approved without a task, in README.md, agents.mjs, headless.mjs, index.mjs, links.mjs, screens.mjs and 8 more.
52
+
53
+ ## 0.41.7 — 2026-10-06
54
+
55
+ - Changes approved without a task, in core.mjs.
56
+
57
+ ## 0.41.6 — 2026-10-05
58
+
59
+ - Don't start an agent run when `.env` and ANSWERS.md haven't changed since the last run that blocked on them.
60
+ - Connectors a user links in Symbiot (mail, Drive) never reach agent runs, because `--allowedTools` lists only `Bash(...)` entries.
61
+ - Tasks that were approved as merged or dropped (the duplicate `WA_WABA_ID` task, gosolr's own number) reappear when TASKS.md is regenerated.
62
+ - Add `mcp__claude_ai_Google_Drive__search_files` (and a mail connector, if there is one) to `--allowedTools` when a task asks the agent to check your messages.
63
+
64
+ ## 0.41.5 — 2026-10-05
65
+
66
+ - Map the whole page at once: one tall screenshot with every button, link and field on it, for a page that scrolls as a whole (not for Gmail, whose list scrolls inside the page)
67
+ - Make `symbiot app`'s Week tab button save to `weeks/` too, like the tray's "Write my week now" now does, so the two apps behave the same.
68
+ - `symbiot watch board`: the Dashboard's cards as JSON from a terminal, for an agent or a status bar
69
+ - Open the Dashboard first, instead of the Map, once you watch at least one page
70
+ - A "Seen" button on each Dashboard card that sets its count back to 0 without clearing what the other cards found
71
+ - Draft a reply on WhatsApp too: the agent types the reply into the chat's message box in Symbiot's hidden browser and leaves it unsent, the same Send guard as mail
72
+
73
+ ## 0.41.4 — 2026-10-05
74
+
75
+ - Added Scroll down to Map page, so the part of a site below the window gets mapped too.
76
+
77
+ ## 0.41.3 — 2026-10-05
78
+
79
+ - Added the Dashboard: one card each for your mail, WhatsApp and GitHub, with what's new on them.
80
+ - `symbiot watch draft <id>`: Draft a reply from a terminal too, for an email `symbiot watch new` lists, the same as the button
81
+ - Export a tiny `isAppRunningWeekly()` helper from the CLI, so the tray doesn't have to know about `/api/desktop` and the app token.
82
+ - Let `runWeekly()` in `desktop.mjs` skip its own notification (e.g. `runWeekly(produce, { notify: false })`), so symbiot-desktop can call it instead of copying the `weeks/` file format.
83
+ - Lint the page's own JavaScript too: `npm run lint` covers the modules, but the browser code inside ui.mjs is a string, so a name lost there is only caught when the smoke test happens to run that button
84
+ - An agent's suggestion is still cut at 300 characters (`parseQuestions` in agents.mjs), though a task now holds 1000, so a long idea added in one click arrives cut off.
85
+
86
+ ## 0.41.2 — 2026-10-05
87
+
88
+ - `symbiot phone pair <address> <code>` for Termux, to pair from the command line without the app window
89
+ - Lint in CI: an ESLint `no-undef` / `no-unused-vars` pass over the modules would catch a name lost in a move like the module split
90
+ - Drafts, the second half of the assistant you asked for: a "Draft a reply" button on a new email under Watching that hands it to your coding agent, which opens it in Gmail through Screens, writes a reply and leaves it…
91
+
92
+ ## 0.41.1 — 2026-10-05
93
+
94
+ - Lint in CI: an ESLint `no-undef` / `no-unused-vars` pass over the modules would catch a name lost in a move like this split (I ran one by hand here, outside the repo)
95
+ - Catch near-duplicate tasks, not just exact ones: #70, #72 and #81 each list the same task twice in slightly different words (a colon for a bracket, one clause more)
96
+
97
+ ## 0.41.0 — 2026-10-05
98
+
99
+ - Let Watch notifications reach your phone when the computer finds something, through the Symbiot app on the phone
100
+ - Put what's new from Watch into Standup: "3 emails waiting on you", next to your commits
101
+ - Watch GitHub too: map github.com/notifications and click Watch, so new review requests and failed CI runs reach you the same way
102
+ - ## Next steps 1. **Add the `v*` tag-protection rule from #71.** #77 and #78 made publishing hands-off, so an unprotected tag namespace is now the weak point.
103
+ - Reconcile the README and CONTRIBUTING with what actually ships: Android, Watch, email, auto-merge, agent Q&A and tag protection.
104
+ - Continue the ui.mjs split (#50) by pulling the server routes and the scan code out of index.mjs into their own modules, so each piece can be tested on its own.
105
+ - Review the batches of 'symbiot: N approved tasks' and 'changes approved without a task' commits (#64–#83) for half-finished or overlapping features (email tracking, Watch, Screens, proot history).
106
+ - Add tests for the core paths that auto-publish on every merge now exercises: git scan and repo-set selection, the week/standup/todo prompts with a stubbed AI, and the tasks.json/TASKS.md round-trip with auto-archive.
107
+ - Let a suggestion name its target repo, so Symbiot app ideas from a coral run go to the symbiot project's tasks, not coral's
108
+
109
+ ## 0.40.5 — 2026-10-05
110
+
111
+ - Fix Symbiot's `grantAgent()` (symbiot repo) so a rule already in `Bash(…)` form is kept as is and only bare commands get wrapped, so `Bash(npm install:*)` can't become `Bash(Bashnpm install:*:*)`
112
+ - Tag Symbiot's question options with 👤 You / 🤖 Agent so it's always clear who acts
113
+
114
+ ## 0.40.4 — 2026-10-05
115
+
116
+ - Added Watch: Symbiot checks the pages you've mapped, like your inbox, and notifies you of what's new.
117
+
118
+ ## 0.40.3 — 2026-10-05
119
+
120
+ - Read Claude Code's history inside proot distros too (`debian/root/.claude/projects`), so projects your agent worked on in Debian get their "agent" badge on the Map, as they do on a computer
121
+
122
+ ## 0.40.2 — 2026-10-05
123
+
124
+ - Don't offer a "Done" answer for a step that needs a release that hasn't published yet.
125
+ - Approve shouldn't add to a PR that can't merge any more.
126
+ - Keep the hidden browser open between actions for a few minutes, so an agent can type into a field and then press a separate button on the same page.
127
+ - Add Gmail under Settings → Trusted sites as `mail.google.com` (or `google.com` for all of Google): "gmail" opens gmail.com, which sends you on to mail.google.com, so trusting `gmail.com` alone wouldn't cover your inbox
128
+ - Map page on gmail: click Sign in, sign in to Google once in the window that opens, close it, then Map page again to see your inbox mapped
129
+
130
+ ## 0.40.1 — 2026-10-05
131
+
132
+ - Fixed an update opening a second copy of the app: it now restarts the one that's open.
133
+ - Release 0.39.0 after merging: on `main`, run `git pull && git tag v0.39.0 && git push origin --tags`.
134
+ - Tag releases automatically: a GitHub workflow that, when a merge to `main` changes `package.json`'s version, tags `v<version>` and publishes, so the manual tag step goes away.
135
+ - Split your three existing whole-desktop screenshots: open each in Screens and click "Split by display" (the one with the "Meta" region moves it onto eDP-1), then delete the whole ones.
136
+ - Added Map page: Symbiot opens a site in a hidden browser, takes its screenshot and marks its buttons, links and fields, with no clicking by hand.
137
+ - Save screenshots privately: split pieces, "each display" captures and loaded images are written readable by every user on the computer (0664), while the desktop's screenshot tool saves its own images private (0600).
138
+ - Added the Android app (APK), with Symbiot inside.
139
+ - Fixed the Android app so it installs and starts on a real phone.
140
+ - Attach the APK to each GitHub release from the publish workflow, so a phone can download the current one instead of copying it from this PC
141
+ - Try the Android app on your phone: copy `android/build/symbiot-0.39.1-aarch64.apk` (built from these changes) to it, install it, allow All files access, and note anything that doesn't work
142
+ - Fixed the Android app not finding your files and projects: it asks for All files access and reads your phone's storage.
143
+ - Try Symbiot in Termux on your phone (`pkg install nodejs git gh`, `npm install -g symbiot`, `symbiot app`) and note anything that doesn't work there
144
+ - Once the split screens look right in Screens, delete the backup of the three whole screenshots: `rm -r ~/.config/symbiot/screens-whole-backup`
145
+ - Pick a version bump when you approve this batch: it carries the phone fixes, and GitHub now has the signing key, so it would also be the first release with the APK attached.
146
+ - Pick a version bump when you approve this batch, so the phone fix reaches npm (and the first APK release).
147
+ - Keep the hidden browser open between actions for a few minutes, so an agent can type into a field and then press a separate button on the same page (today each press or type starts from the page's address again, so…
148
+
149
+ ## 0.39.1 — 2026-10-02
150
+
151
+ - Changes approved without a task, in .github/workflows/publish.yml.
152
+
153
+ ## 0.39.0 — 2026-10-02
154
+
155
+ - Added a capture for each display on its own, and Split by display for a screenshot of the whole desktop.
156
+ - Release 0.38.0 after merging: on `main`, run `git pull && git tag v0.38.0 && git push origin --tags`.
157
+ - Auto-bump the version on Approve: this batch shows a warning on the review card when `main` is past the last `v*` tag (and says which tag to push if the changes bump `package.json`).
158
+
159
+ ## 0.38.0 — 2026-10-02
160
+
161
+ - Couldn't take a screenshot (tried cosmic-screenshot, grim).
162
+ - Bump the version in every approved PR that changes the app (or warn on Approve when `main` is ahead of the last `v*` tag), so merged features don't sit unreleased like these did.
163
+ - Screens, next slice: "Click here" on Windows (PowerShell `SetCursorPos` + `mouse_event`), so clicking works on all three platforms.
164
+ - Adding the same task twice makes a duplicate (this brief had both tasks listed twice).
165
+
166
+ ## 0.37.0 — 2026-10-02
167
+
168
+ - Version bump only.
169
+
170
+ ## 0.36.1 — 2026-10-02
171
+
172
+ - fix: QUESTIONS.md preamble list showed up as fake questions
173
+
174
+ ## 0.36.0 — 2026-10-02
175
+
176
+ - agents: grant a blocked agent a tool/folder from Settings (no command surgery)
177
+
178
+ ## 0.35.0 — 2026-10-02
179
+
180
+ - Let Approve ship uncommitted changes that have no ticked task behind them (for example "Approve changes without a task"), so work like the 0.34.0 preset change can't get stuck again.
181
+ - Give the Codex, Gemini and Aider presets the same "can run the tests" treatment.
182
+ - Give the "Orca IDE: run Claude in a tab" preset the same `--allowedTools` rules, so runs started that way can test their own work too.
183
+ - Run `npm test` before approving this batch.
184
+ - Move the README's Development, Releasing and Config sections into CONTRIBUTING.md to shorten the README further.
185
+ - Run `npm test` before approving this batch. test/app.mjs, the smoke and fixture additions, and the grouped preset chips in Settings were all written without being run.
186
+ - Make the Claude Code handoff preset allow running the repo's tests (`--allowedTools "Bash(npm test:*)"`), so unattended runs can check their own work instead of leaving it unrun.
187
+ - Run `npm test` locally before approving this batch.
188
+ - Consider splitting the large single-file app or embedded UI into a few modules, so changes stop breaking unrelated views.
189
+ - Don't start a handoff in a folder where an agent is already running (two identical runs started on this repo, 6 seconds apart, in an earlier round)
190
+ - Disable the Send to repos button until its handoffs have started, so a double click can't send twice
191
+ - Don't rewrite a repo's TASKS.md while an agent is still running there; hold the new tasks until it finishes, so a run doesn't see its task list change under it
192
+
193
+ ## 0.34.0 — 2026-10-02
194
+
195
+ - Audit the command and feature surface (handoff presets, mail, folders, drift --ci) and either cut or clearly mark as experimental anything you don't use weekly.
196
+ - Stop the 'sync main to published X' commits by tagging releases from main only, so main and npm cannot diverge.
197
+ - Added ideas and options from every agent, not only Claude: they show in the Agents tab, ready to add as tasks.
198
+ - Added Email (experimental): Week and Standup can include the mail you sent, read from your desktop mail app's files, with no API or password.
199
+ - Add a few fixture-based tests for the risky stateful flows: review→approve→ship (including the .symbiot gitignore case), single-instance reuse, and mail ingestion.
200
+ - Add smoke tests that catch the regressions you have already hit: the installed bin actually executes, embedded app JS parses, every app endpoint answers with the right method, and the update check does not loop.
201
+
202
+ ## 0.33.0 — 2026-10-02
203
+
204
+ - Agent questions/ideas: the handoff brief tells any agent to write decisions it needs + ideas to .symbiot/QUESTIONS.md; the Agents tab shows up to 5 questions with options + answer boxes and a '+ task' per idea.
205
+ - Email without an API (mail.mjs): reads a desktop mail app's Sent folder (Thunderbird/Apple Mail/Evolution/KMail/Maildir) or an exported .mbox — HEADERS ONLY (date/to/subject), Sent only, OFF by default (Settings →…
206
+ - Correctly did NOT do the ui/ split (couldn't verify without running tests).
207
+
208
+ ## 0.32.0 — 2026-10-01
209
+
210
+ - Version bump only.
211
+
212
+ ## 0.31.0 — 2026-10-01
213
+
214
+ - Changes approved without a task, in README.md, index.mjs, test/smoke.mjs, ui.mjs.
215
+
216
+ ## 0.30.0 — 2026-10-01
217
+
218
+ - Changes approved without a task, in index.mjs, ui.mjs.
219
+
220
+ ## 0.29.0 — 2026-10-01
221
+
222
+ - folders: Overview & suggestions
223
+
224
+ ## 0.28.4 — 2026-10-01
225
+
226
+ - fix: add-task needs a repo + visibility
227
+
228
+ ## 0.28.3 — 2026-10-01
229
+
230
+ - fix: Approve/ship 'git add failed: .symbiot ignored'
231
+
232
+ ## 0.28.2 — 2026-10-01
233
+
234
+ - fix: in-app update loop
235
+
236
+ ## 0.28.1 — 2026-10-01
237
+
238
+ - refactor: split app UI into ui.mjs
239
+
240
+ ## 0.28.0 — 2026-10-01
241
+
242
+ - Changes approved without a task, in .github/workflows/publish.yml, test/fixtures.mjs.
243
+
244
+ ## 0.27.2 — 2026-10-01
245
+
246
+ - Version bump only.
247
+
248
+ ## 0.27.1 — 2026-10-01
249
+
250
+ - fix: Map AI review summary disappeared
251
+
252
+ ## 0.27.0 — 2026-10-01
253
+
254
+ - Review loop: pendingReview/approveRepo/sendBack/shipChanges — after an agent runs, its ticked tasks land in a Review list showing the working diff; Approve branches+commits+pushes+opens a PR (gh), Send back reopens the…
255
+ - agentChanges(): the Agents tab shows 'What it did · N files · +x/-y' + commits, excluding .symbiot/.
256
+ - semverGt(): update bar only shows when npm is strictly newer (fixes a false 'update' when a local build runs ahead of npm).
257
+ - New test/install.mjs (bin-symlink + npm-pack install); fixtures+smoke expanded. gitignore .symbiot/ scratch.
258
+
259
+ ## 0.26.0 — 2026-10-01
260
+
261
+ - orca handoff: wait for graph-ready before terminal create
262
+
263
+ ## 0.25.0 — 2026-10-01
264
+
265
+ - No version anywhere in the UI. Added a version badge next to the brand (fed by /api/ping's version field).
266
+ - The server cached npm's 'latest' at startup and only re-checked every 10 min, so a version published after launch stayed invisible until then.
267
+
268
+ ## 0.24.0 — 2026-10-01
269
+
270
+ - Both Orca presets now lead with '<orca> open; ' (full orca-ide path, never bare 'orca' — that's @blade-ai/orca, a different tool on PATH).
271
+ - migrateOrcaCmd(): a command saved BEFORE this (no open step) is patched in place on next use — inserts '<orca> open; ' before the first 'repo add', idempotent, non-orca commands untouched.
272
+
273
+ ## 0.23.0 — 2026-10-01
274
+
275
+ - Stable URL: the app binds a fixed port (7391, SYMBIOT_PORT/appPort to override; random fallback if busy) and a persisted token, so the URL survives a restart.
276
+ - Heartbeat: the page polls /api/ping every 4s.
277
+ - /api/ping reports {version, started, latest}; a background check polls npm every 10min for the newest symbiot.
278
+ - Update bar: when a newer version is on npm, a banner offers 'Update & restart'.
279
+
280
+ ## 0.22.0 — 2026-10-01
281
+
282
+ - hasCmd(): command -v on posix, 'where' on Windows.
283
+ - Orca IDE found across OSes: known Linux/mac/Windows paths + a bounded, cached find fallback (so a Mac picks it up).
284
+ - Orca preset no longer hardcodes Claude: adds 'Orca — open repo (use your Orca agent)' (generic, for GPT etc.) alongside 'run Claude in a tab'.
285
+ - macOS editors detected as .app bundles -> 'open -a "App" {dir}' when the CLI isn't on PATH.
286
+ - More agent CLIs: codex (OpenAI --full-auto), gemini, plus claude/aider/ cursor-agent.
287
+
288
+ ## 0.21.0 — 2026-10-01
289
+
290
+ - week/standup/todo use the Map's repo set
291
+
292
+ ## 0.20.0 — 2026-10-01
293
+
294
+ - map: non-git project folders
295
+
296
+ ## 0.19.0 — 2026-10-01
297
+
298
+ - scan: configurable folders, inside or outside home
299
+
300
+ ## 0.18.0 — 2026-10-01
301
+
302
+ - handoff: make-changes preset + wider repo scan
303
+
304
+ ## 0.17.0 — 2026-10-01
305
+
306
+ - Filter the Tasks list by Type and Repo (clickable chips); Send to repos respects the active filter, so filtering IS selecting what to send.
307
+ - Auto-archive: a Sync (runs on Tasks-tab open) reads each repo's .symbiot/TASKS.md, marks done any task the AGENT checked off (- [x]), then archives every done task — completed work clears itself out.
308
+ - Clarify the left checkbox (= mark done/auto-archive, NOT send) with a note + tooltip, since it was mistaken for a send-selector.
309
+ - Ollama: a model that isn't pulled now returns a clear 'run setup-local --model X' message instead of a cryptic error.
310
+
311
+ ## 0.16.0 — 2026-10-01
312
+
313
+ - one-command local-model setup, OS-aware
314
+
315
+ ## 0.15.0 — 2026-10-01
316
+
317
+ - map: scan agents + AI into the initial picture
318
+
319
+ ## 0.14.1 — 2026-10-01
320
+
321
+ - handoff: Orca IDE preset
322
+
323
+ ## 0.14.0 — 2026-09-30
324
+
325
+ - agents: live activity view — watch the handoff work
326
+
327
+ ## 0.13.0 — 2026-09-30
328
+
329
+ - handoff: generic settings-based agent command
330
+
331
+ ## 0.12.0 — 2026-09-30
332
+
333
+ - Batch: tasks were a flat, mixed pile of near-identical items.
334
+ - Open in IDE: writing the file still left you to open it.
335
+
336
+ ## 0.11.0 — 2026-09-30
337
+
338
+ - review: restraint verdict — gauge against over-engineering
339
+
340
+ ## 0.10.3 — 2026-09-30
341
+
342
+ - app: suppress Chrome first-run ToS prompt
343
+
344
+ ## 0.10.2 — 2026-09-30
345
+
346
+ - fix: Send to repos GET/POST mismatch + endpoint smoke test
347
+
348
+ ## 0.10.1 — 2026-09-30
349
+
350
+ - push: fast + clear feedback
351
+
352
+ ## 0.10.0 — 2026-09-30
353
+
354
+ - push tasks to the coding agent
355
+
356
+ ## 0.9.4 — 2026-09-30
357
+
358
+ - fix: app UI dead since 0.6.4 — embedded JS syntax error
359
+
360
+ ## 0.9.3 — 2026-09-30
361
+
362
+ - fix: installed CLI ran nothing (bin symlink guard)
363
+
364
+ ## 0.9.2 — 2026-09-30
365
+
366
+ - drift --ci: quote GitHub's exact not-running reason
367
+
368
+ ## 0.9.1 — 2026-09-30
369
+
370
+ - Off-default PR merges: for each, diff its head vs merge-base and check whether its ADDED files exist on the default branch.
371
+ - CI (--ci): deterministic not-running signal — conclusion=failure AND every job has 0 steps => 'CI is NOT running (billing/spending-limit), not failing tests'; otherwise a real failure.
372
+ - Staleness loud: show FETCH_HEAD age; tag behind/upstream lines '(as of Nd ago)' when >1 day.
373
+ - F7 fixture now asserts the never-landed signal.
374
+
375
+ ## 0.9.0 — 2026-09-30
376
+
377
+ - drift report: what's out of sync/at risk across repos
378
+
379
+ ## 0.8.1 — 2026-09-30
380
+
381
+ - test: accuracy regression fixtures
382
+
383
+ ## 0.8.0 — 2026-09-30
384
+
385
+ - Identity: match ALL of your author identities (per-repo + global email, GitHub noreply login, matching name), fallback to everyone if <10% of an active repo matches.
386
+ - Stale checkout: detect when the working tree equals an ancestor of HEAD (or is mostly deletions) and report 'STALE, not new work' instead of 'N uncommitted' — and never advise committing it (would revert history).
387
+ - Worktrees: group by git-common-dir, review only the freshest checkout.
388
+ - README: send its last-changed date + commits-ago; tell the model recent commits beat the README.
389
+ - Repo shape: send a folder tree with counts + manifests + docs, not the first 60 filenames alphabetically.
390
+ - House rules: read CLAUDE.md/AGENTS.md/CONTRIBUTING.md + ~/.config/symbiot/ rules.md as 'conventions, do not advise against' (kills the .env advice).
391
+ - Footer on every report: version, path, branch, commits matched vs total, README age, working-tree state — show what was read.
392
+ - Privacy wording in README corrected to what's actually sent.
393
+
394
+ ## 0.7.1 — 2026-09-30
395
+
396
+ - fix: map scan hang
397
+
398
+ ## 0.7.0 — 2026-09-30
399
+
400
+ - hardware-based model recommendations
401
+
402
+ ## 0.6.4 — 2026-09-30
403
+
404
+ - map: tick ideas into a persistent Tasks list
405
+
406
+ ## 0.6.3 — 2026-09-30
407
+
408
+ - map: AI repo review under the graph
409
+
410
+ ## 0.6.2 — 2026-09-30
411
+
412
+ - Drag a node to reposition it (pointerdown on node = move; on empty = pan).
413
+ - Bottom summary bar: hover shows a node's facts (repo path, branch, last commit, file count, languages, tools); click still opens the detail panel.
414
+ - Prove it's the user's machine: /api/map stats now include the scanned base path and total file count; each repo node carries branch, last-commit date, file count and full path.
415
+
416
+ ## 0.6.1 — 2026-09-30
417
+
418
+ - map: fix node click
419
+
420
+ ## 0.6.0 — 2026-09-30
421
+
422
+ - map: interactive graph + per-repo suggestions
423
+
424
+ ## 0.5.0 — 2026-09-30
425
+
426
+ - app: Map view — local node graph of your work
427
+
428
+ ## 0.4.1 — 2026-09-30
429
+
430
+ - app: cross-platform chrome-less window
431
+
432
+ ## 0.4.0 — 2026-09-30
433
+
434
+ - symbiot app: visual UI in a chrome-less browser window
435
+
436
+ ## 0.3.0 — 2026-09-30
437
+
438
+ - symbiot login is now a provider picker (1-4) or --provider <name>.
439
+ - Providers: anthropic (SDK), openai / gemini / ollama via fetch — no new deps.
440
+ - Per-provider default models; SYMBIOT_MODEL overrides any of them.
441
+ - Auto-detect env keys in order: ANTHROPIC_* -> OPENAI_API_KEY -> GEMINI/GOOGLE.
442
+ - Config gains { provider, <provider>: { apiKey, model } }; legacy { apiKey } still resolves as Claude (backward compatible).
443
+ - Each provider validated against its own endpoint at login; local Ollama needs no key and keeps all data on the machine. whoami shows provider + model.
444
+
445
+ ## 0.2.0 — 2026-09-30
446
+
447
+ - symbiot login: paste a key once, validated against the API, saved to ~/.config/symbiot/config.json (0600).
448
+ - Auto-detect credentials: ANTHROPIC_API_KEY / ANTHROPIC_AUTH_TOKEN env, saved login, or an 'ant auth login' profile. symbiot whoami shows which.
449
+ - Replace the dead 'ant auth login' hint with a real setup path.
450
+ - Default model -> claude-opus-5-5 (newer, cheaper); effort:low for this summary workload; SYMBIOT_MODEL documented with a cheaper option.
451
+
452
+ ## 0.1.1 — 2026-09-30
453
+
454
+ - Version bump only.
455
+
456
+ ## 0.1.0 — 2026-09-30
457
+
458
+ - symbiot — your week, written from your real work
package/README.md CHANGED
@@ -97,6 +97,9 @@ minutes (and whenever you come back to the window); the version you're on is sho
97
97
  next to the name. When there's a newer one, **Update & restart** installs that exact
98
98
  version, relaunches the app on the same address, and the open window reloads itself
99
99
  onto it. Restart `symbiot app` yourself and the open window reconnects the same way.
100
+ **What's new** on that bar lists what the update brings (read from the new
101
+ version's `CHANGELOG.md` on npm), and after an update the app shows once what came
102
+ with it, until you click **Got it**.
100
103
 
101
104
  The app listens on port **7391** so its address survives restarts; set
102
105
  `SYMBIOT_PORT` to use another. **One app at a time:** running `symbiot app` while
@@ -269,6 +272,13 @@ size of the uncommitted change and a **Show diff** button. For each repo:
269
272
  required checks pass. It needs "Allow auto-merge" in the repo's GitHub
270
273
  settings; without it, the card says so.
271
274
 
275
+ When Approve bumps the version and the repo keeps a `CHANGELOG.md`, it writes the
276
+ release there too ("## 0.45.0 — 2026-10-06" and what was approved), in the same
277
+ commit. With an AI connected, it words each approved task as a short release note
278
+ ("Added…", "Fixed…") from the task and its diff, since everyone who updates reads
279
+ these; the commit and PR keep the task's own words. With no AI, or no usable
280
+ answer within a minute, the changelog keeps the task's own words too.
281
+
272
282
  Tasks waiting for review aren't re-sent to the agent, and while the repo's agent
273
283
  is still running, Approve waits ("agent still working"), so half-done work isn't
274
284
  committed.
@@ -343,6 +353,14 @@ claude.ai isn't added. Settings → Handoff lists them, and says so when your
343
353
  command isn't Claude and its runs can't use them. Claude in Orca's tab asks you
344
354
  before using one.
345
355
 
356
+ A site you link in Symbiot (Link your work: Gmail, Drive…) only signs Symbiot's own
357
+ browser in. It isn't a Claude connector, so runs get no tools for it until you
358
+ connect the same service in claude.ai → Settings → Connectors. That's why Drive,
359
+ linked in both, reached runs and Gmail, linked only in Symbiot, didn't. Settings →
360
+ Handoff says which of your linked sites aren't wired up, and each run's `TASKS.md`
361
+ says which connectors it has and which it doesn't, so it doesn't claim to have
362
+ checked your mail.
363
+
346
364
  Each run is logged to `.symbiot/agent.log` in the repo and shown live in the
347
365
  **Agents** tab. The command is saved as `agentCmd` in
348
366
  `~/.config/symbiot/config.json` — it's your command, Symbiot only fills in
@@ -414,7 +432,11 @@ names a file in backticks (`` `.env` ``), the agent starts by itself once that
414
432
  file changes, while the app runs. A step in Settings (**Allow command**, a
415
433
  connector) changes the agent command rather than a file, so a changed agent
416
434
  command counts as the step being done too. Otherwise **Start it now** on that
417
- folder's block starts it once you've done the step.
435
+ folder's block starts it once you've done the step. An answer in your own words
436
+ that says to wait ("don't start another run until it's in", "hold off until I've
437
+ added it", "not yet") is your step too: it waits on the file the question's 👤
438
+ option named. A send in the meantime, or another lane's result coming back,
439
+ doesn't start a run past it; the run starts by itself once the file changes.
418
440
 
419
441
  **A run that stopped on questions isn't repeated for nothing.** When a run ends
420
442
  having asked questions you haven't answered, with tasks still unticked, Symbiot
@@ -451,6 +473,34 @@ repo), keyed by repo path or folder name, that prints the deployed commit sha:
451
473
  `{ "/path/to/repo": "ssh prod cat ~/app/.deployed-sha" }`. Also the **Drift** tab
452
474
  in the app.
453
475
 
476
+ ## The liquid: a home that shapes itself to you
477
+
478
+ `symbiot app` opens on one surface of liquid silver. Its droplets are what only
479
+ you can do (an Approve waiting, an agent's question to you), what's new on what
480
+ you watch, and the parts of the app. Open a droplet and that part pools open over
481
+ the liquid; **Sink back** (or Esc) returns it. Talk to it in the bar at the bottom:
482
+ "open tasks" opens Tasks, anything else goes to the same Symbiot as every chat.
483
+ Leave it alone and it rests as one orb. There are no settings: it adapts to you.
484
+
485
+ - **How you work** (`adapt.mjs`). Use decays with a 3-day half-life; what you open
486
+ next comes from a Markov chain (with a Dirichlet prior, so a few moves can't
487
+ swing it) and your hour of day. The more predictable you are (low Shannon
488
+ entropy), the more it adapts. Sizes follow Fitts's law under a fixed amount of
489
+ liquid (area ∝ how likely you are to open it); only the few that matter show
490
+ (Hick–Hyman), the rest under **more**. It rearranges only when it wakes from
491
+ rest and the gain is worth it (hysteresis), and nothing changes its angle, so
492
+ things stay where your hand expects them. Talking more than clicking grows the
493
+ talk bar; a touch screen gets finger-sized targets.
494
+ - **How you talk.** What you type into Symbiot's chats becomes a style profile
495
+ (length, casing, punctuation, emoji, requests vs questions, Afrikaans), and
496
+ every chat and agent brief is told to match it, without copying typos.
497
+ - **Your colours,** from your system, live: light or dark, high contrast, reduced
498
+ transparency, forced colours, reduced motion, your accent colour, and dimmer
499
+ at night.
500
+
501
+ Everything it learns stays on this computer: `adapt.json` and `mind.json` in
502
+ Symbiot's config folder, readable by you only.
503
+
454
504
  ## Link your work
455
505
 
456
506
  Settings → **Link your work** has one button per standard work site: Gmail,
@@ -606,7 +656,9 @@ instead of hanging. The CLI shows scan progress on one line as it goes.
606
656
  the README and any `CLAUDE.md`/`AGENTS.md` conventions. With email on, it also
607
657
  sends the subjects and recipient names of mail you sent. When you ask about a
608
658
  task (💬) the agent has finished, it sends the first 6 KB of the agent's diff,
609
- which can include a new file's contents. Standup sends up to 10 of what's new
659
+ which can include a new file's contents. An Approve that bumps the version of
660
+ a repo with a `CHANGELOG.md` sends the approved tasks and the first 30 KB of
661
+ their diff, to word the release notes. Standup sends up to 10 of what's new
610
662
  on each page you [Watch](#screens-blueprints-for-screen-automation) since
611
663
  yesterday, and the brief (if you switch it on) sends each batch of it: for
612
664
  Gmail, that's the sender, subject and one-line preview. Otherwise it does
@@ -830,6 +882,15 @@ text of the notification. The AI is sent what the page lists for each new item
830
882
  (for Gmail, the sender, subject and the one-line preview), and nothing at all
831
883
  leaves your computer with a local Ollama model. It's off until you tick it.
832
884
 
885
+ **WhatsApp: only unread messages need you.** A chat list's preview doesn't say who
886
+ wrote the last message (WhatsApp writes "You:" only in groups), and a chat moves to
887
+ the top for what you send too. So Symbiot reads each chat's unread badge and the
888
+ ticks on what you sent: a chat with unread messages is from them; ticks, "You:" or
889
+ "(You)" mean it's yours; anything else is unknown, never assumed to be theirs. Only
890
+ chats with unread messages from them count on the Dashboard and in Standup, get a
891
+ notification and a brief, and the brief and the card's chat are told who each one
892
+ is from.
893
+
833
894
  **Draft a reply.** A new email under Watching has **Draft a reply**. It hands the
834
895
  email to your coding agent (the command in Settings → Handoff), which opens it in
835
896
  your inbox through Screens, reads it, writes a reply and leaves it in Drafts, for