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.20300 |
| Opus 5.5 | $0.00210 | $0.08120 |
| Sonnet 5.5 | $0.00105 | $0.04060 |
| Haiku 4.5 | $0.00053 | $0.02030 |
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 28d 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,395 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 10.0 KB runs code
- scripts/campaign.py 162 KB runs code
- scripts/capture-lineage.py 32 KB runs code
- scripts/evidence-page.py 33 KB runs code
- scripts/geometry-gate.py 8.2 KB runs code
- scripts/strict-check.py 6.9 KB runs code
- scripts/vacuity-check.py 65 KB runs code
- scripts/witness-worklist.py 8.2 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.
- 28d ago Changed · +8 lines f97659300834
- 2mo ago Changed 387868c239f6
- 2mo ago Changed · +304 lines 36becfe072c8
- 2mo 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 today), licensed MIT. It adds 526 tokens to every session and 20,300 once invoked, about $0.0021 per session on Opus 5.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.
test-campaign compared with skills from other repositories
| Mod | Type | Stars | Last push | Licence | Scan | Tokens | Works with |
|---|---|---|---|---|---|---|---|
| test-campaignfledgeling-co/fledgeling-plugins | Skill | 2 | today | MIT | A | 526 | Claude Code |
| create-verification-skillYeachan-Heo/oh-my-claudecode | Skill | 41k | yesterday | MIT | A | 45 | Claude Code |
| verify-omnigentomnigent-ai/omnigent | Skill | 11k | yesterday | Apache-2.0 | A | 100 | Claude Code, Codex |
| test-masterJeffallan/claude-skills | Skill | 12k | 10d ago | MIT | A | 104 | Claude Code |
| eval-dataset-designbojieli/ai-agent-book | Skill | 58k | 1mo ago | Apache-2.0 | A | 138 | Claude Code, Codex |
| dogfoodcallstack/agent-device | Skill | 5.3k | yesterday | MIT | A | 55 | Claude Code |
| cua-driverdavidondrej/skills | Skill | 4.3k | yesterday | MIT | A | 68 | Claude Code, Codex |