Localhost UI control plane for multi-agent workflows. Wraps subscription-backed CLIs (claude, aas) — no API key needed.
Each project declares a graph of agents in .agentui/project.yaml. Orchestrator agents can auto-dispatch tasks to workers via XML tags parsed live from the stream; the user verifies dispatch happens by watching the graph light up. Floating windows let you chat with multiple agents simultaneously, VSCode-style.
cd app
./run.sh
# → http://127.0.0.1:5174Requires claude CLI authenticated (subscription) and optionally aas for Grok nodes.
See DEPLOY.md — SSH tunnel + systemd service.
- Graph of agents with live status (idle / running pulse / ok / error)
- Floating windows, draggable, resizable, hidable. Open multiple agents at once.
- Auto-dispatch + result feedback: orchestrator emits
<dispatch agent="X">task</dispatch>, backend parses live, fires worker, animates edge + worker node. After workers finish, a dispatch ledger + bounded auto-continuation feeds the worker outputs back into the orchestrator's next prompt as<dispatch_result>blocks, so the orchestrator can synthesise / chain / report inside the same SSE response (no more "still waiting" hallucinations). Design rationale in docs/agentui-dispatch-spec.md. - Add agent through UI:
+ agentbutton opens a form. Default flow asks the first parent (e.g. BOSS) to write the bootstrap files based on its project context (streamed live, then previewed). Fallback to generic template if no parent or for speed. Backend atomically creates<ID>/AGENT.md,inputs/manifest.md,outputs/manifest.md,state/progress.md,context/code_map.mdand appends toproject.yaml(ruamel.yaml preserves comments). - Mix Claude and Grok agents in the same project graph. Each agent picks its adapter; the wrapper handles streaming, sessions, dispatch tags uniformly.
- Slash commands in chat input (
/help,/clear,/model,/effort,/focus,/dispatch,/stop,/status) - Workspace-wide folder tree in the sidebar (project roots get a diamond marker); ⌥⌘C copy-path shortcut; click any file to open in a floating viewer (markdown render, code mono, PDF + images via browser, binary fallback with download)
- Markdown rendering of agent output (marked + DOMPurify); dispatch tags become collapsed cards
- Streaming via PTY so Claude CLI doesn't block-buffer; tokens arrive in real time
- Stop button + Esc to cancel mid-stream, cascade-cancels all in-flight dispatched workers
- Per-agent overrides (model + effort) persisted in SQLite, applied next turn
- Resilience:
--resumeonly onlast_status == "ok"; SSE heartbeat keeps Opus thinking sessions alive; startup reaper recovers orphanrunningsessions after restart
User customizations recorded in CLAUDE.md (so future agents know how to intervene):
- The entire Plan/todo-panel system (multi-step
<plan>protocol + side panels on the graph) has been completely removed. - A global Scheduler on/off toggle (Apple-style switch) was added in the 🕒 Schedules dropdown. When off, no new schedules fire or can be created. See CLAUDE.md "Active user custom modifications" for details and how to re-enable / extend.
- Create
.agentui/project.yamlin the project root. - Append the absolute path to
app/registry.yaml. - Reload uvicorn; project appears in the sidebar.
In the project graph window, click + agent. Fill in id / role / adapter / parents. Default mode asks the first parent to generate the bootstrap files (folder + AGENT.md + manifests + state + code map) based on its knowledge of the project; the modal streams the parent's output live. Review the file preview, then click ✓ Tạo agent — the backend writes everything atomically and rolls back on any failure.
See CLAUDE.md for the full architecture, dispatch protocol, SSE event reference, slash command list, and known limitations.
- Backend: FastAPI + SQLite, PTY-wrapped
claude -psubprocess for true streaming - Frontend: vanilla JS + SVG graph, marked.js for markdown, DOMPurify for sanitization
- Dispatch:
<dispatch agent="WORKER_ID">task</dispatch>parsed live in the SSE stream - Models: Claude opus 4.8 / 4.7, sonnet 4.6, haiku 4.5; Grok via
aas