Chrome Devtools MCP
managedcode/dotnet-skills
Use Chrome DevTools MCP from .NET agents and .NET-focused repos to inspect, debug, and automate Chrome through an MCP client.
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.
$ npx skills add reticlehq/reticle --skill debug-broken-ui -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install reticlehq/reticle debug-broken-ui --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/debug-broken-ui .claude/skills/debug-broken-ui && 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 "debug-broken-ui" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/debug-broken-ui into .claude/skills/debug-broken-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-broken-ui", 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/debug-broken-uiType 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 debug-broken-ui -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install reticlehq/reticle debug-broken-ui --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/debug-broken-ui .agents/skills/debug-broken-ui && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "debug-broken-ui" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/debug-broken-ui into .agents/skills/debug-broken-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-broken-ui", 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 debug-broken-ui -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install reticlehq/reticle debug-broken-ui --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/debug-broken-ui .cursor/skills/debug-broken-ui && 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 "debug-broken-ui" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/debug-broken-ui into .cursor/skills/debug-broken-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-broken-ui", 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/debug-broken-ui--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 debug-broken-ui -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install reticlehq/reticle debug-broken-ui --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/debug-broken-ui .gemini/skills/debug-broken-ui && 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 "debug-broken-ui" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/debug-broken-ui into .gemini/skills/debug-broken-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-broken-ui", 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 debug-broken-uiInstalls 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 debug-broken-ui -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/debug-broken-ui .github/skills/debug-broken-ui && 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 "debug-broken-ui" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/debug-broken-ui into .github/skills/debug-broken-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-broken-ui", 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 debug-broken-ui -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 debug-broken-ui --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/debug-broken-ui .opencode/skills/debug-broken-ui && 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 "debug-broken-ui" agent skill from https://github.com/reticlehq/reticle/tree/main/skills/debug-broken-ui into .opencode/skills/debug-broken-ui/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "debug-broken-ui", 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.
debug-broken-uiFinds 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.
Reticle, a tool that observes a web page from the inside, is the basis of this skill, because the evidence for such bugs is in the running app: the request that failed, the store that never changed, the handler that was never bound, the element covered by something invisible. The skill says to reproduce before guessing, listing the page's interactive controls and performing the action while waiting for a defined result.
The result of each action already carries a summary of that click's causal window, with network totals and errors, console errors, state and storage diffs, route changes, layout shift and long tasks. A verdict of no or contradicted means a channel saw something incompatible with the UI, while unknown means Reticle drove the action but could not tell. If the state channel is unwatched, empty diffs mean unwatched, not unchanged.
Only after reading the summary does it go deeper into console, network or state, scoped with the since value from the action so it does not read stale buffers. A diagnosis table maps what you see to what it is and what to do next, and the aim is to return the file and line to open. The supplied text cuts off before that table.
Read from SKILL.md and the folder at commit 15bddcf. 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:
curlnpxFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
docs.reticle.shFrom 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.
Broken UI Debugger loads about 1.3k tokens when it runs. Until then it costs about 107 tokens; SKILL.md has 635 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 15bddcf, republished under its Apache-2.0 licence (© reticlehq). 635 words, ~1,347 tokens.
.claude/skills/debug-broken-ui/SKILL.md (or your agent's skills folder).Reading the source again will not tell you why. The evidence is in the running app, and most of it never reaches the screen: the request that failed, the store that never moved, the handler that was never bound, the element covered by something invisible.
Reticle reads all of it from inside the page. Not installed? RETICLE_INSTALL_SOURCE=npx_skill npx @reticlehq/server@latest init, then the install-and-verify skill.
reticle_look({ action: "page", sessionId, mode: "interactive" }) // controls only, with refs
reticle_act_and_wait({ sessionId, ref, action: "click", until: { kind: "element", query: { testid: "..." } } })The verdict already narrows it: no / contradicted means a channel saw something incompatible with the UI: you have the bug. unknown means Reticle drove it and could not tell, which is a different investigation from "it failed".
Read the act result before you call anything else. Its summary block already carries the whole causal window of that one click: net {total, errors, headline}, consoleErrors, stateDiffs [{path, from, to}], storageDiffs [{key, from, to}], route, signals, layoutShift, longTasks: real before→after diffs, not counts. The console, network, storage and state calls below are for going DEEPER into something the summary already pointed at. Calling all three straight after an act pays three model round trips (and, in an approval-gated client, three human clicks) for evidence you were already holding.
summary.stateUnwatched: true means the state channel is dark: no subscribable store is registered, so an empty stateDiffs means unwatched, not unchanged, and no state-based conclusion is available until someone registers the store. It is the one field here that is about your instrumentation rather than about the app.
When the summary does point somewhere, read that channel scoped to what you just did: pass since from the act result, or you are reading a buffer that predates the click:
reticle_observe({ action: "console", sessionId, since })
reticle_observe({ action: "network", sessionId, since })
reticle_look({ action: "state", sessionId, store })| What you see | What it is | Next |
|---|---|---|
| No request fired at all | the handler is not bound, or a client cache served a stale value | reticle_look { action: "element" } the element for its file:line; check the cache if it is TanStack Query |
Request fired, 4xx/5xx | a real backend failure the UI swallowed | the response body is in the network entry |
2xx but nothing changed | the app never read the response: verdict says outcome_unread | usually a real bug in the success path |
| Request fine, DOM fine, store stale | UI-vs-state desync, invisible to any screenshot | reticle_look { action: "state" } is the only witness; this is the highest-value read here |
| Click did nothing, no error | the control is dead, occluded, or disabled | reticle_look { action: "element" } returns occluded, box (0×0), styles.cursor, opacity |
| Element "not found" that you can see | virtualised list has not mounted it | reticle_scroll_to. A query that misses is not evidence of absence |
| Looks logged in, behaves logged out | the token never persisted | reticle_storage |
| Console error that predates your click | a pre-existing fault, not your bug | call it out before continuing |
reticle_look({ action: "element", sessionId, ref })Returns the component and source: { file, line } for the element you are looking at, plus whether it is occluded, sized, disabled or off-theme. That is the pointer to open. End the investigation with a location, not a hypothesis.
Do not ping-pong act → snapshot → act → snapshot to find the failing step. Drive the journey with reticle_act { steps: [...] } and assert once; the first step whose consequence fails is the one to look at, and you paid a fraction of the calls to find it.
Re-run the reproduction as a verdict (reticle_act_and_wait with the consequence named up front) rather than eyeballing the page. A fix confirmed by looking at it is the failure mode that created this ticket.
And never weaken the check to make it pass.
Troubleshooting Reticle itself (as opposed to the app): curl https://docs.reticle.sh/troubleshooting.md. Everything else: curl https://docs.reticle.sh/llms.txt. If Reticle could not see something you needed, reticle_session { action: "feedback" } with kind: "gap".
© 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/debug-broken-ui of reticlehq/reticle.
Open the folder on GitHubat commit 15bddcf
Broken UI Debugger 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 |
|---|---|---|---|---|---|---|
| Broken UI Debugger this skillreticlehq/reticle | 1.2k | — | ~1.3k | Automated safety check: Pass | Apache-2.0 | |
| Chrome Devtools MCPmanagedcode/dotnet-skills | 486 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Graph-Based Bug Tracingtirth8205/code-review-graph | 32k | 1 repos | ~287 | Automated safety check: Pass | MIT | |
| Octocode Code Researchbgauryy/octocode | 949 | — | ~1.5k | Automated safety check: Pass | MIT | |
| Debugagentic-community/mcp-gateway-registry | 964 | — | ~1.8k | Automated safety check: Notes | Apache-2.0 | |
| Sentry Fix Issuesgetsentry/sentry-for-ai | 268 | 3 repos | ~1.9k | Automated safety check: Pass | Apache-2.0 |
managedcode/dotnet-skills
Use Chrome DevTools MCP from .NET agents and .NET-focused repos to inspect, debug, and automate Chrome through an MCP client.
tirth8205/code-review-graph
Traces a bug through a code knowledge graph, following callers, callees and execution flow before opening source files, within a small token budget.
bgauryy/octocode
Researches code with evidence: traces callers, imports and cross-repo links, diagnoses failures and reports findings with exact file and line references and a confidence label.
agentic-community/mcp-gateway-registry
Debug issues in the MCP Gateway Registry using first-principles thinking.
getsentry/sentry-for-ai
Find and fix issues from Sentry using MCP. An agent skill from getsentry/sentry-for-ai.
github/awesome-copilot
Debug failing Power Automate cloud flows using the FlowStudio MCP server.
reticlehq/reticle
Prove sign-in lands the user where they should be, sign-out really ends the session so a protected page sends them back to sign in, and an expired session asks to sign in again instead of breaking.
reticlehq/reticle
Prove a UI that updates before the server answers puts things back and says so when the request fails, and keeps the change when it succeeds.
reticlehq/reticle
Prove the next page of a list, or the next batch of an infinite scroll, loads NEW rows from the server, repeats none, and that the end of the list is handled.
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
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.
Works with
Categories
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. Reticle, a tool that observes a web page from the inside, is the basis of this skill, because the evidence for such bugs is in the running app: the request that failed, the store that never changed, the handler that was never bound, the element covered by something invisible. The skill says to reproduce before guessing, listing the page's interactive controls and performing the action while waiting for a defined result.
Broken UI Debugger fits situations like: A button does nothing and the console shows no errors; A form will not submit or data will not load; A page renders blank or stale, or a modal will not close.
Run `npx skills add reticlehq/reticle --skill debug-broken-ui -a claude-code`. Or copy the skill folder (skills/debug-broken-ui in reticlehq/reticle) into .claude/skills/debug-broken-ui in your project. Claude Code loads it when a task matches its description.
Run `npx skills add reticlehq/reticle --skill debug-broken-ui -a codex`. Or copy the skill folder (skills/debug-broken-ui in reticlehq/reticle) into .agents/skills/debug-broken-ui 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 debug-broken-ui -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/debug-broken-ui, .gemini/skills/debug-broken-ui, .github/skills/debug-broken-ui and .opencode/skills/debug-broken-ui in your project.
Going by SKILL.md and its folder, Broken UI Debugger needs the command-line tools its instructions call (curl and npx). Our summary lists: Reticle set up in the project with npx @reticlehq/server@latest init; A running web app the agent can drive in a browser.
SKILL.md names 1 domain. In commands or code: docs.reticle.sh; the agent is likely to contact it when it follows the instructions. 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.
Broken UI Debugger 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.3k tokens (SKILL.md is roughly 5.4k 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 Broken UI Debugger: Chrome Devtools MCP (managedcode/dotnet-skills, 486 stars), Graph-Based Bug Tracing (tirth8205/code-review-graph, 32k stars), Octocode Code Research (bgauryy/octocode, 949 stars) and Debug (agentic-community/mcp-gateway-registry, 964 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,190 GitHub stars. The repository holds 18 skills in this directory. The repository was last updated on October 8, 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.