Repository navigation
v0.3.2
Before upgrading. There are no migrations: the database stays at 0077_channel_opening.
Fourteen things change for an existing deployment:
- OpenBot Desktop's setup window no longer has Runtime updates (moving to a release by its tag,
verifying a baseline, staging, applying and Restore previous release). An installation now
moves only to the app's own release, on Start, with a database backup first (below). Pinned
builds (internal and candidates) move too, where 0.3.1 left them as they were. An installation on
a newer release than the app is still never moved back. - OpenBot Desktop installs the personal edition, and an existing installation becomes the personal
edition on its next Start (below). Each person's Bot computer files and sign-ins are carried over
once into the one shared computer, never over anything already there. - OpenBot Desktop updates a local back end installed by an older app to 0.16.0-rc.9 on Start, saying
"Updating the back end to 0.16.0-rc.9. Its data stays." If that fails, Start carries on with the
back end it has, and tries again the next time. The app carries the back end's CLI from commit
48a3863 (copilotkit4.34.0-pre.48a3863), which installs that release. - OpenBot Desktop's Start rewrites
~/OpenBot/.env: it removesOPENBOT_BROWSER_URL,
OPENBOT_BROWSER_CONTAINER_URL,BROWSER_PORTandOPENBOT_BROWSER_ABSENT, writes
OPENBOT_PUBLIC_URL=http://127.0.0.1:<app port>,OPENBOT_THIS_MACHINE_CONTAINER_HOSTand
COMPUTER_LOOPBACK_RELAYS, and writesINTELLIGENCE_API_URLandINTELLIGENCE_GATEWAY_WS_URL
with127.0.0.1where they saidlocalhost. The server no longer readsOPENBOT_BROWSER_ABSENT. - A Windows installation of OpenBot Desktop from an earlier release has no updater, so install this
release by hand once. Later releases arrive in the app (below). - Claude Agent SDK Bots no longer have Claude Code's own tools (Bash, Read, WebSearch, Agent and the
rest). They act only through the tools OpenBot gives them, as every other Bot does (below). - A Bot registered by its own AG-UI or Mastra address is no longer run to name its conversations:
OpenBot names them itself, as that Bot, on the deployment's model, as it does for built-in Bots.
Such Bots no longer receiveforwardedProps.copilotkit.ui, the catalog of components the chat can
draw (about 100 KB a turn). They still get therender_uitool and its guide. An agent of your
own that read that field no longer finds it. - A routine a Bot creates without naming a time zone runs in the person's time zone, when the
browser sent it, instead of UTC (below). - In the personal edition, every Bot can ask every other Bot for help. The per-Bot handoff settings
are hidden, and taking one away is refused with "In OpenBot Personal every Bot can ask your other
Bots for help." docker-compose.yml: the Bot computer gets theNET_RAWcapability, sopingworks under
Podman as it did under Docker, andhost.docker.internal,OPENBOT_EDITIONand
COMPUTER_LOOPBACK_RELAYS. The server getsOPENBOT_THIS_MACHINE_HOSTfrom
OPENBOT_THIS_MACHINE_CONTAINER_HOST.COMPUTER_SUPERVISOR_CONTAINER_URLset empty gives the
server no supervisor; unset, it ishttp://supervisor:4300, as before.- The Helm chart's bundled back end (the
intelligencesubchart) is 0.16.0-rc.9, from rc.5. Its
Job that installs Learning's queue waits up to 15 minutes for the back end's PostgreSQL, up from 5
(intelligence.learning.queue.migration.activeDeadlineSeconds: 900).--reuse-valuesdrops this
chart's defaults, so an upgrade run with it keeps the 5 minutes: pass the value, or drop the flag. - The Helm chart now sets Automatic Learning's model itself (below), so an upgrade that sets
intelligence.learning.agent.modelis refused: useconfig.learning.model. - Three Teach a Bot changes need the Recorder from this release: a recording is said to be saved
only once the back end has all of it, the first page reached after pressing Record is recorded,
and the Recorder's statuses name OpenBot's back end. - A personal edition set up with
start.shunder v0.3.1 starts on this release. Its package is now
calledopenbot, and the server would have refused the Personal Assistant it seeded aspersonal
as another package's Bot and stopped.brand.yamltakestenant.former_ids: a deployment set up
under one of them keeps its Bots, conversations and deployment name. See
configuration.
Starter tasks
- Your starter Bot offers five tasks to try: connect an app, build an interactive answer, search
the web, read a page in its browser, and add a task to a demo checklist. The suggestions stay in
your first new starter-Bot conversation, including after an upgrade, and never appear in later
conversations.
OpenBot Desktop starts on Windows
A Windows installation of 0.3.1 never finished starting. Now:
- The back end's CLI is given Podman's root connection by name, which Podman accepts where it
refused the named-pipe address. - The CopilotKit account step waits, up to 15 minutes, while setup is still installing Podman,
instead of failing with "Couldn't check your CopilotKit account. Try again." - Moving an installation that never started (every Windows one from 0.3.1) to this release no
longer makes an empty database while backing up, and so no longer loops on "Start fresh". With no
database, nothing is backed up or restored. - A port counts as taken when anything answers on it. On a Mac, a server listening on every address
no longer looks free. - Upgrading or uninstalling no longer fails because the bundled CLI's
node.exeis still running:
the installer stops it and waits up to 30 seconds for it to exit before replacing it. The 32-bit
installer could not see the 64-bit process before.
OpenBot Desktop has one way to upgrade, with a backup and a way back
When the installation is not on the app's own release, Start stops OpenBot, backs up the database,
sets the previous version's files aside, lays out the new release, downloads its images and starts
it, saying "Updating OpenBot from X to Y. Your Bots, sign-ins and data stay as they are." Any failure
puts the files and the database back and starts the previous version: "OpenBot couldn't update to Y,
so it's still on X, with your data as it was." If the app stopped part way, the next Start puts
things back first. The database is restored even while something else holds a connection to it.
- The line under Start's rows names the step running now: "Stopping OpenBot.", "Backing up
OpenBot's database.", "Downloading OpenBot Y.", "Installing OpenBot Y.", "Starting OpenBot Y." or
"Putting OpenBot's database back.", and after a rollback "OpenBot is back on X." On Windows it used
to say "Stopping OpenBot." for a whole Start. - Setup lays out only
docker-compose.ymland the list of images: no source for the server, app or
worker, nothing installed on the computer itself, and no "Recorder" or "Your browser" rows. - The first Start after an app update no longer fails updating the local back end while Quit had it
stopped: it starts the back end first and updates it once it is up. - OpenBot left running behind the app (an installer closed the app without Quit, or it crashed) is
no longer shown as current when it is older than the app: the window stays on setup, and Start
upgrades it. One on the app's release is shown and run by the app, so the menus no longer say "Not
running", Quit stops it, Stop and Restart work, and so do local folders and the watch that sends
the window back to setup when the server stops answering. - Installing shows a progress bar with how many items are left, instead of each image's size and
speed, and no time elapsed.
OpenBot Desktop tells you when a newer version is out, and Windows updates itself
OpenBot Desktop on a Mac or on Windows checks at launch and every six hours while it runs, and shows
a bar in OpenBot's own window, "OpenBot 0.3.2 is available.", with Update and restart and a close
button. The setup window offers the same, with Not now. Closing either hides the offer until a
newer version comes out, across reloads and restarts. Update and restart downloads the update
and checks its signature while OpenBot keeps running, then stops OpenBot and restarts the app, and
that Start moves your OpenBot to the new release (above). On Windows the installer then runs with a
small progress window and no questions, and starts the new version; your installation and settings
stay as they were.
Before, only the Mac app's setup window offered an update, checked once at launch, and Not now
lasted until the app was next opened; the Windows app never updated itself. The app reads its updates
from downloads.copilotkit.ai, and from GitHub only when that does not answer. Internal and
candidate builds have no updater and show nothing, and a self-hosted OpenBot (Helm or Compose) never
checks.
OpenBot Desktop installs the personal edition
One computer is shared by your Bots, and you start with the Personal Assistant. Before, it
installed the team edition, with its admin screens, the fintech example's Bots and a computer for
each Bot. It runs no supervisor and no bundled Bot containers, so an installation downloads three
fewer images. The Bot framework picked during setup is a second Bot beside the Personal Assistant.
See Personal edition.
- New Bot works on a deployment with no managed Bot, Desktop included: a Bot can be made from
instructions alone, where Desktop said nobody could make a Bot at all. - A Bot computer whose Compose network was recreated is replaced onto the live network, instead of
failing with "network not found".
Teach a Bot works inside the OpenBot Desktop window
- The browser is in OpenBot. Desktop no longer opens a separate Chrome or Edge window: in the
personal edition, the browser you teach in runs on your one computer and shows in the page. The
note explaining why it was not your own browser is gone. - Narration stays on the device. In the Desktop window, what you say is turned into text on
the computer: by the Speech framework on a Mac, which asks once for speech recognition ("Your
voice never leaves it."), and by Windows' own speech recognition on Windows. - Narration says only whether it is on: "Narration is on. We're capturing your voice." or
"Narration is off.", on every deployment. The longer explanations (no microphone, permission
denied, unsupported browser) are gone. - Recordings are saved. The back end's gateway address was handed to the Recorder as
ws://localhost:<port>, which it refuses, so every Desktop recording was kept in the browser as
not saved. The server now hands outlocalhostas127.0.0.1, on any deployment, and Desktop
writes its back end's addresses that way. - Saved means saved. A recording is said to be saved to your Learning space only once the back
end has all of it. One still on its way says "Saving"; one the back end refused, such as one sent
to a back end with Trajectories turned off, says it wasn't saved and is kept in the browser to be
sent again later. - The first page is recorded. A page reached while Record was still starting, such as an
address typed right after pressing it, is recorded as the first step, and network capture starts
on the page the tab is really on.
Signing in from OpenBot Desktop
- Outside sites open in your default browser,
window.openincluded, and come back to
127.0.0.1. Desktop writesOPENBOT_PUBLIC_URL, so apps that sign in with their own OAuth, such
as Notion, can connect, andTRUSTED_ORIGINSlists127.0.0.1first. - The CopilotKit sign-in can't get stuck. While it waits, setup shows "Check that the page shows
this code:" with the code, an Open the sign-in page link that reopens the approval page, a
note for an account that lands on the CopilotKit dashboard after choosing an organization, and
Cancel. The back end's own sign-in prompt does the same. Before, an account in several
organizations waited forever. - No "access data from other apps" prompt on a Mac. The back end's CLI and every container
command use OpenBot's own Docker configuration, with your context, proxies and plugins but none of
your saved registry logins, so Docker Desktop's credential helper no longer makes macOS ask, and
setting up the back end no longer times out behind that question. Everything OpenBot downloads is
public. - A covered window keeps running. On a Mac, a window opened behind others (at login, or after
switching away) stayed blank and ran no setup step until uncovered. It now keeps running.
Claude Agent SDK Bots use only OpenBot's tools, and start however much they hold
- A Claude Agent SDK Bot acts only through the tools OpenBot gives it, with its approvals and
boundaries; Claude Code's own tools are off. A tool it finds with tool search can be called. - A Bot holding several apps (HubSpot, Notion and Google Calendar, for one) failed to start with
"Argument list too long", because its prompt and tool list went on Claude Code's command line. They
no longer do. If Claude Code can't start at all, the conversation says "This Bot couldn't start, so
it didn't answer. Send your message again, and restart OpenBot if it keeps happening."
Bots work in your day and reach what is on your computer
- The browser sends the person's time zone with every run, and Bots are told "Today is ,
in the person's time zone, ". Without it they use UTC. - A Bot can set up a routine however many apps it holds: the routine tools are never moved behind
tool search. - A Bot registered at
127.0.0.1or another loopback address on the computer running OpenBot is
reached throughOPENBOT_THIS_MACHINE_HOST(unset by default; Desktop setshost.docker.internal).
The address you typed is what is checked and kept. A value with a scheme, port or path stops the
server at boot.COMPUTER_LOOPBACK_RELAYS(<port>=<host>:<port>,…) relays a computer's own
loopback ports, and a malformed value stops the computer at start. - Notion, and any app that lists its tools only under a person's own sign-in, gets its tools when
the first person connects it. Before, it showed Connected with no tools until an admin pressed
Refresh tools.
Skills each have their own page
- Skills (Admin → Skills, and Settings → Skills in the personal edition, which was "Skills for every
Bot") lists each skill as one row with its name, what it does and how many Bots offer it, and the
row opens the skill's own page. There, each Bot has a switch, the skill's name, instructions and
tools can be edited (the tools as one row per app), and deleting asks first. New skill is a page
of its own, and opens the skill once saved. - The
/menu, the chip it puts in the message box and the badge on a sent message show a skill's
name instead of its command. The message still carries the command, so a renamed skill keeps its
badge. On the home page,/offers the skills of all your Bots, and a message that uses one goes
to a Bot that offers every selected skill, with the skills' instructions; when none does, it is
refused with "No Bot offers all the selected skills. Choose different skills or a Bot with @." A
Bot picked with@gets the selected skills it offers, and the others are left out. The routing
audit records the Bot that receives the message. The placeholdersummarizecommand is gone. - In the personal edition every Bot offers every skill: the skills there are, each new skill, and
every skill for a Bot made later. Each Bot is given them once, so a skill switched off for one Bot
stays off. - A skill can ask for web research (
@research/search,@research/fetch). Saving one was refused
with "No tool by that name has been seen here".
Every screen names the part of OpenBot it means
- No screen names the back end's own product any more; it is all OpenBot. OpenBot Desktop's setup
window names the parts it installs and starts (the front end, the back end, the database, your
Bots and the computers they work on), and its progress rows, errors and Status window say "the
back end": "Waiting for the back end", "Stopping the back end". In the app, Settings, This
computer shows a "Back end" section, Setup's first row is "Back end", Memory marks a memory "Kept
in the back end", Automatic learning says "the skills OpenBot proposes" and "Manage Learning in the
back end dashboard", and the server's errors that reach the browser name the back end. The
Recorder's disclosure says recordings go to the learning part of OpenBot's back end. Env var names
(INTELLIGENCE_API_URLand the rest), logs and the docs underdocs/andcharts/are unchanged. - The Status window and Settings, This computer list each part by what it does: "Front end and
Bots", "Background jobs", "Database" and "Bot computer" under "App", and "Conversations, memory and
learning" under "Back end". Docker's names stay in Copy diagnostics. The menu bar and tray no
longer have the item that opened the back end's own dashboard. - A Bot's responsibilities are its goals, on every screen that shows them: "Goals", "New goal", "No
goals yet", "Create goal", and "Worked on a goal." in the conversation.
The Helm chart takes an Anthropic key and a model router's address
secrets.anthropicApiKey (or anthropic-api-key in your own Secret) reaches the server as
ANTHROPIC_API_KEY, the way the OpenAI key does. A new config.model block names the provider
(BOT_PROVIDER), the Bots' default model (BOT_MODEL) and a model router's endpoints
(OPENAI_BASE_URL, ANTHROPIC_BASE_URL), each set only when given, and a provider the server would
silently ignore is refused at install.
- Automatic Learning follows the keys: with an Anthropic key alone, its agent runs
anthropic/claude-sonnet-5-5on it; otherwise it stays onopenai/gpt-5.5and the OpenAI key,
as it does whenever the keys are in a store the chart can't read.config.learning.modelnames
another, asprovider/model. The chart sets that model through the agent's Secret, so it refuses
intelligence.learning.agent.model. - The agent reads its model when it starts: after changing
config.learning.model, or adding or
removing a key, restart theopenbot-intelligence-learning-agentDeployment. - The chart README's upgrade section says what to do when the Learning queue Job runs out of time,
and why to give your values again rather than--reuse-valuesafter a failed revision.
OpenBot runs on CopilotKit 1.85.0
@copilotkit/runtime, react-core and shared move from 1.83.0, and @copilotkit/learning from a
patched 0.0.1. AG-UI stays 1.0.2, the version CopilotKit 1.85.0 itself pins. A run keeps its
conversation until its last events reach the back end, so a failed run's error is no longer lost,
and lets go of it itself when it ends, so the next run, such as the one that carries a command's
result back to a Bot, starts at once. With product telemetry on, each run's analytics context
reaches the back end. Generated interfaces write A2UI's version as 1.0, and the ones a Bot drew on
0.3.0 and 0.3.1, written v1.0, still draw when their conversation is reopened.
Smaller changes
- A conversation's failed last run shows its error again after a reload or when you come back to
it. A stopped run is not a failure. - A Bot knows that an answer it got from another Bot with
message_botis that Bot's. Asked to
quote what Knowledge said, General Assistant quotes it, instead of saying it never arrived or
calling the words its own. - Every Bot knows its own name. "Ask the Knowledge Bot for one sentence on Helm", sent to Knowledge,
is answered by Knowledge; a Bot that triesmessage_boton itself is told nothing was sent,
before any approval is asked. - A new conversation's sidebar name no longer waits a minute when the summary runs before the
conversation's first run has reached the back end. That miss is retried in 15 seconds, and no
longer logsTHREAD_NOT_FOUND. - On a narrow window, such as Desktop's, the Computer sheet and a Bot's details sheet show the
conversation's waiting approvals at their top, where the approval used to sit hidden behind them.
Answering there answers in the conversation. - Approvals and a Bot's questions are drawn as one kind of card: each answer is a row saying what
it does, the first is picked, and one button sends the pick and is named for it. Keys 1 to 9 pick
a row and Enter sends it, on the newest card waiting and never while you are typing. A Bot's
approval takes words instead in a last row ("Tell the Bot something else…"), which replaces the
reason field, and a Bot's question in "Answer something else…". Answering folds the card into one
line with the answer; an app's approval then folds away into the conversation's line for that
action. - The model picker under the message box is a CPU icon, with the model and its thinking in the
tooltip. For a model with thinking levels it opens on two columns, the models and the levels, and
stays open after a model is picked so its thinking can be picked next. - Save sits on the right of its form, with Cancel (or "Don't save", "Don't create") before it:
Profile, Passwords, app consent, a Bot's proposed skill or Bot, and Automatic Learning. - The personal edition's home page has a Meet OpenBot for Business link at the top right, which
stays closed for the session once you close it. - A quotation's source no longer starts with a comma.
- The notifications prompt over the message box has the message box's background.
- After a person hands a Bot's browser back, the Bot no longer has to take a snapshot before it
opens another page. Only clicking, typing, pressing keys and scrolling on the page the person
left still wait for one. The wait no longer survives a restart, so the first page a new
conversation opens after OpenBot was quit and reopened no longer fails with "Take a fresh browser
snapshot after handback before acting." A conversation never shows that instruction, which is
meant for the Bot.