Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Execute a natural-language browser intent via page-agent (browser_act) when the target is easier to describe than to select — degrades gracefully when page-agent or an OpenAI-compatible LLM provider isn't configured
.claude/skills/ruvnet-browser-intent/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 58% | 0% |
| case-05 | ✗→✓ | ▲ Improved | -21% | 0% |
| case-06 | ✗→✓ | ▲ Improved | -41% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 131% | 0% |
Natural-language layer on top of the low-level browser_* selector tools. Where browser-extract and browser-form-fill compose selector-based primitives (browser_click, browser_fill, browser_snapshot), browser-intent lets the caller say what they want ("Click the login button", "Fill the search box with cats and submit") and delegates execution to page-agent — in-page injected JS that turns the DOM into text and drives an LLM tool-call loop against it.
browser_click / browser_fill / browser_snapshot directly when you already know the exact selector or ref (@e1) — browser_act adds LLM latency + cost that a direct selector call doesn't.browser_act with a task string, and optionally url (navigates first) and session (default "default"): mcp__plugin_ruflo-core_ruflo__browser_act({ task: "Click the login button", url: "https://example.com/account", session: "my-session" })
{ success: true, result, steps, history, contentFlagged, llmSource } — the intent executed. result is the AIDefence-gated final text page-agent produced; history is the full step trace (reflection + action + tool result per step); steps is history.length.{ success: true, degraded: true, reason, hint } — page-agent isn't installed, or no OpenAI-compatible LLM provider is configured. Never treat degraded: true as an error to retry — surface the hint and fall back to selector-based browser_* tools instead.{ success: false, error, ... } — a real failure (browser open failed, injection failed, execution timed out, or page-agent's own execute() reported success:false).contentFlagged: true, the returned result has already been redacted by AIDefence (PII or a prompt-injection/threat pattern was detected in the page-agent output) — do not attempt to recover the original text.browser-record) when the interaction matters enough to replay later; browser_act itself does not open an RVF container — it operates on whatever session id you pass (or "default").page-agent calls its LLM directly from the browser page context via a plain OpenAI-compatible POST {baseURL}/chat/completions. That means:
ANTHROPIC_API_KEY is not sufficient — Anthropic's native API is a different shape (/v1/messages).OPENROUTER_API_KEY (OpenRouter, OpenAI-compatible), OLLAMA_API_KEY (Ollama Cloud, OpenAI-compatible), or CLAUDE_FLOW_PAGE_AGENT_BASE_URL + CLAUDE_FLOW_PAGE_AGENT_API_KEY for a custom OpenAI-compatible endpoint.browser_act starts a short-lived loopback HTTP proxy that holds the key server-side and injects the real Authorization header itself. The page only ever sees a 127.0.0.1 URL and a placeholder key string.page-agent is an optionalDependencies entry (npm i page-agent if the doctor/degraded hint asks for it) — this plugin stays fully operational without it; you simply lose the natural-language layer and fall back to selector-based tools.PageAgent instance against Alibaba's public test endpoint) is stripped before injection — you should never see traffic to a page-ag-testing-* host from this tool.browser_act call best-effort records the intent + resulting trajectory into the browser memory namespace (ADR-174 distillation loop). This is fire-and-forget — a memory-store failure never fails the tool call.timeoutMs (default 120000) bounds how long browser_act polls for execute() to settle; a slow multi-step intent may need a higher value.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-04 | fail→pass | 7,594 | 5,560 | -27% | 1 | 1 | 0% | 1,365 | 2,163 | +58% | 0 | 0 | — |
case-01 | fail→fail | 8,999 | 5,191 | -42% | 1 | 1 | 0% | 1,471 | 1,430 | -3% | 0 | 0 | — |
case-02 | fail→fail | 19,808 | 16,088 | -19% | 1 | 1 | 0% | 585 | 2,168 | +271% | 0 | 0 | — |
case-03 | fail→fail | 3,976 | 4,788 | +20% | 1 | 1 | 0% | 643 | 1,446 | +125% | 0 | 0 | — |
case-05 | fail→pass | 14,122 | 3,948 | -72% | 1 | 1 | 0% | 2,350 | 1,859 | -21% | 0 | 0 | — |
case-06 | fail→pass | 15,402 | 5,305 | -66% | 1 | 1 | 0% | 2,933 | 1,721 | -41% | 0 | 0 | — |
case-07 | fail→pass | 14,170 | 7,023 | -50% | 1 | 1 | 0% | 2,266 | 2,398 | +6% | 0 | 0 | — |
case-08 | pass→pass | 10,357 | 3,072 | -70% | 1 | 1 | 0% | 1,509 | 1,721 | +14% | 0 | 0 | — |
case-09 | fail→pass | 5,510 | 4,911 | -11% | 1 | 1 | 0% | 869 | 2,011 | +131% | 0 | 0 | — |
case-10 | fail→pass | 11,677 | 3,198 | -73% | 1 | 1 | 0% | 2,308 | 1,623 | -30% | 0 | 0 | — |
case-11 | fail→fail | 11,734 | 3,960 | -66% | 1 | 1 | 0% | 2,097 | 1,794 | -14% | 0 | 0 | — |
case-12 | fail→pass | 8,752 | 2,574 | -71% | 1 | 1 | 0% | 1,676 | 1,677 | +0% | 0 | 0 | — |
case-13 | pass→pass | 2,920 | 1,221 | -58% | 1 | 1 | 0% | 502 | 1,340 | +167% | 0 | 0 | — |
case-14 | fail→pass | 6,050 | 1,271 | -79% | 1 | 1 | 0% | 1,128 | 1,288 | +14% | 0 | 0 | — |
case-15 | fail→pass | 7,334 | 2,118 | -71% | 1 | 1 | 0% | 1,212 | 1,487 | +23% | 0 | 0 | — |
case-16 | fail→pass | 5,895 | 1,735 | -71% | 1 | 1 | 0% | 1,118 | 1,389 | +24% | 0 | 0 | — |
case-17 | fail→pass | 5,411 | 2,415 | -55% | 1 | 1 | 0% | 1,151 | 1,588 | +38% | 0 | 0 | — |
case-18 | fail→pass | 10,393 | 4,319 | -58% | 1 | 1 | 0% | 1,750 | 1,817 | +4% | 0 | 0 | — |
case-19 | fail→fail | 7,709 | 8,281 | +7% | 1 | 1 | 0% | 1,294 | 1,619 | +25% | 0 | 0 | — |
case-20 | pass→pass | 9,507 | 1,508 | -84% | 1 | 1 | 0% | 1,698 | 1,371 | -19% | 0 | 0 | — |
case-21 | fail→pass | 12,834 | 5,010 | -61% | 1 | 1 | 0% | 2,168 | 1,891 | -13% | 0 | 0 | — |
case-22 | fail→pass | 5,543 | 1,916 | -65% | 1 | 1 | 0% | 882 | 1,407 | +60% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +64 percentage points is the difference between those two pass rates over the 20 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.