The agent matrix
Every profile is labeled with its access method — evidence you can stand
behind. GET /api/agents returns this table programmatically.
| Adapter | Access | Vendor / model | Requires |
|---|---|---|---|
claude-cu |
api-direct | Anthropic · claude-sonnet-5 computer-use toolset | ANTHROPIC_API_KEY |
gemini-cu |
api-direct | Google · gemini-2.5-computer-use | GOOGLE_API_KEY |
openai-cua |
api-direct | OpenAI · computer-use (Responses API) | OPENAI_API_KEY + CUA access |
browser-use-gpt |
api-direct | browser-use · GPT-class | OPENAI_API_KEY or OPENROUTER_API_KEY |
scripted-saucedemo |
control | deterministic Playwright script | — |
Access methods: api-direct (the vendor's agent model driven through its official API, our executor), emulation (same model, reconstructed scaffolding — labeled), real-product (the consumer product itself — calibration program, roadmap), control (scripted baseline).
Model overrides via env: FB_CLAUDE_MODEL, FB_GEMINI_MODEL,
FB_OPENAI_CUA_MODEL, FB_BROWSERUSE_MODEL, FB_JUDGE_MODEL.
Writing an adapter
Subclass flightbox.adapters.base.Adapter, implement
async run(task, session, run_id) -> list[StepEvent], drive session.page
(Playwright) or attach via session.cdp_url. Recording is automatic — the
Session owns the black box; adapters never manage it. Emit every think/act
step as a StepEvent (the normalized atom: thought, action, screenshot, url,
tokens, cost).