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.
/plugin marketplace add fledgeling-co/fledgeling-plugins/plugin install test-campaignWrote 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.
[](https://agentmods.dev/skills/fledgeling-co/fledgeling-plugins/test-campaign)<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.
<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>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.
| Model | Per session | Once 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 |
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.
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.
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.
What ships with it
34 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- assets/capture-pairs.template.mjs 9.5 KB runs code
- assets/flow-plan.template.json 4.5 KB
- assets/judge-contract.md 6.1 KB
- assets/surface-map.template.mjs 4.9 KB runs code
- gemini.md 28 KB
- references/campaign-estimates.md 6.1 KB
- references/campaign-prohibitions.md 8.1 KB
- references/capture-lineage.md 14 KB
- references/coverage-model.md 19 KB
- references/detector-defects.md 15 KB
- references/differential.md 11 KB
- references/effect-boundary.md 14 KB
- references/evidence-and-ids.md 8.7 KB
- references/evidence.md 24 KB
- references/flow-coverage-axes.md 9.8 KB
- references/harness-lanes.md 16 KB
- references/inert-ui.md 11 KB
- references/instrument-calibration.md 9.4 KB
- references/journeys.md 17 KB
- references/on-glass.md 13 KB
- references/oracle-construction.md 5.7 KB
- references/progress-reporting.md 7.8 KB
- references/project-comprehension.md 9.9 KB
- references/selection.md 9.6 KB
- references/sweeps.md 35 KB
- references/task-bound-flows.md 10 KB
- scripts/attach-shots.py 9.7 KB runs code
- scripts/campaign.py 160 KB runs code
- scripts/capture-lineage.py 31 KB runs code
- scripts/evidence-page.py 32 KB runs code
- scripts/geometry-gate.py 8.2 KB runs code
- scripts/strict-check.py 6.8 KB runs code
- scripts/vacuity-check.py 62 KB runs code
- scripts/witness-worklist.py 6.7 KB runs code
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.
- 5d ago Changed 387868c239f6
- 6d ago Changed · +304 lines 36becfe072c8
- 8d ago First seen · 1,083 lines · 526 tokens per session scan A 7318d0799320
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.
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.
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.
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…
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.
test-loop
Plan, generate, and heal an executable E2E test suite from approved acceptance criteria (web and mobile).
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…