AIOps Bot Platform
Console

Frontend UIs

Download a ready-made web or desktop chat UI, point it at your local bot-agent, and start talking.

bot-agent is an HTTP/WebSocket server, not a product UI. If you do not want to build a client from scratch, download one of these boilerplates from this dashboard (you must be signed in) and point it at http://localhost:4484.

Both talk to the same runtime you launched in Getting started or the Launch an agent on your machine guide. They never call the control plane LLM proxy themselves — bot-agent already holds the session.

GitHub (IBM Enterprise): local-agent-frontend · Bot-Platform-Desktop.

The zip is the current default branch. GitHub names the inner folder copilot-<repo>-<sha>/cd into that after unzip.

Leave bot-agent running

Start and sign in the runtime first. The web UI has no bootstrap-token screen. The desktop app does, but if you already ran the curl from Launch an agent, it will see signedIn: true and skip the gate.

Which UI to pick

Web chat UIDesktop app
Repocopilot/local-agent-frontendcopilot/Bot-Platform-Desktop
StackNext.js 15, React 19, Bun, SQLiteElectron, React, npm
How it talks to bot-agentNext.js /api/* proxy (HTTP) + browser WebSocketMain-process HTTP/WS client
Default URLNEXT_PUBLIC_BOT_AGENT_URL=http://localhost:4484BOT_AGENT_URL=http://127.0.0.1:4484
Local API keyNot sent (run bot-agent without --api-key)BOT_AGENT_API_KEY if you set one
Best whenYou want a browser chat UI you can forkYou want a native app and agent-driven browser tabs
Your UI  --HTTP + WebSocket-->  bot-agent (:4484)
                                   │
                                   └── JWT session --> this dashboard
                                       (/api/runtime/*)

Features each UI covers

bot-agent's full surface is in the Agent API. These UIs cover the chat path, not every route.

bot-agent capabilityWeb chat UIDesktop app
Health / reachabilityYesYes
Conversations (list, create, rename/delete, switch)Yes (no rename)Yes
Send message + token stream (message.delta)YesYes
Run progress (preparing / llm / tool / …)YesYes (collapsible steps)
Cancel an in-flight runYesYes
Markdown repliesYesYes
WebSocket reconnect + event replayYesYes
Cloud bootstrap sign-in UINo — agent must already be signed inYes — paste a bootstrap token
Agent-driven browser tabs (CDP)No (agent may still use Playwright separately)Yes — in-app tabs via CDP shim :9223
Cron jobs, fork, compaction, subagent inspectorAPI exists on bot-agent; no UISame
Skills / MCP / workspace filesManaged in this dashboard, not in the UISame

Web chat UI (local-agent-frontend)

Browser chat: sidebar of conversations, composer, live status pill, stop button. HTTP goes same-origin through Next.js because bot-agent does not send CORS headers. The WebSocket is opened directly at ws://localhost:4484/conversations/:id/ws.

Prerequisites

  • Bun
  • bot-agent already running on port 4484 and signed in
  • Do not start bot-agent with --api-key for this UI — the proxy does not send Authorization

Setup

unzip local-agent-frontend.zip
cd copilot-local-agent-frontend-*   # GitHub zipball folder name
bun install
cp .env.example .env

.env (defaults already match a local runtime):

DATABASE_URL="file:./db.sqlite"
NEXT_PUBLIC_BOT_AGENT_URL="http://localhost:4484"

Change NEXT_PUBLIC_BOT_AGENT_URL only if bot-agent is not on 4484. The browser uses that value for the WebSocket, so it must be reachable from your machine.

bun run db:push
bun run dev

Open http://localhost:3000. New starts a conversation; Enter sends; Shift+Enter is a newline.

Port 3000

This dashboard also uses port 3000 in development. Run the web UI on another port (bun run dev -- --port 3001) if both need to be up at once.

Desktop app (Bot-Platform-Desktop)

Electron shell: chat on one side, optional Browser mode with tabs the agent can open and control. History lives in bot-agent's SQLite home, so it survives restarts. Packaged builds can spawn a bundled bot-agent; in development you point at the process you already started.

Prerequisites

  • Node.js 20+
  • bot-agent on port 4484 (or let a packaged build spawn it)
  • This dashboard URL for bootstrap exchange (BOT_AGENT_CLOUD_URL)

Setup

unzip Bot-Platform-Desktop.zip
cd copilot-Bot-Platform-Desktop-*
npm install
cp .env.example .env

Edit .env:

BOT_AGENT_URL=http://127.0.0.1:4484
BOT_AGENT_CLOUD_URL=https://your-dashboard-origin
OPS_DASHBOARD_URL=https://your-dashboard-origin
# Only if you started bot-agent with --api-key:
# BOT_AGENT_API_KEY=the-same-key

Use this dashboard's origin for BOT_AGENT_CLOUD_URL and OPS_DASHBOARD_URL (the address in your browser, no trailing slash).

npm run dev

If the runtime is already signed in, chat opens. If not, paste a bootstrap token from Project → Agents → Generate Bootstrap Token (5-minute TTL).

Agent-driven browser tabs

The desktop exposes a CDP shim on 127.0.0.1:9223 so Playwright talks to in-app tabs, not a hidden Chrome. When you start bot-agent yourself in dev, set this in the bot-agent environment (not the desktop .env):

CHROME_CDP_URL=http://127.0.0.1:9223

Bun needs the desktop's preload so Playwright's CDP WebSocket can reach the shim (see the desktop README). Override BOT_PLATFORM_CDP_PORT / BOT_PLATFORM_CDP_SHIM_PORT only if 9222/9223 are taken.

Leave BOT_AGENT_MANAGED unset in this workflow so the desktop does not spawn a second agent.

Next steps