Skip to content

A simpler New Bot first screen, and LangChain's own name and mark - #1321

Merged
davidmckayv merged 49 commits into
mainfrom
claude/new-bot-simpler
Nov 9, 2026
Merged

davidmckayv merged 49 commits into
mainfrom
claude/new-bot-simpler

Conversation

@ataibarkai

@ataibarkai ataibarkai commented Nov 9, 2026 •

Copy link
Copy Markdown
Contributor

This follows #1317, which has merged. main is merged into this branch (f9a1cc6), so against main the diff is only two things:

  • a simpler version of New Bot's first screen;
  • LangChain's own name and symbol in place of "LangChain (LangGraph)".

What this changes

1. A simpler New Bot first screen (round three, variant ieEiHgNwfDYs, 092df70)

Only app/src/components/agents/new-bot-sheet.tsx changes.

  • Who can see it: the Private and Public tiles keep their icon and title. Their descriptions are gone.
  • Isolated: its always-on line ("A computer of its own, instead of sharing yours.") is gone, since the tooltip beside it says that. When Isolated can't be ticked, the reason still shows, and the checkbox is described by it.
  • Custom agents:
    • The large Connect a custom agent heading, its chevron button and its sentence become one small uppercase label, like the form's other section labels. It is still the section's h2, still takes focus on Back, and still names the region.
    • Framework rows lose their filled tiles. Each is one line: the colour logo, the name, then the grey summary, cut off with "…". A row fills only on hover. The standalone list (no built-in Bot) uses the same rows.
  • Result: on a 900px desktop sheet with three apps, all four named frameworks (Claude Agent SDK, LangChain, Google ADK, AWS Strands) show above the footer before scrolling. main shows one.

2. LangChain's own name and symbol (4d58508, formatting in f61a51c)

  • Name: everywhere a person reads it, "LangChain (LangGraph)" is now LangChain:
    • the New Bot sheet
    • "Powered by …" subtitles and "Connected from …" default instructions
    • the setup row ("Runs on …")
    • OpenBot Desktop's plan note
    • the subtitle quoted in docs/personal-edition.md
  • Description: "Agents built with LangChain, on any model." It doesn't mention graphs, as Atai asked.
  • Mark: shared/marks/langgraph.svg is LangChain's LangChain_Symbol_Black.svg, verbatim apart from a <title>, with its source in shared/marks/README.md. In dark mode it sits on the white tile every mark gets.
  • Unchanged: the id langgraph, the agent-langgraph* folders and images, the langgraph package, setup commands, the harness contract, stored data, and operator docs that describe the LangGraph software itself.
  • Saved subtitles: a subtitle saved under the old name ("Powered by LangChain (LangGraph)") still follows a change of harness. That name joins "LangGraph" in the catalogue's earlier names in server/src/tenant-package.ts, and the legacy-name test runs for both.

Sources, checked 2026-11-09:

Nothing added. No new libraries, components or CSS.

Where it runs

  • New state that outlives a request? None. These are display strings, one SVG and browser UI.
  • What happens on the second replica? Nothing different. Every replica reads the same catalogue.
  • Anything serialised? No.
  • Anything fanned out to a browser? No.
  • New listener, port, or schedule? No.

Boundary and audit

  • Every acting call still goes through the gateway. Nothing about how a Bot is reached changed.
  • No new refusals or failures.
  • Nothing new is trusted from the client.

Changelog

Proof

Screenshots: https://claude.ai/artifact/JHtsj4jeC8CT1Vrd3vTniJ (private). They can't be embedded here, so they live on that page. It shows the old screen (before #1317), then before (= main now, #1317's two-tier screen) and after (this PR):

  • the LangChain row up close, light and dark;
  • the top of the sheet and the custom agents, light and dark, desktop and phone.

Checks run at the same tree as f9a1cc6 (my local merge of main matched it exactly):

  • cd app && bun test tests/new-bot-sheet.test.tsx tests/bot-settings-rows.test.tsx tests/bot-summaries.test.ts tests/harness-mark.test.tsx: 40 pass.
  • bun test shared/: 295 pass.
  • cd server && bun test tests/bot-knows-its-model.test.ts tests/bot-knows-its-framework.test.ts tests/picked-skill.test.ts: 35 pass.
  • cd app && bun run typecheck and cd server && tsc --noEmit: clean.
  • bunx biome format and bunx biome lint --error-on-warnings over every tracked file: clean.

Checks run earlier on this branch:

  • cd desktop && bun test src/ProviderPicker.test.tsx: 54 pass.

Not run locally:

  • server/tests/tenant-package.test.ts and agent-profile-store.integration.test.ts need Postgres with pgvector. CI runs them.
  • The real app with a server behind it.

🤖 Generated with Claude Code

https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

ataibarkai and others added 30 commits November 8, 2026 12:45
The person's browser and a Bot's browser now look like a desktop browser
rather than four stacked bars around a white box:

- Tabs sit on the window's frame colour, and the tab that shows opens into
  the toolbar. Close buttons appear on the active and hovered tab.
- The address is a pill with a lock for secure pages.
- On the Browser page, Record moves to the end of the toolbar, the page sits
  flush under it, narration status becomes a slim status bar, and an empty
  tab shows the OpenBot orb and a search field instead of a blank page.
- A Bot's full-size view opens over a frosted backdrop rather than black,
  with its page flush under the bar, and the preview card names the Bot
  and the site on a frame above the picture, with a dot while it is live.

Behaviour, roles and names are unchanged; the existing browser and
computer tests pass as they were.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"Browsed 1 page" becomes "Browsed example.com", and several pages on one
site read "Browsed 3 pages on gov.uk". Pages on more than one site are
still counted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The home page showed an empty "Explore Bots" box saying "Nobody has shared
a Bot with you yet" to the one person on their own computer, where nobody
else can share a Bot. In the personal edition the home page is now just
the greeting and the composer. The edition is read before the page draws,
so the composer does not move. The team edition is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The page was titled "Preferences" under a nav item called "General", opened
on a full-width name field with its own Save button, and ended in a large
standing-instructions box. Now, following the screen layout rules for free
text:

- Title and nav agree: General, with one plain sentence under it.
- "About you": Name and Standing instructions are rows that state the
  current answer and open a dialog to change it.
- "Appearance": dark theme, skin and message list emphasis.
- The shortcut reads "New conversation", as OpenBot calls it elsewhere.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
"Where updates go" drew a switch for Push, Slack, Microsoft Teams and SMS
under each of four kinds of update, so a fresh install showed sixteen
disabled switches marked "Not set up". Now only channels that can carry
something get a switch, and with none set up the section says in one
sentence that updates stay in OpenBot. A hidden channel's stored choice is
kept and saved as it was, so it returns as the person left it once the
channel is set up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- "Make a coworker" is "Make a Bot", and its summary says Bot.
- "Write a skill" no longer calls a skill a "/ command".
- A Bot's page drops "Review this Bot's activity and settings": the Bot's
  own role, just under its name, already says what the page is about.

Only titles and summaries a person reads change; the instructions the
model follows are untouched.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The computer panel's Activity list drew a 180px dashed box when it was
empty, about as tall as the screen card above it. It is one quiet line
now, with the same sentence.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
OpenBot's mark is an iridescent glass orb, and the brand's glass was
nowhere in the app. The frame now takes it:

- A soft wash of the orb's cyan, lilac and pink sits behind everything,
  quieter at night.
- The sidebar is a frosted panel floating on it, with the same rounding
  as the page.
- The page is a whiter, solid sheet lifted by a soft shadow, so nothing
  is ever read through a blur.

It lives in its own app-only stylesheet (frame.css): theme.css keeps
declaring only shadcn's tokens, the glass is drawn from those tokens, and
only the wash uses the orb's own colours. Skins keep their own frames, and
"reduce transparency" gets the solid frame. Four independently seeded
design explorations all arrived at this frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Under the preview of a Bot's browser, a footer row said "The Bot has
control." beside Take control. That status now floats over the foot of the
screen itself, frosted, as the agent browsers people know draw it, so the
one thing a person watching may want to do is on the thing they are
watching. While the person holds the wheel, the amber bar saying so stays
where it was, with the same words.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The app was set in Inter while open.bot is set in Atkinson Hyperlegible
Next, so the product and the page people download it from read as two
things. Atkinson was drawn to keep look-alike characters apart (I, l, 1;
O, 0), which suits an app full of addresses, codes and names. Every one of
the four seeded design explorations chose it on its own.

OpenBot's own look only, in an app-only stylesheet: skins keep their faces
(OpenDuet still has Inter), theme.css and the Recorder extension are
unchanged, and removing one import brings Inter back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A conversation whose Bot was working showed it only by its avatar's
animation. The row now also says "Working" where its time goes, in indigo,
the colour of the focus ring and the one colour that means a Bot is acting
right now. The time comes back when the work is done.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From the design critique of today's app: the Computer pane was a 400px box
in which a page could be glimpsed, not read, and it said "The Bot hasn't
opened a page yet" right under a reply saying the browser opened one.

- The pane is 560px, so the page on it can be read; on a narrow window
  it still slides over the conversation as before.
- Above the page sits an address bar: the site in ink and the rest of the
  address in grey, a lock for a secure page, and a dot in the Bot colour
  while the picture is live.
- The frosted status names the Bot ("Personal Assistant has control")
  with its orb, and Take control is solid there, the one action offered.
- An empty browser says "Nothing is open in the Bot's browser right now",
  which stays true however much the Bot browsed before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sidebar named the product in plain text with no mark, while open.bot
and the desktop app show the orb beside it. The orb now sits beside the
name. A deployment that renames the product in brand.yaml shows its own
name without OpenBot's orb.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Home is where a person starts something new, and the one thing worth
knowing first is that a Bot is already busy. While a turn runs in one of
their conversations, Home now shows a frosted note at the foot of the page:
the Bot's avatar with its typing dots, "<Bot> is working", the
conversation's title, and Open. It goes away when the work is done, so an
idle Home is still just the greeting and the composer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… popover

The toolbar of the browser on Teach a Bot held a second text field beside
the address bar ("Name the task to record"), a microphone icon, a
Narration label and switch, and a Record button that stayed grey until the
field was filled. On a laptop-width window it wrapped onto a second row.

The toolbar now ends in one Record button, as a browser keeps its own
actions. Record opens a small popover: "Record a task", one sentence, the
task's name (focused), the narration switch, and Start recording. While a
recording runs, the toolbar shows its name, time and actions, the
narration switch and Stop, as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The bottom of the Browser window always said "Narration is off." or
"Narration is on.", even with nothing recording. Before Record, the
narration switch in Record's popover already says whether narration is on,
so the status bar now appears only while a recording runs, where it says
whether your voice is being captured.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
In the personal edition, Learning's Your skills section said "Open a skill
to read what it does." above an empty state with nothing to open. The
sentence now shows only over a list of skills.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The browser panel beside a conversation is there to show that the Bot is
browsing and roughly what, not to read the page; the full-size view is
for that. An earlier commit widened it to 560px. It is now 360px, a
little narrower than the 400px it started at.

The frosted control strip over the picture compacts itself in a card that
narrow (smaller type, no avatar), so "Personal Assistant has control" and
Take control still fit on one line. Where the card is wide, in the
conversation itself, it stays as it was.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The browser behind the Browser page, and behind a Bot's full-size view,
has a fixed shape (1280 by 800). Both windows took whatever space the
screen gave them and drew the page at that shape inside, so in a space
of any other shape a blank band sat under the page, or beside it.

Each window is now sized to its page: as wide as the space allows while
the whole window, tabs and toolbar included, still fits. The bars are
measured rather than assumed, since they change with what they hold.
Whatever space is left is outside the window. On the Browser page the
window sits centred on a quiet backdrop (at the top on a phone); in the
full-size view it sits at the top, beside the column with Take control.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cordings

Teach a Bot showed a browser with nothing on the page saying what it was
for, under a nav item with another name, and its recordings sat in a
separate strip below, saying to record "with the OpenBot Recorder".

The page now reads top to bottom as one thing, in one column as wide as
the browser: "Teach a Bot" with how in one sentence (press Record, name
the task, do it once), the browser, and Your recordings. The column is
sized so all three fit the window, and the list keeps a short cap of its
own so it never shrinks the browser much. In a window too short for that,
the browser keeps a usable width (640px) and the page scrolls to the
recordings instead of shrinking everything. With no recordings the list
says so in one line.

Settings stay in Settings, Learning. The recordings section links there
("See what your Bots learned"), since that is where what a recording
teaches shows up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The sidebar's + opened a new conversation with a Bot already in To: (the
only Bot, or the personal edition's default one), which the person had to
notice and remove if it was not the one they meant.

To: now starts empty with the "Choose a Bot..." menu open, in either
edition and however many Bots there are, so + asks who the conversation
is for and offers New Bot and the Bots to pick from. A link that names a
Bot (a Bot's own Message link) still starts with that Bot.

The case that made the default necessary (a message typed with nobody in
To: went nowhere) stays covered: the menu is open from the start, and
Send with nobody picked says "Choose a Bot first." and opens it again,
keeping the message.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The product's name at the top of the sidebar is a link home drawn as a
sidebar menu row, so hovering it filled the whole row with the menu's
accent, which on the frosted sidebar read as a blue rectangle. Now
nothing changes on hover or press: no fill, no dimming, the plain arrow
cursor. Clicking it still goes home, and its keyboard focus ring stays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With no channel set up, Settings, Notifications said only that push,
Slack, Microsoft Teams and SMS "show up here once they're set up", with
no way to find out how. Each one is turned on where OpenBot runs (an
OpenTag pairing for Slack and Teams, Twilio for SMS, the OpenBot phone
app for push), and nothing in the app said so.

Now someone who can set them up (an admin, or the one person running
OpenBot themselves, the same rule as Settings, Setup) gets a "How to set
them up" button to the configuration docs. Anyone else is told their
admin sets them up.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Opening Teach a Bot drew nothing while it read the browser's state, then
a bare title while the browser opened, which takes a few seconds. It
looked empty and broken.

The page is now laid out from the first moment as it will be: "Teach a
Bot" and its one sentence, the browser's window drawn empty with
"Opening your browser..." where the page goes, and the recordings under
it. If the browser doesn't open, the same place says why, with Try again
where asking again can help. Nothing in the empty frame can be pressed,
so it is never mistaken for the browser itself.

This is a deliberate exception to the data-access rule of drawing no
loading placeholder: what arrives here is a whole browser, slow to start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Record's popover offered a Narration switch with nothing saying what
narration is for. An (i) beside it now says, on hover or keyboard focus:
"Talk out loud while you do the task to explain your thinking. What you
say becomes part of what your Bots learn."

It shows only in the popover, where the choice is made, not in the
toolbar while recording. It is a plain button inside Record's form, so
pressing it never starts a recording.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Unreleased gains a line for each change a deployment will notice from
this branch: Teach a Bot as one page with a fitted browser window and
Record in a popover, the Bot's browser as a glimpse, + opening the Bot
menu, Home and the sidebar saying what is working, the frosted frame and
typeface, and the General and Notifications settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The frosted frame lightened theme.css's light --background, and the
notice keeps a copy of those tokens that a test holds equal.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ude-2026-11-07-overnight

# Conflicts:
#	CHANGELOG.md
Main rewrote Unreleased into sections. This branch's six lines now sit
under Automatic Learning and Teach a Bot, Conversations, Personal
edition and Smaller changes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tup docs in Desktop

From review. The empty state says "text messages", as the app's other
sentences do. "Choose where to receive each type of update" shows only
above switches to choose with. In OpenBot Desktop the empty state says
these channels need OpenBot running on a server and links no docs about
server settings the Desktop owns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
davidmckayv and others added 8 commits November 8, 2026 14:45
…and calm the form's section labels

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK
…Isolated and apps as plain rows

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK
…ot's first screen, in that order

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK
…its footer

Every framework is drawn with the rows the list behind Connect a custom agent draws, and on a desktop
sheet the heading and first row show above the footer before anything is scrolled. Claude Agent SDK,
LangChain, Google ADK and AWS Strands lead the web list, and Back from an address picked there
returns to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK
…screen

# Conflicts:
#	app/src/components/browser/browser-screen.tsx
#	app/src/components/browser/narration.tsx
#	app/src/routes/_authed/_app/index.tsx
#	app/tests/agent-roster-error.test.tsx
#	app/tests/browser-page.test.tsx
…d drop the form's extra words

The visibility tiles keep their icon and title, Isolated's line shows only when it can't be ticked,
and the custom agents' heading becomes a section label like the form's own. All four named
frameworks now show above the footer on a desktop sheet. This is round three's ieEiHgNwfDYs,
ported as it was shown.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK
…"LangChain (LangGraph)"

Only the name a person reads and the mark change. The harness id `langgraph`, the
`agent-langgraph*` folders and images, the `langgraph` package, the harness contract and
everything stored or sent keep their names. The description no longer talks about graphs:
"Agents built with LangChain, on any model."

A subtitle an earlier version saved as "Powered by LangChain (LangGraph)" is still read whole
and follows a change of harness: that name joins "LangGraph" among the catalogue's earlier names,
and the legacy-name test runs for both.

Sources, checked 2026-11-09:
- Name and capitalisation: https://www.langchain.com/ and
  https://www.langchain.com/brand-assets ("LangChain"; "Pair each mark with its own wordmark:
  the LangChain mark with LangChain").
- Mark: LangChain_Symbol_Black.svg from the brand pack linked on that page,
  https://cdn.prod.website-files.com/65b8cd72835ceeacd4449a53/6a9998494f7b532d49a38525_langchain-brand-assets.zip
  (sha256 10524f81a5b8d95b9d9bef341a081735564c54a7007f6be0b7d7c0b81290157d), vendored
  verbatim apart from a <title>. Dark mode draws it on the white tile every mark gets there.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK
@ataibarkai
ataibarkai changed the base branch from claude/new-bot-first-screen to main November 9, 2026 00:38
claude and others added 3 commits November 9, 2026 00:40
# Conflicts:
#	CHANGELOG.md
#	app/src/components/agents/new-bot-sheet.tsx
#	app/tests/new-bot-sheet.test.tsx
@davidmckayv
davidmckayv merged commit 8347a93 into main Nov 9, 2026
31 checks passed
@davidmckayv
davidmckayv deleted the claude/new-bot-simpler branch November 9, 2026 01:14
guidovizoso added a commit that referenced this pull request Nov 9, 2026
…; solid sidebar in Inter; OpenBot for Business before Book a demo (#1370)

* Solid sidebar in Inter, with the version beside your name

Takes back the look #1306 added over the weekend, except OpenBot's orb going away from the sidebar's
header as well:

- The sidebar is a solid panel again: app/src/frame.css (the orb's wash behind a frosted sidebar)
  and its test are gone.
- The app is set in Inter again: app/src/typeface.css and the Atkinson Hyperlegible Next package
  are gone. body now names "Inter Variable", the face @fontsource-variable/inter loads; plain Inter
  matched only an installed copy, so a Mac without one drew the system font.
- The page's background is its earlier shade, and OpenBot's name at the top of the sidebar
  highlights on hover again, without the orb beside it.
- The running version sits at the right of the person's name, 80/20, instead of a line under it.

* New Bot's first screen as it was before #1317

The simple Bot's form again, with Connect a custom agent in the footer opening the list of
frameworks, in their earlier order (shared/harnesses.ts, which also orders the onboarding demo).
new-bot-sheet.tsx and its test are as they stood before #1317. LangChain keeps the name and mark
#1321 gave it, so the test expects "LangChain".

* On a Mac, the Desktop window's buttons share a row with OpenBot's name and +

The sidebar's header started below the close, minimise and zoom buttons, under an empty strip.
The main window is built with the buttons 20pt in and level with the header's first row
(TRAFFIC_LIGHTS in main.rs: Tauri 2.12 sets it only on the builder, and tao puts it back after a
resize or full screen). In the Desktop's overlay title bar the header now starts 80px in, right of
the buttons. With the sidebar hidden, the page starts 40px down, below them, and so does
onboarding's header (48px), in one column and in two.

Also a debug-only OPENBOT_DEV_APP_URL: after Start, the window shows that address (an app dev
server on this installation's back end) in place of the installation's app, so app/ changes show
in the real window as they are saved. A release build never reads it.

* Bring a Composio sign-in started in OpenBot Desktop back to OpenBot Desktop

The Desktop window opens an app's sign-in in the person's browser, so Composio's redirect landed
there, on the account's page: OpenBot in a browser tab, while the window behind it still had the
app as not connected.

- Connect and Authorize, pressed in the Desktop window, send `from=desktop`
  (desktopConsentQuery).
- consentReturnUrl then sends Composio back to /desktop-return?app=<key>
  (desktopReturnUrlFor), a page of the same OpenBot on its own origin. `from` only picks which of
  its pages the browser lands on.
- /desktop-return, in the browser, confirms the account as the account's page does on arrival,
  then follows openbot://open, which brings the window forward on the page it was left on. It has
  an Open OpenBot button for a browser that asks first. Loaded inside the window, it goes to the
  account's page.
- An app's page in the window checks the account again when the window is next in front, once per
  sign-in, since it never arrives on itself again.

Apps that sign in through Arcade, or by their own sign-in page, still return to the browser tab.

* Say what OpenBot for Business is before asking for a demo, and hide Calendly's cookie banner

Onboarding's Book a demo step opened straight onto the calendar, with nothing saying why anybody
would book one. The step is OpenBot for Business now: what it adds (work sign-in, Bots shared in
Slack and Microsoft Teams, the controls and audit trail) beside the picture of running OpenBot
yourself it showed before, with Book a demo and Not now. Book a demo puts the calendar in the
picture's place; a calendar that can't load puts the picture back, with Book a call.

On the last step (the name already known), a step's own primary now decides whether it moves on,
so Book a demo opens the calendar instead of finishing onboarding.

The calendar's address carries hide_gdpr_banner=1, Calendly's embed option that leaves out its
cookie banner, which otherwise sat over the calendar.

* Changelog for the solid sidebar, New Bot, the Desktop window, the Composio return and OpenBot for Business

* Show the developer's app at 127.0.0.1, so the window treats it as OpenBot's own

OPENBOT_DEV_APP_URL at http://localhost:3030 was never trusted: only a loopback IP is
(intelligence_bridge::app_origin). The window treated the page as somebody else's, drew the system's
title bar and never marked the page to make room, so the lowered buttons sat over the sidebar.
`localhost` is now read as `127.0.0.1`.

Also drops "its mark" from two comments about the sidebar header, which no longer has the orb.

* Give OpenBot's name and + the sidebar's own hover, and the + the name's height

OpenBot's name hovered in the menu button's accent tint, a lilac no other row in the sidebar uses,
and + in the ghost button's muted, nearly the sidebar's own colour, at 32px beside the name's 34px.
Both now hover with foreground/5, as every other row does, and + is a square as tall as the name.

* Match the Recorder's notice to the reverted background, and drop the New Bot fit test

The Recorder's notice copies OpenBot's theme colours, and its test checks they match. #1306 changed
--background in both places; the revert had only put theme.css back.

new-bot-sheet-fit.test.tsx and its fixture checked that four frameworks clear the footer of the
New Bot sheet #1317 introduced. That sheet is reverted, so the test goes, and with it its place in
the real-browser step of ci.yml.
davidmckayv added a commit that referenced this pull request Nov 10, 2026
…angChain agent; you can bring your own agent from any stack.)" (#1345)

* Read a subtitle OpenBot wrote under LangChain's earlier names as "Powered by LangChain"

The Personal Assistant on an install seeded before #1321 kept "Everyday life. Powered by
LangChain (LangGraph)." after upgrading. A starter's subtitle is written once, at its first seed,
and the installer only rewrites it while it still manages the Bot: a starter whose connection was
saved as the person's own is never moved again, so its subtitle never followed the rename. New Bot
Bots made before the rename carry the same phrase.

So the phrase is read by the current name wherever a subtitle is read: the profile store, and the
row the runtime builds a Bot's standing role from. Nothing stored changes, and only "Powered by
<earlier name>" is touched; the person's own words around it stay theirs. The earlier names move
to shared/harnesses.ts so the installer's matching and this read share one list.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Narrow the new standing-role test to a remote Bot, as the test typecheck asks

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Put the LangChain subtitle line under Unreleased, after 1.0.0 took the old entries

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Subtitle the Personal Assistant "Everyday life agent. Powered by a LangChain agent. Bring your own agent from any stack."

Atai's wording, for the starter on a framework picked in setup, with that framework's name and
the article it reads with ("an AWS Strands agent"). A Bot that runs on OpenBot itself keeps
"Everyday life. Powered by OpenBot."

The same text reaches installs that already exist: the starter's earlier seed, "Everyday life.
Powered by <framework>." exactly as seeded, reads as the new subtitle, under the framework's
current name. A subtitle the person rewrote no longer matches and is left alone. A change of
harness follows the new "Powered by a <framework> agent" as it followed the plain name.

A Bot's page shows its subtitle on up to two lines, so a phone shows all of this one.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Subtitle the Personal Assistant "Everyday life agent. (powered by a LangChain agent; you can bring your own agent from any stack.)"

Atai's refined wording, with its casing and punctuation. Other frameworks read the same way with
their own name and article. Switching harness keeps the lowercase form, and dropping the claim
takes the whole parenthesis with it. The Bot page shows a subtitle on up to three lines, so a
phone shows the whole of it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Keep the subtitle rewrite to what a person sees, and tell the Bot its stored subtitle as main does

David's review: the read-time rewrite is a display change. The profile store and the installer's
seed keep it; `registeredAgentFromRow` and the Bot's standing role go back to main, so what a Bot
is told is unchanged by this PR.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Seed the Personal Assistant's subtitle as main does, and show the new wording only

David's review: a new install's Bot is told the same subtitle as before, too. The installer seeds
and moves "Everyday life. Powered by <framework>." as on main, and the profile store reads that
seed as "Everyday life agent. (powered by a <framework> agent; you can bring your own agent from
any stack.)" for the person. A test checks the stored row keeps main's text.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Show the starter's new subtitle where it is drawn, and hand every reader the stored one

The read-time rewrite sat in the profile store's mapProfile, so every reader of
a profile got the new wording, not only the screens. Three of them are not
screens:
- a voice call tells the Bot "Your title: ..." from profiles.get;
- New Bot's interview lists the other Bots by their subtitle to the model;
- every in-place edit on a Bot's Setup page sends the whole profile back, so
  renaming the Personal Assistant stored the new wording, and from then on the
  Bot was told it in its standing role.

The store hands back the stored subtitle again, as on main. The app maps it
where a subtitle is drawn (shownSubtitle in lib/agents/subtitle.ts): the
conversation's header, the Bot page, the roster, the profile panel, the
recipient and @ lists, the OpenMuse skin, and Setup's Title row. Setup's Title
dialog shows the new wording too, and saving it unchanged keeps the stored
subtitle.

The store test now pins the stored subtitle (it fails on the mapped read), and
the setup and conversation-header tests pin what is shown and what an edit
sends. The changelog lines join Unreleased's one Smaller changes section.

* Let shownSubtitle take a roster entry without a subtitle, as its comment says

`cd app && bun run typecheck` failed at composer/triggers.tsx:47, where a profile's title may be
undefined. An overload keeps the string callers as they are.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xYtaRm1VTLHW6QMDUMASK

* Move the subtitle's changelog line up Smaller changes, apart from the Extra vigilant lines

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: David McKay <david@copilotkit.ai>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants