Noui
NoUI: Skip the UI. Turn any website into fast, reliable APIs for agents.
Ask AI about Noui
Powered by Claude Β· Grounded in docs
I know everything about Noui. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
NoUI
Skip the UI. Turn any website into fast, reliable APIs for agents.
Go beyond Claw. Call the underlying APIs.
Skip Computer-use Agents.
π What is NoUI?
NoUI turns any website into an API your agents can call.
Instead of automating clicks and scraping the UI, NoUI:
- Records how you use a website
- Extracts the underlying APIs
- Converts them into callable Python functions
- Exposes them via MCP for agents
No clicks. No DOM parsing. No brittle automation.
β‘ Why NoUI?
Computer-use agents simulate humans:
- π’ Slow (UI loops, page loads)
- πΈ Expensive (token-heavy, step-heavy)
- π§± Fragile (break on UI changes)
NoUI executes software directly:
- β‘ Fast --- direct API calls
- πΈ Cheap --- fewer steps, fewer tokens
- π― Reliable --- uses the same APIs the app uses internally
Stop automating clicks. Execute software.
π§ How it works
- Record a session (Chrome extension + voice)
- Extract HAR traces + intent
- Convert into Python API functions
- Execute tools from inside the authenticated Tabby browser session
- Expose everything as an MCP endpoint
- Agents call APIs instead of clicking UI
Execution
Generated tools run from inside the authenticated Tabby browser, not from a
Python HTTP client. Each operation opens a WebSocket to Tabby's CDP endpoint
(localhost:9222), locates the tab for the target domain, and calls
fetch(url, {credentials: 'include'}) via Runtime.evaluate. The real browser's
TLS fingerprint and cookies are used β no credential extraction, and no
Akamai/Cloudflare false positives.
The legacy Python-side path (httpx + resolve_auth()) is still available for
server-to-server APIs that aren't reachable from the browser origin; opt in
explicitly with noui workflow export --execution-mode http.
ποΈ Architecture
Browser Extension (NoUI Recorder)
β Login Recording | Workflow Recording modes
β (HAR + click events)
NoUI Backend (FastAPI, port 8002)
β login-sessions/ β captures login flows
β workflow-sessions/ β captures workflow API traffic
β shared: clicks, url-events, HAR upload
β
Compiler
β login/ β login session β Tabby Application + ServiceProfile bundle
β mcp/ β workflow session β FastMCP server + manifest
β
Output (all under workbench/)
β workbench/login_recordings/ β Tabby bundle JSON files
β workbench/mcp_servers/<app>/<server_id>/ β runnable FastMCP packages
β workbench/skills/<app>/<skill_id>/ β installable Claude Code skills
β
Tabby Runtime (persistent browser sessions + live auth)
β
MCP β Claude / ChatGPT / Agents
π Core Components
π§© HAR β API Compiler
- Parses browser network traffic (HAR)
- Groups requests into logical workflows
- Generates clean Python functions
πΎ Tabby Runtime
- Keeps browser sessions alive in the cloud
- Handles cookies, headers, auth
- Streams VNC for login / 2FA when needed
π MCP Server
- Exposes generated APIs as tools
- Works with Claude, ChatGPT, and MCP-compatible agents
π― What you can do
- Automate websites with no public APIs
- Turn internal tools into agent-ready SDKs
- Replace brittle browser automation workflows
- Build production-grade agents that actually scale
β‘ Example
def create_invoice(customer_id, amount):
return call_api(
method="POST",
endpoint="/api/invoices",
headers=session_headers,
json={
"customer_id": customer_id,
"amount": amount
}
)
Then your agent simply says:
"Create an invoice for customer X"
NoUI executes it directly.
π Authentication Flow
- NoUI spins up a remote browser session
- Streams it via VNC
- You complete login / 2FA once
- Tabby maintains the session
Agents reuse the authenticated context automatically.
βοΈ NoUI vs Computer-Use Agents
| Computer-Use Agents | NoUI | |
|---|---|---|
| Speed | Slow (UI loops) | Fast (direct APIs) |
| Cost | High | Low |
| Reliability | Breaks on UI changes | More Stable |
| Approach | Simulates humans | Executes software |
π§ Philosophy
Websites already expose APIs. The UI is just a layer on top.
NoUI removes that layer.
π Quick Start
Prerequisites
- Python 3.11+
- Docker (for Tabby)
- Chrome browser
Clone with submodules
β οΈ NoUI includes Tabby as a git submodule. You must clone recursively, or the
tabby/directory will be empty andnoui tabby startwill fail.
git clone --recursive https://github.com/adoptai/noui.git
# Or, if you already cloned without --recursive:
git submodule update --init
Install
cd noui
# 1. Create a venv and install dependencies
python3 -m venv .venv
.venv/bin/python -m pip install poetry
.venv/bin/python -m poetry install --no-root
# 2. Configure environment
cp .env.example .env
# Edit .env: set ANTHROPIC_API_KEY (required)
# TABBY_API_HOST, TABBY_ADMIN_TOKEN (authenticated apps only)
# 3. Load the Chrome extension
# Chrome β chrome://extensions β Developer mode β Load unpacked β select noui/extension/
# 4. Start the backend
.venv/bin/python cli/main.py start
# Backend runs at http://localhost:8002
# Interactive API docs at http://localhost:8002/docs
π€ Agent Skills
Install the NoUI skills into your project so your Agent (Claude Code, Codex, OpenClaw...) can guide you through the full workflow:
npx skills add adoptai/noui
Then run /noui-setup in Claude Code to configure the environment.
| Skill | Purpose |
|---|---|
/noui-setup | One-time setup: venv, deps, .env, Chrome extension, Tabby CLI reference |
/noui-record-login | Record a login flow and register it with Tabby |
/noui-record-workflow | Record a workflow and export it as a FastMCP server or Claude Code Skill |
/noui-generalize | Rename raw API parameters to natural-language equivalents post-export |
/noui-generate-mcp | Start, stop, list, and connect generated MCP servers to Claude Code |
/noui-generate-skill | List, install, and uninstall generated Claude Code Skills across agents |
π οΈ Developer Flow
Unauthenticated apps
# 1. Create a workflow session
.venv/bin/python cli/main.py workflow record "Fetch Results" "https://example.com"
# 2. Record in Chrome (extension β Workflow Recording mode β perform workflow β Complete)
# 3. Export as FastMCP server
.venv/bin/python cli/main.py workflow export --as mcp <session_id>
# 4. Start the MCP server
.venv/bin/python cli/main.py mcp start <server_id>
Authenticated apps (with Tabby)
# 0. Provision Tabby (first time only)
.venv/bin/python cli/main.py tabby start
.venv/bin/python cli/main.py tabby setup # interactive
# 1. Record login and register with Tabby
.venv/bin/python cli/main.py login record "HubSpot" "https://app.hubspot.com/login"
# (record in Chrome using Login Recording mode)
.venv/bin/python cli/main.py login import <session_id> --validate
# β prints tabby_profile_id
# 2. Ensure a live browser session
.venv/bin/python cli/main.py tabby session ensure
# 3. Record and export the workflow
.venv/bin/python cli/main.py workflow record "Create Contact" "https://app.hubspot.com"
# (record in Chrome using Workflow Recording mode)
.venv/bin/python cli/main.py workflow export --as mcp <session_id> --profile <tabby_profile_id>
# 4. Start the MCP server
.venv/bin/python cli/main.py mcp start <server_id>
π¦ Generated MCP Output
workbench/mcp_servers/
<app_slug>/
<server_id>/
server.py # FastMCP entrypoint
tools.json # Tool inventory
manifest.json # Server manifest (lifecycle + auth metadata)
noui_runtime/
auth.py # Runtime auth adapter (fetches live creds from Tabby)
operations/
<tool_name>.py # One file per generated tool
π₯οΈ CLI Reference
noui start / stop / status
noui login record <app> <url> create login session
noui login export / review / register / validate <session_id|bundle>
noui login import <session_id> [--validate]
noui workflow record <name> <url> create workflow session
noui workflow list / captures
noui workflow export <session_id> --as {mcp|skill|both} [--profile <tabby_profile_id>]
noui mcp list / status / start / stop <server_id>
noui skill list / show
noui skill install <skill_id> <agent> [--project] # agent: claude-code|codex|cline|opencode|agents
noui skill uninstall <skill_id> <agent> [--project]
noui tabby status / start / stop [--infra]
noui tabby setup [--profiles <id...>] [--force]
noui tabby session status / ensure [--profile] / stop
π Backend API
| Method | Path | Description |
|---|---|---|
| POST | /login-sessions | Create login session |
| POST | /login-sessions/{id}/start | Start recording |
| POST | /login-sessions/{id}/complete | Mark complete |
| POST | /login-sessions/{id}/analyze | Generate Tabby bundle |
| GET | /login-sessions/{id}/bundle | Retrieve bundle |
| POST | /workflow-sessions | Create workflow session |
| POST | /workflow-sessions/{id}/start | Start recording |
| POST | /workflow-sessions/{id}/complete | Mark complete |
| POST | /workflow-sessions/{id}/export?as=mcp|skill|both | Compile to FastMCP, Skill, or both |
| POST | /clicks | Store click event |
| POST | /url-events | Store URL navigation event |
| POST | /capture-sessions/{id}/har | Upload HAR (extension compat) |
| GET | /health | Backend health check |
Interactive docs: http://localhost:8002/docs
π Tabby compatibility
NoUI depends on Tabby for authenticated
browser sessions. To keep behavior deterministic across releases, NoUI pins a
specific SHA on Tabby's tabby-noui branch via a git submodule.
- Current pin:
tabby-noui @ d212467 - Branch:
tabby-noui - Submodule path:
tabby/(inside this repository)
Using a different Tabby revision is unsupported. If you need to run against a
local Tabby checkout for development, set the TABBY_DIR environment variable
to override the submodule path. See CONTRIBUTING.md for the
submodule-bump workflow.
π§© Chrome extension
v1 ships as a load-unpacked extension β there is no Chrome Web Store listing yet.
Chrome β chrome://extensions β Developer mode β Load unpacked β select noui/extension/
The backend URL defaults to http://localhost:8002. To point the extension at
a different backend, open the extension popup β Settings.
π Project docs
- CONTRIBUTING.md β dev setup, PR process, bumping the Tabby submodule
- SECURITY.md β responsible disclosure
- CHANGELOG.md β release history
- CODE_OF_CONDUCT.md
π₯ Status
Early open source --- expect rough edges. Contributions welcome.
π’ Closing
Computer-use agents were step one.
NoUI is what comes next.
