agent-infini
Use the InfiniSynapse CLI (`agent_infini`) for multi-turn AI data-analysis tasks,…
Use this skill to drive Wisp Browser Runtime sessions (shared daily Chrome or workspace Chrome) — open pages, read them, click, fill and submit forms, navigate, switch tabs, or scrape content that needs the user's existing cookies and login state. Triggers when the user asks to
$ npx -y skills add xuzhougeng/wisp-science --skill browser-use --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/browser-useContext preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill to drive Wisp Browser Runtime sessions (shared daily Chrome or workspace Chrome) — open pages, read them, click, fill and submit forms, navigate, switch tabs, or scrape content that needs the user's existing cookies and login state. Triggers when the user asks to
name: browser-use description: "Use this skill to drive Wisp Browser Runtime sessions (shared daily Chrome or workspace Chrome) — open pages, read them, click, fill and submit forms, navigate, switch tabs, or scrape content that needs the user's existing cookies and login state. Triggers when the user asks to do something in their browser, log into a site and act inside it, fill out a web form, click through a flow, or extract data from a page that requires being signed in. Tools: browser_setup (check/connect the extension), web_open_tab (open a URL), web_scan (read visible content + actionable elements with ready-made selectors), web_execute_js (click/type/navigate, or a JSON command for tabs/CDP), web_screenshot (see what the tab is showing — layout, charts, canvas, QR codes). Not for the built-in read-only web fetch — this is for interacting with a live browser." fold_cue: "instead_of=guessing-selectors use=web_scan first — it returns a unique CSS selector and rect for every actionable element; never invent selectors"
Wisp talks to the **Browser Runtime**. Shared mode uses the user's daily Chrome via the unpacked extension — every action runs in their real profile: existing cookies, logins, extensions, and normal fingerprint all apply. Workspace mode can launch a separate Chrome profile. Omitting `session` always uses shared, even when workspace is connected. Pass `session: "workspace"` only when the user explicitly requests isolation. If Settings → Browser has **Open browser automatically** enabled (the default) and the shared extension is disconnected, Wisp may start the installed Chrome/Chromium/Edge so the extension can reconnect. That is still the user's profile, not Playwright or Selenium.
**Shared is the default; workspace is not a fallback.** Google Chrome 137 and later ignore `--load-extension`, so on a machine with only branded Chrome the workspace window cannot load the Wisp extension at all. `browser_setup {"action":"start_workspace"}` therefore returns only once the workspace extension has connected, and otherwise closes the window and fails with `WORKSPACE_EXTENSION_BLOCKED`. On that error: relay the message, do not retry `start_workspace`, do not claim any workspace page was opened or read, and get the shared session working instead.
Start with `browser_setup` without an action (an empty action is also a status check). If the task supplies a target URL, pass it as `url` so a disconnected daily browser opens that page directly; otherwise startup uses its new-tab page. A connected shared browser is reused without opening another window. Startup does not close existing tabs, including pre-existing blank or new-tab pages.
For figures/code extraction use `web_scan` with `mode: "article"` then `web_save_assets`. For an already-logged-in in-browser chat (ChatGPT, Gemini, or Google AI Mode at `google.com/search?udm=50`) use `web_agent_send`, `web_agent_wait`, `web_agent_read` on that tab.
Every `web_scan` and `web_execute_js` call needs the user's approval by design. Do not treat that as a bug to route around.
Call `browser_setup`. If `status` is not `connected` (or `live_retrieval` is false), relay its `steps` (load the unpacked extension from `extension_path`, verbatim) and **stop**. Do not answer live, latest, current, or URL-specific questions from prior knowledge. Tell the user this turn contains no live web retrieval and wait until the popup shows *Connected to Wisp*. Only continue from memory if they explicitly ask for a knowledge-only answer. Never invent the path.
Two fields say *why* a browser that looks connected is not usable — never report a bare "not connected" when either is set:
refused it (usually a different extension id, or another loopback bridge holding the port). Its popup can still read *Connected to Wisp*. Relay `refused_connection.explanation`.
this build. Call `browser_setup {"action":"update_extension"}` first. If it returns `updated`, call `browser_setup` again and continue only when `update_required=false`. If it returns `manual_reload_required`, relay the current and bundled versions plus `extension_path` verbatim, ask the user to **Reload** Wisp Real Browser Bridge on `chrome://extensions`, and wait. Older unpacked extensions cannot accept Wisp's automatic service-worker reload.
One exception: the user says the extension is already installed. Chrome suspends its service worker when idle and reconnects on a one-minute alarm, so `disconnected` can just be a sleeping worker. Try `web_open_tab` or `web_scan` once — a successful call proves the bridge is live — and relay the install steps only if that call fails too.
1. **`web_open_tab`** `{url}` — open the page (works even with no tab open yet). Waits until the document is complete, then returns the new tab id plus `ready`. If `ready` is false, the load timed out — call `web_scan` before acting. 2. **`web_scan`** — read the page (after waiting for document complete). Returns `page.text`, `page.title`, `page.ready_state`, and `page.elements[]`, where each element carries a **unique `selector`**, its visible `text`/`aria_label`, and a `rect` `[x,y,w,h]`. Use these selectors directly — do not guess. If `ready` is false, scan again; do not click a partial page. Use `tabs_only:true` first when you are unsure which tab to target; pass `switch_tab_id:<id>` to pin one. 3. **`web_execute_js`** — act, then re-scan to confirm the effect. The extension waits for complete before running the script, and again if the script navigates.
| Goal | script | |---|---| | Click | `document.querySelector('<selector>').click()` | | Type into a field | `const e=docu
The open-source, local-first AI research workbench. WISP — Workspace for Intelligent Scientific Practice Search the literature, run Python and R, query ~80 scientific databases, and keep the trail — figures, runs, decisions, and drafts — in one project.
Use the InfiniSynapse CLI (`agent_infini`) for multi-turn AI data-analysis tasks,…
Organize multi-step scientific analyses into reproducible, self-contained modules. Use for…
Set up and validate a reproducible Python or R environment on a Wisp execution context. Use…
Use Cua Driver through MCP to inspect and operate the user's native desktop apps on Windows,…
Author a Wisp custom theme CSS file that uses documented tokens and import constraints. Use…