How it works
Orbit
AI testing platform. Point it at a GitHub repo and it tests the app for you: riskiest journeys first, in a real browser, with what broke explained in plain English.
Live · in developmentVisit the site ↗
Architecture
Hover a box to trace its connections; click it for what it does.
- request
- webhook, queue, schedule
- the heart
- outside service
AClients· 3Dashboard · GitHub · Claude
DashboardNext.js · live mapUI
UI · Next.js · live map
Projects, the system map, plans, runs with replays and failure analysis, and a chat panel.
Talks to
- → API routes (HTTPS)
- ← Live stream (live)
GitHubOAuth · App · webhooksEXTERNAL
EXTERNAL · OAuth · App · webhooks
Sign-in, repo access through an installed App, webhooks on changes, and checks and comments back on pull requests.
Talks to
- → API routes (webhooks)
- ← Reporter (PR check)
ClaudeMCP clientEXTERNAL
EXTERNAL · MCP client
Trigger runs, read the system map, plans and results, and search failures from Claude.
Talks to
- → MCP server (MCP)
BAPI· 4API routes · Live stream · Orchestrator · MCP server
API routesNextAuth · RESTSERVICE
SERVICE · NextAuth · REST
Workspaces, projects, plans and runs, plus the webhook receivers for GitHub, Linear, Slack and billing.
Talks to
- ← Dashboard (HTTPS)
- ← GitHub (webhooks)
- → indexing (enqueue)
Live streamSSE · pub/subREALTIME
REALTIME · SSE · pub/sub
Streams indexing progress, run events and browser screenshots to the dashboard as they happen.
Talks to
- ← Executor (screenshots)
- → Dashboard (live)
Orchestratorbudgets · contextSERVICE
SERVICE · budgets · context
Coordinates the agents through a run: token budgets per agent, and context picked by similarity rather than sent whole.
Talks to
- → execution (run)
- ← scheduler (schedule)
- ← MCP server (trigger)
MCP server7 toolsAI
AI · 7 tools
Run, map, plan, results, health, failure search and a code audit, over MCP.
Talks to
- ← Claude (MCP)
- → Orchestrator (trigger)
CQueues· 4indexing · execution · reporting · scheduler
indexingBullMQQUEUE
QUEUE · BullMQ
Jobs to clone and index a repo.
Talks to
- ← API routes (enqueue)
- → Analyst (worker)
executionBullMQQUEUE
QUEUE · BullMQ
Jobs to run test cases in a browser.
Talks to
- ← Orchestrator (run)
- → Executor (worker)
reportingBullMQQUEUE
QUEUE · BullMQ
Jobs to analyse results and send reports.
Talks to
- ← Executor (results)
- → Reporter (worker)
schedulerBullMQQUEUE
QUEUE · BullMQ
Recurring runs on a schedule.
Talks to
- → Orchestrator (schedule)
DAgents· 7Analyst · Planner · Executor · Reporter · Indexer · Prioritiser · Self-healer
Analystsystem mapAI
AI · system map
Turns a repo into a system map: framework, routes, components and their links.
Talks to
- ← indexing (worker)
- → Indexer
- → Planner (system map)
Plannerjourneys · casesAI
AI · journeys · cases
Rebuilds user journeys from the map, finds coverage gaps and writes test cases. Plans are cached.
Talks to
- ← Analyst (system map)
- → Prioritiser
- → Claude · GPT (plan)
Executorruns · evidenceAI
AI · runs · evidence
Drives a real browser step by step, classifies each failure, and captures screenshots, video and DOM snapshots.
Talks to
- ← execution (worker)
- → Playwright · Stagehand (CDP)
- → Self-healer
- → Object storage (evidence)
- → Live stream (screenshots)
- → reporting (results)
Reporterplain EnglishAI
AI · plain English
Explains failures, spots patterns across runs, and files them where the team works.
Talks to
- ← reporting (worker)
- → GitHub (PR check)
- → Linear · Slack
Indexertree-sitter · regex fallbackSERVICE
SERVICE · tree-sitter · regex fallback
Parses source with tree-sitter, falls back to patterns when it can’t, detects the framework, and indexes incrementally.
Talks to
- ← Analyst
- → PostgreSQL (map · embeddings)
Prioritiser40 · 35 · 25SERVICE
SERVICE · 40 · 35 · 25
Scores each case on criticality (40%), risk (35%) and coverage gap (25%), and boosts journeys like sign-in and checkout.
Talks to
- ← Planner
Self-healerselector memorySERVICE
SERVICE · selector memory
Finds a moved element by stored fix, text, label or role before asking a model, and saves what worked.
Talks to
- ← Executor
- → PostgreSQL (saved fixes)
EData· 3PostgreSQL · Redis · Object storage
PostgreSQLpgvectorSTORE
STORE · pgvector
Projects, maps, plans, runs and healed selectors, with embeddings for retrieval.
Talks to
- ← Indexer (map · embeddings)
- ← Self-healer (saved fixes)
Redisqueues · pub/subSTORE
STORE · queues · pub/sub
Backs the job queues, rate limits and live events.
Object storageS3 / R2STORE
STORE · S3 / R2
Screenshots, videos and DOM snapshots from every run.
Talks to
- ← Executor (evidence)
FOutside· 3Claude · GPT · Playwright · Stagehand · Linear · Slack
Claude · GPTrouted by taskEXTERNAL
EXTERNAL · routed by task
Different models for mapping, planning, running and reporting, chosen per task.
Talks to
- ← Planner (plan)
Playwright · Stagehandremote CDPEXTERNAL
EXTERNAL · remote CDP
A real headless browser over CDP, or a cloud browser when configured.
Talks to
- ← Executor (CDP)
Linear · Slackissues · alertsEXTERNAL
EXTERNAL · issues · alerts
Where failures become issues and alerts.
Talks to
- ← Reporter
Connections · 24
→ request · ⇢ webhook, queue or schedule
- Dashboard → API routes · HTTPS
- GitHub ⇢ API routes · webhooks
- API routes ⇢ indexing · enqueue
- indexing ⇢ Analyst · worker
- Analyst → Indexer
- Indexer → PostgreSQL · map · embeddings
- Analyst → Planner · system map
- Planner → Prioritiser
- Planner → Claude · GPT · plan
- Orchestrator ⇢ execution · run
- scheduler ⇢ Orchestrator · schedule
- execution ⇢ Executor · worker
- Executor → Playwright · Stagehand · CDP
- Executor → Self-healer
- Self-healer → PostgreSQL · saved fixes
- Executor → Object storage · evidence
- Executor ⇢ Live stream · screenshots
- Live stream ⇢ Dashboard · live
- Executor ⇢ reporting · results
- reporting ⇢ Reporter · worker
- Reporter → GitHub · PR check
- Reporter → Linear · Slack
- Claude → MCP server · MCP
- MCP server → Orchestrator · trigger
Inside: the executor and self-healing
Real apps change under their tests. The executor checks it’s allowed to run, orders tests by what they depend on, and when a button has moved it climbs a ladder of cheap fixes before it ever asks a model, then remembers the answer.
Hover a box to trace its connections; click it for what it does.
ABefore· 4Environment check · Dependency order · Auth reuse · API tests
Environment checknever productionSERVICE
SERVICE · never production
Refuses production environments outright, checks the target is reachable, and decrypts the test credentials.
Talks to
- → Dependency order
Dependency orderparallel groupsSERVICE
SERVICE · parallel groups
Sorts tests by their prerequisites into groups that run in parallel, one group after another, breaking any cycles first.
Talks to
- ← Environment check
- → Auth reuse
- → API tests (contracts)
Auth reuseskip repeat loginsSERVICE
SERVICE · skip repeat logins
Once signed in, later tests skip their opening login steps. Tests of the login itself always start fresh.
Talks to
- ← Dependency order
- → Step executor
API testsplain HTTPSERVICE
SERVICE · plain HTTP
Contract tests run without a browser or a model loop, falling back to the browser when they need the UI.
Talks to
- ← Dependency order (contracts)
BRun· 3Step executor · Browser · Provider guard
Step executorone step at a timeAI
AI · one step at a time
Acts on the page step by step and classifies any failure: missing element, not clickable, timeout, wrong assertion, wrong page.
Talks to
- ← Auth reuse
- ← Provider guard (abort)
- → Browser (act)
- → Stored fix (broken selector)
- → Flaky registry (retries)
- → Baselines (on pass)
- → Evidence
BrowserPlaywright · StagehandEXTERNAL
EXTERNAL · Playwright · Stagehand
A real browser over CDP, with Stagehand’s element and prompt caching when it is used.
Talks to
- ← Step executor (act)
Provider guardstop, don’t pile upSERVICE
SERVICE · stop, don’t pile up
If the AI provider fails on billing, auth or quota, the run stops rather than recording a false failure for every remaining test.
Talks to
- → Step executor (abort)
CHeal· 5Stored fix · Visible text · Label · Role · Model
Stored fixapproved firstSERVICE
SERVICE · approved first
A fix that worked before for this selector, approved ones first, then others above 0.85 confidence.
Talks to
- ← Step executor (broken selector)
- → Visible text (miss)
Visible textheuristicSERVICE
SERVICE · heuristic
Finds the element by the words on it.
Talks to
- ← Stored fix (miss)
- → Label (miss)
Labelaria-labelSERVICE
SERVICE · aria-label
Finds it by its accessible label.
Talks to
- ← Visible text (miss)
- → Role (miss)
Rolerole-basedSERVICE
SERVICE · role-based
Finds it by what it is: a button, a link, a field.
Talks to
- ← Label (miss)
- → Model (miss)
Modelselector sub-agentAI
AI · selector sub-agent
Last resort: a model reads the page’s interactive elements and the selectors that failed, and proposes a new one.
Talks to
- ← Role (miss)
- → Selector memory (saved)
DAfter· 4Selector memory · Flaky registry · Baselines · Evidence
Selector memorysaved fixesSTORE
STORE · saved fixes
Every heal is stored with its strategy and confidence, so the next run starts from it.
Talks to
- ← Model (saved)
Flaky registryquarantineSERVICE
SERVICE · quarantine
A test that fails then passes with no code change is flaky, not broken; after five such flips with under half its recent runs passing, it is quarantined.
Talks to
- ← Step executor (retries)
Baselinesscreens · API shapesSTORE
STORE · screens · API shapes
After a passing run, screenshots and API response shapes are kept to compare the next run against.
Talks to
- ← Step executor (on pass)
Evidencescreens · video · DOMSTORE
STORE · screens · video · DOM
Everything a person needs to see what happened, kept per step.
Talks to
- ← Step executor
Connections · 15
→ request · ⇢ webhook, queue or schedule
- Environment check → Dependency order
- Dependency order → Auth reuse
- Dependency order → API tests · contracts
- Auth reuse → Step executor
- Provider guard → Step executor · abort
- Step executor → Browser · act
- Step executor → Stored fix · broken selector
- Stored fix → Visible text · miss
- Visible text → Label · miss
- Label → Role · miss
- Role → Model · miss
- Model → Selector memory · saved
- Step executor → Flaky registry · retries
- Step executor → Baselines · on pass
- Step executor → Evidence
Two flows
Testing your app
Walk through it and each step lights the parts it runs through in the drawings above.
By count
- agents: analyst, planner, executor, reporter
- 4
- actions Claude can take in it
- 7
Notes
- N.1When a button moves, Orbit tries the cheap ways to find it first: its text, its label, its role. It only asks a model as a last resort, and it remembers the answer.
- N.2It can break things on purpose, like a dropped request or a slow server, to see how the app copes.
Built by
I design, architect and build software products like this one.
More systems