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 +458 -0
- package/README.md +63 -2
- package/adapt.mjs +222 -0
- package/agents.mjs +80 -11
- package/core.mjs +18 -1
- package/headless.mjs +8 -0
- package/home.mjs +74 -0
- package/lanes.mjs +8 -4
- package/mind.mjs +17 -4
- package/package.json +6 -2
- package/server.mjs +76 -6
- package/tasks.mjs +57 -7
- package/ui.mjs +349 -15
- package/watch.mjs +48 -19
- package/work.mjs +113 -0
- package/writeups.mjs +33 -3
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.
|
|
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
|