toyon 0.14.0 → 0.16.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/README.md +1 -1
- package/dist/CHANGELOG.md +629 -0
- package/dist/bridge.js +1 -1
- package/dist/cli.js +41 -22
- package/dist/daemon.js +1233 -971
- package/dist/shell/assets/{Editor-Gzhl3Oqu.js → Editor-BATywBIx.js} +3 -3
- package/dist/shell/assets/{XTerm-D6TL52yQ.js → XTerm-So8-Vafj.js} +1 -1
- package/dist/shell/assets/{cssMode-BfNm0a39.js → cssMode-DlHcrkXj.js} +1 -1
- package/dist/shell/assets/{freemarker2-DhiwR6KJ.js → freemarker2-D3xOnVxc.js} +1 -1
- package/dist/shell/assets/{grammar-thv9InXF.js → grammar-RZJ5oG33.js} +1 -1
- package/dist/shell/assets/{handlebars-BbkhCZXb.js → handlebars-UbIG7080.js} +1 -1
- package/dist/shell/assets/{html-yzhYlR33.js → html-D92eLK6U.js} +1 -1
- package/dist/shell/assets/{htmlMode-DPICAUY8.js → htmlMode-DsZIJzoj.js} +1 -1
- package/dist/shell/assets/index-BvYzBRq_.css +1 -0
- package/dist/shell/assets/index-CHQwm2uN.js +268 -0
- package/dist/shell/assets/{javascript-D9eBjR4g.js → javascript-DUkgFtV2.js} +1 -1
- package/dist/shell/assets/{jsonMode-cNulMi5B.js → jsonMode-BiIooPg9.js} +1 -1
- package/dist/shell/assets/{liquid-C_SKIx1n.js → liquid-DFFjZ5TH.js} +1 -1
- package/dist/shell/assets/{lspLanguageFeatures-DNU8BRHj.js → lspLanguageFeatures-C7Ug4qkg.js} +1 -1
- package/dist/shell/assets/{mdx-Bt4opbQO.js → mdx-DdjSgAuG.js} +1 -1
- package/dist/shell/assets/{python-Crb-EuXe.js → python-DPUF4OK9.js} +1 -1
- package/dist/shell/assets/{razor-D3BlkbYO.js → razor-IRYJ0pOA.js} +1 -1
- package/dist/shell/assets/{tsMode-BYuAS95U.js → tsMode-CljE7MPO.js} +1 -1
- package/dist/shell/assets/{xml-G5xafDqw.js → xml-D8Zv3Gd0.js} +1 -1
- package/dist/shell/assets/{yaml-CRp1x3nR.js → yaml-Dxx9PL0B.js} +1 -1
- package/dist/shell/index.html +2 -2
- package/package.json +1 -1
- package/dist/shell/assets/index-BYBd8f7P.css +0 -1
- package/dist/shell/assets/index-DJBEbneL.js +0 -267
|
@@ -0,0 +1,629 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
What changed in each release of Toyon, newest first.
|
|
4
|
+
|
|
5
|
+
## 0.16.0 (2026-10-18)
|
|
6
|
+
|
|
7
|
+
Streamed replies are written to the transcript a few characters at a time instead of a line at a time, the plan card follows the file Claude Code keeps itself, and the checks and preview in the PR line are links.
|
|
8
|
+
|
|
9
|
+
### New
|
|
10
|
+
- In the composer's PR line, "checks running", "checks failed" and "preview up" are links: checks open the pull request's checks tab and the preview opens the branch on its host. A right-click offers to open or copy the link. Under automerge the line says "when checks pass" while checks run and carries no link.
|
|
11
|
+
- A sent attachment's menu can reveal the copy Toyon kept in Finder, or copy its path, in archived chats too.
|
|
12
|
+
- The editor header has a copy button beside reveal that puts the file's full path on the clipboard. It is hidden for a loose file dropped in from outside the worktree.
|
|
13
|
+
- In the full view of an attachment, the left and right arrow keys step to the previous or next attachment of the same message, with a position count beside the close button. Closing returns focus to the chip you ended on.
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Text streamed by the agent is written to the transcript a few characters a frame instead of a line at a time, so a pinned transcript scrolls smoothly rather than jumping a line per repaint. A reply the agent hands over whole, as after a tool call, still shows at once.
|
|
17
|
+
- The plan card reads the plan file Claude Code keeps itself, in a folder in the worktree that git ignores, so a plan rejected and revised no longer shows a stale copy. An agent that keeps no file still gets Toyon's numbered copy. The plan row in the composer is named by the plan's first heading and follows rewrites; the file name stays in its tooltip and menu.
|
|
18
|
+
- An agent that looked unavailable is checked again whenever the composer or its settings page shows it, or when the window regains focus, so signing in or finishing an install clears the warning without a restart. Before, it was checked once at boot.
|
|
19
|
+
- Once a landing has merged a pull request, the row drops the PR as soon as new work starts over it; undoing that work brings it back with its link.
|
|
20
|
+
- The preview threw row and its fix press are gone. What the page threw still rides behind your next message, so the agent sees it there.
|
|
21
|
+
- The release notes open in the same document view as the editor's markdown preview, with the same type, a jump list of headings, find and select-all.
|
|
22
|
+
|
|
23
|
+
### Fixed
|
|
24
|
+
- In the installed app, a press on the top bar's blank strip closes an open address list or menu, instead of only dragging the window.
|
|
25
|
+
- A preview that reopened after its worktree slept, or after the proxy restarted, came back at the root. It now returns to the page it was on, with its query and hash.
|
|
26
|
+
- The element picker's outline draws above the page's own popovers and menus, which could hide it.
|
|
27
|
+
- In the address field above the preview, enter on a cleared field goes to the root instead of reloading the page, and the key hint says so while the field is empty.
|
|
28
|
+
- The typed row in the address list no longer repeats its path as a guessed name, and a path ending in a query no longer gets a garbled page name.
|
|
29
|
+
- A second message sent while a landing's commit was still running took the sending slot from the first, so the two drew out of order. The placeholder now holds its place behind queued messages.
|
|
30
|
+
- Text in the composer, the question card and the commit box sits exactly in line with the transcript, so an answer no longer jumps sideways by a couple of pixels as it goes through.
|
|
31
|
+
|
|
32
|
+
## 0.15.0 (2026-10-15)
|
|
33
|
+
|
|
34
|
+
A row from another project that is waiting on you now shows on the rail in front of you, files dropped on the rail land in a worktree's composer, and a tool row that touched a file grows an eye that opens it.
|
|
35
|
+
|
|
36
|
+
### New
|
|
37
|
+
- A row from another project joins the rail while its agent is waiting on you, or while a turn there finished unseen. It stays while you read it, so answering or clearing it does not pull it away. Before, a blocked agent in another project stayed out of sight until you opened the switcher.
|
|
38
|
+
- Dragging files from your desktop over the rail unfurls it and lights the row under the pointer, and a short rest on a row switches to it. Dropping puts the files in that worktree's composer; a drop on the lead row opens a new draft with them.
|
|
39
|
+
- A tool row that reads or writes a file carries an eye button that opens it: the diff for an edit, otherwise the file, with markdown rendered first. It appears once the tool call has returned, so it never points at a file that does not exist yet.
|
|
40
|
+
- The changes tab shows a preview button when a pull request has a deploy preview, read from its status checks (Amplify, Netlify) or from its newest successful deployment (Vercel, Cloudflare Pages, Render). The PR line in the composer and on the rail card ends with "preview up". A merged or closed PR carries none.
|
|
41
|
+
- After Toyon updates itself, a chip in the top bar opens what changed, in the centre, as these notes.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
- Keyboard focus shows as a rounded ring in the accent colour on every control, row and link, kept inside the row's band so it never crosses a bubble edge or the next row.
|
|
45
|
+
- The commit subject, body and recap are written while the check still runs, so the commit box fills in sooner, and a failed check keeps the message on the row.
|
|
46
|
+
- A first message on the warm row where new work is typed starts the row at once and the git work follows: the row says checking out and then copying dependencies, and the chat log says it is waiting for the agent when the start takes a while. Lands and branch writes no longer wait on a checkout, so a large project does not hold them up. If the start fails, the message returns to the box unsent.
|
|
47
|
+
- Open menus no longer offer Zed, VS Code or Cursor. A file outside the worktree gets an open row that reads it in the editor pane, every menu keeps reveal in Finder, and reveal works on any path, including a backticked absolute path in the chat. The editor pane's "open in" dropdown is now a reveal button.
|
|
48
|
+
- The editor pane hides the diff toggle when a file reads the same on both sides, not only when it is new to the branch. Typing into such a file brings the toggle back once the autosave reaches disk.
|
|
49
|
+
- An agent whose adapter is missing or still downloading says so in settings, the picker and the composer. A failed download is retried with a growing wait, and an adapter that arrives by another route clears the failure.
|
|
50
|
+
- Plan approval offers auto first, matching Claude Code's own dialog.
|
|
51
|
+
- A tool search row reads as a sentence: "loading a tool", then "loaded WebSearch, WebFetch" or "looked for a tool: notebook jupyter".
|
|
52
|
+
- The usage panel on the compact ring opens on keyboard focus as well as on hover, sits centred above the ring like a tooltip, and drops when the ring's menu opens.
|
|
53
|
+
- The offer to install Toyon as an app shows in the composer as well as the top bar.
|
|
54
|
+
- On the PR route the button reads open PR until a pull request exists. Once one is open, land merges it and update sends it new commits.
|
|
55
|
+
- Restoring an archived worktree puts its row back on the rail at once and does the git work behind it; a refused restore takes the row away again.
|
|
56
|
+
- The route bar above the preview is a real field: a click and drag selects text, and its list of routes hangs under it at the field's width.
|
|
57
|
+
- The composer's up-arrow history offers only commands you typed; the check Toyon runs after a turn and a landing's git steps stay out of it.
|
|
58
|
+
- After a run of clean edits, the row keeps its shimmer until the next call lands, instead of flashing a working mark between edits to the same file.
|
|
59
|
+
|
|
60
|
+
### Fixed
|
|
61
|
+
- When the agent enters plan mode on its own, the chip and the rail follow it; they stayed on auto.
|
|
62
|
+
- The generated commit text sometimes described the previous landing instead of the files being committed. It now covers the work since the last landing, including one made by hand in a terminal, and squash and PR text list the branch's earlier subjects under a line saying they were squashed in.
|
|
63
|
+
- A question card left open across a restart stays open and can still be answered, instead of being settled as cancelled.
|
|
64
|
+
- Pressing a verb word in the empty composer (land, update, merge, check, archive) returns focus to the composer instead of dropping it on the page, and check no longer picks up a stray note from the press.
|
|
65
|
+
- The standing project list in the picker leads with the open project, so down reaches the other project instead of "new project".
|
|
66
|
+
- The transcript no longer shifts sideways as a card comes and goes; the space for its scrollbar is held either way.
|
|
67
|
+
- A tip from a chip no longer shows over a view expanded from it.
|
|
68
|
+
- In `!` mode the first line of the composer keeps its height, so the placeholder, caret and text no longer sit a few pixels up.
|
|
69
|
+
- A `!` command typed while a sync runs stays in the box, with a line under the field saying the sync is running, instead of clearing and being refused with nothing to recall.
|
|
70
|
+
- A file drag carried from the preview straight to another app no longer leaves the drop highlight on until it times out.
|
|
71
|
+
|
|
72
|
+
## 0.14.0 (2026-10-14)
|
|
73
|
+
|
|
74
|
+
Once Toyon is installed as an app from the top bar, `toyon .` opens it there, and the chats palette says what each chat was about.
|
|
75
|
+
|
|
76
|
+
### New
|
|
77
|
+
- The chats palette shows each chat's first message as a quiet line under its head, so a short title such as "Followup sweep" still says what the chat was about.
|
|
78
|
+
|
|
79
|
+
### Changed
|
|
80
|
+
- `toyon .` opens the installed Toyon app when Chrome, Arc, Brave or Edge has one, and your default browser otherwise. The `--app` and `--pwa` options are gone; the install button in the top bar is how Toyon becomes an app of its own.
|
|
81
|
+
- A sync waiting for the turn to end shows as a shimmering line where the sync button stood, and its tooltip says the row's menu calls it off.
|
|
82
|
+
- Images attached to the composer are hidden while a `!` draft is in it.
|
|
83
|
+
|
|
84
|
+
### Fixed
|
|
85
|
+
- Pressing go on a handoff card closes the card at once while the other project's copy is still being made; a slow copy in a large checkout left it looking unpressed. A go that Toyon was stopped under reads as failed when it comes back.
|
|
86
|
+
- Answering a question card, or allowing or denying a permission, moves the worktree's row to the top of the rail, as sending a message does.
|
|
87
|
+
- A worktree pushed by hand, with no tracking set, shows how many commits are still unpushed, read from origin's copy of the branch, instead of no count.
|
|
88
|
+
- Edit and write cards no longer show the same diff twice.
|
|
89
|
+
- A web search in the tool row no longer shows its query in two pairs of quotes.
|
|
90
|
+
- Images attached to the message that restores a chat show on its waiting row straight away instead of after the agent echoes the message.
|
|
91
|
+
- The composer no longer shrinks by a line when a `!` draft switches it to the mono face.
|
|
92
|
+
- Opening the warm row where new work is typed, or changing its servers while its setup still ran, could start your app on a copy with no dependencies and spend its restarts. The start at the end of setup is now the only one.
|
|
93
|
+
|
|
94
|
+
## 0.13.0 (2026-10-11)
|
|
95
|
+
|
|
96
|
+
Most of this release is the phone and the machines around it: rows slide to their actions, one devices card lists every machine you have, and a folder with no git in it can become a project where it sits.
|
|
97
|
+
|
|
98
|
+
### New
|
|
99
|
+
- A plain folder can be opened as a project in place. Toyon makes the first commit from what is there, leaving node_modules and .DS_Store out, and the project picker offers an open row for such folders. A folder that holds other managed projects is refused.
|
|
100
|
+
- Pairing a phone and adding a machine are one devices card, reached from one icon labelled "Your devices". It lists this machine first with a reach dot, then every machine on your tailnet with a dot and a status word, and a connect or sign-in button where Tailscale needs one. A machine that misses one probe now reads as not answering for a while instead of vanishing.
|
|
101
|
+
- On the phone, a worktree row slides left through its actions: archive, land, more. The word and glyph change at each rung, the phone ticks where it can, and letting go on more opens the menu. A mouse or trackpad drag works the same way.
|
|
102
|
+
- A sync pressed while the agent is working is kept and runs when the turn settles, and the row says it is waiting. Archiving clears it, and a commit or land already running takes it over.
|
|
103
|
+
- Image and file chips show a whole percent while they upload, in the composer and on the held row. A message sent before its uploads finish waits in an outgoing box as a queued row and goes once they are in, never ahead of an earlier message to the same chat.
|
|
104
|
+
|
|
105
|
+
### Changed
|
|
106
|
+
- The preview's size shows at the trailing end of the route bar, a tier quieter than the path, for as long as a frame is on screen, instead of as a badge over the preview.
|
|
107
|
+
- A page error that throws while the agent is working is held and shown once as one row when the turn ends, so a running build stays quiet. A row lists what the page was left throwing, oldest first.
|
|
108
|
+
- The project picker lists the project you last sent to first, and a project keeps that place after its rows are archived or landed. Other machines' lists are ordered the same way.
|
|
109
|
+
- A machine that is asleep or not answering stays in the switcher under its own heading with a row to switch to it. Fly machines are no longer woken by loading the page.
|
|
110
|
+
- On the phone, the home screen drops the machine rows: with more than one machine, the bar names the current one next to the worktree count, and the other machines' headings in the picker end with their state. The owed button counts across machines.
|
|
111
|
+
- On the phone, a question card folds to one line while you read up the log, the same as the blank composer, and comes back at the end. Menus and the switcher take the window's width, and the palette stays above the keyboard.
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
- Back on the phone no longer leaves the worktree list for an empty window, and a swipe back after tapping the transcript no longer dies on the app's own history.
|
|
115
|
+
- The installed app's status bar on Android and the first paint on load now match the screen's ground instead of flashing another colour.
|
|
116
|
+
- The agent's preview tool refused a route such as `/` as a path outside the project.
|
|
117
|
+
- The switcher pill no longer grows when it opens, and its name no longer drops a pixel on a 2x display.
|
|
118
|
+
|
|
119
|
+
## 0.12.0 (2026-10-09)
|
|
120
|
+
|
|
121
|
+
Opening the app while Toyon is stopped now shows a page that starts it, and a machine on your tailnet knocks to be let in instead of pairing. The preview also tells the agent what went wrong on the page, and the agent can look at the page itself.
|
|
122
|
+
|
|
123
|
+
### New
|
|
124
|
+
- When Toyon is not running, the installed app shows an offline page with a button that starts it, instead of a browser error. The same works from the terminal with `toyon start`.
|
|
125
|
+
- A machine on your tailnet knocks to be let in, and add-a-machine finds the machines on the tailnet, so switching between them no longer needs a pairing step. Only a page that is a Toyon of its own, or one on this machine, may knock; a stray web page cannot.
|
|
126
|
+
- An error thrown by the page in the preview shows up in the chat as a row with an offer to fix it. The agent has a preview tool that renders the page out of sight, so it can see the result of its change.
|
|
127
|
+
- A `!` command that is still running floats at the foot of the chat log, the way an agent's background command does. Several started while the agent talks stack there in start order, each with its own stop, and settle back where they were typed when they exit.
|
|
128
|
+
- A landed row, an archived note, the rail card and the composer ghost all say what landed, from the commit and pull request subjects. Older chats are filled in at startup.
|
|
129
|
+
- The slash menu lists your own commands first, then Toyon's. Typing filters across all of them.
|
|
130
|
+
- Pictures added on a question card travel with the answer, in their own box under it, instead of staying in the composer.
|
|
131
|
+
- The preview shows its width and height in a small badge while you resize it.
|
|
132
|
+
- When a chat ends on the same error twice in a row, the continue offer says so and suggests waiting it out. It stays pressable; the choice is yours.
|
|
133
|
+
|
|
134
|
+
### Changed
|
|
135
|
+
- The composer on the desk grows with what you type, up to half the chat panel, and starts at five lines.
|
|
136
|
+
- The new project page ends in the same composer as a chat, so describing a project and sending it work the way a message does. The create button and the separate agent question are gone, and a refusal, such as a taken name, shows under the box.
|
|
137
|
+
- Clicking the usage ring opens the compact menu, the same one a right-click opened, and the pinned usage panel is gone. The hover figures gain a quiet line with the signed-in account and plan.
|
|
138
|
+
- An approved plan shows as a plan row from the agent and a bubble with your choice, like an answered question, instead of a dim permission row.
|
|
139
|
+
- The done mark after a command is only for a command you typed. The git steps a landing runs no longer carry it.
|
|
140
|
+
- Switching to another copy by hand hides the old app at once. The old page stays on screen only for the copy a send just opened, until the new one paints.
|
|
141
|
+
- `toyon pair`, the toyon.cloud launcher and `toyon --install-app` are gone. The knock flow replaces pairing, and the installed web app is the one Toyon app.
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
- Swiping back and forward with the trackpad over the preview works again. The lock that stops bounce and pull to refresh now covers the vertical axis only.
|
|
145
|
+
- A tool row kept its spinner and counting clock when an agent error ended the turn.
|
|
146
|
+
- Removing a pick chip left the preview outlining the element the chip pointed at.
|
|
147
|
+
- A file dropped from the index but still on disk showed twice in the changes dock.
|
|
148
|
+
- Enter on a whole path in the route picker went to a page beneath it. A whole path or a trailing slash now goes where you typed, and the typed row reads "as typed".
|
|
149
|
+
- A land press that hit a rebase conflict asked the agent to fix it but kept offering land mid-rebase.
|
|
150
|
+
|
|
151
|
+
### Not yet
|
|
152
|
+
- The knock flow and switching between machines have been exercised on one Mac so far. The walk across a real tailnet is still owed.
|
|
153
|
+
|
|
154
|
+
## 0.11.0 (2026-10-07)
|
|
155
|
+
|
|
156
|
+
This release reaches past one project and one machine: an agent can hand a task to another project, and the installed app can open the chats of another machine over Tailscale. The context ring also shows how much of your Claude plan is left.
|
|
157
|
+
|
|
158
|
+
### New
|
|
159
|
+
- An agent can hand a task to another project. When the work it needs sits outside the current folder, it asks through a card in the composer. Go starts a chat in a fresh copy of that project, which shows as a guest row in this rail, and when that copy lands, a line in this chat says so. The card says whether the new chat would start in auto mode, and a note can go along with it.
|
|
160
|
+
- The installed app switches between machines. Each machine your Toyon knows keeps its own connection, so the palette and the machine picker list every one of them and open its chats from the same app. Trusting a phone from another machine records the trust there, and editor links open on the machine that holds the files.
|
|
161
|
+
- The context ring shows your Claude plan usage as a level inside it. Hovering the ring opens a panel with a bar each for context, the 5-hour window and the week, with tokens, cost and reset times under them and the compact row at its foot. Sessions on an API key or on Codex report no plan, so their ring is unchanged.
|
|
162
|
+
- An entry in agents.json under a built-in agent's id, with no command, tunes that agent instead of replacing it: its environment and session options are added over Toyon's own, so a Claude Code plugin folder or extra MCP servers load for every chat. Toyon's own session rules still apply on top. The recipe is in the agents guide.
|
|
163
|
+
- The plan chip in the composer has a right-click menu: open the plan in your editor, reveal it in Finder, or copy its path.
|
|
164
|
+
|
|
165
|
+
### Changed
|
|
166
|
+
- A permission card leads with a plain sentence saying what the tool is about to do, with the command set apart below it in a band that runs edge to edge.
|
|
167
|
+
- Streaming a reply uses less CPU. Chunks reach the log on a tick instead of one by one, rows that did not change keep their element, and the spinner on a running tool row no longer repaints the whole page, so the fan stays quieter on long turns.
|
|
168
|
+
- The rail draws from the numbers it already has instead of waiting on a git read per row, so it stays fluid with many copies. The counts refresh in the background.
|
|
169
|
+
- A subagent row stays folded while it runs, with its shine, call count and seconds; a click still pins it open. A spawn row reads as writing until its prompt has arrived.
|
|
170
|
+
- Tab in an empty composer goes to the offered verb first, whatever the word is, and a second Tab moves on to the commit message when there is something to commit. Shift+Tab goes back.
|
|
171
|
+
- The shortcuts card lists the most reached-for chords first in each section, with jump to file at the top of Find.
|
|
172
|
+
- A plan sent again unchanged keeps its number instead of taking a new one. A plan edited in the pane is a new revision.
|
|
173
|
+
- Each preview runs in its own browser process, so an app that runs out of memory cannot take the shell down with it. Cookie logins inside the preview keep working.
|
|
174
|
+
- Under a remote name, a plain http request to the public address is redirected to https instead of being refused.
|
|
175
|
+
- Tool rows whose glyph already says what they are (asked, skill, monitor) drop the repeated name, and a skill row is titled with the skill and its arguments, such as `/code-review high`.
|
|
176
|
+
- On the send page, an answer shows the pick on its line and a typed note on a quieter line beneath it.
|
|
177
|
+
|
|
178
|
+
### Fixed
|
|
179
|
+
- Changing the mode from the chip mid-turn now reaches the running agent, which used to keep working in the old mode and write a plan file.
|
|
180
|
+
- A /model typed in the chat held until the next prompt, then reverted. It now stays.
|
|
181
|
+
- Answering a question or a permission while scrolled up brings the log back to the end, and the log no longer mistakes its own layout scrolls for yours and stops following.
|
|
182
|
+
- A question cut off by a steer stayed open and made every later command read as queued.
|
|
183
|
+
- Pressing restore twice on one archived copy made a duplicate row or deleted the first copy's folder. A second press now shows restoring and returns the same row.
|
|
184
|
+
- A process that caught the stop signal could outlive its copy and keep its port. Stopping now escalates within the grace period, and a restart of Toyon sweeps the strays left from before.
|
|
185
|
+
- The landing verdict could call a check still running when a later reply said it had finished. The last reply now has the final word.
|
|
186
|
+
|
|
187
|
+
### Not yet
|
|
188
|
+
- Switching machines has been exercised with two daemons on one Mac. The walk across a real tailnet is still to be done.
|
|
189
|
+
|
|
190
|
+
## 0.10.0 (2026-10-06)
|
|
191
|
+
|
|
192
|
+
Most of this release is the phone: the chat gives the log its room, a tap opens what you meant, back goes where you expect, and a picture swipes away. Around it, a failed check or command now comes with an offer to have the agent fix it, and the Mac stays awake while a phone is waiting on it.
|
|
193
|
+
|
|
194
|
+
### New
|
|
195
|
+
- When a check or a `!` command fails, a strip under it offers to have the agent fix it. A failed landing check goes to the agent on its own, once, without waiting for you to type. Toyon's own message is kept apart from yours, so it never shows up in recaps, commit messages or search as something you said.
|
|
196
|
+
- The composer has a paperclip. It opens the file dialog and turns what you pick into chips, the same as a paste or a drop. On a phone it opens the photo picker with recent screenshots first.
|
|
197
|
+
- An opt-in setting, "offer what is copied", reads the clipboard when the window comes to the front. A picture, or text long enough to be a chip, is offered at the top of the composer with an attach button. The same copy is never offered twice.
|
|
198
|
+
- A keep-awake setting, in the settings menu and on the keys card: while in use, always, or off. While in use is the default, and holds the Mac awake while an agent works, a command runs, a remote shell is open or a question is waiting, so a phone's ask card never goes dead to a sleeping Mac.
|
|
199
|
+
- The pair card says whether the phone is on your tailnet, by pinging it, and `toyon pair` prints the same line under its QR. Before, a phone with Tailscale switched off read as "address not found".
|
|
200
|
+
- A discovered copy opens its chat in the centre, like an archived one. Sending a message there takes the copy over and hands the message to its agent. The preview stays off until the agent writes a file.
|
|
201
|
+
- A `!` command that exits clean shows a check mark after it, so a silent success no longer looks like a row that never ran. Older transcripts gain the mark too.
|
|
202
|
+
- The context tooltip gives advice from half full: worth compacting between tasks, then compact before the next task from 80 percent.
|
|
203
|
+
|
|
204
|
+
### Changed
|
|
205
|
+
- On the phone, scrolling up the transcript folds the header to the tabs and the blank composer to one line, which gives the log about 114 pixels more on a narrow screen, and both come back at the bottom. The composer rests at three lines and grows to eight as you type. Tool rows sit at the same step as the reply text.
|
|
206
|
+
- On the phone, tapping a copy opens its chat. Back goes box, diff, chat, home. Archiving the open copy returns to the list, and a fresh launch starts on it. Code opens on the changes list, with no line numbers in the diff. A swipe back closes an open menu or picker instead of leaving the page.
|
|
207
|
+
- On the phone, Enter makes a new line and a send button sends; a hardware keyboard still sends with `cmd+Enter`. A full-size picture follows a vertical drag, flies off when thrown and bounces back when released slowly, and a tap closes it. Pinch zoom is locked on the frame except over a picture or a paste. Row menus drop the items the phone cannot use.
|
|
208
|
+
- The phone home list marks no row as current, idle rows read quieter so live ones stand out, and the time sits at the right edge on every row.
|
|
209
|
+
- Toyon restarts itself in one step after an update: the updated screen asks the daemon to restart as it appears, shows the chats it is waiting on and reloads when Toyon is back. The bar chip offers "restart Toyon" when both a reload and a restart are owed. The restart hint names the right command for an npx or a global install.
|
|
210
|
+
- Landing by rebase refuses a copy whose branch holds a merge commit, leaves main untouched and prefills the rebase prompt. Squash and merge still land it.
|
|
211
|
+
- Row highlights are one thing: the cursor moves with the pointer, so a menu, a picker or the question box never lights two rows at once.
|
|
212
|
+
- Compact opens its menu on a left click too, so compacting takes a deliberate second click, and the row says why it is disabled mid-turn.
|
|
213
|
+
- A note typed beside a pick on a question card outranks the pick. Text that doubts it, asks something or says you cannot decide gets an answer in prose and no changes.
|
|
214
|
+
- An archived card says "Auto archived" on its top line, with the reason and the idle time in the foot. The changes dock splits commits into "landed" and "not landed" with no per-landing headers.
|
|
215
|
+
- A quick land no longer flashes its run count and stop button; both appear only once the run has lasted a second and a half.
|
|
216
|
+
- The installed app's manifest takes the theme's colours, so the status bar and launch screen match the theme. The tab pill slides between segments.
|
|
217
|
+
|
|
218
|
+
### Fixed
|
|
219
|
+
- A message sent mid-turn with an attachment could stop the log from following the end, and so could answering a question after Esc. Both keep following now.
|
|
220
|
+
- A tool call cut off by a message sent mid-turn no longer shines on, and later edits no longer read as queued behind it.
|
|
221
|
+
- A warm-up and a send arriving together could start three agent sessions. They share one now.
|
|
222
|
+
- On the phone, the question card's typed-answer field could sit under the keyboard, tapping "new messages" dropped the keyboard, and closing a float could reopen the copy for a moment. All three are fixed.
|
|
223
|
+
- Time spent in the background no longer counts toward the reconnect wait, so coming back to the phone no longer finds a stale "offline" verdict.
|
|
224
|
+
- A `sed` chain with `grep -i` in it showed the terminal icon instead of the read icon.
|
|
225
|
+
|
|
226
|
+
The daemon needs a restart, and the updated screen now does that for you.
|
|
227
|
+
|
|
228
|
+
## 0.9.0 (2026-10-03)
|
|
229
|
+
|
|
230
|
+
The changes dock says more about what changed: tests apart from source, the tests a change touched by name, and the files each turn of the agent touched. The chat answers at the press, and every chat in a project, open or archived, is in one picker.
|
|
231
|
+
|
|
232
|
+
### New
|
|
233
|
+
- The changes list puts test files under their own "tests" label after the source, and a test file opens into the names of the tests the change touched. Commits in the history tab use the same order.
|
|
234
|
+
- The changes dock folds the files each agent turn touched under that turn, so a session reads like a run of commits. Committed changes fold as well, and the fold is remembered per project.
|
|
235
|
+
- `cmd+G` lists every chat in the project, open and archived, before you type, and narrows by name or branch from the first character. Tab switches to names only, which also matches an archived chat's first message. The separate archive picker is gone; archived rows keep restore and delete on their menu.
|
|
236
|
+
- Restoring an archived chat brings back its copy, its setup and its chat without starting the app. The preview says it is off and offers "start preview", and it starts on its own when the agent writes a file.
|
|
237
|
+
- A large file dropped on the chat attaches as a chip that uploads when it is attached, instead of being pasted in whole.
|
|
238
|
+
- Pinch zooms the whole app, from the editor and the terminal too, and a trackpad pan moves the zoomed window. The top bar keeps its normal size along the top of what is visible.
|
|
239
|
+
- Left and right arrows work the same in every tree: the files tab, history commits, test names, tool rows and rail headings. Right opens a row or steps onto its first child; left closes it or climbs to the parent.
|
|
240
|
+
- The project switcher has an "open folder" row under "+ new project".
|
|
241
|
+
- An empty changes tab says where the branch stands, "same as main" or "no changes of its own" when it is behind, with the age of the last commit.
|
|
242
|
+
|
|
243
|
+
### Changed
|
|
244
|
+
- A message appears in the log with the working spinner the moment you send it, not when the daemon answers. A send that is refused puts the text back in the composer.
|
|
245
|
+
- A tool call waiting behind an earlier one sits dim with "queued" after it, instead of shimmering as if it were running. The shine starts when its turn comes.
|
|
246
|
+
- A permission card no longer removes the tool row it was asking about. An allowed call shows its output like any other, and a denied, skipped or expired one keeps its row with one line saying which.
|
|
247
|
+
- A question you set aside with Esc, or one cut off by a stop, comes back from one row at the top of the composer: the word answer, pressable like land, beside the question itself. Pressing it reopens the question with your earlier picks. The orange asking row in the log is gone.
|
|
248
|
+
- The question box keeps its height while you move through it. Every option shows its description all the time, `n` adds a note to the highlighted option in a field inside that row, and Enter sends. A lone question shows no send button on desktop, since a pick or Enter already sends it.
|
|
249
|
+
- A tool row takes its icon from the command's real verb. A leading `cd`, variable assignments and `export` are skipped, a `sed` that only prints reads as a read, and a heredoc that writes a file reads as an edit.
|
|
250
|
+
- `opt+backspace` archives the chat on screen whenever the caret sits in an empty field, not only while its menu is open. A field with text, the editor and the terminal keep word delete.
|
|
251
|
+
- After you archive the row you are on, focus goes to a chat waiting on you, then to the next landed row, then to an unseen or working one, then to one with its app running.
|
|
252
|
+
- The rail draws the newest 25 archived rows and one row saying how many more there are, which opens the picker. A row archived automatically says why on its card, for example "auto archived: not opened in 2h".
|
|
253
|
+
- Landed and archived rows in the chat say how long ago it was, and Toyon's own rows in the chat are the height and face of the rows around them.
|
|
254
|
+
- The land line holds still while a land runs. The second line under it appears only when something blocks the land; the file count and the check result are in the land word's tooltip.
|
|
255
|
+
- The changes tab's tooltip carries its chord and the counts of uncommitted files and changed lines, in place of a number beside the label.
|
|
256
|
+
- A diff shows one slider: the editor's own scrollbar takes no width while the colour strip is showing.
|
|
257
|
+
- A reload no longer flashes white before the theme is applied, and in dark themes the preview frame takes the centre's ground until its page has drawn.
|
|
258
|
+
- A chip's preview opens on the side away from the chat dock.
|
|
259
|
+
|
|
260
|
+
### Fixed
|
|
261
|
+
- `toyon doctor` on a fresh install reported the agents as failed, and exited with an error, while they were still installing. That is an ok line now; only an install that failed is a fault.
|
|
262
|
+
- Sending a message while a question was open left the agent waiting on the question, so it never read the message. The send now closes the question as skipped, and a pending permission or plan approval is denied the same way.
|
|
263
|
+
- The first line of the first file opened in the editor could come up half coloured on a slow machine.
|
|
264
|
+
- A command row could keep its placeholder title and never show its command, and the first of two calls in one message could be dropped.
|
|
265
|
+
- Dragging to select text in the chat while a question is open keeps the selection.
|
|
266
|
+
- The log keeps following after a send; a late scroll event could stop it.
|
|
267
|
+
- A land's fetch no longer races a background fetch of the same project.
|
|
268
|
+
- A fitted diff with an edit spanning lines ran one row too tall and scrolled.
|
|
269
|
+
- The far left strip of an attachment chip opens it, as its tip said it would.
|
|
270
|
+
- Pressing a button in a picker's strip, such as names only, keeps the caret in the search field.
|
|
271
|
+
- Rail rows that unfold under a hovered heading show at once.
|
|
272
|
+
|
|
273
|
+
### Not yet
|
|
274
|
+
- During a pinch the top bar wobbles for a moment and settles when the gesture ends.
|
|
275
|
+
|
|
276
|
+
## 0.8.1 (2026-10-01)
|
|
277
|
+
|
|
278
|
+
Mostly fixes to how the agent's work reads after the adapter move in 0.8.0, and two things a sync and a landing no longer refuse.
|
|
279
|
+
|
|
280
|
+
### New
|
|
281
|
+
- A pasted text chip opens rendered when the paste is markdown: from a markdown file, or with two or more kinds of structure in it. A button in the card's corner shows the text as it was sent. Hovering a picked-element chip shows the source around its line.
|
|
282
|
+
- "copy description" on a tool row's menu copies the agent's own sentence for the call.
|
|
283
|
+
- The version row has a right-click menu with the release notes, the latest release and the repository, and the update chip says when you are already up to date instead of staying quiet.
|
|
284
|
+
- `toyon doctor` shows an agents row when an adapter failed to upgrade, which is why a newer model can be missing in Toyon while it works in the terminal.
|
|
285
|
+
|
|
286
|
+
### Changed
|
|
287
|
+
- A sync no longer refuses when the copy has uncommitted changes. It sets them aside, brings main in, and puts them back, and the commit box offers that instead of blocking.
|
|
288
|
+
- A land with uncommitted edits can carry a message typed alongside it. The daemon commits first, then lands, so nothing is lost.
|
|
289
|
+
- `cmd+B`, `cmd+shift+E`, `cmd+L`, `cmd+shift+K` and `cmd+J` toggle their panel: closed when it is open, open with the keyboard in it when it is shut, wherever focus is. The tab chords still switch to their own tab.
|
|
290
|
+
- A row with commits ahead and nothing uncommitted draws its `+N` in the dirty column, so the name gets the room.
|
|
291
|
+
- Pasted text chips and image chips share one frame, with the same "open full size" tip, menu and remove button.
|
|
292
|
+
|
|
293
|
+
### Fixed
|
|
294
|
+
- A resumed Claude Code session ran without Toyon's rules, since only a new session was given them. A resume now carries the same rules as a new session.
|
|
295
|
+
- With the adapter from 0.8.0, a subagent call showed as a plain "Task" row, and one launched in the background read as finished. The row is a spawn row again with its title while the brief streams, a background subagent floats and shines while it works, two of them keep their order, and the open row's edge stays whole when a child row is hovered.
|
|
296
|
+
- The question tool's row shows a chat icon and "writing the question" while a long question is written, instead of a bare ring with the raw tool name. Monitor, TaskOutput and Skill rows have icons too.
|
|
297
|
+
- Escape in the composer closes an open overlay or the folder dialog instead of stopping the turn under it.
|
|
298
|
+
|
|
299
|
+
## 0.8.0 (2026-09-30)
|
|
300
|
+
|
|
301
|
+
The agents move up: Claude Code 2.1.284 with Opus 5.5 and Sonnet 5.5, Codex 2.0.0 and OpenCode 1.18.33. Under it, an install under a running daemon no longer leaves it unreachable, and a landing no longer refuses because main has files it would not touch.
|
|
302
|
+
|
|
303
|
+
### New
|
|
304
|
+
- `cmd+F` in a terminal pane opens a find box for that terminal. The chord goes to whichever pane has focus: a terminal, the chat, or a document.
|
|
305
|
+
- A command Claude Code runs in the background shows its output in its row as it runs. The row floats at the foot of the log like a working subagent and closes when the command ends, or when the daemon restarts, instead of shining on.
|
|
306
|
+
- Quotes in `cmd+G` and in the chats picker match the exact phrase, in that order, while unquoted words still match in any order.
|
|
307
|
+
- Shift-click picks a range of files in the changes list, the way it picks rows on the rail, and a bar under the list discards them or adds them to the chat draft. A row's menu has "select" for the same without the keyboard.
|
|
308
|
+
- A restored copy gets its own row in the log, beside the landed, blocked and grafted ones.
|
|
309
|
+
|
|
310
|
+
### Changed
|
|
311
|
+
- The Claude Code adapter moves to 0.84.0, which brings Claude Code 2.1.284 with Opus 5.5 and Sonnet 5.5; the Codex adapter moves to 2.0.0 and OpenCode to 1.18.33. Both adapters changed how a question with a typed answer arrives, and the cards follow. OpenCode installs the new version the next time it is selected.
|
|
312
|
+
- A rebase or merge landing, and main's pull, let git try first and refuse only when git says an uncommitted file on main would be overwritten, naming those files. Before, any uncommitted file on main refused the landing. A squash landing keeps the strict check, because its recovery resets main.
|
|
313
|
+
- A row's hover card leads with its state and the last recap; the branch stays in the row menu for copying. Where the pull request stands follows when one is out, the foot shows the cost and the messages queued behind a turn, and context appears only once it has run past half the window. Main's card says what landed last, with its age, and whether main is level with origin, behind it, held back or could not reach it. An archived row's card shows the first message sent there.
|
|
314
|
+
- An open thought, a call's output, a diff or a picture sits in a recess in the log, and the command strip reads level with the row's header with a rule before its output.
|
|
315
|
+
- The landed, blocked, grafted, restored and archived rows share one shape that spans the log at the width of an open band, and the archived row's note is shorter.
|
|
316
|
+
- Stop sits in the field's corner, under any chips and the plan line stacked above it, and no longer overlaps a chip's close button. Chips in the composer read like the rest of the app's rows.
|
|
317
|
+
|
|
318
|
+
### Fixed
|
|
319
|
+
- Installing a new version while the daemon was running could leave it as a process nobody could reach: the daemon read the new version before npm had finished writing the binary it restarts from, closed its server, and failed to start again. It now checks that the replacement starts before giving anything up, waits until the version on disk has read the same for a minute, and exits if the restart still fails so the next `toyon` starts clean.
|
|
320
|
+
- The version row and the up-to-date toast name the registry npm is set up for, since a company mirror can list Toyon behind the public one. `toyon doctor` prints the same line.
|
|
321
|
+
- `cmd+S` in the preview or the shell no longer opens the browser's save sheet. A page that handles `cmd+S` itself still gets the key.
|
|
322
|
+
- A pasted text chip in the composer opens on a click before the message is sent, as it already did in the transcript.
|
|
323
|
+
- A long run without spaces in your own message, such as a pasted path, wraps inside the bubble instead of widening the chat log.
|
|
324
|
+
|
|
325
|
+
Stop the daemon first with `toyon stop`: a 0.7.0 daemon left running during the install can hit the bug above. If one already has, `toyon stop` and then `toyon` clears it.
|
|
326
|
+
|
|
327
|
+
## 0.7.0 (2026-09-29)
|
|
328
|
+
|
|
329
|
+
Most of this release is about files that are not in the copy and backends that are. A file dropped on the window or the Dock icon, or linked by the agent from anywhere on the machine, opens in the editor pane; the copies of one project can share the database or API that main runs instead of each starting their own. Under it, a project that lands by push or pull request now measures every copy against main on GitHub.
|
|
330
|
+
|
|
331
|
+
### New
|
|
332
|
+
- Drop a file on the chat to attach it, on the editor or the preview to open it, or on a folder in the files tab to write it there. A file dropped on the Dock icon opens in the editor pane too, and so does a link the agent gives to a file outside the copy: the pane shows it on its own, with save, or in the copy it belongs to. A picture opens as a picture. A link the daemon refuses is underlined in red with the reason in its tip. The Dock drop is macOS; run `toyon --install-app` once after upgrading so the app on this machine takes it.
|
|
333
|
+
- The copies of a project can share what main runs. Tick "shared from main" under a command on the setup pane and every copy's page reaches that one at its usual address; a copy starts its own the moment its changes touch that command's files, and says so once under the composer. The setup pane says when it sees a local database the copies would share and offers to have the agent write the recipe. Nothing is shared until you tick it. Details in [docs/settings.md](https://github.com/toyon-dev/toyon/blob/main/docs/settings.md).
|
|
334
|
+
- A `teardown` list in settings runs when a copy is removed or archived, with the same variables setup had, so a database or compose project made for that copy goes with it.
|
|
335
|
+
- A `cache` list in settings names what a copy builds, such as its node_modules. Once the project's check passes it is kept, and the next copy gets a clone of it ahead of its setup. Entries are keyed by lockfiles and tool versions, the newest three are kept, and a month unused drops one.
|
|
336
|
+
- A `timeouts` key in settings sets the ceilings for setup, check and commit runs, for suites that take half an hour. The commit box and the composer show the stage's elapsed time and whether it is running, queued or stopped. At most two checks run at once per project; a third waits its turn.
|
|
337
|
+
- The editor shows who last touched the line the caret is on, and how long ago, after the line. Resting the pointer on it shows the commit. A line not committed yet says so.
|
|
338
|
+
- `cmd+F` in a markdown document or in the chat searches that document alone, with the matches painted in place.
|
|
339
|
+
- A code block in the chat has a copy button on hover and "copy code" on its right-click menu, and long lines in a block wrap instead of scrolling sideways.
|
|
340
|
+
- A picture open in the editor pane opens full size on a click or from the pane header.
|
|
341
|
+
- `/check` with words after it hands the agent a note for the commit message, so the subject and body can say what the diff does not show.
|
|
342
|
+
- `cmd+G` finds a chat message when every word of the query appears in it, in any order, and hits are grouped under one head per chat.
|
|
343
|
+
- A diff opens fitted to the pane. A change that fits shows whole with no folds; a larger one grows context around each change until the pane is full. When it still scrolls, a strip beside the scrollbar marks every change and the part on screen.
|
|
344
|
+
- The daemon stops itself once no window or preview has been open and nothing has been working for half an hour, and the next `toyon` or Dock launch starts one again. One you ran yourself in a terminal, one reached over the network and one on a deployed machine never stop on their own. `TOYON_STOP_AFTER_MS` sets the delay, and `off` turns it off.
|
|
345
|
+
|
|
346
|
+
### Changed
|
|
347
|
+
- A project that lands by push or pull request measures every copy against main on GitHub: the counts, a sync, a new copy and a landing all read that main, so a main checkout that is dirty or on another branch hides nothing and blocks nothing. The push route commits in the copy and pushes straight to GitHub. Main here follows on its own, and the trunk's note says why when it cannot. The rail's behind count says when GitHub was last reached.
|
|
348
|
+
- A pull request merged on GitHub lands its copy, whatever state main here is in: the copy restarts from main and the box offers archive. A copy whose checkout you switched to another branch by hand is counted and landed as that branch.
|
|
349
|
+
- When the tree has changes and no commit message exists, because the agent was down when it was asked, the commit box and the composer offer check in land's place and say what is missing. Land comes back with the answer. A project whose agent has no quick model is told the message is yours to write.
|
|
350
|
+
- The commit, land, update, merge and sync buttons show one shining line, the verb at once and the step once it has held a moment, in place of a spinner beside a label. The ready line under the verb goes while a land runs.
|
|
351
|
+
- A working subagent's row floats at the foot of the log with its seconds on the call it is running, then settles into place once the turn ends. The row is no longer drawn twice, and the quiet count no longer goes stale while a subagent is busy.
|
|
352
|
+
- Stop on a command row, and a timeout, end the whole process group. A command whose shell exits leaving a child running stays live, marked as in the background, until the child ends.
|
|
353
|
+
- A backend that comes back on another port after a crash stays reachable from the page and from its siblings, and one process of a copy can be restarted on its own.
|
|
354
|
+
- `opt+backspace` archives the current copy, with the same confirm as the menu when it has pending work. Mark unread moves from `cmd+shift+U` to `opt+U`.
|
|
355
|
+
- The editor hands `opt+shift+up`, `opt+shift+down` and `cmd+U` to the shell, and `cmd+K` in the editor makes a new file.
|
|
356
|
+
- An answered question reads as the agent's words and your reply, not as a form. The card states what it proposes and why, the thought above it closes, its send button goes on a one-question pick since Enter sends, and the description of an option sits under that option.
|
|
357
|
+
- A rail tip reads state and branch on one line, then the last stop's sentence with when it was, then cost and context. Tips stay up while a reply streams, main's tip is a card like the others, and the terminal's tab tips take the same shape. The rail footer shows context before cost, and a row's counts read ahead, dirty, behind.
|
|
358
|
+
- When the daemon is offline, only the rows that were live show a hollow ring in the fault colour; idle and asleep rows keep their gray.
|
|
359
|
+
- One pill sits at the foot of the chat: up or down while you scroll that way, gone a second after, and "new messages" when a reply arrives below. A press jumps.
|
|
360
|
+
- Toyon Dark and Toyon Light use orange for the accent, so a selection and an error no longer share a colour. A custom theme can name its own accent, and an imported VS Code theme takes its brand colour as the accent.
|
|
361
|
+
- Palettes centre on the whole window rather than the space between the docks.
|
|
362
|
+
- `cmd+P` and the `@` menu list files in tree order after the changed ones, files before folders at each level, and show the status column only while something is modified.
|
|
363
|
+
- The landed, blocked, grafted, asking, queued and restoring tags carry an icon in the row's glyph column.
|
|
364
|
+
- A thought, a command's output and a picture share one height cap in the log, with the newest line kept in view. Elapsed times past 99 seconds read as minutes and seconds.
|
|
365
|
+
- With Codex, a thought with several headlines reads by its newest, with the earlier ones folded under it.
|
|
366
|
+
- An `@` tag links only to a file in the copy; a typo or an email stays text.
|
|
367
|
+
- A pane title that overflows clips instead of pushing its buttons over the dock.
|
|
368
|
+
- The plan path at the top of the composer is itself the button that opens it.
|
|
369
|
+
- The preview has a manual: [docs/preview.md](https://github.com/toyon-dev/toyon/blob/main/docs/preview.md) covers the frame's keys, the picker, the change outline, the design pane and the fix card.
|
|
370
|
+
|
|
371
|
+
### Fixed
|
|
372
|
+
- Pasting a path or any text that starts with `/` or `@` no longer opens the slash or mention menu.
|
|
373
|
+
- `cmd+1` through `cmd+9` while a question card is open switch chats without answering the card.
|
|
374
|
+
- A Codex question with a typed-answer option is drawn as a card instead of being declined.
|
|
375
|
+
- Claude Code's ToolSearch call shows as a search row with its query instead of a bare label.
|
|
376
|
+
- An archived chat holding only an image keeps it when you come back.
|
|
377
|
+
- The agent no longer offers to commit as a card.
|
|
378
|
+
- A picture under a tool row no longer makes its band scroll.
|
|
379
|
+
- The landed tag survives a reload.
|
|
380
|
+
- A copy no longer reads as needing a check for a moment between land and archive.
|
|
381
|
+
- The setup fix prompt tells the agent to copy any other ignored file the base checkout needs, not only node_modules, and not to copy a virtualenv.
|
|
382
|
+
|
|
383
|
+
If a daemon from 0.6.0 is still running it says so, and `toyon restart` starts the new one.
|
|
384
|
+
|
|
385
|
+
## 0.6.0 (2026-09-23)
|
|
386
|
+
|
|
387
|
+
Most of this release is the chat saying what is going on while the agent works: what a landing is doing step by step, what a command prints as it runs, how long the running call has been at it, and whether a silence is the model thinking or a request still waiting to be accepted. Under it, a policy file lets a company turn parts of Toyon off for a whole machine.
|
|
388
|
+
|
|
389
|
+
### New
|
|
390
|
+
- Pressing land shows each step as it happens, committing, checking, merging, and what a hook or a test prints streams into the chat when a step takes a while or fails. Stop cancels it. Every tab of the project shows the same landing, a message sent meanwhile waits until it ends, a command typed with a leading `!` is refused with the reason, and a second press does nothing.
|
|
391
|
+
- A `!` command prints into the chat as it runs instead of all at once when it finishes, and the hint under an empty `!` says the agent sees the output with your next message.
|
|
392
|
+
- The line under the log tells a queue from a think. Until the model accepts the request it reads "waiting for the model" with the seconds; from then it reads "thinking". The running call's row carries its own seconds, only the call actually executing counts, and a task still being named shows a spinner until its brief lands.
|
|
393
|
+
- A company's IT can turn parts of Toyon off for everyone on a machine with a file pushed over MDM: updates, deploy, remote access or Tailscale only, which agents exist, custom agents, the port-80 listener and the Claude plan sign-in. Absent means allowed, the stricter of two sources wins, and a file that will not read fails closed. `toyon doctor` prints the policy in effect, and the shell says which file greyed a control. The keys are in [docs/policy.md](https://github.com/toyon-dev/toyon/blob/main/docs/policy.md).
|
|
394
|
+
- A picture the agent reads, a screenshot for instance, shows under its row, and a press opens it full size.
|
|
395
|
+
- An `.html` file opened from the chat or the files tab draws as a page in the editor pane, the way a markdown file draws as a document, and redraws as the agent writes it. Its scripts stay off, so the page cannot reach the shell around it; running the page is what the preview is for.
|
|
396
|
+
- The files tab has "new file" on folders, on files and in the empty space under the tree. It opens the file it made.
|
|
397
|
+
- `cmd+shift+G` groups pull requests and branches under their own heads, and a long title no longer crushes the name beside it.
|
|
398
|
+
- `cmd+up` in the composer lands on the oldest sent message and `cmd+down` returns the caret to the box, from anywhere in the recall walk.
|
|
399
|
+
- An archived worktree's page is one list: what it left uncommitted, then each run of commits under the landing that carried it, with one cursor walking both. An uncommitted row opens the diff of that change alone.
|
|
400
|
+
- With Codex, a read, search or command row now reads like Claude's: the file name with its icon, repeated reads folded with a count, and the command a pipeline ran.
|
|
401
|
+
|
|
402
|
+
### Changed
|
|
403
|
+
- Stop sits in the composer's top right corner, where Escape already cancels, instead of on the working row. The working row is a small spinner that keeps its height, so the log no longer jumps when the agent's state changes, and it hides while a reply is streaming.
|
|
404
|
+
- The commit box reads as one card: the verb, a space and the subject, the subject on the same tier as the ready line under it, and no second line when it would repeat the first.
|
|
405
|
+
- A landing or a sync that hits a conflict no longer switches you to that worktree mid-read. The prompt goes into that worktree's draft, and its chat and its dot on the rail say where to look.
|
|
406
|
+
- Clicking a worktree row on the rail puts the caret in its composer, as the keyboard walk does.
|
|
407
|
+
- A diff only folds an unchanged stretch of ten lines or more; shorter gaps show as code.
|
|
408
|
+
- Selected text in the shell has its own colour instead of the system highlight, which read poorly against dim text.
|
|
409
|
+
- The counts on a rail row sit in a new order after the branch name.
|
|
410
|
+
|
|
411
|
+
### Fixed
|
|
412
|
+
- Sending a message with the log scrolled up left the reply off screen. The log jumps to the end on send.
|
|
413
|
+
- Dragging a selection over a reply that was still streaming collapsed it back to the row's start.
|
|
414
|
+
- A message sent mid-stream opened a stray second row for the rest of the reply, which broke tables and lists in it.
|
|
415
|
+
- A link that was still arriving jittered the lines below it as it closed.
|
|
416
|
+
- A name like `__init__.py` came out half bold with stray underscores.
|
|
417
|
+
- A second edit to the same file opened its own row instead of folding onto the first, when the first was still arriving.
|
|
418
|
+
- A background agent's row kept its lifted colour after it finished, and the line under the log stayed silent while it ran.
|
|
419
|
+
- The quiet count under the log restarted from zero when you switched worktrees and came back.
|
|
420
|
+
- A worktree whose naming failed stayed dim for good. It is asked for again at the end of the next turn.
|
|
421
|
+
- Landing a worktree a second time, after its earlier pull request had merged and GitHub deleted the branch, was refused as stale. The push goes through as a fresh branch; a branch that moved under someone else's commits is still refused.
|
|
422
|
+
- The pull request route rebased onto a local main that could be behind, so an already-merged commit could survive and open a duplicate pull request. It fetches first, and a merged pull request whose fast-forward failed pulls instead of landing.
|
|
423
|
+
- A landing check killed by a restart wrote a finished verdict with no check behind it. A failed check now leaves the verdict pending, and the daemon re-runs it when it comes back.
|
|
424
|
+
- Archiving a worktree could quietly fail and the row came back on the next click.
|
|
425
|
+
- A preview that stayed on Chrome's connection-refused page after a daemon restart reloads by itself.
|
|
426
|
+
- A progress bar that redraws over several lines, yarn's or pnpm's, filled the boot view with one copy per frame. It is one row that updates.
|
|
427
|
+
- A diff opened from the changes list showed a mangled "hidden lines" strip.
|
|
428
|
+
- An outline treated the document's h1 as a section, so everything under it read as indented. It is the title.
|
|
429
|
+
|
|
430
|
+
### Not yet
|
|
431
|
+
- The order of the counts on a rail row is still being tuned.
|
|
432
|
+
|
|
433
|
+
Toyon 0.5.x installs this release by itself, or when you run `toyon update`; a copy run through `npx` takes `npx toyon@latest`.
|
|
434
|
+
|
|
435
|
+
## 0.5.0 (2026-09-20)
|
|
436
|
+
|
|
437
|
+
The plus on the rail is now a copy of your project that is already running, so the first message lands on a live app and its agent is up before you press enter. Questions from the agent come one at a time in the composer, and the composer's empty box carries the check that turns into land.
|
|
438
|
+
|
|
439
|
+
### New
|
|
440
|
+
- The plus on the rail is a real row: its own copy of the project, already built and waiting, with a preview, a transcript and a box. A message sent from it stays in that row, nothing boots or reloads, and the next copy warms behind it. The first character you type starts its agent, so enter meets a process that is already up. Main itself no longer runs its own app while that copy stands in for it: one server per project.
|
|
441
|
+
- Opening the plus fetches origin and moves main up when it is clean and behind, so the row on screen is the latest main. A main with uncommitted files or one that has diverged stays where it is, and the line under the composer says which.
|
|
442
|
+
- Questions from the agent open one at a time in a box over the composer: a digit picks an option, the arrow keys move between questions, `n` adds a note and `d` skips. Each question is a tab across the top, and stop sits in the box's foot. The transcript keeps a short row while the box is open and a summary once it closes.
|
|
443
|
+
- The composer's empty box shows a check word for work with no verdict yet. Pressing it runs the check and the landing question by hand, and the word turns into land once they pass. The recap under it is two lines: the commit subject, and whether the work is ready, not ready, or has changed since it was written. The sentence is written with the verdict as the turn ends, not two minutes later, and a turn that only answers gets a one-line recap of its own.
|
|
444
|
+
- A pull request that is missing work pushed since it was opened gets an `update` beside merge and view.
|
|
445
|
+
- Each plan the agent proposes is its own numbered file under `.toyon/plans/`, so a rejected plan and your edits to it survive the next round. The folder goes into the archive beside the chat, and the active plan's path sits at the top of the composer with an open verb. Sending a plan back reads as handing it back, not stopping.
|
|
446
|
+
- A rendered markdown file gets an outline: a strip of ticks down the left of the editor, one per heading and nested by depth, with the section being read set darker. Pointing at the strip lists the titles, and a title scrolls to its heading.
|
|
447
|
+
- File links in the transcript open in the editor pane, at the line when one is named, and open the diff when the file differs from main. They are set in the code face. Right-click gives the editors, copy path, reveal in Finder and copy message; a web link opens in the browser or a new tab. A path outside the worktree reads as plain text.
|
|
448
|
+
- `cmd+L` with text selected in the preview sends it to the chat as a chip named for its source file. `cmd+left` and `cmd+right` step the preview back and forward.
|
|
449
|
+
- In the installed app, `cmd+W` closes the pane Escape would (terminal, editor, design) and keeps the window.
|
|
450
|
+
- A chat row's menu offers copy transcript path and copy session id, on archived rows too, so another agent can be pointed at a chat.
|
|
451
|
+
- The files tab lists gitignored files dim, and a folder ignored as a whole is one closed row. Appearance settings show the running version and whether an update is waiting.
|
|
452
|
+
- A commit refused by a hook, during land or from the changes panel, leaves a row on the transcript with everything git and the hook printed, so the agent can be asked to fix it. Long command output kept for the agent now keeps its end as well as its start.
|
|
453
|
+
- While a restart waits for chats mid-reply, the updated card lists them, one row each with the rail's dot, and offers restart now. A reload of that page picks the wait back up.
|
|
454
|
+
- A daemon that crashed or was killed no longer leaves its dev servers and agents running under the next one; they are reclaimed at boot.
|
|
455
|
+
- Tool rows say what the agent is doing before the call arrives: writing the command, choosing a file, writing the change. Edits to one file fold onto the run above, a row with nothing to show does not open, and a long thought stops at most of the chat's height and follows its own newest line. During a background fan-out the line under the log reads how many agents are working, with their calls counted beside it.
|
|
456
|
+
- A picture attached to the composer previews on hover and opens full size on click.
|
|
457
|
+
|
|
458
|
+
### Changed
|
|
459
|
+
- `opt+up`, `opt+down`, `ctrl+tab` and `cmd+shift+[` switch worktrees without showing the rail. Hold the modifier past a beat, or press again, and the rail slides in at once and leaves when the key comes up. `cmd+1` to `cmd+9` hand the caret to the composer.
|
|
460
|
+
- Landing no longer moves a row to the bottom of the rail; it stays where it was, in aqua, with archive on it. The message reads what the press did: committed and merged into main, and pushed on the push route.
|
|
461
|
+
- The behind-main line under the composer is gone; the count is in land's tooltip. The row's tooltip on the rail leads with title and branch, then its state and a recap line for a row you have not looked at, with cost and context at the edge.
|
|
462
|
+
- Menus are shorter and grouped. The worktree row offers open terminal and reveal in Finder; Zed, VS Code and Cursor stay on files, tool rows and panes. File rows group open and add to chat, then Finder and the copy items, then the rename and delete asks.
|
|
463
|
+
- An archived worktree is one line on the rail: its name, how many files it carried, and how long ago.
|
|
464
|
+
- Renaming a worktree keeps the title you typed even when git needs a different spelling for the branch.
|
|
465
|
+
- Toyon's own rows (a `!` command, the check, a refused commit) print the command alone. A network ask reads as the host under the globe, and repeated asks for one host fold into one row with a count.
|
|
466
|
+
- The effort chip marks the default row unless you chose a level, and the default row says what the default is.
|
|
467
|
+
- Select-all inside the transcript, or inside a rendered document, selects that alone rather than the whole page.
|
|
468
|
+
- The boot line says why a copy went to sleep: the clock, memory, or a port lease. Memory pressure is read from sustained paging, not one burst.
|
|
469
|
+
- The build after a land waits until every preview a restart brought back is up, so it does not fight them for the machine.
|
|
470
|
+
|
|
471
|
+
### Fixed
|
|
472
|
+
- A `git pull` typed in a terminal could fail with "Unable to create index.lock" while Toyon read main's status. Toyon's reads no longer take that lock.
|
|
473
|
+
- When main's changes could not be counted, a new worktree came up empty and the first message was dropped. The message is sent regardless, and a main that git no longer reads as a checkout is refused up front with the command that puts it back.
|
|
474
|
+
- A chat waking from sleep replayed its transcript and could post a stray reply as a new message. It resumes the session instead.
|
|
475
|
+
- A preview page that focuses a field on load, including after a daemon restart, no longer steals the keyboard from the terminal.
|
|
476
|
+
- A reopened terminal fed vim stray keys from its own scrollback, so Escape, `:wq` and `i` appeared to do nothing.
|
|
477
|
+
- One paste of one picture attached it two or three times in Safari and from Finder.
|
|
478
|
+
- `opt+up` walked the composer's sent-message recall before switching worktrees, leaving the wrong draft behind.
|
|
479
|
+
- A tool call cut off by a stop or a restart showed as running forever, and an interrupted call kept its shine through the next turn. Both close now, and a turn the agent starts on its own is shown as working.
|
|
480
|
+
- The first open of an archived chat loaded nothing until the page was left and reopened.
|
|
481
|
+
- The working row slid under the composer while a streamed message settled, and stayed there through the next call.
|
|
482
|
+
- Picture chips shrank the composer's text box to two lines.
|
|
483
|
+
- A file the agent read is highlighted for its language, and a table the agent writes with an empty header row no longer shows a blank band above it.
|
|
484
|
+
- A row's tooltip and its phone status line said "Running" over a row that was landing, and the working label doubled the ghost text under the log.
|
|
485
|
+
|
|
486
|
+
### Not yet
|
|
487
|
+
- A picture chip in the composer has no right-click menu yet.
|
|
488
|
+
- With Codex, the row for a read, search or list action names the action but not the command it ran.
|
|
489
|
+
- Under memory pressure, which copies and agents go to sleep first is still being tuned.
|
|
490
|
+
|
|
491
|
+
Toyon 0.4.x installs this release by itself, or when you run `toyon update`; a copy run through `npx` takes `npx toyon@latest`.
|
|
492
|
+
|
|
493
|
+
## 0.4.1 (2026-09-18)
|
|
494
|
+
|
|
495
|
+
Mostly fixes: a project whose branch never committed a `.gitignore` no longer fills its worktrees with untracked files, and a phone stays in Toyon when it wakes or goes back.
|
|
496
|
+
|
|
497
|
+
### New
|
|
498
|
+
- A plan the agent proposes is written to `.toyon/plan.md` and opens in the editor pane, rendered, while the card waits for your answer. The file is kept out of git. If you edit the plan before approving it, the agent is sent to your version rather than building the one it proposed.
|
|
499
|
+
|
|
500
|
+
### Changed
|
|
501
|
+
- A line that only gained or lost a few characters is drawn once in the diff, with the added text highlighted and the removed text struck through and dimmed in place. It used to be drawn twice, old above new.
|
|
502
|
+
- On a phone, the worktree tabs read chat, preview and code. Menus drop their key hints and get a close button, and a picker's field is as tall as the bar it opens from.
|
|
503
|
+
- Main's row on the rail reads "new worktree", the word used everywhere else.
|
|
504
|
+
- An image or a paste in the chat opens over the window and closes with `Escape`, instead of leaving the page for the bare file.
|
|
505
|
+
|
|
506
|
+
### Fixed
|
|
507
|
+
- In a project whose branch has no committed `.gitignore`, a new worktree listed every ignored file, `node_modules` first, as your own changes, and could not land or sync until something was committed. The ignore rules now apply without adding a file to the worktree, and a very long list of new files no longer slows every preview and chat while it is counted.
|
|
508
|
+
- Removing a large worktree no longer shows every one of its files as deleted while the removal runs.
|
|
509
|
+
- When a failed carry of your changes into a new worktree is undone, only the files it brought are removed. It used to wipe everything untracked, including the worktree's installed dependencies.
|
|
510
|
+
- The back button or swipe on a phone moves back through Toyon's own screens instead of leaving Toyon for a blank page.
|
|
511
|
+
- A phone taken out of a pocket no longer flashes "the daemon is not running" for a second while it reconnects.
|
|
512
|
+
|
|
513
|
+
Toyon 0.4.0 installs this release by itself, or when you run `toyon update`; a copy run through `npx` takes `npx toyon@latest`.
|
|
514
|
+
|
|
515
|
+
## 0.4.0 (2026-09-17)
|
|
516
|
+
|
|
517
|
+
Most of this release is about two things: answering your chats from a phone, and reading a project without leaving Toyon. A remote Toyon now pairs with a phone by a scanned code and draws one screen at a time there, and the files tab and the editor pane show more of what a project holds.
|
|
518
|
+
|
|
519
|
+
### New
|
|
520
|
+
- A phone gets its own layout. The rail is a list of your worktrees, and a worktree opens on its chat, its running app or its changes, one at a time, switched from the top bar. From there you can see what is waiting on you, answer, read, steer, stop, and start a new worktree from main. A row opens on its app when nothing is asked of you, and on its chat when it waits on an answer, finished unread or broke. Taps leave nothing lit behind them.
|
|
521
|
+
- A Toyon opened through a public name pairs with a phone by a code. The top bar's "open on phone" shows a QR code that works once, for two minutes, and never carries your token; the phone signs in with it and then opens toyon.cloud with the machine added. `toyon pair` prints a code in the terminal. Once a phone has paired, the words give way to a phone icon beside the other tools.
|
|
522
|
+
- The editor pane shows images, and opens a markdown file rendered, with the file and its diff one button away. A changed markdown file clicked in the changes tab still opens on its diff. Relative links open that file in the pane, and relative images load from the worktree.
|
|
523
|
+
- `.toyon/settings.json` and `toyon.json` accept comments and trailing commas. A save from the setup pane changes only the values you edited, so your comments stay, and a broken file names the line and column that broke it.
|
|
524
|
+
- When the rail is kept open, you can drag its edge to set its width, and it opens to that width when it peeks.
|
|
525
|
+
|
|
526
|
+
### Changed
|
|
527
|
+
- The files tab comes first in the changes panel, and a project opened for the first time shows it. Moving through the tree with the arrows opens each file as you land on it, `Enter` moves the keyboard into the file, and each folder's depth is drawn as a line down the tree. The panel remembers which tab it showed across a reload.
|
|
528
|
+
- `opt+left` and `opt+right` step through the files, changes and history tabs and move the keyboard there. Plain `left` and `right` no longer switch tabs; they open and close what is under the cursor. `cmd+B` opens the panel on changes, the way `cmd+shift+E` opens it on files, and closes it only from the changes list.
|
|
529
|
+
- Code in the editor pane is coloured with the same grammars VS Code uses, so calls, JSX and attributes read as what they are. The syntax colours are calmer: tags take the function colour in every theme, and Toyon Dark and Light soften their keywords, strings and attributes. Code in the chat follows.
|
|
530
|
+
- Main's row on the rail reads "new workstream" with a plus, which is what pressing it does. The branch name moved into its tip.
|
|
531
|
+
- New worktrees get names of one or two words, short enough to fit the rail. A name that reads as an error message is refused and the fallback is used.
|
|
532
|
+
- The agent is told on every message that Toyon is already running your app and at which address. Agents used to start a second dev server of their own, and the turn never ended.
|
|
533
|
+
- Headings in the chat are set at the size of the message around them, and tables in the chat and in a rendered file draw one rule between cells.
|
|
534
|
+
|
|
535
|
+
### Fixed
|
|
536
|
+
- Toyon starts when bun's install script was skipped, as pnpm does and newer npm warns it will. Toyon used to stop on a stub even with a working bun installed; it now checks each bun it finds by asking its version, including the ones asdf and mise put on your path.
|
|
537
|
+
- On a machine whose previews each use a port of their own (the Tailscale route, and a deployed machine by default), a sleeping worktree gives its port back. Opening a ninth worktree used to leave its preview loading; now the one you looked at longest ago stops and hands over its port, while one you are viewing or one an agent is working in keeps its own.
|
|
538
|
+
- When a worktree's commits and changes cannot be kept, archiving leaves it in place and says why. It used to be archived anyway, and that work was lost.
|
|
539
|
+
- An `afterLand` command that fails now says so under main's composer in every project, and a land that arrives while those commands are running gets its own run afterwards.
|
|
540
|
+
- The editor pane no longer colours brackets gold, orchid and blue, no longer shows a file as plain text for a moment before colouring it, and no longer flickers a loading line on every open.
|
|
541
|
+
- Quiet text no longer fades into a highlighted row: a menu item under the keyboard, a message you walked back to, a tool row under the cursor and a hovered tab keep their text readable.
|
|
542
|
+
|
|
543
|
+
### Not yet
|
|
544
|
+
- A phone can answer and steer, but setting up, importing or making a project still happens at the machine Toyon runs on.
|
|
545
|
+
|
|
546
|
+
Toyon 0.3.0 installs this release by itself, or when you run `toyon update`; a copy run through `npx` takes `npx toyon@latest`. Each project's docks and panes open in their default layout once, since the layout is saved in a new shape.
|
|
547
|
+
|
|
548
|
+
## 0.3.0 (2026-09-16)
|
|
549
|
+
|
|
550
|
+
Most of this release is about Toyon looking after itself. It installs new versions the way a site deploys them, archives the worktrees that finished with nothing left to keep, and adds a files tab so you can find a file without asking for it.
|
|
551
|
+
|
|
552
|
+
### New
|
|
553
|
+
- Toyon keeps itself current. It asks your own npm registry for a newer version at start and every six hours, installs it once no agent has been working for two minutes, and reloads open tabs onto the new one. `toyon update` does it when you ask. A copy run through `npx` is shown the command instead, since `npx` never replaces what it cached, and `TOYON_UPDATES=off` turns the whole thing off for a machine. The top bar only speaks when you have to know: an install that failed, or a restart waiting on a reply.
|
|
554
|
+
- `cmd+shift+E` opens a files tab in the changes panel, listing every file in the worktree. Hovering a file outlines what it draws in the preview. A row opens it in the editor, or drags onto the chat, and its menu adds it to the chat, copies where it is, or opens it in Zed, VS Code or Cursor. The tab reads: renaming or moving a file leaves a sentence in the composer for the agent, because a rename breaks imports and a moved page changes its address.
|
|
555
|
+
- A worktree that finished with nothing left to keep archives itself. Its last turn has to be done and read, nothing uncommitted and nothing ahead of main, no tab showing it, no draft in its box, and five newer rows above it on the rail. It waits two hours after you last opened it. `TOYON_ARCHIVE_AFTER_MS` changes that window, and `off` turns it off. When one of a group of variants lands, the attempts it beat are archived too, and their commits are kept so you can take a piece of one later.
|
|
556
|
+
- An archived worktree shows what it carried: the work it never committed, the commits it never landed, and a history grouped by each landing. Files open read-only, and nothing on the page can commit or discard.
|
|
557
|
+
- What you type in a chat box is kept by Toyon rather than by the browser, so it is there in another tab, on your phone, and after the worktree is archived.
|
|
558
|
+
|
|
559
|
+
### Changed
|
|
560
|
+
- Removing a worktree is called archiving, in the box, the row menu, the slash command and the confirms. It was already what happened; now it says so.
|
|
561
|
+
- The close button on the terminal, editor or design pane names that pane's own key, since that key also reopens it. `Escape` still closes the pane you last clicked into.
|
|
562
|
+
- `toyon` and `toyon version` say when the daemon that is running is older than the one installed, and point at `toyon restart`.
|
|
563
|
+
|
|
564
|
+
### Fixed
|
|
565
|
+
- A worktree stops running for memory only when less than 15% of it is free, or when macOS reports critical pressure. macOS starts reporting pressure with a third of memory still free, which put worktrees to sleep every few seconds and woke them again the moment you looked at one. This closes the "Not yet" from 0.2.0.
|
|
566
|
+
- `cmd+R` reloads the page when there is no preview to reload, during setup, with the app stopped, or on a project whose chat takes the middle.
|
|
567
|
+
- Screen readers now say which row the cursor is on in the changes list, the history and the files tab.
|
|
568
|
+
|
|
569
|
+
### Not yet
|
|
570
|
+
- Nothing marks a worktree as one to keep. If the sweep archives a row you wanted on the rail, one press brings it back; how often that happens is being watched before a keep is added.
|
|
571
|
+
- Updates go through the registry npm is set up for. If that registry has no `toyon`, Toyon says it cannot check, and `toyon doctor` names the registry.
|
|
572
|
+
|
|
573
|
+
Toyon 0.2.0 cannot update itself, so install this one the way you installed that one: `npm i -g toyon@latest` and then `toyon restart`, or `toyon stop` and then `npx toyon@latest`. From here on Toyon does it for you.
|
|
574
|
+
|
|
575
|
+
## 0.2.0 (2026-09-15)
|
|
576
|
+
|
|
577
|
+
Most of this release is about the worktrees you are not looking at. They stop running when nobody needs them, their chats can be searched, and an archived one reads as a chat you can pick back up. Main becomes the place new work starts.
|
|
578
|
+
|
|
579
|
+
### New
|
|
580
|
+
- A worktree you are not looking at stops running its app after two hours, or after five minutes on a deployed machine. It starts again when you open it or someone visits its preview, and its chat and agent keep going throughout. `TOYON_PROC_SLEEP_MS` changes the delay, and `off` turns it off.
|
|
581
|
+
- When your machine runs low on memory, the worktree that has gone unused the longest stops running first.
|
|
582
|
+
- `cmd+G` searches what was said in every chat in the project, including archived worktrees. It looks at your messages and the agent's replies, not at tool output, and picking a result opens the chat at that message.
|
|
583
|
+
- An archived worktree opens as its chat, showing what it spent. Sending a message brings the worktree back and hands the message to its agent.
|
|
584
|
+
- When the agent starts a subagent, the subagent's work folds under one row, which stays open while it runs.
|
|
585
|
+
- `/plan`, `/ask`, `/auto`, `/land` and `/close` work in the composer, whichever agent you use.
|
|
586
|
+
- Setting up a new project asks which agent to use before you describe what to build.
|
|
587
|
+
- A project can keep `toyon.json` to itself or commit it with the repo, and switching between the two moves the file for you.
|
|
588
|
+
- A project can list `afterLand` commands, which run in the project folder each time main moves. `toyon restart` restarts Toyon, unless a turn is running.
|
|
589
|
+
- You can send a paste, an image or a picked element without typing anything.
|
|
590
|
+
- Every file's menu and every worktree's menu can copy its path.
|
|
591
|
+
- A worktree whose last turn failed shows a red dot until you start another.
|
|
592
|
+
|
|
593
|
+
### Changed
|
|
594
|
+
- Main is where new work starts. It has no chat of its own, and whatever you type in its box starts a new worktree. Uncommitted files on main stay behind unless you tick the box to bring them along. Starting a worktree from another worktree is gone, and a `!` command typed on main runs in its terminal.
|
|
595
|
+
- The chat now sits on the left, with the changes panel on the right. The "chat side" setting moves it back.
|
|
596
|
+
- The changes panel starts closed and opens on its own the first time there is a change to show.
|
|
597
|
+
- Toasts are gone. When something is refused or fails, it is said on the chat it is about, or under the box you typed in. A landed worktree says so on its chat.
|
|
598
|
+
- Worktrees land by rebase unless you choose otherwise, so main's history stays in one line. The setup pane explains each land option more plainly.
|
|
599
|
+
- `cmd+R` reloads only the preview, and `cmd+shift+R` still reloads everything. The page list has moved from `cmd+G` to `cmd+U`, and `F1` opens the palette. Toyon no longer uses `cmd+shift+E` or `cmd+shift+L`.
|
|
600
|
+
- Reloading or closing the tab no longer asks first. What you were typing in the composer, and edits the editor had not saved yet, are still there when you come back.
|
|
601
|
+
- The commit box shows how far the worktree is behind main on a line of its own, with sync beside it, so land is the one button that stands out.
|
|
602
|
+
- A file that is new to the worktree opens as the file itself, rather than as a comparison where every line is added.
|
|
603
|
+
- `Escape` closes the pane you last clicked into, rather than always the editor first.
|
|
604
|
+
- Moving between worktrees with `opt+up`, `opt+down` or `ctrl+tab` briefly opens the collapsed rail so you can see where you landed, and leaves the caret in the chat's box unless you were in the terminal or the editor. The `opt+shift` jump does the same, and now visits finished turns you have not read before worktrees that are still working.
|
|
605
|
+
- A worktree that is working shows a pulsing green dot, and a running step in the chat no longer has a yellow dot after it.
|
|
606
|
+
- Hovering an image in the chat shows it larger, beside the chat rather than over the messages.
|
|
607
|
+
- The widths you dragged the chat and changes panels to are forgotten once, after upgrading.
|
|
608
|
+
|
|
609
|
+
### Fixed
|
|
610
|
+
- In zen, the terminal, editor and design panes are hidden too, and come back as they were.
|
|
611
|
+
- Starting a chat or switching worktrees no longer sends your typing into the terminal.
|
|
612
|
+
- A question from the agent in a long chat keeps its send and skip buttons in view.
|
|
613
|
+
- A long chat scrolls all the way back to its first message.
|
|
614
|
+
- A right-click menu closes when you click anywhere else.
|
|
615
|
+
- A running step's text stays readable while you hover it.
|
|
616
|
+
- In the installed app, the side panels fit the window instead of pushing the rail off screen.
|
|
617
|
+
- When a change is shown inline, the removed lines no longer slide down over the rest of the file.
|
|
618
|
+
- The rail's marker and the address bar move with the panels instead of catching up afterwards.
|
|
619
|
+
- Claude models used through Bedrock or Vertex show their name and version, such as "Opus 4.6", rather than a cut-off identifier.
|
|
620
|
+
- Reaching a usage limit shows the message once, not a second time as an error.
|
|
621
|
+
|
|
622
|
+
### Not yet
|
|
623
|
+
- On macOS, low memory stops a worktree only when the system itself reports pressure. Running short before that is only logged for now, until there is enough data to choose the right point.
|
|
624
|
+
|
|
625
|
+
If Toyon is already running, run `toyon stop` first, then `npx toyon@latest`.
|
|
626
|
+
|
|
627
|
+
## 0.1.0 (2026-09-14)
|
|
628
|
+
|
|
629
|
+
The first release on npm.
|