Serveur MCP Mochi
Commit 3 nov. 2026Permet aux assistants IA d'effectuer de l'automatisation de navigateur, de maintenir une mémoire de projet persistante et d'envoyer des messages d'aide directement sur la page via une extension Chrome.
Aussi connu sous DevZonayed/Mochi
- Étoiles
- 3
- Outils
- 50
- Téléchargements, 30 jours
- —
- Dernière version
- —
- Dernier commit
- 3 nov. 2026
- Licence
- MIT
Qu'est-ce que Mochi MCP ?
Mochi est un serveur MCP. Permet aux assistants IA d'effectuer de l'automatisation de navigateur, de maintenir une mémoire de projet persistante et d'envoyer des messages d'aide directement sur la page via une extension Chrome. Il expose 50 outils, comme browser_session_start, browser_session_end, browser_request_attention.
Résumé généré à partir du README du projet
À propos du MCP server Mochi
Mochi permet aux développeurs utilisant des assistants IA comme Claude Code d'automatiser l'assurance qualité sur navigateur et de maintenir le contexte du projet. Il fonctionne comme un compagnon de navigation complet qui s'exécute au sein de groupes d'onglets Chrome dédiés pour garantir que vos sessions de navigation actuelles restent intactes. Le système utilise un MCP server basé sur Node et une extension Chrome Manifest V3 pour combler le fossé entre le raisonnement de l'IA et l'interaction web en direct.
Les utilisateurs peuvent accomplir des tâches complexes telles que la réalisation de tests de design-QA, l'exécution de workflows automatisés et la vérification des réponses réseau. Le serveur inclut un système de mémoire unique qui stocke les caches de sélecteurs et les workflows dans un répertoire local .continuum. Cela permet à l'agent de rejouer des actions réussies sans avoir à redécouvrir les éléments. Si la refonte d'un site web casse un sélecteur, le moteur utilise les rôles et noms ARIA pour auto-guérir l'automatisation. Il offre également un moyen pour les humains d'envoyer des indices et des captures d'écran sur la page à l'IA en utilisant un raccourci clavier spécifique.
Ce que vous pouvez faire avec
- 1Tests de régression automatisésUn agent IA peut rejouer des workflows enregistrés pour tester des flux de connexion ou d'autres parcours critiques en utilisant des sélecteurs mis en cache.
- 2Assurance qualité du design visuelLes développeurs peuvent ordonner à un agent d'effectuer un passage de design-QA et d'épingler des problèmes spécifiques directement sur la page web.
- 3Feedback interactif avec intervention humaineUn utilisateur peut envoyer des éléments spécifiques et des captures d'écran à l'assistant IA en appuyant sur un raccourci clavier sur n'importe quel onglet.
Extrait du README du projet. Chaque cas d'utilisation est vérifié par rapport à une citation du document.
Outils MCP Mochi 50
Détectés depuis le READMEbrowser_session_startbrowser_session_endbrowser_request_attentionbrowser_navigatebrowser_open_tabbrowser_list_tabsbrowser_close_tabbrowser_textbrowser_linksbrowser_snapshotbrowser_snapshot_querybrowser_snapshot_node
| browser_session_start | — | |
| browser_session_end | — | |
| browser_request_attention | — | |
| browser_navigate | — | |
| browser_open_tab | — | |
| browser_list_tabs | — | |
| browser_close_tab | — | |
| browser_text | — | |
| browser_links | — | |
| browser_snapshot | — | |
| browser_snapshot_query | — | |
| browser_snapshot_node | — |
Afficher les 50 outilsAfficher moins d'outils
browser_clickbrowser_click_atbrowser_typebrowser_press_keybrowser_scrollbrowser_waitbrowser_screenshotbrowser_window_resizebrowser_emulate_viewportbrowser_clear_emulationbrowser_assertbrowser_audit_interactivesbrowser_act_and_observebrowser_assert_no_errorsbrowser_wait_for_responsebrowser_page_assetsbrowser_set_storagebrowser_upload_stagebrowser_upload_filebrowser_playbook_listbrowser_playbook_getbrowser_playbook_savebrowser_playbook_deletebrowser_playbook_matchbrowser_playbook_runbrowser_playbook_propose_updatebrowser_playbook_secret_checkbrowser_playbook_seed_from_codebasebrowser_playbook_diff_acceptbrowser_playbook_exportbrowser_playbook_importbrowser_playbook_dashboardbrowser_recall_selectorbrowser_forget_selectorbrowser_list_selectorsbrowser_workflow_savebrowser_workflow_runbrowser_run_history
| browser_click | — | |
| browser_click_at | — | |
| browser_type | — | |
| browser_press_key | — | |
| browser_scroll | — | |
| browser_wait | — | |
| browser_screenshot | — | |
| browser_window_resize | — | |
| browser_emulate_viewport | — | |
| browser_clear_emulation | — | |
| browser_assert | — | |
| browser_audit_interactives | — | |
| browser_act_and_observe | — | |
| browser_assert_no_errors | — | |
| browser_wait_for_response | — | |
| browser_page_assets | — | |
| browser_set_storage | — | |
| browser_upload_stage | — | |
| browser_upload_file | — | |
| browser_playbook_list | — | |
| browser_playbook_get | — | |
| browser_playbook_save | — | |
| browser_playbook_delete | — | |
| browser_playbook_match | — | |
| browser_playbook_run | — | |
| browser_playbook_propose_update | — | |
| browser_playbook_secret_check | — | |
| browser_playbook_seed_from_codebase | — | |
| browser_playbook_diff_accept | — | |
| browser_playbook_export | — | |
| browser_playbook_import | — | |
| browser_playbook_dashboard | — | |
| browser_recall_selector | — | |
| browser_forget_selector | — | |
| browser_list_selectors | — | |
| browser_workflow_save | — | |
| browser_workflow_run | — | |
| browser_run_history | — |
Vérifications automatisées
Exécuté le 14 nov. 2026Rapport complet →Pas encore vérifié. Un serveur nécessite un score de 80, aucune faille sérieuse et suffisamment de données pour que nous puissions effectuer les vérifications. Fonctionnement des vérifications · Ce qu'il faut corriger pour gagner des points
- Dépôt source lié et accessibledevzonayed/mochi is public and reachablegithub.com/devzonayed/mochi ↗Réussi
- Le nom du package correspond au dépôt sourceNon vérifié
- Provenance du build (attestation Sigstore)Non vérifié
- Licence open source (OSI)MITspdx.org/licenses/MIT.html ↗Réussi
- Commit ou version publiée au cours de l'année écouléeLast commit or release 2026-11-03github.com/devzonayed/mochi ↗Réussi
- OpenSSF ScorecardNon vérifié
- Nom du package non proche d'un package populaireNon vérifié
- Aucun avis critique dans le package ou ses dépendancesNon vérifié
- Aucune instruction cachée destinée au modèle50 tool descriptions and the README read; no override phrases, credential paths or hidden charactersRéussi
- Les outils destructifs sont étiquetésNo tool named like delete, drop or execRéussi
- Le point de terminaison distant répond à la poignée de main MCPNon vérifié
README
Voir sur GitHubMochi
Browser companion for AI assistants. Browser automation MCP + persistent project memory + in-page hint messaging, all in one Claude Code plugin.
A QA-tester MCP for AI assistants — with memory.
Each AI session runs inside its own Chrome tab group (your other tabs are untouched). What's new: every successful action is auto-traced, and the agent can save the trace as a named workflow scoped to a domain. Next time you ask "test the login flow on staging", the agent replays the saved workflow with cached selectors — no re-discovery, no re-screenshotting. If a selector breaks (refactor, A/B test, redesign), the engine self-heals by ARIA role + name and updates the cache.
selector cache + workflow store
(file-based, <project>/.continuum/)
▲
AI client (Claude Code / Codex / Cursor)
│ stdio (MCP) ▲
▼ │
server/ ──── auto-launches Chrome ─┴─▶ Chrome
│ WebSocket │
▼ ▼
extension/ background.js ◀────────────── manifest V3 extension
│
▼
session = { tab group, primary tab, tab set, CDP }
Layout
| Directory | What it is |
|---|---|
server/ |
Node MCP server. WS server (port 9009) + file-based memory + workflow replay engine. |
extension/ |
Chrome MV3 extension. Owns the tab group, CDP attachments, and DOM helpers. |
mcp/ |
Reference clone of upstream Browser MCP (not used; archival). |
Memory (selector cache, workflows, runs) lives in <project>/.continuum/
alongside the Continuum chain data — pure files, no database. Override with
SUPER_TESTER_DATA_DIR.
Install (one plugin, one extension, done)
Mochi is a Claude Code plugin bundling browser automation, context-chain
memory, and popup hint messaging. The server is pre-bundled into a single
file (server/dist/server.bundle.mjs) by GitHub Actions on every push to
the default branch — so installing means cloning the repo. No npm install,
no native binaries, no setup script.
Install from GitHub (recommended)
# Inside any Claude Code session:
/plugin marketplace add DevZonayed/Mochi
/plugin install mochi@mochi
That's it for the plugin. Then load the Chrome extension once:
chrome://extensions → Developer mode → Load unpacked → select
~/.claude/plugins/cache/mochi/mochi/0.6.0/extension
Restart Claude Code. Press ⌘⇧M (macOS) or Ctrl+Shift+M (other) on any tab to send a hint with picked elements + screenshot.
Install from a local checkout (if hacking on the plugin itself)
/plugin marketplace add /absolute/path/to/your/Mochi/checkout
/plugin install mochi@mochi
If you change source files, rebuild the bundle before reloading:
cd /path/to/Mochi/server && npm install && npm run build
Then /reload-plugins inside Claude (or /plugin uninstall mochi && /plugin install mochi@mochi for a clean refresh).
The plugin auto-registers:
- Two MCP servers —
browser(automation tools) andcontinuum(recall tool) - Seven slash commands —
/continuum:checkpoint,/continuum:recall,/continuum:status,/continuum:dream,/continuum:feedback,/continuum:rename,/continuum:render - Seven hooks — SessionStart, PreCompact, SessionEnd, PreToolUse, PostToolUse, Stop, UserPromptSubmit
- The
/browserskill
For the in-page hint modal: press ⌘⇧M (macOS) or Ctrl+Shift+M on any page once the extension is loaded.
Migrating from the older super-tester plugin name
If you had an earlier install when the plugin was called super-tester, run:
/plugin uninstall super-tester
/plugin marketplace remove super-tester
…then follow the install steps above using the new mochi names. Your
.continuum/ chain data, screenshots, and feedback queue are tied to your
project dir (not the plugin name) — they survive the rename.
Updating
Whenever new versions of mochi land (bumped version in plugin.json):
/plugin update mochi
Claude Code re-copies the source files into its plugin cache and switches the
active install over. MCP servers respawn on next Claude restart. For hook /
command / skill changes only, /reload-plugins works mid-session.
Legacy install script
The older ./install.sh script (which edited ~/.claude.json directly) is
still in the repo but is now redundant with the plugin route. Don't use both
at the same time — pick one.
./install.sh --uninstall # remove the legacy .claude.json entry if present
Tools (MCP)
65 tools, grouped by purpose.
Design-QA loop (0.9.0+). An agent can run a design-QA pass and drop a comment on every issue via
browser_comment_add— those comments appear to you as pins in Comment Mode (they share the extension's storage). You review/edit them client-side, then the agent reads the session back (browser_comment_list) and fixes everything in bulk, marking eachbrowser_comment_resolve. Drive it with/mochi:design-qa [focus]and/mochi:design-qa fix.
Notifications, not focus-stealing (0.5.0+). Automation never raises the Chrome window to the OS foreground on its own — it posts a click-to-focus notification titled
Mochi · <project>instead, so it won't yank you out of your editor. Clicking the toast brings that session's window forward. The agent can ping you on purpose viabrowser_request_attention. Requires a one-time "reload unpacked extension" (newnotificationspermission); on macOS, enable Google Chrome under System Settings → Notifications (the popup walks you through it).
Session + tabs
| Tool | What it does |
|---|---|
browser_session_start |
New tab group + primary tab. Pass newWindow:true to spawn a fresh window. Posts a click-to-focus notification instead of stealing focus. |
browser_session_end |
Detach debugger, ungroup or close session tabs. |
browser_request_attention |
Post an OS notification asking the human to look (captcha, choice, or "done — come look"). Click focuses the window. |
browser_navigate |
Navigate primary tab, wait for load. |
browser_open_tab |
Open new tab inside the session group. |
browser_list_tabs |
List session tabs + CDP attachment state. |
browser_close_tab |
Close a specific session tab. |
Discovery + interaction
| Tool | What it does |
|---|---|
browser_text |
Compact visible text lines, optionally filtered by query. Use before snapshot for reading/searching content. |
browser_links |
Compact visible links with text, href, selector ref, and box. |
browser_snapshot |
ARIA tree with stable refs + pixel boxes. Defaults to compact, viewport-only, redacted, depth-limited, and 12KB capped. |
browser_snapshot_query |
Search the stored snapshot by text/name/role/ref/tag and return tiny excerpts. |
browser_snapshot_node |
Return one compact subtree from the stored snapshot by ref, text, or query path. |
browser_click |
Click by selector (CDP). Pass intent to cache the selector for next time. |
browser_click_at |
Click at pixel coords (CDP). |
browser_type |
Focus + clear + insertText. Pass intent to cache. |
browser_press_key |
Real keyboard event (CDP). |
browser_scroll |
Absolute {x,y} or relative {deltaX,deltaY}. |
browser_go_back / browser_go_forward |
History navigation. |
browser_wait |
Sleep up to 60s. |
browser_screenshot |
PNG/JPEG (viewport / fullPage / elementRef). |
Viewport + window
| Tool | What it does |
|---|---|
browser_window_resize |
Resize/move/maximize the actual window (only safe with newWindow). |
browser_emulate_viewport |
Device Mode via CDP. Presets + custom width/height/DPR/UA. |
browser_clear_emulation |
Reset viewport overrides. |
Assertions
| Tool | What it does |
|---|---|
browser_assert |
Verify url-contains, url-equals, title-contains, element-exists, element-missing, text-contains, text-equals. Returns {ok, got}. |
QA truth & coverage (0.5.0)
The verdict-driven core of an exhaustive QA pass. Render != Works: a control that paints on screen is not a verified control. These tools enumerate every actionable element, drive each one, and prove what actually happened.
| Tool | What it's for |
|---|---|
browser_audit_interactives |
Enumerate every actionable control on the page (scope:"all"|"viewport", limit, includeHidden). The coverage backbone — returns {selector, role, accessibleName, visible, inViewport, disabled, hasClickHandler, box} per element so nothing goes UNTESTED. |
browser_act_and_observe |
Perform one action (click/type/navigate/press_key/click_at) and classify the result: WORKS / NO-OP / ERROR / NAVIGATES. A NO-OP (clickable but nothing changed) is a dead control = defect. Returns urlChanged, domChanged, networkDelta, consoleDelta. |
browser_assert_no_errors |
One-call health gate: ok=false if any console error/uncaught exception or any >=400/failed request happened since the page loaded (sinceNavigation default, or sinceMs, with ignoreUrlContains). Failed-request entries include .body. |
browser_wait_for_response |
Block until a matching network response arrives (urlGlob/urlContains, method, statusGte/statusLt, timeoutMs). Proves a write actually persisted instead of guessing from the UI. |
browser_page_assets |
Hash the live page assets (script/css/document) with sha256 + a pageHash. Confirm the live bundle hash == the built hash so you never test a stale cached deploy. |
browser_set_storage |
Deterministic auth/state seeding — set localStorage, sessionStorage, and cookies (or clear) in one call so a flow starts from a known logged-in state. |
Enhancements to existing tools in 0.5.0:
browser_navigatenow acceptshardReload(cache-bypass load) anddisableCache(persist cache-off for the tab) — pair withbrowser_page_assetsto defeat stale bundles.browser_console_messagesacceptssinceNavigation:trueto scope to the current page (the fix for a stale pre-navigation buffer reading as a false "no errors");level:"error"includes uncaught exceptions.browser_network_requestsacceptssinceNavigation,sinceMs, andincludeBody; error responses (>=400/failed) include the captured response body automatically, so an "Internal server error" tells you why (e.g. SMTP misconfig) instead of guessing.browser_clicknow reports disabled controls (fails loudly with "element is disabled" rather than silently passing) and retries a transient not-found once.browser_session_healthacceptsheal:trueto re-attach the debugger to session tabs.
File uploads
| Tool | What it does |
|---|---|
browser_upload_stage |
Stage a file into the per-project library at .continuum/uploads/. Accepts path, https url, dataUrl, or base64. Returns a stable stashId (sha256-based, idempotent) reusable across many uploads. |
browser_upload_file |
Attach a file to a page target via a strategy chain: direct (DOM.setFileInputFiles) → intercept (file-chooser dialog) → drop (synthesized DataTransfer + DragEvent) → paste (synthesized ClipboardEvent). Bypasses the native OS file picker entirely. Target by selector, ref, trigger, or auto: { near }. Smart-wait confirms upload (preview thumbnail / 2xx upload response / custom successSelector). |
Sources can be inlined into browser_upload_file or pre-staged with
browser_upload_stage; staging dedupes by sha256, so the same logo across
ten sites is fetched/decoded once and reused. Frame-traversal handles
same-origin iframes automatically. See
docs/superpowers/specs/2026-05-19-browser-file-upload-design.md
for the full design.
Playbooks (personal ops memory)
| Tool | What it does |
|---|---|
browser_playbook_list |
List playbooks under .continuum/playbooks/, filter by origin/tag/verifiable. |
browser_playbook_get |
Return one playbook with meta + body sections + workflow JSON. |
browser_playbook_save |
Create/update a playbook (validates frontmatter and required sections). |
browser_playbook_delete |
Remove a playbook + workflow + screenshots. |
browser_playbook_match |
Score-match playbooks against a URL, intent, or task description. |
browser_playbook_run |
Replay a playbook (with self-heal) using provided inputs; recursively executes composes/next chains; returns verdict + evidence. |
browser_playbook_propose_update |
Given a successful trace, create or update the matching playbook. Inputs and steps auto-inferred. |
browser_playbook_secret_check |
Validate that a playbook's type: secret inputs are resolvable (env or .continuum/secrets/). Returns availability only — never values. |
browser_playbook_seed_from_codebase |
Static-analyze the project's frontend (Next.js / Vite / CRA) and emit draft playbooks per route + form. Solves cold-start on in-house apps. |
browser_playbook_diff_accept |
Bless a run's per-step screenshots as the new visual reference; bumps playbook_version. |
browser_playbook_export |
Export one or more playbooks to a single JSON bundle file. Includes embedded base64 screenshots. |
browser_playbook_import |
Import a playbook bundle (file / inline JSON / https URL). Supports overwrite + rewriteOrigin (e.g., staging → production). |
browser_playbook_dashboard |
Generate a self-contained HTML dashboard from the library; opens in the active browser session. |
v1.5 capabilities:
- Typed secrets:
inputs[].type: secretresolves at runtime from${env:VAR}or${secret:name}(reads.continuum/secrets/<name>.txt, which ischmod 0700with an auto-protective.gitignore). Secret values never appear in.continuum/runs/traces or promoted playbook bodies. - Codebase-derived drafts: point
browser_playbook_seed_from_codebaseat this project and it walks your routes (Next.js App/Pages Router, Vite, CRA), extracts forms +data-testids +aria-labels, and emits draft playbooks per route. Password fields auto-typed assecret. - Visual diff regression: during
browser_playbook_run, each step's screenshot is compared (pixelmatch) against the playbook's reference.warnbetween 5–20% diff;fail≥20% (configurable per playbook). Usebrowser_playbook_diff_acceptto bless intentional UI changes.
See docs/superpowers/specs/2026-05-20-playbooks-v1-5-design.md.
v2 capabilities (Sharing & Polish):
- 1Password integration:
inputs[].type: secretrefs accept${1password:vault/item/field}(alias${op:...}). When theopCLI is installed and signed in, values are resolved viaop readat run time and never logged. - Vue + SvelteKit codebase seeding: Nuxt projects (
nuxt.config.*) and SvelteKit projects (svelte.config.*+@sveltejs/kit) are detected bybrowser_playbook_seed_from_codebasein addition to Next.js / Vite / CRA. - Blocked-verdict UX:
browser_playbook_runreturnsverdict: "blocked"with aneeds[]array (one entry per missing required input + ahintper source) instead of throwing. The main agent uses the hints to prompt the user (or fix env) and then retries. - Cross-project playbook bundles:
browser_playbook_exportwrites a single JSON containing markdown + workflow + base64 screenshots;browser_playbook_importrestores them anywhere. Supports overwrite + origin rewrite for staging → production migration. - HTML dashboard:
/mochi:playbook ui(orbrowser_playbook_dashboard) generates a self-contained dashboard with search, tag filters, and inline drill-down per playbook.
See docs/superpowers/specs/2026-05-20-playbooks-v2-design.md.
Combined with the bundled qa-tester subagent and the smart-router rule in
plugins/qa/CLAUDE.md, the playbook library is your personal ops memory —
each browser task you do once becomes replayable, chainable, and
scheduleable. Main Claude routes verifiable + repeatable tasks to the
isolated qa-tester subagent (which returns a pass/fail verdict + evidence)
while operational tasks (multi-step, decisive, may need mid-flow input)
stay in the main conversation and use playbooks as guidance.
Slash commands:
/qa <task>— dispatch the qa-tester subagent for a verifiable browser task./mochi:playbook list|show|run|delete|match [args]— manage playbooks./mochi:schedule-playbook <id>— wire up cron via the host'sscheduleskill./mochi:unschedule-playbook <id>— cancel a scheduled playbook.
See docs/superpowers/specs/2026-05-20-personal-ops-playbooks-design.md
for the full design.
Memory: selector cache (per origin)
| Tool | What it does |
|---|---|
browser_recall_selector |
"Do I already know how to find X on this site?" Returns cached selector or null. |
browser_forget_selector |
Drop a cached entry. |
browser_list_selectors |
Inspect the cache. |
Memory: workflows
| Tool | What it does |
|---|---|
browser_workflow_save |
Persist current session's auto-traced actions as a named workflow. |
browser_workflow_run |
Replay. Cached selector → self-heal by role+name → screenshot on miss. |
browser_workflow_list / _get / _delete |
Manage workflows. |
browser_workflow_export / _import |
Portable JSON (commit alongside your app's tests). |
browser_run_history |
Last N runs of a workflow. |
Compact inspection ladder
Use the smallest inspection tool that can answer the current question:
browser_text {query?, limit?}for page copy, search results, lists, and visible facts.browser_links {query?, limit?}for navigation choices.browser_snapshotfor clickable refs and visible actionable UI.browser_snapshot_queryfor targeted search inside the stored snapshot.browser_snapshot_nodefor the one subtree you need.browser_snapshot {mode:"full", scope:"all", maxBytes:0}only as an explicit last resort.
This keeps Claude Code, Codex, and parallel agents from flooding their context with full-page accessibility trees.
Visual placement loop
browser_snapshot → compact tree with refs + boxes
browser_screenshot → image (viewport / fullPage / elementRef)
↓
agent correlates ref ↔ box ↔ pixel position
↓
browser_click {ref, intent:"…"} ← intent caches the selector
Resize vs. emulate — when to use which
Read this carefully — these two tools are NOT interchangeable:
browser_emulate_viewportchanges the page's real JS layout. It drives CDPEmulation.setDeviceMetricsOverride, so it does changewindow.innerWidth/window.innerHeightand does flipmatchMedia/ CSS media queries. This is the tool you use for responsive and media-query testing — breakpoints, mobile layouts,@mediarules all respond to it.browser_window_resizeonly moves/sizes the OS-level Chrome window. It does NOT affectwindow.innerWidthormatchMedia— the page's JS layout is unchanged. Use it only when you genuinely need real OS window dimensions (e.g. screenshotting the full chrome of a large monitor).
A common past mistake was conflating the two — or assuming
emulate_viewport"only affects screenshots." It does not; it changes JS layout.
| Goal | Tool |
|---|---|
| Test a real responsive layout at iPhone size | browser_emulate_viewport {preset:"iphone-15-pro"} (changes innerWidth/matchMedia, includes touch + UA) |
| Verify a layout breakpoint at exactly 768px wide | browser_emulate_viewport {width:768, height:1024} (media queries respond) |
| Test how the OS window behaves at a real 2560×1440 monitor | browser_window_resize {width:2560, height:1440} (only safe in a session-owned window; JS layout unchanged) |
| Reset back to native | browser_clear_emulation |
emulate_viewport is preferred for layout/responsive testing — it's
deterministic, doesn't disturb anything else, matches Chrome DevTools' Device
Mode, and actually changes what the page's JavaScript sees. window_resize is
for when you genuinely need real OS-level window dimensions.
Exhaustive QA coverage mode
Beyond one-off checks, Mochi can run an exhaustive QA pass (/qa exhaustive)
that enumerates every actionable control with browser_audit_interactives,
drives each one through browser_act_and_observe, gates every page and action
with browser_assert_no_errors, and assigns one of five verdicts to each
control: WORKS, NO-OP (defect), ERROR (defect), NAVIGATES, or
DISABLED. Results are recorded in a verification ledger with
provenance stamping, and a built-in honesty gate refuses to report a run as
"pass" while any control is still UNTESTED/UNCERTAIN — the rule is never "everything
works" but "N of M controls verified — here is each result, and here is what I
could NOT verify and why." Hard-won tooling quirks live in a persistent
tooling-gotchas note so they're never
re-learned.
Memory model
Two layers, stored as plain JSON files under <project>/.continuum/ (no
database, no native bindings).
1) Selector cache — keyed by (origin, intent)
Every browser_click / browser_type call may carry an intent ("click sign in
button", "email field"). On success, the resolved selector is cached at
(origin, intent). The agent can short-circuit discovery by calling
browser_recall_selector before snapshotting:
browser_recall_selector {intent:"click sign in button"}
→ {found:true, selector:'button[aria-label="Sign in"]', last_box:{...}}
browser_click {ref:'button[aria-label="Sign in"]', intent:"click sign in button"}
The cache survives Chrome restarts, project reloads, server restarts.
Questions sur Mochi MCP
Quels outils Mochi MCP fournit-il ?
Il expose 50 outils, dont browser_session_start, browser_session_end, browser_request_attention, browser_navigate, browser_open_tab.
Comment Mochi gère-t-il les changements de sélecteurs dans l'interface utilisateur ?
Le moteur utilise un mécanisme d'auto-guérison basé sur les rôles et noms ARIA pour mettre à jour le cache des sélecteurs lorsqu'une refonte ou un refactoring survient.
Où sont stockés la mémoire du projet et les données de workflow ?
Toute la mémoire, y compris les caches de sélecteurs, les workflows et les exécutions, est stockée sous forme de fichiers bruts dans le répertoire <project>/.continuum/.
L'automatisation du navigateur interrompt-elle mon travail actuel ?
Non, l'automatisation ne prend pas le focus de l'OS ; elle envoie plutôt une notification de clic pour obtenir l'attention lorsqu'elle en a besoin.
Comment installer Mochi pour Claude Code ?
Vous pouvez l'installer directement au sein d'une session Claude Code en utilisant les commandes du marketplace de plugins.