From mochi
Use this skill when the user says browser, /browser, test in Chrome, inspect a webpage, verify a localhost app, capture screenshots, check console/network errors, run browser QA, or automate browser flows with the Mochi browser MCP.
How this skill is triggered — by the user, by Claude, or both
Slash command
/mochi:browser [task or URL][task or URL]This skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use the Mochi browser MCP tools for browser automation and QA.
Use the Mochi browser MCP tools for browser automation and QA.
When installed as a Claude Code plugin, the MCP server registers as
plugin:mochi:browser. The actual tool names use underscores in the
namespace prefix: mcp__plugin_mochi_browser__browser_session_start,
mcp__plugin_mochi_browser__browser_screenshot, etc.
If you don't see them in your current toolset, search via ToolSearch:
select:mcp__plugin_mochi_browser__browser_session_health (and similar).
Schemas are loaded on demand.
When written without prefix below (e.g. "call browser_navigate"), the
full callable name is mcp__plugin_mochi_browser__browser_navigate.
Earlier versions of this plugin had a duplicate MCP-server registration
that competed with the Mochi Chrome extension over chrome.debugger
attachments. The unified plugin (v0.2+) eliminates this — there is no
extension-vs-MCP conflict anymore. If your memory has an old "browser MCP
conflicts with the Mochi extension" note from a prior session, it's stale.
Hard-won quirks that produce false "all clear" results. The full note with fixes
lives in references/gotchas.md — read it before
reporting a pass.
browser_console_messages {level:"error", sinceNavigation:true} (or just call browser_assert_no_errors)
before trusting "no console errors." level:"error" includes uncaught
exceptions.browser_click with intent) over coordinate
clicks (browser_click_at) — coordinates drift when the layout shifts.browser_emulate_viewport changes window.innerWidth /
matchMedia (real JS layout — use it for media-query/responsive tests);
browser_window_resize only moves the OS window and does NOT affect JS layout.
Don't conflate them.browser_page_assets (use browser_navigate {hardReload:true})
before trusting results.browser_set_storage, then hardReload.browser_network_requests auto-includes >=400 response bodies,
so read them instead of guessing.browser_act_and_observe (WORKS / NO-OP / ERROR / NAVIGATES) and prove writes
persist. Enumerate every control with browser_audit_interactives before
claiming "tested everything," and never report pass with untested controls.browser_session_start before interacting with a page.browser_navigate for the target URL.browser_text and browser_links
before browser_snapshot.browser_snapshot is compact by default: viewport-only, redacted, depth
limited, and byte capped. Use it for refs and actionable UI state, not for
dumping the whole page.browser_snapshot_query and browser_snapshot_node to drill into the
stored snapshot by text, role, ref, tag, or path.browser_snapshot {mode:"full", scope:"all", maxBytes:0} when the
compact ladder is not enough and you intentionally need the full tree.browser_click, browser_type) and include a
clear intent so selectors are cached for later sessions.browser_screenshot when visual evidence matters.browser_console_messages and browser_network_requests for runtime
debugging after page loads and interactions.browser_assert_no_errors after every page load and every action — it's
the one-call gate for console errors/exceptions and >=400/failed requests
since the page loaded.browser_audit_interactives for
coverage before claiming you tested a page.browser_act_and_observe to confirm an action actually did something
(WORKS / NO-OP / ERROR / NAVIGATES) — a NO-OP is a dead control, i.e. a defect,
not a pass.browser_session_end when the task is done unless the user wants the
browser left open.browser_list_tabs if unsure.browser_text/browser_links first, compact snapshot second, query/node
drilldown third.browser_session_health if the browser feels stuck.browser_text {query?, limit?} for page copy, search results, lists, and
visible facts.browser_links {query?, limit?} for navigation choices.browser_snapshot for refs and visible actionable UI.browser_snapshot_query to search the stored snapshot.browser_snapshot_node to fetch the one subtree you need.browser_session_start with a clear title.The server auto-launches Chrome with the bundled extension when possible. If
Chrome is already open or the extension is not connected, open
chrome://extensions, enable Developer mode, click "Load unpacked", and select
the extension/ folder inside the installed plugin:
~/.claude/plugins/cache/mochi/mochi/<version>/extension
(<version> is the installed plugin version, e.g. 0.3.0 — find it under
~/.claude/plugins/cache/mochi/mochi/.)
Then make sure the Mochi toolbar popup says connected.
npx claudepluginhub devzonayed/mochi --plugin mochiSets up isolated workspaces using native worktree tools or git worktree fallback. Use before starting feature work to protect the current branch.