- version
-
1.0.2331.0.240
Oya Browser changelog
io.github.oyadotai/oya-browser
44 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.
-
server.json 1 field changed
-
server.json 2 fields changed
- description
-
Real Chrome for agents. Install the desktop app, click Connect; this remote is the cloud fallback.Oya, the HIPAA-compliant agentic browser, over MCP: browse, run playbooks, hand a tab to a person. - version
-
1.0.2281.0.233
-
server.json 1 field changed
- version
-
1.0.2261.0.228
-
server.json 3 fields changed
- description
-
Real Chrome for agents: start a browser, read pages as numbered markdown, click, type, hand off.Real Chrome for agents. Install the desktop app, click Connect; this remote is the cloud fallback. - icon_url
-
—https://oyabrowser.com/icon.png - version
-
1.0.2181.0.226
-
server.json 1 field changed
- version
-
1.0.2151.0.218
-
server.json 1 field changed
- version
-
1.0.2101.0.215
-
AGENTS.md +2 −2
https://raw.githubusercontent.com/oyadotai/oya-browser/HEAD/AGENTS.md
− Keel's own browser (the `browser_*` tools on server `keel`, the lane's Browser tab) is the browser− and Oya's tools are withheld on purpose; use it the same way. The team+ use the `browser_*` tools on server `keel`. They use the browser selected for the session: Inside+ Keel or the person's local Oya Browser. Keep to owned tabs and report connection failures. The team
-
server.json 1 field changed
- version
-
1.0.2061.0.210
-
llms.txt +15
https://oyabrowser.com/llms.txt
+ (overwrites a playbook of the same name)+ PATCH /api/playbooks/:name rename: { name }; 409 if the name is taken,+ 404 if there is none; its healed draft moves too+ To spread many browsers across several personas, put them in a persona group+ and start with the group's name. Each start runs as the member with the fewest+ running browsers, then the one used longest ago, skipping members at their cap;+ the default persona cannot be a member. With `queueMs`, a start that finds every+ member full waits on the least busy one. Needs server 1.0.205 or later: an older+ server ignores `personaGroup` and starts as the default persona.+ await oya.personaGroups.create('checkout-pool', [personaA.id, personaB.id]);+ const browser = await oya.browser.start({ personaGroup: 'checkout-pool' });+ browser.persona; // the member it runs as+ POST /api/persona-groups { name, personaIds } (409 group_exists)+ PUT /api/persona-groups/:name { personaIds }+ DELETE /api/persona-groups/:name
-
AGENTS.md +88
https://raw.githubusercontent.com/oyadotai/oya-browser/HEAD/AGENTS.md
+ ## Production+ The production checklist the reviewers enforce is in `docs/PRODUCTION.md`. It applies.+ ## How a request becomes a change+ Every request that changes the product runs this pipeline, in this order, and the person sees one+ report at the end of it — not a stream of half-decisions along the way. The stages are the team's+ subagents (`.claude/agents/`, `.agents/agents/`, `.codex/agents/` — one per coding agent). They run **one after another**, never in parallel, because each one reads+ what the last one returned; and what a stage returned is handed to the next **verbatim**, because+ a subagent starts with an empty context and a paraphrase is where a scope quietly grows.+ **In Codex**, run a stage with `spawn_agent`: `task_name` is the stage's name (`pm`, `designer`,+ …) and the message says to follow the `developer_instructions` in `.codex/agents/<stage>.toml`,+ followed by the brief: the person's ask in their own words and what the previous stage returned,+ verbatim. Wait for it to finish before starting the next stage. Do not do a stage's work yourself+ instead of spawning it.+ 1. **`pm`** — given the ask in the person's own words. Returns build / change / cut / not yet,+ and the smallest version worth shipping with its out-list. *Build* and *change* carry on, to+ the scope the PM set. **`cut` and `not yet` stop the pipeline and go back to the person**, with+ the reasoning. They can overrule it in one word.+ 2. **`designer`** — given the ask and the PM's scope, whenever anything a person reads changes: a+ page, a label, an error message, CLI output, an API response a client renders. Returns the+ states table, the layout, the copy. Skipped — and said to be skipped — when nothing visible+ moves.+ 3. **`principal`** — given the ask, the scope and the design. Reviews both for what they missed,+ then returns the technical design: the modules touched, what is reused, the invariants at risk,+ and the tests that will pin it. If the scope or the design cannot stand, that goes back through+ the stage that owns it once, not around it.+ 4. **Implementation** — the main loop, not a subagent, so the work is visible as it is written.+ It follows the principal's design; a deviation is written down with its reason, not made+ silently, and it keeps to "Engineering rules" below. Done means the gate is green, then+ `reviewer` on the diff — and `security` or+ `reliability` when their descriptions say the change is theirs.+ 5. **`qa`** — given the ask, the scope and what changed. *Do not ship* means fix and run `qa`+ again, **twice at most**; after that the person gets the change and the open bug list rather+ than a loop with no end.+ **Direct mentions:** When the person tags a member, give that member the requested task directly;+ do not require unrelated pipeline stages. `oya-browser` is the browser specialist for research,+ web interaction, screenshots and browser QA. Use Oya exclusively for all browser work; if its+ connection is unavailable, report the blocker and never substitute another provider. Inside Keel,+ Keel's own browser (the `browser_*` tools on server `keel`, the lane's Browser tab) is the browser+ and Oya's tools are withheld on purpose; use it the same way. The team+ ships role playbooks, specialist engineering skills, and Oya research with supporting assets.
Showing the first 40 of each.
-
server.json 1 field changed
- version
-
1.0.2041.0.206
-
server.json 1 field changed
- version
-
1.0.2031.0.204
-
server.json 1 field changed
- version
-
1.0.2021.0.203
-
server.json 1 field changed
- version
-
1.0.2001.0.202
-
server.json 1 field changed
- version
-
1.0.1991.0.200
-
server.json 1 field changed
- version
-
1.0.1981.0.199
-
server.json 1 field changed
- version
-
1.0.1971.0.198
-
server.json 1 field changed
- version
-
1.0.1961.0.197
-
server.json 1 field changed
- version
-
1.0.1951.0.196
-
server.json 1 field changed
- version
-
1.0.1941.0.195
-
llms.txt +23 −8
https://oyabrowser.com/llms.txt
− oyabrowser.com; each user creates an API key from the dashboard.− 2. Download Oya Browser: macOS .dmg, Windows .exe, or Linux .AppImage, https://oyabrowser.com/docs#download− Analyzes the current page. Returns the full page with every interactive element numbered, written as markdown (the default), TOON or JSONL. Includes viewport size, scroll position and each element's state (off-screen, disabled, checked, a field's hint).− Switch to a different tab.− Close a tab. Closes active tab if no tab_id specified.− Thirty-one tools: analyze_page, navigate, click, type, screenshot, press_key, handle_dialog,− solve_captcha, sign_in, complete_mfa, list_playbooks, run_playbook, run_task, plus− analyze , format? (markdown | toon | jsonl) , Full page + numbered elements, as markdown (default), TOON or JSONL+ oyabrowser.com; each user creates an API key from the dashboard. Security,+ HIPAA status and subprocessors are on the trust center: https://oyabrowser.com/trust+ 2. Download Oya Browser: macOS .dmg or Windows .exe, https://oyabrowser.com/docs#download+ claude.ai, Claude Desktop and Claude mobile (Pro, Max, Team, Enterprise), no+ API key: Settings → Connectors → Add custom connector, paste+ https://oyabrowser.com/mcp/pool, and sign in to Oya when asked. Pick the+ project to connect and allow it. The Claude plan pays for the model; Oya is the+ browser. The connection shows as a credential in the project's settings, where+ it can be revoked. Any MCP client that signs in with OAuth works the same way.+ Several agents on one desktop browser: give each a name with the `X-Oya-Agent`+ header (or `?agent=NAME` on the URL). On the Oya desktop app each named agent+ drives a tab of its own, marked in the tab strip, while the person keeps using+ every other tab. Letters, digits, `.`, `_` and `-`, up to 64 characters. Agents+ without a name share one tab, as before.+ Analyzes the current page. Returns the full page with every interactive element numbered, written as TOON (the default), markdown or JSONL. Includes viewport size, scroll position and each element's state (off-screen, disabled, checked, a field's hint).+ Switch to one of your own tabs (list_tabs marks them yours). Tabs the person or another agent is using are refused; use open_tab instead.+ Close a tab you opened with open_tab (default: your current tab). Tabs the person or another agent opened are refused; leave them open.+ ### list_saved_logins+ The sites the persona has a saved login for (imported from a password export or set through the API), with the username only. Tells the caller whether sign_in can fill a form, and as which account.+ Parameters: none+ Thirty-two tools: analyze_page, navigate, click, type, screenshot, press_key, handle_dialog,+ solve_captcha, sign_in, complete_mfa, list_saved_logins, list_playbooks, run_playbook, run_task, plus+ analyze , format? (markdown | toon | jsonl) , Full page + numbered elements, as TOON (default), markdown or JSONL
-
AGENTS.md +10
https://raw.githubusercontent.com/oyadotai/oya-browser/HEAD/AGENTS.md
+ ## Native agent-control boundary (required)+ - Oya's internal browser and agent operations must use browser-owned native APIs, not CDP.+ - The patched engine is the Linux cloud runtime only. Desktop apps (macOS, Windows) ship stock Electron: use stock non-CDP Electron APIs there, and return the unsupported-capability error where only the patched engine has one.+ - CDP is permitted only as an external front-door compatibility protocol for agents connecting to Oya.+ - The front door must translate supported requests into native Oya operations. It must not proxy requests to a Chromium debugging endpoint or use Electron's debugger as its backend.+ - Do not rename or wrap CDP helpers and describe them as native. Do not fall back to CDP when a native capability is unavailable; return an explicit unsupported-capability error.+ - Retain authorization, human/agent control ownership, tab/frame isolation, persona and egress protections throughout migration. Do not remove safety checks to eliminate CDP calls.+ - Test through Oya and its native APIs. Do not launch Chrome, Chromium, Playwright, or another browser as a substitute.+ - **Exception (maintainer decision, 2026-10-12):** the external front door passes standard page-session CDP methods it has no native answer for to that tab's own debugger, so Playwright, Puppeteer and Stagehand clients work. It lives only in `browser/src/main/app/cdp-passthrough.ts` (the one file `tests/unit/native-boundary.test.ts` exempts) and keeps ownership, Human Mode, persona and egress refusals. Do not remove it as a boundary violation, and do not extend debugger use beyond it; replace pa+ - Existing internal CDP dependencies are migration debt, not an exception to this requirement. Do not claim Oya is internally CDP-free or release it on that basis until enforcement and native integration tests prove it.
-
server.json 1 field changed
- version
-
1.0.1931.0.194
-
server.json 1 field changed
- version
-
1.0.1911.0.193
-
server.json 1 field changed
- version
-
1.0.1891.0.191
-
server.json 1 field changed
- version
-
1.0.1871.0.189
-
server.json 1 field changed
- version
-
1.0.1851.0.187
-
server.json 1 field changed
- version
-
1.0.1821.0.185
-
server.json 1 field changed
- version
-
1.0.1811.0.182
-
server.json 1 field changed
- version
-
1.0.1801.0.181
-
server.json 1 field changed
- version
-
1.0.1781.0.180
-
server.json 1 field changed
- version
-
1.0.1761.0.178
-
server.json 1 field changed
- version
-
1.0.1721.0.176
-
server.json 1 field changed
- version
-
1.0.1681.0.172
-
server.json 1 field changed
- version
-
1.0.1651.0.168
-
AGENTS.md +11 −4
https://raw.githubusercontent.com/oyadotai/oya-browser/HEAD/AGENTS.md
− | `browser/` | `npm run lint` · `npm run format:check` | none (plain JavaScript) | `npm test` (unit + regressions) · `npm run test:shell` · `npm run test:control` · `npm run test:identity` · `npm run test:sync` (real Electron) |− - `server/src/modules/control/egress.ts` and `browser/governance.js` share a− host matcher that must stay byte-identical. A test compares the two.− `browser/anonymity/*`) are visible to the pages they run in, including+ | `browser/` | `npm run lint` · `npm run format:check` | `npm run typecheck` · `npm run build` (electron-vite, into `out/`) | `npm test` (unit + regressions) · `npm run test:shell` · `npm run test:control` · `npm run test:recording` · `npm run test:identity` · `npm run test:workflow` · `npm run test:sync` (real Electron) |+ - `server/src/modules/control/egress.ts` and+ `browser/src/main/identity/host-rules.ts` share a host matcher that must+ stay byte-identical. A test compares the two.+ `browser/anonymity/{stealth,fingerprint,inject}.js`, and the page-script+ strings in `browser/src/main/actions/scripts.ts`, `src/main/tabs/` and+ `src/page/`) are visible to the pages they run in, including+ - **Never mention Claude in commits or pull requests.** No `Co-Authored-By: Claude`+ trailer, no "Generated with Claude Code" line, no claude.ai session link, and+ never commit as `Claude <noreply@anthropic.com>`. Commits are authored by the+ maintainer alone.
-
llms.txt +5 −1
https://oyabrowser.com/llms.txt
− Parameters: format (string, optional): "markdown", "toon" or "jsonl". Left out, the server's OYA_PAGE_FORMAT when it sets one, else the default picked in the Oya Browser's settings (markdown unless changed).+ Parameters: format (string, optional): "markdown", "toon" or "jsonl". Left out, the server's OYA_PAGE_FORMAT (toon unless set).+ To update that install to the latest version, run this. It asks nothing, keeps+ .env and the number of browser workers, rebuilds, restarts and waits for+ /readyz; if ~/oya-browser has local edits it stops without changing anything:+ curl -fsSL https://raw.githubusercontent.com/OyadotAI/oya-browser/main/update.sh | sh
-
server.json 1 field changed
- version
-
1.0.1621.0.165
-
server.json 1 field changed
- version
-
1.0.1601.0.162
-
server.json 1 field changed
- version
-
1.0.1581.0.160
-
server.json 1 field changed
- version
-
1.0.1551.0.158
-
server.json 1 field changed
- version
-
1.0.1541.0.155
-
server.json 1 field changed
- version
-
1.0.1451.0.154
-
server.json 1 field changed
- version
-
1.0.1441.0.145