Kimi WebBridge
Control the user’s real browser (with their login sessions) via a local daemon athttp://127.0.0.1:10086.
Health check (always do this first)
running: trueandextension_connected: true— healthy. Proceed with the tool calls below.- Anything else (command not found,
running: false,extension_connected: false, errors) — Readreferences/operations.mdin this skill directory. It has the install / start / diagnose routing table.
references/operations.md.
Tools
Using find_tab
Usefind_tab when the user explicitly asks to operate on an already-open tab. It matches by domain, so any URL on the same site works. Without active:true, returns the leftmost matching tab; with active:true, returns the tab the user is currently viewing — pass it when the user says “用我打开的 X” / “在我当前的 X 页面上”.
find_tab returns “no open tab found”, the page is not open — fall back to navigate with newTab:true.
Call Format
Sessions
Each session maps to a separate browser tab group. Use different session names for different sites to keep operations isolated. Add"session":"name" to the request body:
Screenshots: read the returned path
The daemon writes the image to disk and returns{format, path, sizeBytes, mimeType}. Read the .path and open it via the Read tool — the LLM cannot interpret raw base64 image data, so the file-path indirection is what makes the screenshot actually viewable.
path semantics mirror Playwright / Puppeteer — caller-supplied path is honored verbatim, parent directories are auto-created, existing files are overwritten. To avoid overwrite use a unique filename yourself.
After parsing .data.path from the response, call the Read tool with that path to view the image.
Prefer snapshot over CSS/JS selectors
snapshot returns interactive elements with @e refs based on semantic role/name. Use them directly with click/fill — they survive CSS class hash changes that break manually-written selectors.
Fall back to evaluate (JS) only when:
- The target has no
@eref in the snapshot - You need attributes not in the snapshot (e.g.,
href) - You need to dispatch complex event sequences, or scroll
Evaluate Tips
- Always use compact
JSON.stringify(data)— never addnull, 2formatting. Indentation and newlines can inflate the response several times over, causing truncation during transmission. evaluatecalls share the page’s JS realm — re-declaring the sameconst/letacross two calls throwsSyntaxError. Wrap in an IIFE for a fresh scope:(() => { const x = ...; return x; })().
Text input — use fill
fill handles all three text input shapes. Pass selector (CSS or @e ref) + value:
fill is clear-and-insert: existing content is replaced. For “append to existing text”, read the current value via evaluate, concatenate, then fill with the result.
Form submit / special keys
There’s no separate “press Enter” tool. To submit a form, click the submit button directly (click on the @e ref or selector). To dispatch a key event programmatically (e.g. Escape to close a modal):
Save the current page as PDF
save_as_pdf renders the current page to PDF, writes it to /tmp/kimi-webbridge-pdfs/, and returns the file path (the daemon strips the base64 — agent never sees raw PDF bytes).
All args optional:
paper_format:letter(default) |a4|legal|a3|tabloidlandscape:false(default)scale:1.0(default), range[0.1, 2.0]print_background:true(default) — keep background colorspath: caller-supplied output path; if absent, daemon picks a default under OS temp dir using the page title as the filename
path semantics match screenshot: written verbatim, parent dirs auto-created, existing files overwritten.
Decoded PDF cap is 100 MB. Above that the daemon refuses; reduce scale or split the page.
Known limitations
- Sites that strictly check
event.isTrusted(some banking portals, captcha challenges) rejectfillandclickbecause both go through DOM-level synthetic events (isTrusted=false). This is a product boundary, not a bug — no automation primitive that runs on the user’s machine without stealing OS focus can produce trusted events on these sites. - Cross-origin iframes:
fill,click,evaluate, andsnapshotoperate on the top frame. If a target element lives in a same-page iframe from a different origin (e.g. embedded sandbox demos), navigate to the iframe’s URL directly instead.
Versions
Daemon, extension, and this skill share a 1:1 version string. Read both via:请更新 Kimi WebBridge 浏览器扩展后重试:https://kimi.com/features/webbridgeDon’t retry the failed tool. Don’t auto-switch skill versions based on
extension_version — the pairing protocol isn’t finalized.