Kimi Webbridge
mxyhi/ok-skills
Kimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login…
Kimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login…
$ npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install MoonshotAI/kimi-code kimi-webbridge --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/MoonshotAI/kimi-code.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/official/kimi-webbridge/skills/kimi-webbridge .claude/skills/kimi-webbridge && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "kimi-webbridge" agent skill from https://github.com/MoonshotAI/kimi-code/tree/main/plugins/official/kimi-webbridge/skills/kimi-webbridge into .claude/skills/kimi-webbridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kimi-webbridge", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/MoonshotAI/kimi-code/tree/main/plugins/official/kimi-webbridge/skills/kimi-webbridgeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install MoonshotAI/kimi-code kimi-webbridge --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MoonshotAI/kimi-code.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/official/kimi-webbridge/skills/kimi-webbridge .agents/skills/kimi-webbridge && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "kimi-webbridge" agent skill from https://github.com/MoonshotAI/kimi-code/tree/main/plugins/official/kimi-webbridge/skills/kimi-webbridge into .agents/skills/kimi-webbridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kimi-webbridge", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install MoonshotAI/kimi-code kimi-webbridge --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MoonshotAI/kimi-code.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/official/kimi-webbridge/skills/kimi-webbridge .cursor/skills/kimi-webbridge && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "kimi-webbridge" agent skill from https://github.com/MoonshotAI/kimi-code/tree/main/plugins/official/kimi-webbridge/skills/kimi-webbridge into .cursor/skills/kimi-webbridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kimi-webbridge", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/MoonshotAI/kimi-code.git --path plugins/official/kimi-webbridge/skills/kimi-webbridge--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install MoonshotAI/kimi-code kimi-webbridge --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MoonshotAI/kimi-code.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/official/kimi-webbridge/skills/kimi-webbridge .gemini/skills/kimi-webbridge && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "kimi-webbridge" agent skill from https://github.com/MoonshotAI/kimi-code/tree/main/plugins/official/kimi-webbridge/skills/kimi-webbridge into .gemini/skills/kimi-webbridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kimi-webbridge", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install MoonshotAI/kimi-code kimi-webbridgeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/MoonshotAI/kimi-code.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/official/kimi-webbridge/skills/kimi-webbridge .github/skills/kimi-webbridge && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "kimi-webbridge" agent skill from https://github.com/MoonshotAI/kimi-code/tree/main/plugins/official/kimi-webbridge/skills/kimi-webbridge into .github/skills/kimi-webbridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kimi-webbridge", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install MoonshotAI/kimi-code kimi-webbridge --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/MoonshotAI/kimi-code.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/official/kimi-webbridge/skills/kimi-webbridge .opencode/skills/kimi-webbridge && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "kimi-webbridge" agent skill from https://github.com/MoonshotAI/kimi-code/tree/main/plugins/official/kimi-webbridge/skills/kimi-webbridge into .opencode/skills/kimi-webbridge/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "kimi-webbridge", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
kimi-webbridgeKimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login…
Kimi Webbridge is an agent skill from MoonshotAI/kimi-code. Kimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login sessions. Use this skill whenever the user wants to interact with websites, automate browser tasks, scrape web content, or perform any action requiring a real browser. Also use when the user mentions "browser", "webpage", "open URL", "screenshot", or asks to read/interact with any website. Use even for simple-sounding…
Its SKILL.md is about 3.6k tokens, which your agent loads only when the skill is triggered. The skill folder holds 2 other files, including reference files (for example `references/operations.md`).
It sits in Development, covering Browser extensions, Web scraping and Browser automation. It works with Kimi and Chrome Extensions. The repository describes itself as: Kimi Code CLI — The Starting Point for Next-Gen Agents. The licence is MIT.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 242ac23. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
kimi.commoonshot.cnFrom URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Kimi Webbridge loads about 3.6k tokens when it runs, and up to ~5k if it reads all its reference files. Until then it costs about 146 tokens; SKILL.md has 1,668 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from MoonshotAI/kimi-code at commit 242ac23, republished under its MIT licence (© MoonshotAI). 1,668 words, ~3,613 tokens.
.claude/skills/kimi-webbridge/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Control the user's real browser (with their login sessions) via a local daemon at http://127.0.0.1:10086 (the default address — see If a tool call fails for when it differs).
| Tool | Args | Returns | Note |
|---|---|---|---|
navigate | url, newTab(bool), group_title | {success, url, tabId} | First call opens a tab — see Tabs. group_title sets the group's visible label |
find_tab | url, active(bool) | {success, url, tabId, borrowed} | Re-select a tab this session opened; active:true borrows the tab the user is viewing — see Tabs |
snapshot | — | {url, title, tree} with @e refs | Accessibility tree (text) — use this to read page content and locate elements |
click | selector (@e ref or CSS) | {success, tag, text} | Synthetic el.click() |
fill | selector, value | {success, tag, mode} | Works on <input>/<textarea> AND [contenteditable] (ProseMirror/Lexical/Slate). mode is "value" or "contenteditable" |
evaluate | code (supports async/await) | {type, value} | |
cdp | method, params | raw CDP response | Raw chrome.debugger passthrough — what evaluate is to JS, cdp is to CDP. Low-level escape hatch for cases the tools above don't cover |
screenshot | format(png|jpeg), quality(0-100), optional selector (@e/CSS), optional path | {format, path, sizeBytes, mimeType} | Returns a file path, not base64 — see Screenshots |
network | cmd(start|stop|list|detail), filter, requestId | request/response data | |
upload | selector, files(string[]) | {success, fileCount} | |
save_as_pdf | paper_format, landscape, scale, print_background, optional path | {path, sizeBytes, mimeType, pageTitle} | Render current page → PDF, returns a file path — see Save as PDF |
list_tabs | — | {success, tabs:[{tabId, url, title, active, groupTitle}]} | Inspect tabs in the current session |
close_tab | — | {success, closed: bool} | Close the current tab in the session |
close_session | — | {success, closed: int} | Close all tabs in the session — closed is the count. See Sessions for when to call |
Single-tab tools (snapshot, click, fill, screenshot, save_as_pdf) act on the current tab — the one you most recently opened with navigate or selected with find_tab.
newTab:true when pages should coexist (comparing, cross-referencing); omit it to send the current tab to a new URL.find_tab to make a tab you opened earlier in this session the current one again. Pass the tab's full URL — take it from list_tabs or the earlier navigate result. A bare root domain (kimi.com) may miss a www.kimi.com tab, so prefer the exact URL. By default find_tab searches only this session's own tabs — it never reaches into the user's other tabs or windows.active:true ("use my open X tab" / "the X page I'm viewing"). It borrows the tab the user is currently viewing (returns borrowed:true); the borrowed tab is operated in place — it is not pulled into the session's tab group.find_tab errors with "no tab matching … in this session", the page isn't open in this session — navigate with newTab:true instead.curl -s -X POST http://127.0.0.1:10086/command \
-d '{"action":"find_tab","args":{"url":"https://www.kimi.com","active":true},"session":"k26-research"}'Every command carries a top-level session naming the current task — see Sessions below. The examples in later sections omit it only for brevity; in real calls always include it. Every reply is an envelope: {"ok":true,"data":…} on success (the Returns column above describes data) or {"ok":false,"error":{"code","message"}} on failure. The command format depends on the user's OS.
macOS / Linux — inline JSON is fine:
curl -s -X POST http://127.0.0.1:10086/command \
-H 'Content-Type: application/json' \
-d '{"action":"navigate","args":{"url":"https://example.com","newTab":true,"group_title":"My task"},"session":"my-task"}'If the inline call fails — a shell quoting/syntax error from bash, or an HTTP 400 from the daemon — do not retry the same command unchanged. Resend the request as a file body:
echo/heredoc, which mangles the JSON the same way. Use a fresh name per request (e.g. /tmp/webbridge-req-<random>.json).curl -s -X POST http://127.0.0.1:10086/command -H 'Content-Type: application/json' --data-binary @/tmp/webbridge-req-<random>.jsonWindows (PowerShell / cmd) — the shell corrupts non-ASCII characters (Chinese etc.) carried inline in command arguments or pipes; they reach the daemon as ? and the text is unrecoverable. Send every request as a file body instead:
echo/heredoc, which corrupts non-ASCII the same way. Give every request its own filename with a random suffix (e.g. webbridge-req-<random>.json) so concurrent requests never share a file and overwrite each other.curl.exe — always curl.exe, never bare curl, which Windows PowerShell aliases to Invoke-WebRequest:curl.exe -s -X POST http://127.0.0.1:10086/command -H "Content-Type: application/json" --data-binary "@$env:TEMP\webbridge-req-<random>.json"One task = one session = one tab group. A session collects every tab the task opens into one tab group, so the user sees a single group for "what the agent is doing right now". Pass it as a top-level field of the request body (not inside args).
camping-research, phone-compare). Use multiple sessions only for genuinely unrelated parallel tasks.group_title is the human-readable group label — write it in the user's language, on the first navigate of the task.navigate of a task), tell the user once that this task's pages are collected under group «title», and that you'll close them whenever they ask.# First tab: set session + a human label (in the user's language)
curl -s -X POST http://127.0.0.1:10086/command \
-d '{"action":"navigate","args":{"url":"https://www.kimi.com","newTab":true,"group_title":"K2.6 feature research"},"session":"k26-research"}'
# Another site, same task → same session → joins the same group automatically
curl -s -X POST http://127.0.0.1:10086/command \
-d '{"action":"navigate","args":{"url":"https://www.moonshot.cn","newTab":true},"session":"k26-research"}'Closing is always user-initiated: call close_session only when the user explicitly asks ("close those", "clear the tabs"). It clears the whole group in one call.
The daemon writes the image to disk and returns {format, path, sizeBytes, mimeType} — never base64, since the model can't read raw image bytes. Take the .path and open it with the Read tool to actually see it.
# Default: PNG of the visible viewport, daemon picks a temp path
curl ... -d '{"action":"screenshot","args":{}}'
# Options (each independent): JPEG quality, element-only via @e/CSS selector, custom output path
curl ... -d '{"action":"screenshot","args":{"format":"jpeg","quality":60}}'
curl ... -d '{"action":"screenshot","args":{"selector":"@e123"}}'A caller-supplied path is honored verbatim (parent dirs created, existing file overwritten) — use a unique name to avoid clobbering. save_as_pdf follows the same rule.
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:
@e ref in the snapshothref)JSON.stringify(data) — never add null, 2 formatting. Indentation and newlines can inflate the response several times over, causing truncation during transmission.evaluate calls share the page's JS realm — re-declaring the same const/let across two calls throws SyntaxError. Wrap in an IIFE for a fresh scope: (() => { const x = ...; return x; })().fillfill (selector = CSS or @e ref, plus the value) works on <input>/<textarea> (returns mode: "value") and on [contenteditable] rich editors — ProseMirror, TipTap, Lexical, Slate, Quill, etc. (returns mode: "contenteditable"), firing the right input events so the page reacts.
fill is clear-and-insert: existing content is replaced. To append, read the current value via evaluate, concatenate, then fill with the result.
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):
{"action":"evaluate","args":{"code":"document.activeElement.dispatchEvent(new KeyboardEvent('keydown',{key:'Escape',bubbles:true}))"}}save_as_pdf renders the current page to PDF and returns the file path. 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 filenamepath 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.
event.isTrusted (some banking portals, captchas) ignore click / fill because those fire DOM-level synthetic events (isTrusted=false). For these, tell the user the page needs manual interaction. (Trusted input is possible at the protocol level via the cdp escape hatch, but treat that as advanced.)fill, click, evaluate, and snapshot operate 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.If a tool call can't reach the daemon (connection refused), or the reply isn't the ok envelope above (another program is answering on that port), run start yourself, don't ask the user. It is safe anytime: it no-ops if the daemon is already up. The binary is not on PATH: ~/.kimi-webbridge/bin/kimi-webbridge (Windows: %USERPROFILE%\.kimi-webbridge\bin\kimi-webbridge.exe).
Where the daemon listens is always in start's output, or in kimi-webbridge status (port when it is running, addr when it is not). If it isn't 127.0.0.1:10086, use that address for every call in this task. The config file is only for moving the daemon, never for finding it. Then retry the tool call.
start fails with "did not come up … held by another program" → another program owns the port. Move the daemon: write {"addr":"127.0.0.1:<port>"} (a free port of your choice) to the config file the error names, run start again, then ask the user to point the extension at the new port once (Kimi side panel → Settings → Local agent remote control → Connection address → ws://127.0.0.1:<port>/ws; it remembers).
If it still fails, the binary is missing (command not found means kimi-webbridge isn't installed), or the browser extension won't connect — point the user to the help page instead of deep-troubleshooting:
Never run stop / restart / upgrade / uninstall automatically — those kill a running daemon. When status shows update_available or version_mismatch, tell the user and hand them its command verbatim to run; that is what the field is for. When the user asks about kimi-webbridge itself (install, start/stop/upgrade, "is it running", what status means, moving it to another port), read references/operations.md first.
If a tool returns an error containing "Please update the Kimi Browser Extension", the user's browser extension is older than this skill. Don't try to reconcile versions yourself — just tell the user, in their language, to update the extension and retry:
© MoonshotAI, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in plugins/official/kimi-webbridge/skills/kimi-webbridge of MoonshotAI/kimi-code.
Open the folder on GitHubat commit 242ac23
Kimi Webbridge next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Kimi Webbridge this skillMoonshotAI/kimi-code | 7.8k | — | ~3.6k | Automated safety check: Pass | MIT | |
| Kimi Webbridgemxyhi/ok-skills | 493 | — | ~4.3k | Automated safety check: Pass | Apache-2.0 | |
| Neo4ier/neo | 756 | — | ~1.8k | Automated safety check: Pass | None | |
| Identify Chrome Deviceshmislk/hmis | 236 | — | ~1.5k | Automated safety check: Pass | GPL-3.0 | |
| Actionbook Browser Action Manualssmallnest/goclaw | 599 | 1 repos | ~4.1k | Automated safety check: Warn | MIT | |
| Competitor Monitorhanzili/hanzi-browse | 177 | — | ~2.8k | Automated safety check: Pass | Custom licence |
mxyhi/ok-skills
Kimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login…
4ier/neo
Browse websites, read web pages, interact with web apps, call website APIs, and automate web tasks.
hmislk/hmis
Identify and name Chrome instances connected to the Claude-in-Chrome extension under the current Claude account, and persist a stable deviceId - name mapping to a local file outside the repo.
smallnest/goclaw
Looks up action manuals with verified selectors for multi-step website tasks, then drives the browser with the actionbook CLI in a dedicated or an existing Chrome session.
hanzili/hanzi-browse
Monitor competitor websites for changes. An agent skill from hanzili/hanzi-browse.
hanzili/hanzi-browse
Apply to jobs from your real browser. An agent skill from hanzili/hanzi-browse.
MoonshotAI/kimi-code
A skill your agent uses when generating changesets in the kimi-code repository — deciding whether to write one, which package to list, the bump level, the wording, and the confirmation workflow.
MoonshotAI/kimi-code
Update Kimi Code CLI user documentation after meaningful code changes that affect product behavior or user experience.
MoonshotAI/kimi-code
Universal data-source assistant for stocks (Wind, S&P, SEC EDGAR), macro (World Bank, IMF, FRED, NBS), Chinese government data and standards (GB/HB/DB/TT), corporate, academic, legal, WHO/FAO/OECD…
MoonshotAI/kimi-code
Use before merging a kimi-code release PR to preview the user-facing CLI changelog in Chinese.
MoonshotAI/kimi-code
在 kimi-code 仓库里 review 一个 PR 时使用:按 PR 模板逐节核对描述与 diff,并单独做一轮"回归与用户影响"评审,给出影响等级与评审摘要,评审摘要用用户当前使用的语言。
MoonshotAI/kimi-code
在 kimi-code 仓库里创建或更新 PR 时使用:如何把 PR 模板的每一节写得简洁、便于 reviewer 理解,包括"行为变化与受影响人群"表。
Works with
Kimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login…. Kimi Webbridge is an agent skill from MoonshotAI/kimi-code. Kimi Browser Extension(Kimi 浏览器扩展,原 Kimi WebBridge)lets AI control the user's real browser — navigate, click, type, read, screenshot, and interact with any website using the user's actual login sessions.
Kimi Webbridge fits situations like: the user wants to interact with websites; automate browser tasks; scrape web content; perform any action requiring a real browser.
Run `npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a claude-code`. Or copy the skill folder (plugins/official/kimi-webbridge/skills/kimi-webbridge in MoonshotAI/kimi-code) into .claude/skills/kimi-webbridge in your project. Claude Code loads it when a task matches its description.
Run `npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a codex`. Or copy the skill folder (plugins/official/kimi-webbridge/skills/kimi-webbridge in MoonshotAI/kimi-code) into .agents/skills/kimi-webbridge in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add MoonshotAI/kimi-code --skill kimi-webbridge -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/kimi-webbridge, .gemini/skills/kimi-webbridge, .github/skills/kimi-webbridge and .opencode/skills/kimi-webbridge in your project.
Going by SKILL.md and its folder, Kimi Webbridge needs the command-line tools its instructions call (curl).
SKILL.md names 2 domains. In commands or code: kimi.com and moonshot.cn; the agent is likely to contact these when it follows the instructions. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Kimi Webbridge is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 3.6k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 1.4k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Kimi Webbridge: Kimi Webbridge (mxyhi/ok-skills, 493 stars), Neo (4ier/neo, 756 stars), Identify Chrome Devices (hmislk/hmis, 236 stars) and Actionbook Browser Action Manuals (smallnest/goclaw, 599 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
MoonshotAI (a GitHub organization) maintains it in MoonshotAI/kimi-code, which has 7,810 GitHub stars. The repository holds 11 skills in this directory. The repository was last updated on October 9, 2026.
Source: MoonshotAI/kimi-code on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.