You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
browser-use invests heavily in actionable-element quality: JS click listeners, AX roles/properties, label/span wrappers, paint order, and bounding-box filtering. OpenChrome already has compact DOM serialization, but its interactiveness detection is still mostly tag/role/attribute based. Improving element annotations should reduce wrong clicks and unnecessary retry/token loops.
Related existing work: #866 (oc_observe), #853 (occlusion/iframe/tiling for vision_find), #831 (canonical read_page refs), #828 (unify refs). This issue is limited to safe annotation and optional filtering in the DOM/read pipeline.
Goal
Improve actionable element quality by adding enhanced clickable and occlusion annotations before considering aggressive filtering.
Scope
Add an elementQuality or equivalent metadata layer for DOM/read outputs:
Any element with unknown occlusion and any positive interactive signal must still be emitted in safe mode.
If JS click listener detection is not available through the chosen CDP path, the implementation must explicitly mark that signal as unknown, not silently omit the category.
Curated scope, overlap handling, and verification checklist
Keep this issue aligned with OpenChrome's MCP/CDP-first, additive, deterministic-tool-server direction.
If an existing open PR already implements part of this scope, update that PR or mark the overlap explicitly before starting new work.
Do not absorb adjacent benchmark, dashboard, security, or skill-memory work unless the original issue text requires it.
Implementation checklist
Restate the exact contract for enhanced actionable-element annotations and safe occlusion filtering (browser-use adoption G3) in code/docs before changing behavior.
Implement the narrow surface named by this issue before broadening to adjacent systems.
Preserve existing behavior by default and gate new behavior with explicit config/tool arguments where appropriate.
Add targeted unit/integration tests for success, failure, compatibility, and bounded output.
Add regression coverage for the issue-specific happy path, failure path, default/disabled path, and artifact/output bounds.
Update user-facing docs or inline tool descriptions when hosts must choose a new flag, mode, policy, or workflow.
Success criteria
The implementation satisfies the primary deliverable without broadening into non-goals.
Existing default behavior remains backward-compatible or the issue explicitly documents the compatibility break.
Failure cases return bounded, actionable diagnostics rather than silent fallback or unbounded dumps.
Tests/benchmarks cover the concrete surface named in this issue, not only helper utilities.
Any produced artifact is deterministic, redacted, and small enough for merge review or stored behind handles.
Post-merge OpenChrome live verification checklist
Run the documented local OpenChrome fixture or smoke path for enhanced actionable-element annotations and safe occlusion filtering (browser-use adoption G3) and capture the exact command/tool calls.
Verify read_page behavior matches the issue goal in both the enabled path and the default/disabled compatibility path.
Inspect generated artifacts/logs/responses for bounded size, redaction, source links, and clear failure diagnostics.
Record sanitized output excerpts, artifact paths, and any benchmark/latency/payload numbers in merge verification notes.
Background
browser-use invests heavily in actionable-element quality: JS click listeners, AX roles/properties, label/span wrappers, paint order, and bounding-box filtering. OpenChrome already has compact DOM serialization, but its interactiveness detection is still mostly tag/role/attribute based. Improving element annotations should reduce wrong clicks and unnecessary retry/token loops.
Related existing work: #866 (oc_observe), #853 (occlusion/iframe/tiling for vision_find), #831 (canonical read_page refs), #828 (unify refs). This issue is limited to safe annotation and optional filtering in the DOM/read pipeline.
Goal
Improve actionable element quality by adding enhanced clickable and occlusion annotations before considering aggressive filtering.
Scope
Add an
elementQualityor equivalent metadata layer for DOM/read outputs:{ "ref": "@e12", "tag": "div", "role": "button", "text": "Submit", "interactiveConfidence": "high", "signals": ["role:button", "js-click-listener", "visible-bounds"], "occlusion": "none|partial|covered|unknown", "filterDecision": "emit|annotate-only|suppress" }Required behavior:
annotatemode as the safe default for new metadata.elementFiltering=safe|aggressive|offonly after annotation tests pass.Non-goals
Implementation notes
src/dom/dom-serializer.ts.unknownrather than suppress.candidateElements,annotatedInteractive,suppressedElements,unknownOcclusion.Success criteria
read_pageoutput remains compatible by default.Real OpenChrome validation after implementation
Use a local fixture plus one real-world page.
<div role="button"><span><input type="checkbox"></span>inside a label-like wrappernavigatetohttp://127.0.0.1:8765/fixture.htmlread_pageorinspectwith enhanced annotation enabledhttps://github.com/browser-use/browser-use:read_pagewith annotation enabledReview checklist
Self-review clarifications (added before implementation)
annotatemode only unless suppression has dedicated regression coverage. Filtering can be enabled in a follow-up PR.interactiveConfidenceallowed values arehigh | medium | low | unknown; do not invent free-form confidence strings.occlusionallowed values arenone | partial | covered | unknown.unknownocclusion and any positive interactive signal must still be emitted in safe mode.unknown, not silently omit the category.Curated scope, overlap handling, and verification checklist
Scope classification
read_page,vision_find,act,interact,find,navigate,oc_observe.Overlap and conflict resolution
Implementation checklist
Success criteria
Post-merge OpenChrome live verification checklist