anthropics/skills180kwebapp-testing
Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
浏览器自动化
Verify that a web app change actually works by driving the running app from the inside (DOM, network, routing, console, framework state) instead of screenshots or guessing. Use after any user-facing change, when a fix is claimed but unproven, when a test passes but the UI is broken, or when you need a real verdict rather than "looks right". Also use to install and wire up Reticle in a project that does not have it yet.
把这段话发给 Claude Code、Codex 或 Cursor。智能体会先检查安全性,你确认后才安装。
读取 https://funcoding.ai/skills/reticlehq/reticle/install-and-verify/install.md ,按里面的步骤帮我安装这个 Skill。
Reticle embeds a dev-only SDK in the user's running app and exposes it to you as reticle_* MCP tools. You look, act, observe, and assert against the real app. No screenshots, and no browser download for the verify loop: it drives the tab the user already has open. (A driven browser, which reticle_lease and --drive use, does need Chromium; Reticle says so when it needs one.)
Everything not in this file is at https://docs.reticle.sh, and it is built to be fetched rather than browsed. Append .md to any page URL to get its source with no site chrome, so you can pull one page instead of a whole document you mostly do not need:
curl https://docs.reticle.sh/llms.txt # every page title and URL, small enough to read whole
curl https://docs.reticle.sh/cli/doctor.md # one CLI command: flags, real output, exit codes
curl https://docs.reticle.sh/tools/act-and-wait.md # one tool: arguments and what a verdict means
curl https://docs.reticle.sh/troubleshooting.md # the failures people actually hit
Read llms.txt first and pick the one page that answers the question. That is almost always cheaper than pulling a large file and hoping the part you need survived. There is a /llms-full.txt with the entire site in one file; use it only to seed a context window deliberately.
Every page arrives with the four rules that matter prepended, whether you asked for them or not, so a single fetch orients you without a second call.
cat .reticle.json 2>/dev/null || echo NOT_FOUND
NOT_FOUND → SETUP below.reticle_session { action: "list" } then returns an empty list, go to references/troubleshooting.md; do not restart setup.Both paths are about THIS PROJECT. The machine step is separate and comes first: one command that puts the CLI on PATH, registers the MCP server with the coding agents it finds, and pre-approves Reticle's own tools where an agent has a per-server approval rule (Claude Code, for one). A user who would rather choose each step can follow https://docs.reticle.sh/install-manual.md instead.
curl -fsSL https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.sh | sh # macOS, Linux
irm https://raw.githubusercontent.com/reticlehq/reticle/main/install/install.ps1 | iex # Windows PowerShell
If you can see reticle_* tools, that already happened and you can ignore it. If you cannot, hand the user that one line to run in a terminal and stop there. init can register the MCP server itself, but doing it from inside a client that has already read its server list means the tools cannot appear until the client restarts, which ends your turn in the middle of setup. The terminal-first order is what removes that step, so do not work around it.
Installed means a verdict was produced. Writing config files is not installed.
Every earlier point looks like success and is not:
init exited 0. Files were written. Nothing connected.reticle_* tools appeared. Your client can reach a daemon. The app is very likely still uninstrumented.Do not tell the user Reticle is set up until step 5 has produced a verdict. The single most common outcome in the field is an agent that finishes step 1, reports success, and leaves a user with config files and no instrumented page.
Finish the setup steps; ask the user only when a step needs their decision. Running init, fixing wiring it could not, starting the dev server and opening the browser are setup steps, not decisions.
The repo already answers which framework, package manager, port, editor or MCP client, so work those out rather than asking. Say what you did in one line.
Three places always need the user:
package.json. Say so; do not invent one.init writing a pre-approval rule for the reticle server is not that: it is a scoped, announced config change the human asked for by running the command, and it covers only Reticle's own tools.Setup requires a client restart, which ends your turn. This skill survives that restart. After the restart, re-read this file and resume at the step you were on. Do not start over, and do not skip forward.
One command wires the project. A second one proves a flow.
RETICLE_INSTALL_SOURCE=npx_skill npx @reticlehq/server@latest init
It detects the framework and package manager, wires the build config, installs the SDK, registers the MCP server, starts the dev server, opens the app, and waits for a session to connect from inside it. That connection IS the proof onboarding worked: the SDK is in the page and the tools have something to talk to. It exits non-zero if nothing connected, and prints exactly what is left to do.
Then prove a flow. That is the FIRST RUN, and it is a separate call:
reticle_act_and_wait { ref, action, until }
Drive the journey that matters and put the verdict on its LAST step: until names the end state before the action fires. What you drive is saved as a flow, so later runs replay it with no model. On a linked project (reticle connect; every plan, Free included, has monthly Harness credits), reticle_verify { action: "explore", persona: "<who does what>" } has the Reticle Harness drive the whole journey for you instead. Before driving anything, replay what is already saved: reticle_verify { action: "flows" } costs no model at all.
The command reads the repository. It cannot read the request, and these live only there.
| flag | what only you know |
|---|---|
persona: "<what>" (on the FIRST RUN, not on init) | which journey proves the thing the user asked for. Code can list the buttons; it cannot know checkout matters and the theme toggle does not. |
--env KEY=VALUE | what the app needs to reach a usable state: the key from .env.example, the mock backend, the variable that skips an auth wall. Repeatable. |
--app <dir> | which app in a monorepo. It can list the servable ones; only the request says which is being worked on. |
Add --license <key> if the user gave you one: it writes RETICLE_LICENSE_KEY to .env and keeps .env out of git.
Framework, package manager, port, editor and MCP client are answerable from the repo you are sitting in, so work them out rather than asking.
A non-zero exit is a to-do list, not a failed install. The command names the cause and prints the REMAINING steps from wherever it stopped; it will not tell you to redo a phase that already worked. Do those and re-run, which is safe.
It is not finished until a verdict exists. Writing files is not an install, and neither is a connected session.
Do not choose this path. It is not the thorough version of the one above; it is what you fall back to when the command physically could not do the work. Use it only when init exited without ever printing starting: or ▸ WATCH (an older CLI that stops after writing files), or when it stopped in the same place twice after you did what it asked. A ⚠ in the report is not a reason: re-run the command, which is idempotent and names what is still outstanding.
curl https://docs.reticle.sh/install-manual.md # register the MCP, wire the SDK, prove it
curl https://docs.reticle.sh/troubleshooting.md # nothing connected, click did nothing, verdict unknown
Enterprise features are unlocked by a signed key, verified locally with Ed25519 and no network call. If the user hands you one, during setup or at any later point:
RETICLE_LICENSE_KEY=<key> to the project's .env, creating the file if it is not there. The CLI folds a project-local .env into the environment on every invocation, so nothing else has to change..env is in .gitignore. A license key in git is a leaked credential, so check before you write and add the line if it is missing.npx @reticlehq/server license, which prints active, eval, missing or expired.Never echo the key back in your reply, and never put it in a commit, a code comment, or a feedback report. The rest: curl https://docs.reticle.sh/enterprise.md.
Verdicts come from reticle_act_and_wait, reticle_assert, and reticle_act { steps } when a step declares expect. Everything else (a bare act, look, navigate, observe) moves or reads the app and proves nothing. A drive that ends without a verdict has no result, however many tools it used.
Prefer reticle_act_and_wait({ ref, action, until }). It names the expected consequence before the action, which is the difference between a check and a rationalisation.
A verdict of verified: "unknown" is not a pass. It means Reticle drove the app and could not tell what happened. Report it as unknown.
Never weaken a check to make it pass.
Stop at the first row that fits. Do not hand-drive a flow you could replay.
| The question | The call | Calls |
|---|---|---|
| "Did my edit break anything?" | reticle_verify({ action: "change", files: ["src/App.tsx"] }) | 1 |
| "Does this known journey still work?" | reticle_run({ tool: "reticle_flow_replay", args: { flowName: "login" } }) | 1 |
| "Does this new behaviour work?" | reticle_act { steps: [...] } to the last page, then reticle_act_and_wait on the step that ENDS the journey | 2 |
| No MCP available at all | npx @reticlehq/server verify <url> in the shell | 1, no MCP |
reticle_flow_replay is not on the advertised tool list: it is reached through reticle_run exactly as written. That is the supported call shape, and it is why you have to be told it exists.
reticle_verify {action:"change"} answers unknown when no saved flow covers the files you changed. Nothing ran, so nothing was proved: that is the honest answer, never a pass, and it is the signal to record one (step 5 above).
The full loop (look, act, observe, assert), how to read a verdict, batching, and regression suites: references/verify.md.
Reticle is built for agents. You are its user, and your experience is the only signal that decides what gets built or fixed. It disappears when your context does.
The moment Reticle breaks, lies, cannot see something you needed, costs too many calls, or gives you trouble during setup:
reticle_session { action: "feedback", kind, text }
kind is one of bug, gap, ambiguity, feature_request, improvement. One call, then carry on with the task.
If the tools are unreachable (setup unfinished, daemon down), file the same report from the shell:
npx @reticlehq/server feedback --agent --kind <bug|gap|ambiguity|feature_request|improvement> "what happened"
Nothing is too minor. Report defects in Reticle; a bug you find in the app under test is Reticle working and belongs in your answer to the user. Never put app source, secrets, or user data in a report.
anthropics/skills180kToolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
浏览器自动化
addyosmani/agent-skills103kTests in real browsers via Chrome DevTools MCP. Use when building or debugging anything that runs in a browser. Use when you need to inspect the DOM, capture console errors, analyze network requests, profile performance, or verify visual output with real runtime data. Requires the chrome-devtools MCP server to be configured.
浏览器自动化
ComposioHQ/awesome-claude-skills77kToolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.
浏览器自动化
code-yeongyu/oh-my-openagent70kDrives a real browser through the omowright library from the js eval kernel: sites the user is already signed into, forms and clicks, JS-rendered pages, screenshots, web QA, extension popups, a human handoff for login, CAPTCHA or OTP, and a browser you own for scraping, bot-scored targets, network capture and QA traces. Use for any interactive browser task; not for a plain search or an unblocked static fetch.
浏览器自动化
shanraisshan/claude-code-best-practice67kBrowser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction.
浏览器自动化
CherryHQ/cherry-studio52kRun Cherry Studio critical-path system regression tasks through the repository-owned Playwright E2E workflow. Use for full regression, release acceptance, development-branch system validation, or a named cherry-regression-test task on GitHub-hosted macOS and Windows runners.
浏览器自动化