Skip to content

Commit b3137b5

Browse files
authored
Changelog for 0.3.1, from the code (#1045)
* Write the 0.3.1 changelog from the code Rebuilt from each change since v0.3.0 (#1037, #995, #996, #1041, #1040, #1039, #1042, #1043) and the open #1044, every line checked against its diff. The terminal entry #1037 added under 0.3.0 moves to Unreleased, since v0.3.0 does not contain it. * Match the 0.3.1 changelog to #1044's final head An operator's model is the default while the credential lists it, nothing writes one on their behalf, one person picks from every listed model, a team picks among the models an admin allows, and a pick applies from the next message. Checked against 90d2201.
1 parent e240ea8 commit b3137b5

1 file changed

Lines changed: 195 additions & 10 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 195 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,201 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged.
88

99
## Unreleased
1010

11+
**Before upgrading.** There are no migrations: the database stays at `0077_channel_opening`. Ten
12+
things change for an existing deployment:
13+
- On OpenBot Desktop, the first Start after the app updates to this release moves the installed
14+
OpenBot to it too. Until now an installation kept the release it was installed at until you moved
15+
it under Runtime updates. While the old release keeps running, Start checks the installation
16+
against its release's published manifest and downloads the new release and its images; then it
17+
stops OpenBot, backs up the database, installs the new release and starts it, which can take a few
18+
minutes. A move that fails is undone, database included, and the old release starts. Pinned builds
19+
(internal and candidates), and an installation already on a newer release than the app, are left
20+
as they are (below).
21+
- OpenBot Desktop installations signed in to CopilotKit with no Composio key get one at their next
22+
Start: the bundled CopilotKit CLI asks CopilotKit for this installation's own Composio project,
23+
and the key goes to the app's protected store, never to `.env`. Apps, unavailable on Desktop since
24+
0.3.0, become available. A `COMPOSIO_API_KEY` in `~/OpenBot/.env` or the environment, or an Arcade
25+
choice, still wins, and then nothing is asked (below).
26+
- When nobody has picked a model, built-in Bots now answer on `BOT_MODEL` while the provider lists
27+
it, and otherwise on the middle of the provider's current line: the newest model of each line,
28+
ordered by price, and the one in the middle (on 2026-11-05, `gpt-6.1-terra`, `claude-sonnet-5-5`,
29+
`gemini-3.8-flash` and `grok-4.7`). With no `BOT_MODEL`, that replaces the tenant package's
30+
`default_model` (`gpt-5.6-terra` in the bundled packages) or, on Anthropic, `claude-sonnet-5-5`.
31+
On OpenAI's own API, `BOT_MODEL` now applies to built-in Bots, where it used to be ignored. A
32+
`BOT_MODEL` the provider doesn't list gives way to the middle: a ChatGPT plan given `gpt-5.5` runs
33+
the plan's middle model. Behind a gateway in `OPENAI_BASE_URL`, the configured model stays the
34+
default while the gateway lists it, and until the provider's list has been read the configured
35+
model is used. The Bot framework picked at setup, when it is OpenBot's own LangGraph or Claude
36+
Agent SDK harness, is sent the same model on every run (below).
37+
- Nothing writes a `BOT_MODEL` on your behalf any more, so an unset one means the middle of the
38+
line. `docker-compose.yml` gives the picked harness an empty `BOT_MODEL` when it is unset, rather
39+
than `gpt-5.5`. OpenBot Desktop no longer writes `BOT_MODEL=claude-sonnet-5-5` for an Anthropic
40+
key, and takes out the one it wrote at the next Start; a model chosen on a Desktop setup screen
41+
(an OpenAI-compatible endpoint's, or a Google or xAI sign-in's) is still written and stays the
42+
default. The harness answers on the model the server sends each run, and only when the server
43+
sends none, because it has not read the provider's list, on the provider spec file's model for it
44+
(`gpt-4o-mini` on OpenAI).
45+
- The server now reads the provider's model list (a plan's own, through its harness) and
46+
`https://models.dev/api.json` when it starts and every six hours after, whether or not anybody
47+
picks, and again at once, at most once a minute, when a provider refuses a model as unknown or
48+
unsupported. A refresh that fails keeps the last good list. `OPENBOT_MODEL_CAPABILITIES_URL`
49+
points at a mirror of models.dev, or `off` reads none, and then the default is the configured
50+
model while the provider lists it.
51+
- With `OPENBOT_SINGLE_USER=true` (OpenBot Desktop and the personal edition among them), the one
52+
person is offered every model the provider lists, with no switch and no allowlist. Admin →
53+
Providers shows neither, and a model allowlist saved earlier no longer applies.
54+
- In a team, people pick among the models an admin allows under Admin → Providers → Allowed models,
55+
plus the default, and "Let people choose a model" is gone. Until an admin allows one, people get
56+
the default and see no picker: a team that let people pick before upgrading has no picker until
57+
models are allowed there, and one whose list already holds models now shows them, whatever the old
58+
switch said. A pick on a model no longer allowed, or no longer listed by the provider, runs on the
59+
default and is kept for when it is offered again. "Only allowed models" still refuses a run on any
60+
model not allowed, the default included, so with it on, allow the new default (above) or runs
61+
nobody picked a model for are refused.
62+
- A Bot's commands now run in one interactive bash on its computer, one for each Bot a person uses,
63+
instead of a fresh `bash -c` each (below). `cd` and exported variables carry over to the next
64+
command. A command's stdout and stderr come back together as its output, with `stderr` empty, as a
65+
terminal shows them. Something a command starts in the background with `&` keeps running after the
66+
command returns, even while it still prints; such a process used to hold the command open until
67+
its time limit stopped both. Two commands from the same Bot and person run one after the other,
68+
and the wait counts against each one's time limit. Commands see `TERM=xterm-256color`, and
69+
`PAGER=cat`, `GIT_PAGER=cat` and `GIT_TERMINAL_PROMPT=0` unless `COMPUTER_SHELL_ENV` passes
70+
others.
71+
- Upgrade the server and its computers together. A computer from 0.3.0 has no terminal for the
72+
Computer panel's new Terminal tab to connect to, and refuses every pointer move made with no
73+
button held, which the live screen now sends as you hover.
74+
- The Python LangGraph and Pydantic AI Bots set no upper bound on `google-genai`, so an image of
75+
either built from source since 3.0.0 came out on 2026-11-06 installed it, and 3.0.0 sends Gemini
76+
requests to `/v1` instead of `/v1beta`. Both now hold `google-genai` at 2.34 or later and below 3,
77+
and the Google ADK Bot names the same range, so Gemini is called on `/v1beta` as before.
78+
79+
### A Bot's commands run in one live shell you can watch and take control of
80+
81+
The Computer panel has a Terminal tab beside the Screen: a real terminal where you watch each of the
82+
Bot's commands typed and its output stream, in colour. Whoever may watch a Bot's screen may watch
83+
its terminal. Take control gives you its keyboard, as it does the browser's, and the Bot waits until
84+
you hand back, then carries on in the same shell. The panel opens on the view the Bot last worked
85+
in, the terminal after a command and the screen after a page; a tab you pick, or a command you click
86+
in the conversation, holds until the panel closes.
87+
88+
- **The Bot gets what it got before.** Each command's output and exit code come back within the same
89+
time limit (120 seconds unless the Bot asks for up to 600) and the same 64 KB of output, and
90+
approvals and policy for commands are unchanged. What changes is under Before upgrading.
91+
- **Commands in the conversation and in Activity are terminal blocks**: the prompt and the command,
92+
the last lines of output with "Show all N lines" for the rest, and how it ended, as "Exit 0",
93+
"Exit 1", "Running", "Blocked", "Declined" or "Done by you". Clicking one opens the Computer panel
94+
on its terminal.
95+
- **A shell left busy is not typed over.** If you hand back with something still running in the
96+
foreground, the Bot's next command is not run and the Bot is told why. A command the Bot sends
97+
unfinished (an unclosed quote, bracket or here-document) is abandoned at once with exit code 2,
98+
instead of waiting out its time limit.
99+
- **The shell ends** when the computer is stopped or reset, or after an hour nobody used or watched
100+
it, and a new one starts when it is next needed.
101+
102+
### Taking over a Bot's screen feels like using your own browser
103+
104+
- **Clicks land at once.** Your browser sends at most one pointer position per screen refresh and
105+
adds scrolls together, and the Bot's computer replaces a waiting move with the newer one instead
106+
of playing every move before your click. Clicks, keys and pastes are never merged or dropped, and
107+
land in the order you made them.
108+
- **The picture is the page as it is now.** The computer sends the next frame only once the last has
109+
gone out, with at most two on their way to your browser, and a newer frame replaces one still
110+
waiting, so a slow connection no longer shows frames seconds old. The once-a-second screenshot
111+
stops while the full-size live view is open, and a hidden tab draws nothing until you come back.
112+
- **Keys and the mouse behave as on your own page.** Hovering is a hover, not a drag with the left
113+
button held. Letting go of the mouse outside the screen lets go on the page, and releasing Command
114+
releases the keys held with it. Emoji type as text, Firefox scrolls normal distances, and the
115+
cursor is an arrow rather than a crosshair.
116+
- **A missed input is a note, not an error screen.** One key or click that doesn't land shows a
117+
short note in the corner for a few seconds, and the screen stays live. One missed check of who has
118+
control no longer pauses your input; two in a row do, and the computer still refuses input from
119+
anyone not in control. A click made the moment the screen appears is held until the connection to
120+
the computer opens, not lost.
121+
122+
### OpenBot Desktop moves your OpenBot to the app's release when it starts
123+
124+
An updated app used to keep running the OpenBot it was first installed with, so server fixes never
125+
reached an existing installation. Now Start moves a stable app's installation to the app's own
126+
release, through the same path as Runtime updates, and says "Updating OpenBot from v0.3.0 to v0.3.1.
127+
Your Bots, sign-ins and data stay as they are." while it runs. A modified installation is refused
128+
before anything stops.
129+
130+
- A move that fails before OpenBot stopped changes nothing, and the next Start tries again. One that
131+
fails after is undone, the database restored from its backup, and the old release starts with a
132+
note saying so. Start does not try that release again by itself; Runtime updates can.
133+
- Stop or Quit during a move stops it, and the next Start recovers it as any interrupted update.
134+
- Runtime updates, and this move, download only the images this installation runs: eight for 0.3.0,
135+
where the release names nineteen. Staging an update no longer fails on an Apple silicon Mac with
136+
"no matching manifest for linux/arm64/v8" over the all-in-one `openbot` image, which Desktop never
137+
runs and which 0.3.0 published for x86-64 only.
138+
139+
### OpenBot Desktop gets your apps from your CopilotKit sign-in again
140+
141+
0.3.0 started every Desktop installation without a Composio key, so apps were unavailable unless you
142+
put your own `COMPOSIO_API_KEY` in `~/OpenBot/.env`. The Account step now connects your apps once
143+
you have signed in ("Connecting your apps…"): the bundled CopilotKit CLI, with its own sign-in,
144+
makes or reuses this installation's Composio project, and the app keeps the key in its protected
145+
store. If that fails, the step says so, with Connect apps to try again and Continue to go on without
146+
apps, and every Start tries again by itself without ever stopping Start. An installation signed in
147+
under 0.3.0 gets its key at its next Start, without signing in again.
148+
149+
### Signing in with ChatGPT in Desktop setup no longer ends on "localhost refused to connect"
150+
151+
- A browser tab that comes back after the sign-in finished (from "Open the sign-in page", or from
152+
approving again at OpenAI) gets an OpenBot page saying OpenBot is signed in and the tab isn't
153+
needed. OpenBot answers that address for 15 minutes after a sign-in ends, then gives the port up,
154+
and gives it up sooner to a new sign-in or to the Codex CLI.
155+
- Starting a sign-in again no longer fails with "port is already allocated". The earlier sign-in is
156+
stopped first, and so is one you leave by picking another provider, Change, Escape or leaving the
157+
screen, whose tab then says the sign-in ended rather than "You're signed in". Quit stops it too.
158+
- A tab left over from an earlier attempt can no longer end the attempt in progress: it is told its
159+
link is out of date.
160+
161+
### Pick the model and thinking effort for every Bot, from the provider's live list
162+
163+
The composer's model picker is now a text button naming the model and its thinking effort ("Claude
164+
Sonnet 5.5 · High"), and its list adds a Thinking group with the levels the model in use accepts,
165+
its default marked. A model is only ever shown, saved and sent the levels it takes, and switching to
166+
a model that doesn't take the chosen effort clears it. The pick is still kept per person and
167+
conversation, a change applies from the next message, and a new conversation saves both before its
168+
first message.
169+
170+
- **Who picks from what.** One person on their own machine picks from every model the provider
171+
lists. In a team, people pick among the models an admin allows under Admin → Providers → Allowed
172+
models, which lists each with its maker's mark and thinking levels, and see no picker until one is
173+
allowed (above).
174+
- **More Bots and every sign-in.** It is offered for the Bot framework picked at setup when it is
175+
OpenBot's own LangGraph or Claude Agent SDK harness, and on OpenAI, Anthropic, Google and xAI keys
176+
and sign-ins, any OpenAI-compatible endpoint, and ChatGPT and Claude plans, each listed from its
177+
own source (see The model list in `docs/configuration.md`). A Bot on any other framework, or a
178+
harness somebody brought, still picks its own model.
179+
- **Fixed: every message failed on a ChatGPT plan** with "The 'gpt-5.5' model is not supported when
180+
using Codex with a ChatGPT account". A plan now runs only a model its own list offers.
181+
- **Out of credit says so.** A provider refusing because the account is out of credit or at its
182+
spending limit now reads as that, naming the provider and quoting it, on built-in Bots (which
183+
showed "Forbidden" or a retry count) and on the LangGraph harness (which asked you to sign in
184+
again, and flagged the sign-in as failed). Any other refusal from the provider ends the harness's
185+
run with the provider's own words, where the run used to stop with no answer.
186+
- Admin → Providers names who serves the model: OpenAI, Anthropic, Google, xAI, ChatGPT plan, Claude
187+
plan or OpenAI-compatible endpoint, with Google, xAI and Claude marks beside OpenAI's and
188+
Anthropic's. Each run logs one `run-model` line with its Bot, run id, model and effort.
189+
- `CHATGPT_CODEX_CLIENT_VERSION` (default `0.167.0`) is the Codex client version the LangGraph
190+
harness names when it reads a ChatGPT plan's list.
191+
192+
### Every step a Bot takes with one of OpenBot's own tools reads as words
193+
194+
Each tool OpenBot itself gives a Bot is named in words chosen for it, in the present while it runs
195+
and the past once done ("Using a skill", then "Used a skill"; "Saved a memory"; "Checked existing
196+
Bots"), where most showed words split from their identifier ("Copilotkit load skill", "Remember
197+
personal fact"). That covers skills, memory, follow-ups, check-ins, responsibilities, asking a
198+
person or another Bot, subtasks, the browser, and files and commands on the Bot's computer or yours.
199+
200+
### The Mastra Bot's image installs from a lockfile
201+
202+
The Mastra Bot was the one Bot image built from version ranges with no lockfile, so two builds of
203+
one release could ship different code, and a build could fail on a package npm had only just
204+
published. It now installs from `agent-mastra/bun.lock` with `--frozen-lockfile`.
205+
11206
## 0.3.0
12207

13208
**Before upgrading.** Forty things change for an existing deployment:
@@ -159,16 +354,6 @@ Newest first. `Unreleased` is what is on `main` and not yet tagged.
159354
`secrets` restarts the server.
160355
- Migration `0077_channel_opening` adds a nullable `channels.opening`.
161356

162-
### A Bot's commands run in one live shell you can watch and take control of
163-
164-
The Computer panel has a Terminal tab beside the screen: a real terminal where you watch each of the
165-
Bot's commands typed and its output stream, in colour. Take control gives you the keyboard there, as
166-
it does in the browser, and the Bot waits until you hand it back, then carries on in the same shell.
167-
`cd` and exported variables carry over from one command to the next. The Bot still gets each
168-
command's output and exit code within the same time and size limits, and approvals and policy for
169-
commands are unchanged. A command's stdout and stderr now come back as one stream, as a terminal
170-
shows them.
171-
172357
### Teach a Bot: do a task once in your own browser, and your Bots learn it
173358

174359
The OpenBot Recorder is a Chrome and Edge extension that records a task while a person does it and

0 commit comments

Comments
 (0)