MCP Server Builder
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
Install, instrument and verify a web app end to end without pausing for a human.
$ npx skills add reticlehq/reticle --skill verify-unattended -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install reticlehq/reticle verify-unattended --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/reticlehq/reticle.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/verify-unattended .claude/skills/verify-unattended && 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 "verify-unattended" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/verify-unattended into .claude/skills/verify-unattended/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-unattended", 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/reticlehq/reticle/tree/main/skills/verify-unattendedType 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 reticlehq/reticle --skill verify-unattended -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install reticlehq/reticle verify-unattended --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reticlehq/reticle.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/verify-unattended .agents/skills/verify-unattended && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "verify-unattended" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/verify-unattended into .agents/skills/verify-unattended/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-unattended", 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 reticlehq/reticle --skill verify-unattended -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install reticlehq/reticle verify-unattended --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reticlehq/reticle.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/verify-unattended .cursor/skills/verify-unattended && 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 "verify-unattended" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/verify-unattended into .cursor/skills/verify-unattended/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-unattended", 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/reticlehq/reticle.git --path skills/verify-unattended--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 reticlehq/reticle --skill verify-unattended -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install reticlehq/reticle verify-unattended --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reticlehq/reticle.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/verify-unattended .gemini/skills/verify-unattended && 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 "verify-unattended" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/verify-unattended into .gemini/skills/verify-unattended/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-unattended", 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 reticlehq/reticle verify-unattendedInstalls 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 reticlehq/reticle --skill verify-unattended -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/reticlehq/reticle.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/verify-unattended .github/skills/verify-unattended && 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 "verify-unattended" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/verify-unattended into .github/skills/verify-unattended/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-unattended", 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 reticlehq/reticle --skill verify-unattended -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install reticlehq/reticle verify-unattended --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/reticlehq/reticle.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/verify-unattended .opencode/skills/verify-unattended && 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 "verify-unattended" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/verify-unattended into .opencode/skills/verify-unattended/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-unattended", 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.
verify-unattendedInstall, instrument and verify a web app end to end without pausing for a human.
Verify Unattended is an agent skill from reticlehq/reticle. Install, instrument and verify a web app end to end without pausing for a human. Use in an autonomous or goal-mode agent, in CI, or in any client that asks for approval on every command: it never says "restart your client" or "open a browser", because it takes a route that needs neither. Prefer the normal install-and-verify skill when a human is present and can answer.
Its SKILL.md is about 1.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Agent Workflows. The repository describes itself as: AI agents can generate code, but still struggle to understand what they build. Reticle brings Jev-style machine-native runtime perception to web & desktop applications. The licence is Apache-2.0.
5 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 178e5c0. 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:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From 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.
Verify Unattended loads about 1.9k tokens when it runs. Until then it costs about 97 tokens; SKILL.md has 1,107 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 reticlehq/reticle at commit 178e5c0, republished under its Apache-2.0 licence (© reticlehq). 1,107 words, ~1,925 tokens.
.claude/skills/verify-unattended/SKILL.md (or your agent's skills folder).Same product, same verdicts, one difference: nothing here waits for a human.
The normal skill has two places where it hands control back: "restart your client so it picks up the MCP server" and "open the app in a browser". Both are correct when someone is sitting there. In goal mode they are dead ends: the restart ends the context holding these instructions, and there is nobody to open a tab.
So this skill takes the route that needs neither, and stops only when it has a verdict or a reason.
You cannot add MCP tools to your own running process. No slash command, no config edit, no re-registration reaches the tool list you already have. Your client read it before Reticle existed. Do not try, and do not ask to be restarted.
Instead, branch once on what you already have:
reticle_* tools present → drive with them. Best evidence, source-mapped, full verdicts.reticle verify produces a verdict and an exit code with no MCP involvement at all.Both routes end in a verdict. Pick the one your process allows and go.
export RETICLE_INSTALL_SOURCE=npx_skill
npx -y @reticlehq/server@latest initThe export is on its own line on purpose. Every other copy of this command carries the marker inline, but this skill runs where commands are matched against a prefix allowlist (see "Keep commands plain" below), and RETICLE_INSTALL_SOURCE=... npx ... no longer starts with npx. Inline, it would stop matching the very rule this file tells you to rely on.
Then read the report rather than assuming it. Two lines matter:
⚠ on the app's build config: the wiring did not land. Apply the printed edit yourself; do not carry on as if it had.ℹ naming a version fallback: the pinned SDK was refused and a different one installed. The SDK and the daemon must agree; if a later call reports a protocol error, this is why.init is idempotent. A step reading already wired is a pass, not a skip.
If init reports every step already done, the app was instrumented before you arrived. That is fine, but it means this run has not proved the install. Say so rather than claiming you set it up.
The daemon needs a page to look at, and a page needs a server. Do not ask whether to start one.
package.json.If a server is already listening on that port, use it. Starting a second one on a different port gives you an app nobody is verifying, and leaves a process behind.
Restarting matters after init. A build plugin added to a config the running server already read is not in the bundle. If the server was up before step 1, restart it now or nothing you do next will find an instrumented page.
With the MCP tools:
reticle_session { action: "list" }A listed session is the proof. Nothing else in this skill can tell you anything about the app until one appears.
No session, and no human to open a tab? Take one yourself:
reticle_run { tool: "reticle_lease", args: { action: "acquire", url: "http://localhost:<port>/" } }The lease opens a browser Reticle owns and drives. It is the whole answer to "there is nobody here to open the page".
Without the MCP tools, skip to step 4: verify opens its own browser.
Declare the consequence before you act. This is the difference between a check and a rationalisation, and it is the entire reason this tool exists:
reticle_act_and_wait { ref, action, until: { … } }Assert what the app did, not what it shows. A UI that renders the value it just sent, rather than the value the server returned, passes every DOM-level check ever written:
until: { kind: "net", method: "POST", urlContains: "/api/refund",
status: 200, bodyContains: "\"refunded\":1187.01" }bodyContains reads the response: what the server answered. It needs body capture, which init writes into the app's config; if a verdict comes back outcome_unread, that is what is missing.
Without the MCP tools:
npx @reticlehq/server verify http://localhost:<port>/Exit 0 is a pass. It drives the app and re-verifies saved flows, so if the project has none, it will tell you nothing was checked. That is not a pass. Record one first, or say plainly that there was nothing to verify.
verified: "yes": proved. Say what held.verified: "no": the app is wrong, or your expectation was. Both are results. Report it.verified: "unknown": Reticle drove the app and could not tell. Not a pass. Never round it up, and never weaken the assertion until it goes green. That converts a real signal into a false one, which is the failure this product exists to prevent.A drive that ends without act_and_wait or assert has no result, however many tools it used.
Stop and say which of these it is. A precise dead end beats a green report.
| What you see | What it means |
|---|---|
tools absent, verify says no saved flows | nothing to verify yet: record a flow, or report that |
reticle_session { action: "list" } empty, port listening | the bundle has no SDK: restart the dev server after init |
verified: "unknown", outcome_unread | the response body was not recorded: check the plugin options init wrote |
| lease loads the page but never connects | the app refused to dial; on a non-localhost host it needs a pairing token as well as allowNonLocalhost |
Some clients ask a human to approve each command. Two things reduce that to near zero:
npx @reticlehq/server init matches a prefix rule; the same command wrapped in a subshell or a $(…) usually does not.~/.reticle, which is outside the workspace. Approving that family once covers every later call.If your client offers an autonomous or goal mode, this skill is written for it. Turn it on before starting rather than approving forty prompts. Approval fatigue is a real reason runs are abandoned half-installed, with the tools connected and nothing ever verified.
Reticle is built for agents, so your experience is the signal that decides what gets fixed, and it disappears when your context does. One call, then carry on:
reticle_session { action: "feedback", kind: "bug" | "gap" | "ambiguity" | "feature_request" | "improvement" | "experience", text: "…" }Unreachable? npx @reticlehq/server feedback --agent --kind <kind> "what happened". Report defects in Reticle; a bug you find in the app under test is Reticle working, and belongs in your answer.
© reticlehq, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/verify-unattended of reticlehq/reticle.
Open the folder on GitHubat commit 178e5c0
Verify Unattended 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 |
|---|---|---|---|---|---|---|
| Verify Unattended this skillreticlehq/reticle | 1.2k | — | ~1.9k | Automated safety check: Pass | Apache-2.0 | |
| MCP Server Builderanthropics/skills | 180k | 63 repos | ~2.3k | Automated safety check: Pass | Apache-2.0 | |
| Hook Development for Claude Code Pluginsanthropics/claude-plugins-official | 38k | 10 repos | ~4.1k | Automated safety check: Notes | Apache-2.0 | |
| Using Superpowersfarm-fe/farm | 5.6k | 36 repos | ~1.4k | Automated safety check: Pass | MIT | |
| Executing Plans Inlineobra/superpowers | 297k | 2 repos | ~5.1k | Automated safety check: Pass | MIT | |
| Skill CreatorAzure/azqr | 796 | 89 repos | ~8.2k | Automated safety check: Pass | Apache-2.0 |
anthropics/skills
Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.
anthropics/claude-plugins-official
Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.
farm-fe/farm
A skill your agent uses when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions
obra/superpowers
Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.
Azure/azqr
Create new skills, modify and improve existing skills, and measure skill performance.
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
reticlehq/reticle
Applies red-green TDD to behavior unit tests cannot reach, by stating the expected outcome against the running app with Reticle before writing the feature.
reticlehq/reticle
Sweeps a running web app by clicking every reachable control, then reports dead buttons, console errors, failed requests and mismatches between API data and the screen.
reticlehq/reticle
Finds why a running web app misbehaves when the console is empty and the code looks fine, by reading the click, request, store and console together.
reticlehq/reticle
Drives and verifies Electron or Tauri desktop apps through Reticle, which sees the renderer and the IPC calls that a browser-based testing tool cannot observe.
reticlehq/reticle
Finds out why a passing test suite sits on top of a broken app by comparing what the running app does with what the tests claim, using Reticle.
reticlehq/reticle
Picks up bugs a person flagged by pointing at elements in the running app, each mark carrying the element, their note and the source file and line, then fixes and verifies them.
Categories
Install, instrument and verify a web app end to end without pausing for a human. Verify Unattended is an agent skill from reticlehq/reticle. Install, instrument and verify a web app end to end without pausing for a human.
Verify Unattended fits situations like: agent Workflows work in your project.
Run `npx skills add reticlehq/reticle --skill verify-unattended -a claude-code`. Or copy the skill folder (skills/verify-unattended in reticlehq/reticle) into .claude/skills/verify-unattended in your project. Claude Code loads it when a task matches its description.
Run `npx skills add reticlehq/reticle --skill verify-unattended -a codex`. Or copy the skill folder (skills/verify-unattended in reticlehq/reticle) into .agents/skills/verify-unattended 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 reticlehq/reticle --skill verify-unattended -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/verify-unattended, .gemini/skills/verify-unattended, .github/skills/verify-unattended and .opencode/skills/verify-unattended in your project.
Going by SKILL.md and its folder, Verify Unattended needs the command-line tools its instructions call (npx). Our summary lists: Node.js.
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. 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.
Verify Unattended is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.9k tokens (SKILL.md is roughly 7.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Verify Unattended: MCP Server Builder (anthropics/skills, 180k stars), Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 38k stars), Using Superpowers (farm-fe/farm, 5.6k stars) and Executing Plans Inline (obra/superpowers, 297k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
reticlehq (a GitHub organization) maintains it in reticlehq/reticle, which has 1,199 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 9, 2026.
Source: reticlehq/reticle on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.