Agent skill

Test Error States

by reticlehq in reticlehq/reticle

Force the states a happy-path run never reaches (a failing API, an empty list, a slow request, a timeout, an expired session, a toast that auto-dismisses) and check the UI actually handles them.

Apache-2.0Auto-check passed

Install Test Error States

skills CLI
$ npx skills add reticlehq/reticle --skill test-error-states -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install reticlehq/reticle test-error-states --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/reticlehq/reticle.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/test-error-states .claude/skills/test-error-states && rm -rf skills-src

Use ~/.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/

Facts

Skill name
test-error-states
GitHub stars
1.2k
Token cost
~1.2k tokens
SKILL.md length
514 words
Files
1
Skills in repo
19
Repo updated
First seen
Licence
Apache-2.0

At a glance

Force the states a happy-path run never reaches (a failing API, an empty list, a slow request, a timeout, an expired session, a toast that auto-dismisses) and check the UI actually handles them.

  • Works in 4 steps: The error is shown to the user: a… → The app stayed usable: retry works, the… → State is honest: reticle_look { action:… → …
  • Error handling was written but never run
  • SKILL.md covers Read this before you start:…, Force a failure, Skip time instead of sleeping and What to assert, plus 1 more section
  • Calls npx and curl; reaches docs.reticle.sh

What it does

Test Error States is an agent skill from reticlehq/reticle. Force the states a happy-path run never reaches (a failing API, an empty list, a slow request, a timeout, an expired session, a toast that auto-dismisses) and check the UI actually handles them. Use when error handling was written but never run, when a loading or empty state needs verifying, when a bug only happens on a slow connection, or when a timer, poll, debounce or retry needs testing without sleeping.

Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

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.

When your agent uses it

  • Error handling was written but never run
  • Empty state needs verifying
  • A bug only happens on a slow connection
  • Retry needs testing without sleeping

Example prompts

  • “/test-error-states”

Requirements

  • Node.js

Workflow steps

4 steps, taken from the first numbered list in SKILL.md.

  1. The error is shown to the user: a specific element, not just "the page did not blank".
  2. The app stayed usable: retry works, the form still has its input, navigation is not stuck.
  3. State is honest: reticle_look { action: "state" } shows the failure, not a half-applied optimistic update. A UI that rolled back visually…
  4. No uncaught error in the console.

What it can do on your machine

Read from SKILL.md and the folder at commit 178e5c0. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Shell commands in SKILL.md call:

    • npx
    • curl

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • docs.reticle.sh

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Test Error States loads about 1.2k tokens when it runs. Until then it costs about 107 tokens; SKILL.md has 514 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~107
When it runs · the whole SKILL.md, loaded when a task matches
~1.2k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from reticlehq/reticle at commit 178e5c0, republished under its Apache-2.0 licence (© reticlehq). 514 words, ~1,184 tokens.

Download SKILL.mdSave it as .claude/skills/test-error-states/SKILL.md (or your agent's skills folder).
name
test-error-states
description
Force the states a happy-path run never reaches (a failing API, an empty list, a slow request, a timeout, an expired session, a toast that auto-dismisses) and check the UI actually handles them. Use when error handling was written but never run, when a loading or empty state needs verifying, when a bug only happens on a slow connection, or when a timer, poll, debounce or retry needs testing without sleeping.
license
Apache-2.0
metadata.version
3.7.0
metadata.homepage
https://www.reticle.sh
metadata.repository
https://github.com/reticlehq/reticle

The error state has never run

Every app has a catch block nobody has executed and an empty state nobody has seen. They are written from imagination, shipped untested, and discovered by a user on a bad day.

Reticle can force those conditions in the running app. Not installed? RETICLE_INSTALL_SOURCE=npx_skill npx @reticlehq/server@latest init, then the install-and-verify skill.

Read this before you start: network mocking needs a driven or leased browser

reticle_network_mock intercepts requests in a browser Reticle owns, and the always-on SDK cannot do it. A connected tab with neither reticle drive nor a lease still returns { ok: false, reason: "no-cdp-provider" }.

Your route is a leased Playwright tab (reticle_run { tool: "reticle_lease", args: { action: "acquire", url } }) or RETICLE_CDP_URL pointed at a Chrome started with remote debugging:

bash
# macOS — the user runs this once, in their own Chrome
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --remote-debugging-port=9222

RETICLE_CDP_URL=http://localhost:9222 npx @reticlehq/server@latest mcp

If you have neither a lease nor a driven browser, say so in one line and offer the clock half of this skill anyway: reticle_clock needs none of it. What you may not do is drive the happy path, watch it pass, and report that error handling works.

Force a failure

reticle_run({ tool: "reticle_network_mock", sessionId, args: {
  mocks: [{ urlContains: "/api/deploys", status: 500 }],
}})

Then drive the flow and name the recovery you expect before you act:

reticle_act_and_wait({ sessionId, ref, action: "click", until: { kind: "allOf", predicates: [
  { kind: "element", query: { testid: "error-banner" } },
  { kind: "console", level: "error", absent: true },
]}})

Note the second predicate. A UI that "handles" an error by logging an uncaught exception has not handled it. Clear mocks with { clear: true } when you are done, or every later check runs against a lie.

Worth forcing, in rough order of how often they are broken: 500, a 4xx with a real error body, an empty 200 ([], the empty state), a malformed payload, and a request that never resolves (the spinner that spins forever).

Skip time instead of sleeping

reticle_run({ tool: "reticle_clock", args: { sessionId, freeze: true } })
reticle_run({ tool: "reticle_clock", args: { sessionId, advanceMs: 5000 } })
reticle_run({ tool: "reticle_clock", args: { sessionId, reset: true } })

Toasts that auto-dismiss, debounced search, polling, session timeouts, retry backoff. All of these are normally verified by sleeping, which is slow and flaky in equal measure. A timing assertion is a statement about the machine, so it passes on your laptop and fails in CI.

Freeze, advance by exactly the interval, assert the consequence. Same result on a fast laptop and a loaded runner. Always reset when you finish, or a frozen clock silently breaks everything that runs after you.

Show full SKILL.md (165 more words)Show less

What to assert

The recovery, not the absence of a crash:

  1. The error is shown to the user: a specific element, not just "the page did not blank".
  2. The app stayed usable: retry works, the form still has its input, navigation is not stuck.
  3. State is honest: reticle_look { action: "state" } shows the failure, not a half-applied optimistic update. A UI that rolled back visually while the store kept the optimistic value is the classic bug here, and only the store read finds it.
  4. No uncaught error in the console.

Honesty

Mocking changes the app's world, so a verdict taken under a mock is a statement about the mocked condition and nothing else. Say which mock was active when you report a pass, and clear every mock and reset the clock before handing back. An audit that leaves a 500 pinned on /api/deploys breaks the next person's session and looks like a real outage.


Capability reference: curl https://docs.reticle.sh/capabilities.md. Everything else: curl https://docs.reticle.sh/llms.txt.

© 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

Files

Just SKILL.md in skills/test-error-states of reticlehq/reticle.

Open the folder on GitHubat commit 178e5c0

Compare with similar skills

Test Error States 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.

Test Error States compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Test Error States this skillreticlehq/reticle1.2k—~1.2kAutomated safety check: PassApache-2.0
Robius State Managementsickn33/agentic-awesome-skills47k2 repos~3.3kAutomated safety check: PassMIT
State Managementcompozy/compozy2.8k—~2.5kAutomated safety check: PassMIT
You Might Not Need Statesimstudioai/sim30k—~672Automated safety check: PassApache-2.0
Agent ReachPanniantong/Agent-Reach94k—~1.4kAutomated safety check: PassMIT
Sync State Invariantsopenchamber/openchamber11k—~2.7kAutomated safety check: PassMIT

Similar skills

  • Robius State Management

    sickn33/agentic-awesome-skills

    CRITICAL: Use for Robius state management patterns. An agent skill from sickn33/agentic-awesome-skills.

    47k GitHub starsUsed in 2 repos~3.3k tokens
    Frontend & DesignAuto-check passed
  • State Management

    compozy/compozy

    Model, review, and refactor application state so source state stays minimal, derived state is computed instead of synchronized, impossible states are not representable, and each piece of state lives…

    2.8k GitHub stars~2.5k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Analyze and fix unnecessary useState, derived state, and server-state-in-local-state anti-patterns

    30k GitHub stars~672 tokensUpdated today
    Frontend & DesignAuto-check passed
  • Agent Reach

    Panniantong/Agent-Reach

    Routes web research and platform lookups across 16 sites, including Twitter, Reddit, YouTube, Bilibili, Xiaohongshu and GitHub, through one command-line tool.

    94k GitHub stars~1.4k tokensUpdated yesterday
    Productivity & AutomationAuto-check passed
  • Sync State Invariants

    openchamber/openchamber

    A skill your agent uses when changing session synchronization, bootstrap or reconnect state, event reducers, polling, optimistic updates, message queues, live activity, ordering/reconciliation…

    11k GitHub stars~2.7k tokensUpdated today
    Business, Finance & HRAuto-check passed
  • Happy Scribe Automation

    ComposioHQ/awesome-claude-skills

    Automate Happy Scribe tasks via Rube MCP (Composio). An agent skill from ComposioHQ/awesome-claude-skills.

    77k GitHub starsUsed in 3 repos~749 tokens
    Productivity & AutomationAuto-check passed

More from reticlehq/reticle

All 19 skills in this repo
  • Agentic TDD

    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.

    1.2k GitHub stars~1.2k tokensUpdated today
    Auto-check passed
  • Whole-App Health Sweep

    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.

    1.2k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Broken UI Debugger

    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.

    1.2k GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • 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.

    1.2k GitHub stars~1.3k tokensUpdated today
    Auto-check passed
  • 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.

    1.2k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Fix What I Pointed At

    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.

    1.2k GitHub stars~878 tokensUpdated today
    Auto-check passed

Questions about Test Error States

What does Test Error States do?

Force the states a happy-path run never reaches (a failing API, an empty list, a slow request, a timeout, an expired session, a toast that auto-dismisses) and check the UI actually handles them. Test Error States is an agent skill from reticlehq/reticle. Force the states a happy-path run never reaches (a failing API, an empty list, a slow request, a timeout, an expired session, a toast that auto-dismisses) and check the UI actually handles them.

When should I use Test Error States?

Test Error States fits situations like: error handling was written but never run; empty state needs verifying; A bug only happens on a slow connection; retry needs testing without sleeping.

How do I install Test Error States in Claude Code?

Run `npx skills add reticlehq/reticle --skill test-error-states -a claude-code`. Or copy the skill folder (skills/test-error-states in reticlehq/reticle) into .claude/skills/test-error-states in your project. Claude Code loads it when a task matches its description.

How do I install Test Error States in Codex?

Run `npx skills add reticlehq/reticle --skill test-error-states -a codex`. Or copy the skill folder (skills/test-error-states in reticlehq/reticle) into .agents/skills/test-error-states in your project. Codex loads it when a task matches its description.

Can I use Test Error States in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add reticlehq/reticle --skill test-error-states -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/test-error-states, .gemini/skills/test-error-states, .github/skills/test-error-states and .opencode/skills/test-error-states in your project.

What does Test Error States need to run?

Going by SKILL.md and its folder, Test Error States needs the command-line tools its instructions call (npx and curl). Our summary lists: Node.js.

Does Test Error States access the network?

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.

Is Test Error States safe to install?

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.

What licence does Test Error States use?

Test Error States 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.

How many tokens does Test Error States use?

About 1.2k tokens (SKILL.md is roughly 4.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Test Error States?

Skills that share tags, products or a category with Test Error States: Robius State Management (sickn33/agentic-awesome-skills, 47k stars), State Management (compozy/compozy, 2.8k stars), You Might Not Need State (simstudioai/sim, 30k stars) and Agent Reach (Panniantong/Agent-Reach, 94k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Test Error States?

reticlehq (a GitHub organization) maintains it in reticlehq/reticle, which has 1,197 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.