browser-form-fill — Claude Code skill: what it does, how to install
Fills web forms using a structured JSON field map and saved selector templates. It automates data entry and form submission directly in browser sessions.
npx skills add ruvnet/ruflo --skill browser-form-fill -a claude-codeWhat browser-form-fill does
The skill maps field names and values from a JSON file to inputs on a webpage. When a layout exists in browser-templates, the tool grabs CSS selectors directly. Otherwise, it inspects the accessibility tree through browser_snapshot to match accessible labels with keys.
Every value passes through an aidefence_has_pii check before any typing starts. Trajectory logs never store raw personal data, replacing sensitive inputs with redacted placeholders. Depending on the element, it either sets values directly or simulates keystrokes with browser_type for autocompleting fields.
Adding --submit clicks the submission button and waits for navigation. The skill cannot bypass CAPTCHAs. When bot detection appears, it pauses and asks the user to handle the check manually.
What it helps with
- Fill web forms automatically using structured JSON files
- Save discovered CSS selectors to templates for recurring submissions
- Filter out sensitive personal data before browser interaction
- Simulate real keystrokes in inputs that require autocomplete triggers
Example prompts for the agent
- Fill the web form using the field map file and submit the page with --submit
- Apply the mapped values to the current form using --template signup
How to install browser-form-fill
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill browser-form-fill -a claude-code2Manually: put the files in place
~/.claude/skills/browser-form-fill/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/browser-form-fill/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill browser-form-fill -a codex2Manually: put the files in place
.agents/skills/browser-form-fill/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill browser-form-fill -a cursor2Manually: put the files in place
.cursor/skills/browser-form-fill/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install ruvnet/ruflo browser-form-fill2Manually: put the files in place
.github/skills/browser-form-fill/SKILL.md1Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill browser-form-fill -a gemini-cli2Platform CLI
gemini skills install https://github.com/ruvnet/ruflo --path plugins/ruflo-browser/skills/browser-form-fillManually: put the files in place
.devin/skills/browser-form-fill/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add ruvnet/ruflo --skill browser-form-fill -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
From the same set104
The whole set →Similar
Questions about browser-form-fill
How to install browser-form-fill in Claude Code?
Run npx skills add ruvnet/ruflo --skill browser-form-fill -a claude-code.
What does browser-form-fill do?
It inputs values from a JSON map into form fields using selector templates or accessibility snapshots.
Can the skill solve CAPTCHAs automatically?
No, it does not bypass bot protection. If a CAPTCHA triggers, the skill pauses and hands control to the user.
Source text
SKILL.md · MIT
---
name: browser-form-fill
description: Fill a web form by mapping field-name → value, with optional template lookup from browser-templates for known forms
argument-hint: "<url> <field-map.json> [--template <name>] [--submit]"
allowed-tools: mcp__plugin_ruflo-core_ruflo__browser_open mcp__plugin_ruflo-core_ruflo__browser_close mcp__plugin_ruflo-core_ruflo__browser_fill mcp__plugin_ruflo-core_ruflo__browser_type mcp__plugin_ruflo-core_ruflo__browser_select mcp__plugin_ruflo-core_ruflo__browser_check mcp__plugin_ruflo-core_ruflo__browser_uncheck mcp__plugin_ruflo-core_ruflo__browser_click mcp__plugin_ruflo-core_ruflo__browser_wait mcp__plugin_ruflo-core_ruflo__browser_snapshot mcp__plugin_ruflo-core_ruflo__aidefence_has_pii Bash Read Write
---
# Browser Form Fill
Fill a form using a structured field map (`{"first_name": "Ada", "company": "..."}`). When a `browser-templates` entry exists for the host, use it to resolve field names → CSS selectors automatically; otherwise resolve via the page accessibility snapshot.
## When to use
- Submitting a known form (signup, contact, checkout) where field names are stable.
- Re-using a stored template for a recurring submission.
- Authoring a new template for a site by recording the resolved selectors.
## Steps
1. **Open a recorded session** via `browser-record`.
2. **Resolve selectors**:
- **Template path** (`--template <name>`): pull `{field_name → selector}` from `browser-templates`.
- **Snapshot path**: call `browser_snapshot`, walk the accessibility tree, match each input's accessible name / label to the field map keys.
3. **AIDefence PII gate**: every value in the field map passes `aidefence_has_pii` before any keystroke; record `pii_in_form: true` in the session manifest. **Do not** record the values themselves in the trajectory; record only the field names + a redacted placeholder.
4. **Fill** with `browser_fill` / `browser_type` / `browser_select` / `browser_check` per input type.
5. **Submit** if `--submit`: locate the submit button via the snapshot, `browser_click`, then `browser_wait` for navigation.
6. **Persist the template** if a new mapping was discovered:
```bash
npx -y @claude-flow/cli@latest memory store --namespace browser-templates \
--key "<host>:<form-name>" \
--value "{field_map:{...}, submit_selector:..., post_submit_url_pattern:...}"
```
7. **Verify** post-submit state if a verification snippet was provided in the field map's `_assert` key.
## Caveats
- Trajectory steps for fills MUST redact values. The PII gate is the contract.
- For inputs that require typing simulation (e.g., autocomplete reactions), use `browser_type` (simulates keystrokes) rather than `browser_fill` (sets value programmatically). Record which one was used in the trajectory step.
- Multi-step forms are a sequence of `browser-form-fill` invocations; chain them via the same session id.
- If the form has a CAPTCHA, surface the request to the user — do not attempt to bypass.
© ruvnet · MIT · ruvnet/ruflo