---
created: 2026-05-06
gap: G03
order: 5
severity: P0
category: actions
estimate: L
issue: "https://github.com/lidge-jun/agbrowse/issues/61"
depends_on: ['G02']
---

# G03 — Generic action breadth (vs Vercel agent-browser, Playwright MCP)

> Severity **P0** · Category `actions` · Estimate **L** ·
> Tracking issue [#61](https://github.com/lidge-jun/agbrowse/issues/61) · Depends on **G02**

## GPT Pro evidence

Evidence (competitor side): URL: https://github.com/vercel-labs/agent-browser — quote: “Actions: click, fill, type, hover, focus, check, uncheck.” Vercel’s CLI also documents drag, upload, scroll, wait, cookies, storage, and network commands. 
GitHub

Evidence (agbrowse side): README.md:456-463 lists click, type, press, hover, mouse-click, resize, and evaluate; the provided truth table marks broader MCP browser tools as deferred. 
GitHub
+1

Why this matters: Agent loops regularly hit selects, checkboxes, file inputs, scroll containers, dynamic waits, and drag/drop. Missing action breadth forces fragile JS evaluation or manual workarounds.
Proposed scope, respecting forbidden list:

skills/browser/browser.mjs — add local-CDP select, check, uncheck, scroll, wait-for, drag, and upload commands.

web-ai/action-intent.mjs — add semantic intents for select/check/scroll/wait/upload/drag.

web-ai/target-resolver.mjs — add diagnostics for selectable state, checkbox state, file input eligibility, and scrollability.

web-ai/policy/browser-action-policy.mjs — classify uploads and destructive form actions behind existing policy enforcement.

structure/commands.md — add a local browser primitive matrix, clearly separate from frozen MCP scope.

structure/release_gates.md — add gate:browser-primitives-complete.
Test surface: test/unit + test/integration.
cli-jaw mirror impact: parity required for any public cross-repo browser-primitive claim.
Acceptance gate: keep gate:mcp-scope-frozen; add gate:browser-primitives-complete.
Estimate: L, 4+ days.

## Diff-level work breakdown

> Fill in concrete diffs (NEW / MODIFY / DELETE with file:line) once this gap
> reaches the active sprint. Until then, the bullets in **Proposed scope**
> above are the agreed shape; do not implement before the depending gaps
> (G02) ship and `gate:all` stays green.

### NEW files
- _to be filled before implementation_

### MODIFY
- _to be filled before implementation_

### DELETE
- _to be filled before implementation_

## Tests
- `test/unit/...` — _list test files once written_

## Truth-table update
- `structure/CAPABILITY_TRUTH_TABLE.md` — add row or update status when this
  gap reaches `ready` in agbrowse.
- `cli-jaw/structure/CAPABILITY_TRUTH_TABLE.md` — mirror entry per the
  `cli-jaw mirror impact` line above.

## Release gates touched
- Existing: `gate:typecheck`, `gate:tests`, `gate:truth-table-fresh`,
  `gate:mcp-scope-frozen`, `gate:no-experimental-in-readme-ready-section`.
- Added by this gap: see **Acceptance gate** in the GPT Pro evidence block.
