by OyadotAI
The browser control plane for AI agents. One API over Oya Cloud, Browserbase, Steel, Anchor, Browser Use and your own Chrome, with persistent personas, CAPTCHA and MFA handling, and live human takeover.
# Add to your Claude Code skills
git clone https://github.com/OyadotAI/oya-browserGuides for using ai agents skills like oya-browser.
Last scanned: 9/26/2026
{
"issues": [
{
"type": "npm-audit",
"message": "esbuild: esbuild allows arbitrary file read when running the development server on Windows",
"severity": "low"
},
{
"file": "README.md",
"line": 138,
"type": "remote-install",
"message": "Install command (remote install script piped to a shell — review the source before running): \"curl -fsSL https://raw.githubusercontent.com/OyadotAI/oya-browser/main/install.s\"",
"severity": "low"
},
{
"file": "skills/oya-browser/SKILL.md",
"line": 25,
"type": "secret-exfiltration",
"message": "Instruction appears to send credentials/secrets to an external endpoint",
"severity": "medium"
}
],
"status": "PASSED",
"scannedAt": "2026-09-26T09:09:18.108Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how oya-browser compares with popular alternatives.
oya-browser is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by OyadotAI. The browser control plane for AI agents. One API over Oya Cloud, Browserbase, Steel, Anchor, Browser Use and your own Chrome, with persistent personas, CAPTCHA and MFA handling, and live human takeover. It has 349 GitHub stars.
Yes. oya-browser passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/OyadotAI/oya-browser" and add it to your Claude Code skills directory (see the Installation section above).
oya-browser is primarily written in Rust. It is open-source under OyadotAI on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh oya-browser against similar tools.
No comments yet. Be the first to share your thoughts!
From $49 · 30 days · terms & refunds
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Automated security scan — not a certification.
Oya Browser is a browser for AI agents that you can run on your own infrastructure or use as a managed service. An agent completes a task once in natural language; Oya records the steps as a playbook that replays deterministically, without calling a model, and repairs individual steps when a page changes. People can watch any session and take control at any time.
This repository contains the community edition: the browser, the control plane, the web console, the TypeScript SDK and the CLI.
ask() is saved with toPlaybook() and replayed with
play() using new inputs and no model calls. Each playbook is also exported as a Playwright
module. In a ten-site benchmark, nine sites replayed every recorded
step with healing disabled.| Component | Version |
|---|---|
| Node.js | 20 or later |
| Docker | Docker Desktop or Docker Engine with Compose 2.24 or later (local installation only) |
| Model API key | Anthropic, OpenAI or Gemini, for natural-language tasks |
This quickstart installs the control plane and one browser on your machine with Docker, then runs a sample that records a task and replays it.
Export a model API key, then run the installer:
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY, or GEMINI_API_KEY
curl -fsSL https://raw.githubusercontent.com/OyadotAI/oya-browser/main/install.sh | sh -s -- --yes
The installer clones this repository to ~/oya-browser, starts the services and prints the
connection settings. Export them:
export OYA_BASE_URL=http://localhost:3100
export OYA_API_KEY=oya_...
npm install @oya-ai/browser
Save the following as agent.mjs and run node agent.mjs:
import { Oya } from '@oya-ai/browser';
const browser = await new Oya().browser.start();
await browser.goto('https://httpbin.org/forms/post');
// Run 1: the agent works it out, and Oya records what it did.
let t = Date.now();
await browser.ask('Order a large pizza for {{name}}, then submit the order', { data: { name: 'Ada' } });
await browser.toPlaybook('pizza');
console.log(`agent: ${(Date.now() - t) / 1000}s`);
// Every run after: the recorded steps with new inputs. No LLM in the loop.
t = Date.now();
await browser.play('pizza', { name: 'Alan' });
console.log(`replay: ${(Date.now() - t) / 1000}s, no model`);
await browser.stop();
The agent completes the order once and the result is saved as the playbook pizza. The replay
submits the same order for a different name without calling the model. Output from one run with
Gemini 3.8 Flash:
agent: 152.712s
replay: 14.246s, no model
Agent time depends on the model; replay time does not. To watch the session, open http://localhost:3100 and sign in with the same API key.
To skip the local installation, create an API key at oyabrowser.com,
export only OYA_API_KEY, and run the same sample. start() uses the
Oya desktop app when it is open and signed in, and otherwise
starts a browser in Oya Cloud.
By default, ask() uses the model configured for your API key. To choose one in code, pass
model to the client. The setting applies to that client only and is not saved:
const oya = new Oya({
model: { provider: 'anthropic', name: 'claude-sonnet-5', apiKey: process.env.ANTHROPIC_API_KEY },
});
Supported providers are openai, anthropic, gemini, vertex and openrouter. When
apiKey is set, requests go directly to that provider and are billed to your account.
Every Oya browser exposes a CDP endpoint, so Playwright, Puppeteer, Stagehand and browser-use connect without changes:
import { chromium } from 'playwright-core';
import { Oya } from '@oya-ai/browser';
const browser = await new Oya().browser.start();
const cdp = await chromium.connectOverCDP(browser.cdpUrl);
const context = cdp.contexts()[0];
const page = context.pages()[0] ?? (await context.newPage());
await page.goto('https://example.com');
console.log(await page.title());
await cdp.close();
await browser.stop();
Install the desktop app, open it and click
Connect next to your agent (Claude Code, Codex, Cursor, VS Code and others appear
when installed). That adds an MCP server named oya-browser at
http://127.0.0.1:47321/mcp to the agent's config; no account, no key. The agent
then uses Oya as its browser in place of Chrome: each session gets its own tab,
you keep yours, and you can take control at any time.
With no desktop (servers, containers, CI), any MCP client can use Oya Cloud. For Claude Code:
claude mcp add --transport http oya https://oyabrowser.com/mcp/pool \
--header "Authorization: Bearer $OYA_API_KEY"
Setup instructions written for agents are published at oyabrowser.com/llms.txt.
The examples directory contains runnable TypeScript samples. After the
quickstart, the installer's copy is ready to use:
cd ~/oya-browser/examples && npm install
cp .env.example .env # set OYA_BASE_URL and OYA_API_KEY
npx tsx --env-file=.env playwright/01-connect.ts
| Sample | Description | Runs on |
|---|---|---|
sdk/01-quickstart.ts |
Start a browser and complete a task in natural language | Local installation or Oya Cloud |
sdk/05-playbooks.ts |
Record, replay, background runs and step repair | Local installation or Oya Cloud |
playwright/01-connect.ts |
Playwright through the CDP endpoint | Local installation or Oya Cloud |
sdk/03-mfa.ts |
Password and TOTP sign-in with sealed credentials | Desktop app |
sdk/02-captcha.ts |
CAPTCHA detection and solving | Oya Cloud, or a configured solver |
sdk/04-personas.ts |
Persistent browser identities | Oya Cloud |
playwright/reddit/ |
Ten parallel browsers through a residential proxy | Oya Cloud, with a proxy assigned to the persona |
multi-vendor/ |
One script across Oya Cloud, Browserbase, Steel, Anchor and Browser Use | Oya Cloud and each provider's API key |
The local installation runs one Docker browser. For samples that require Oya Cloud, use an API
key from oyabrowser.com and leave OYA_BASE_URL unset.
The quickstart installs a single-node deployment with SQLite and one browser. For production, including Postgres, multiple browsers, Amazon ECS, Kubernetes and GKE, see the self-hosting guide and the deployment templates.
Self-hosted deployments include host-level egress rules and a tamper-evident audit trail. See the control evidence and the [trust c