test-campaign

test-campaign is a skill for Claude Code from fledgeling-co/fledgeling-plugins. It costs 526 tokens per session (20,233 once invoked), scanned A, original, MIT.

A structured UI testing process that checks an application across its screens, states, sizes and user flows, then leaves a browsable evidence page with screenshots, coverage and defects.

In plain words
What is it for?
Use it to plan and run end-to-end tests, document requirements and user journeys, compare the interface with its intended design, and record defects with stable references.
Why use it?
It prevents a small set of passing checks from being mistaken for full product coverage. It also shows exactly what was tested and what remains untested.

Skill for Claude Code

Written for Claude Code: ${CLAUDE_PLUGIN_ROOT} variable. Also seen: mentions CLAUDE.md; mentions subagents; mentions Gemini CLI.

Runs only inside its plugin — its command needs a path that Claude Code sets for a plugin’s own hooks and for nothing else. Install the plugin, not this.

Part of the test-campaign plugin — 1 skill shipped together

Good fit Use it to plan and run end-to-end tests, document requirements and user journeys, compare the interface with its intended design, and record defects with stable references.

Compare 6 skills from other repositories ↓
Install

Getting it into your agent

This one installs as part of its plugin. Adding the marketplace and installing the plugin brings it with everything else the plugin ships.

Claude Code
/plugin marketplace add fledgeling-co/fledgeling-plugins
Claude Code
/plugin install test-campaign

Made for: Claude Code.

Or install test-campaign, the plugin that ships this one along with the rest of its 1 skill.

Wrote this? Show the measurements

A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.

agentmods badge for test-campaign

README.md
[![agentmods](https://agentmods.dev/badge/skills/fledgeling-co/fledgeling-plugins/test-campaign/github.svg)](https://agentmods.dev/skills/fledgeling-co/fledgeling-plugins/test-campaign)
Your own site
<a href="https://agentmods.dev/skills/fledgeling-co/fledgeling-plugins/test-campaign"><img src="https://agentmods.dev/badge/skills/fledgeling-co/fledgeling-plugins/test-campaign/github.svg" alt="Measured on agentmods" height="20"></a>

Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.

agentmods 80×15 button for test-campaign

Your own site · 80×15
<a href="https://agentmods.dev/skills/fledgeling-co/fledgeling-plugins/test-campaign"><img src="https://agentmods.dev/badge/skills/fledgeling-co/fledgeling-plugins/test-campaign.svg" alt="Reviewed on agentmods" width="80" height="20"></a>
Per session 526 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 20,233 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. A grade says what 26 rules found in the file — not that it is safe.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5.1 $0.00526 $0.20233
Opus 5 $0.00263 $0.10117
Sonnet 5 $0.00105 $0.04047
Haiku 4.5 $0.00053 $0.02023

Measured 5d ago against content hash 387868c239f6, method: parsed. Prices are Anthropic first-party input rates as of 2026-09-12, from the pricing page.

Security

Grade A, and why

test-campaign scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.

The scan reads SKILL.md. This mod also ships 10 executable files (assets/capture-pairs.template.mjs, assets/surface-map.template.mjs, scripts/attach-shots.py, …), listed below but not scanned — reading those needs a real analyzer, not pattern matching.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

plugins/test-campaign/skills/test-campaign/SKILL.md · 1,387 lines

How it starts

The opening of the file, as written. The whole thing — 1,387 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Test campaign

You are running a test campaign, and leaving behind something a person can read.

Six failure modes shape everything below, and every one of them produces a report that looks finished:

Covering a subset and reporting it as the whole. One console had six screens, five of which received none of the sweeps, and nothing said so — because the surface list came from a contract that deduped six screens onto one route. A denominator would have shown 1/6 on sight.

Proving a surface rendered and calling it proof the product works. A suite of 524 assertions across 13 tenants never opened a route other than /, a viewport under 1280px, or a build other than the reference one. It stayed green for months while every generated tenant shipped with no header, no navigation and no footer.

Testing the parts on paper and reporting it as the product on glass. A campaign reported 100% checked, 22 armed cases and 59 passing tests across a macOS app and a Windows app. No GUI process had ever attached to a window server: the Swift half initialised view structs in memory, the Windows half had never been compiled, and the screenshots came from an HTML mock in a browser. Every number in it was true. references/on-glass.md.

Publishing a picture of one thing under the name of another. A campaign published 20 surface captures and cleared every gate it had — every case accounted for, 46 of 49 checked, every -glass lane proved and witnessed. The captures were of three unrelated documents: a status report, the mock browser's own index, and a design accessibility doc. Twenty files held six distinct images. A flow step captioned "Open pairing QR code sheet" showed a questionnaire about Apple developer credentials. Nothing was broken: the only thing binding a picture to a surface was its filename, and the gated part of the campaign was sound while the ungated part was the part people look at. references/capture-lineage.md.

Verifying a guarantee over a capability that never runs. A campaign closed 230 cases across a CI runner with zero-trust network isolation, armed 220 of them, and recorded "runner communication is outbound pull only over HTTPS/WSS on TCP 443" as observed. The product has no HTTP client in its dependency tree. No line of production code spawns a subprocess, pfctl and nft are never executed, and the daemon only ever binds loopback — so the isolation engines are rule generators, and every guarantee about what crosses the boundary is true because nothing crosses it. Arming mutates the system and finds what the suite does not cover; a guarantee holding because its subject never runs is only visible by mutating the specification, which no phase was doing. references/effect-boundary.md.

Proving an application renders while every control in it is inert. A campaign reported 32 of 32 cases passing and armed, 19 of 19 requirements cited, 8 of 8 surfaces covered and 8 of 8 external effects witnessed, over an application whose six sidebar destinations opened one placeholder view and whose every button ran an empty closure. The owner found all three defects in nine minutes. Nothing in the campaign was false: the surface census counted the shell as one surface and never enumerated its six destinations, no case actuated a control and read a state outside it, and the one instrument that dissented — strict-check.py, at 22 of 32 with "10 only proves something rendered" — was printed under a green verdict. references/inert-ui.md.

All six are defended mechanically here, because prose does not defend against them.


Running as a Gemini model? Read gemini.md in this directory first, then follow this file with the overrides it names. It extends the campaign's count contract to the cells campaign.py check now prints — States, Comparisons, Routed, Write targets, Phases, Remaining — requires every number in the delivery note to be pasted output from campaign.py check, next, strict-check.py, capture-lineage.py or witness-worklist.py rather than a claim about them, reads every stated maximum (provenance.scriptCalls = 0, missing may not rise, a judged edge no smaller than the capture's) back off the artifact, names the two phases whose work a Gemini run should hand to another model, and carries the one family-specific rule the week's sessions measured: a turn in flight prints check --line. Other models skip it.

Read the full file on GitHub · 1,387 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. 5d ago Changed 387868c239f6
  2. 6d ago Changed · +304 lines 36becfe072c8
  3. 8d ago First seen · 1,083 lines · 526 tokens per session scan A 7318d0799320

Subscribe to this mod's changes

test-campaign is a skill published in the GitHub repository fledgeling-co/fledgeling-plugins (2 stars, last pushed 3d ago), licensed MIT. It adds 526 tokens to every session and 20,233 once invoked, about $0.0026 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-09-04.

Related

Other skills, from other repositories

dogfood

Systematically explore and test a mobile app on iOS/Android with agent-device to find bugs, UX issues, and other problems. Use when asked to dogfood, QA, exploratory test, find issues, bug hunt, or test this app on mobile.

callstack/agent-device · 55 tokens

test-warp-ui

Guides testing Warp UI features and changes using the computer use tool. Use this skill only when computer-use testing was requested (explicit request or accepted offer) and the computeruse tool is available to the agent. Covers launching Warp and verifying UI behavior.

warpdotdev/warp · 55 tokens

test-electron-app

Drive the real running PostHog Electron app (live tRPC, workspace-server, real data) over CDP with agent-browser. Connect to the running app on port 9222, test desktop changes against a local Django stack, snapshot the accessibility tree, inspect network requests, and screenshot only when explicitly asked. Use when…

PostHog/posthog-foss · 112 tokens

pyats-dynamic-test

Generate and execute deterministic pyATS aetest validation scripts - interface state, OSPF neighbors, BGP paths, ping matrices, and custom compliance tests. Use when writing a network test, validating post-change state, running pass/fail checks, or building automated regression tests.

automateyournetwork/netclaw · 61 tokens

test-loop

Plan, generate, and heal an executable E2E test suite from approved acceptance criteria (web and mobile).

HoangNguyen0403/agent-skills-standard · 25 tokens

playwright-cli

Automates browser interactions for testing and validating your own web applications using playwright-cli. Use when you need terminal-first browser control for navigation, form filling, screenshots, tracing, bound browser sessions, debugging, or generating Playwright test code. Only use against applications you own or…

testdino-hq/playwright-skill · 64 tokens