一键导入
form-filling
Complete forms on authenticated pages: detect field types, handle multi-step forms, fill inputs, select options, and submit safely.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Complete forms on authenticated pages: detect field types, handle multi-step forms, fill inputs, select options, and submit safely.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Compare two pages or browser views side by side: staging vs production, mobile vs desktop, or before vs after changes. Outputs structured diffs of content, forms, and links.
Navigate multi-step flows on authenticated pages: follow menu paths, click through breadcrumbs, handle SPA routing, wait for page loads, and backtrack safely. Also covers direct URL navigation with the navigate_to_url tool.
Use when starting any Brijio session — establishes how to discover and use skills, which tools are available, and when to invoke each skill before any browser interaction.
Audit web pages for accessibility issues: missing alt text, unlabeled controls, heading hierarchy, ARIA landmarks, and color contrast — on authenticated pages that automated scanners can't reach.
Extract structured data from authenticated pages: tables, lists, paginated content, and multi-page scraping via the user's real browser session.
Automate e-commerce checkout flows on authenticated pages: add to cart, fill shipping, apply coupons, fill payment — stopping before final submit.
| name | form-filling |
| description | Complete forms on authenticated pages: detect field types, handle multi-step forms, fill inputs, select options, and submit safely. |
Complete forms on authenticated pages using the user's real browser session through Brijio. Handles multi-step forms, field type detection, and common pitfalls.
Brijio now uses a visible-only safe form state model that:
valueState: empty | filled | unknown for each controlfilledBy: brijio | user_or_page indicating who last set the valuevisibleContextId validationCall list_browsers to confirm a browser is connected. If the response is
empty or data.browsers is an empty array, ask the user to open their
browser and connect the Brijio extension before continuing.
When multiple browsers are connected, note the browserInstanceId values
and use the correct one for all subsequent calls.
Call read_current_page with includeContent: true to get the full page
context. The response contains:
links — clickable navigation links (use click_element with
kind: \"link\")actions — button-like elements (use click_element with
kind: \"action\")forms — form structures with controls arrays (use fill_input,
fill_editable, set_checked, select_options, submit_form)editables — standalone contenteditable areas (use fill_editable)Each element has a short-lived id (e.g. e5) that expires when the page
changes. Additionally, the response includes a visibleContextId that
represents the current visible form structure state.
Always re-read the page after any navigation, form submission, or significant interaction to get fresh IDs and visibleContextId.
Locate the relevant form in the forms array. Each form has:
id — use as formId in fill/set/select/submit callscontrols — array of input fields, each with:
id — use as controlIdlabel — human-readable label (helps match data to fields)type — text, email, password, checkbox, radio,
select-one, select-multiple, textarea, hidden, etc.valueState — empty | filled | unknown (based on visibility)filledBy — brijio | user_or_page (who last set the value)value — current value (useful for pre-filled fields)options — for select/radio controls, the available choicesrequiredSource — undefined | required | aria-required (for validation)Fill fields in a logical order (top-to-bottom) using the appropriate tool:
| Field Type | Tool | Notes |
|---|---|---|
| Text input / Search | fill_input | Most common field type |
| Email / URL / Tel | fill_input | Same tool, different semantic type |
| Textarea | fill_input | Use controlId from the form |
| Contenteditable | fill_editable | Standalone editable, not inside a <form> |
| Checkbox | set_checked(formId, controlId, true/false) | Toggle checked state |
| Radio button | set_checked(formId, controlId, true) | Select one option; cannot uncheck |
| Select (single) | select_options(formId, controlId, [value]) | Pass one value |
| Select (multiple) | select_options(formId, controlId, [v1, v2]) | Pass multiple values |
Important: Each action tool now accepts an optional visibleContextId
parameter. When you re-read the page, include this ID in your subsequent
action calls to enable staleness detection:
{
"formId": "f1",
"controlId": "c1",
"text": "John",
"visibleContextId": "ctx-123" // From read_current_page response
}
If the visible form structure has changed since you read the page, the action
will fail with a stale_context error instead of silently performing the
wrong action.
For several fields on the same stable page, prefer perform_batch over many
individual tool calls once you have read the page and matched all target IDs.
Keep batches small and same-page:
{
"actions": [
{
"type": "write_text",
"target": { "formId": \"f1\", \"controlId\": \"c1\" },
"text": \"John\",
"visibleContextId": \"ctx-123\"
},
{
"type": \"write_text\",
\"target\": { \"formId\": \"f1\", \"controlId\": \"c2\" },
\"text\": \"Smith\",
\"visibleContextId\": \"ctx-123\"
},
{
\"type\": \"select_options\",
\"target\": { \"formId\": \"f1\", \"controlId\": \"c5\" },
\"values\": [\"us\"],
\"visibleContextId\": \"ctx-123\"
},
{
\"type\": \"set_checked\",
\"target\": { \"formId\": \"f1\", \"controlId\": \"c6\" },
\"checked\": true,
\"visibleContextId\": \"ctx-123\"
}
],
\"continueOnError\": false,
\"readAfterActions\": true
}
Use readAfterActions: true when you want the returned batch result to
include a fresh page context for verification. If data.aborted is true, the
page navigated during the batch; stop, call read_current_page, and continue
with fresh IDs.
After filling, call read_current_page again to verify:
Critical: Before attempting to submit, Brijio automatically validates
visible required fields. If any visible required fields are empty or invalid,
the submit_form action will not submit the form. Instead, it will return
a FormValidationError[] listing the problematic fields.
You must check the submit result:
{ ok: true }: The form was submitted successfully{ ok: false, error: { code: 'stale_context' } }: The page changed; re-read and retry{ ok: false, error: { code: 'browser_error', detail: { reason: 'validation_failed', validationErrors: [...] } } }: Fix the validation errors listed in detail.validationErrorsNever auto-submit forms. Always ask the user to review and submit manually, unless the user has explicitly asked you to submit.
For multi-step forms with "Next" / "Continue" buttons:
read_current_page).After each page navigation, all previous element id values and
visibleContextId values are invalid. You must re-read the page to get
fresh IDs and context.
fill_input returns browser_error for type=\"password\" inputs. This is
correct browser security behavior. Skip password fields and let the
user fill them manually. Do not retry or attempt workarounds.
You cannot uncheck a radio button. set_checked(checked: false) on a
radio returns browser_error. Instead, select a different radio option in
the same group.
fill_input returns browser_error for readonly or disabled inputs.
Skip these fields — they are not meant to be edited. Their values are often
auto-calculated or pre-populated by the page.
Element IDs (e5, f2, c3) are ephemeral. They expire when:
Additionally, Brijio tracks visible form structure via visibleContextId.
If the visible form changes between reading and acting, actions will fail
with a stale_context error.
Always re-read the page after any action that changes the DOM before referencing new element IDs or visibleContextId.
Do not run one perform_batch across wizard steps or navigation boundaries.
Navigation aborts remaining batch actions and invalidates IDs from the previous
page.
Brijio injects values via the DOM, which triggers React's synthetic event system. This works for most modern inputs. If a React textarea or input doesn't update after filling, it may be a hidden internal editor — look for a named textarea with content content instead.
When both Chrome and Safari are connected, list_browsers returns multiple
instances. Always specify browserInstanceId to target the correct browser.
The IDs look like:
safari-d30265e2-04ad-4e44-907a-a79fe287ae46chrome-eaa9b8ca-1713-42a1-871a-e6747db5341bStandalone contenteditable elements (rich text editors, comment boxes) appear
in the editables list, not inside forms. Use fill_editable with the
editable's id, not fill_input with a form/control pair.
1. list_browsers → Confirm browser connected
2. read_current_page(includeContent: true) → Get page context + visibleContextId
3. Identify application form (id: \"f1\")
4. perform_batch(actions: [
{ type: \"write_text\", target: { formId: \"f1\", controlId: \"c1\" }, text: \"John\", visibleContextId: \"ctx-123\" },
{ type: \"write_text\", target: { formId: \"f1\", controlId: \"c2\" }, text: \"Smith\", visibleContextId: \"ctx-123\" },
{ type: \"write_text\", target: { formId: \"f1\", controlId: \"c3\" }, text: \"john@example.com\", visibleContextId: \"ctx-123\" },
{ type: \"select_options\", target: { formId: \"f1\", controlId: \"c5\" }, values: [\"us\"], visibleContextId: \"ctx-123\" },
{ type: \"set_checked\", target: { formId: \"f1\", controlId: \"c6\" }, checked: true, visibleContextId: \"ctx-123\" }
], continueOnError: false, readAfterActions: true)
5. Inspect batch results:
- If any action failed with stale_context: Go to step 2 to re-read
- If batch aborted (data.aborted: true): Go to step 2 to re-read
- Otherwise: Continue
6. read_current_page → Verify filled values are correct
7. submit_form(formId: \"f1\", visibleContextId: \"ctx-456\") →
- If ok: true → Form submitted, inform user
- If browser_error with validation_failed: Show validation errors to user
- If stale_context: Go to step 2 to re-read
8. Inform user: \"Form is filled. Please review and submit when ready.\" (if not auto-submitted)