Skip to content

New Bot sheet, folded tool calls, and onboarding for local evaluators - #812

Merged
guidovizoso merged 9 commits into
mainfrom
guido-ux
Oct 20, 2026
Merged

guidovizoso merged 9 commits into
mainfrom
guido-ux

Conversation

@guidovizoso

Copy link
Copy Markdown
Collaborator

What this changes

The UX work from the October 19 OpenBot backlog (OB-01, OB-02, OB-03, OB-11), as one branch of small commits that each build on their own.

A new Bot is made from a sheet (OB-03, FOR-336). New Bot opens an inset sheet instead of the four-screen wizard dialog, which is removed with its tests.

  • It asks where the Bot will run first, because that decides what the rest means. For a Bot that runs here, its instructions are the prompt it runs on. For one somebody else runs, they're a line added to a prompt written elsewhere.
  • Run it here is a larger card, already chosen. The frameworks sit below it.
  • A connected agent's address comes next. Continue dials it from the server and moves on only if something answers. If nothing does, the server's reason appears under the field. There's no separate Test button.
  • The name, title, instructions (labelled Instructions or Role, depending on the choice) and who can see it come last, and Create makes the Bot.
  • The server still requires a title and a role description, so a Bot given only a name gets defaults. Run it here gets "Assistant" plus a short prompt naming the Bot. A framework gets its own name plus "Connected from ."
  • Once the Bot is created, the orb settles into its finished state, the sheet closes, and the new Bot opens. Back from there goes to the roster.

The framework list Atai asked for. The web lists Claude Agent SDK, Google ADK, Google Antigravity and LangGraph first, then the rest in the catalogue's order. The desktop installer keeps its stars-first ranking. AG2, Agno and Langroid get marks from their own repositories, and every mark sits on a light tile in dark mode so dark marks stay visible.

Tool calls fold (OB-11, FOR-342). A run of consecutive tool calls that draw nothing collapses into one line, such as "Used 5 tools", as connector calls already did. Drawn and person-facing calls still stand alone.

Onboarding (OB-01, OB-02).

  • Illustrations sit in a muted, inert frame, so nobody clicks, tabs into, or hears a drawn composer as a control.
  • On a single-user install, three slides follow: data stays on this machine, bring the agents you already run, and deploy it for your organization.
  • /api/capabilities gains localEvaluation, which is config.singleUser.

Where it runs

  • New state that outlives a request? None. localEvaluation is read from configuration on each request. The sheet's state lives in the browser and is discarded when the sheet closes.
  • What happens on the second replica? Same answer: every replica reads the same configuration, and creating a Bot goes through the existing POST /api/agents.
  • Anything serialised? No.
  • Anything fanned out to a browser? No.
  • New listener, port, or schedule? No.

Boundary and audit

  • Creating a Bot and checking its address use the existing POST /api/agents and POST /api/agents/test-connection routes, unchanged. The server still validates the endpoint against the deployment's host rules and still writes bot.created.
  • No new refusals or failures on the server.
  • Nothing new is trusted from the client. The defaults the sheet fills in pass the same server validation as typed values.

Changelog

  • Three entries under Unreleased: the New Bot sheet, folded tool calls, and onboarding.

Checked

  • bun test app/tests from the repo root: 1221 pass, 0 fail. App tests must run from the root, where bunfig.toml loads the preload.
  • bun test shared (with TEST_DATABASE_URL): 245 pass. server/tests/health.test.ts: 19 pass. desktop/src: 149 pass.
  • tsc --noEmit for app, shared, server and desktop. Biome format and lint --error-on-warnings are clean. App and desktop builds succeed.
  • Clicked through locally:
    • a Bot created with Run it here
    • a connected Bot created against a local Antigravity harness
    • a refused address, which shows the server's reason and creates nothing
    • the created moment and redirect
    • the onboarding slides, in light and dark

…r calls

An external agent's own tools, such as Antigravity's run_command, drew one
line per call because only browser steps and mcp__ calls were foldable. Any
tool the app has no component for now folds the same way, counted as
"Used N tools" and named in words inside. Which tools the app draws is read
from CopilotKit's renderer registry, so charts, approvals and the computer
tools keep their own lines.
The Welcome composer and the roster of Bot cards looked live and did nothing
when clicked. Both now sit in the same muted frame as the computer
illustration, inert, so neither the mouse, Tab nor a screen reader reaches
the controls drawn inside; each frame is read as one labelled picture.
…hen it is one

/api/capabilities answers localEvaluation, which is single-user mode: no
identity provider and no address anybody else can reach, so never an
organization's deployment. Onboarding adds an empty slide after the roster
when it is true, the slot for explaining where OpenBot can run (OB-02). It is
not gated on selfHostBanner too, because the stack `copilotkit local`
installs runs on an enterprise evaluation licence that hides the banner.
…gents come along, their organization can follow

Three slides where there was one empty one, shown only on a single-user install. A laptop that opens
onto the product for where data lives, the frameworks by mark for bringing the agents somebody
already runs, and a sign-in-to-outcomes flow with a link to an engineer for deploying it for an
organization.
…in dark mode

AG2's dark-on-transparent favicon, Agno's square icon and Langroid's logo, each from the brand's own
repository, so only the bring-your-own row is left without one. A mark drawn in the brand's dark
colour vanished on a dark background, so in dark mode every mark sits on a small white tile; a row
with no mark keeps the tile's width so names still line up.
…raph

Atai read CrewAI, LlamaIndex and Agno at the top as making no sense, and reported LangChain and ADK
missing when they were fourth and fifth. The catalogue stays ranked stars-first for the desktop
installer; the web pulls those four to the front and keeps the rest in the catalogue's order.
…somebody else runs it, then its name

Replaces the four-screen wizard dialog. The sheet opens on where the Bot will run, with Run it here
as a larger card already chosen and the frameworks below, because that answer decides what the rest
means: for a Bot that runs here, its instructions are the prompt it runs on; for one somebody else
runs, they are a line added to a prompt written elsewhere. A connected agent's address comes next,
and Continue dials it from the server: an agent that does not answer says why under the address and
goes no further. The name, title, instructions and who can see it come last, labelled for the choice
— Instructions or Role — and Create makes the Bot. A Bot made with only a name gets a title and
instructions the server will accept. Once made, the orb settles into its finished state, the sheet
closes and the new Bot opens.

The sheet primitive gains an inset variant. The Enter that confirms an input method's composed
character is still not a Create, now tested against the sheet.
@guidovizoso
guidovizoso merged commit 68fd9f6 into main Oct 20, 2026
25 checks passed
@guidovizoso
guidovizoso deleted the guido-ux branch October 20, 2026 21:30
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.

1 participant