Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/intentee/paddler/running-all-testsnpx skills add intentee/paddler --skill running-all-testsgit clone --depth 1 https://github.com/intentee/paddlerWrote 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/intentee/paddler/running-all-tests)<a href="https://agentmods.dev/skills/intentee/paddler/running-all-tests"><img src="https://agentmods.dev/badge/skills/intentee/paddler/running-all-tests.svg" alt="Measured on agentmods" 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 | $0.00047 | $0.00538 |
| Opus 5 | $0.00023 | $0.00269 |
| Sonnet 5 | $0.00009 | $0.00108 |
| Haiku 4.5 | $0.00005 | $0.00054 |
Grade A, and why
running-all-tests 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 4d 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 — 55 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Running all tests
Run every test suite in the workspace, picking the fastest compiled device backend for the host.
Step 1: detect the device
Run this once at the start and echo the chosen device:
if [[ "$OSTYPE" == "darwin"* ]]; then
DEVICE=metal
elif command -v nvidia-smi >/dev/null 2>&1 && nvidia-smi >/dev/null 2>&1; then
DEVICE=cuda
else
DEVICE=cpu
fi
echo "Device: $DEVICE"
$DEVICE selects the Rust integration suite variant in Step 2. The other four suites don't take a device feature.
Step 2: run the suites
Copy this checklist and tick each item as the suite completes:
- [ ] JS client
- [ ] Python client
- [ ] Rust unit
- [ ] Rust integration
| # | Suite | Inner command | Working dir |
|---|---|---|---|
| 1 | JS client | make test.client.js |
repo root |
| 2 | Python client | NixOS: poetry run pytest, ruff, poetry run mypy". Every other OS: poetry run pytest, poetry run ruff, poetry run mypy |
paddler_client_python/ |
| 3 | Rust unit | TEST_DEVICE=$DEVICE make test.unit |
repo root |
| 4 | Rust integration | TEST_DEVICE=$DEVICE make test.integration |
repo root |
Run them in this order. Cheap suites (1, 3, 4) surface bugs quickly; the heavy GPU-bound suites (2, 5) come last.
Step 3: rules during the run
- Serialize GPU suites. When
$DEVICEiscudaormetal, run test suites sequentially to avoid device contention. - Per-test 30 s budget. Flag any individual test that exceeds 30 s wall-clock. That is a real bug — production or test — not flakiness.
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.
- 4d ago First seen · 55 lines · 47 tokens per session scan A 1ab1a79ba969
running-all-tests is a skill published in the GitHub repository intentee/paddler (1,666 stars, last pushed 1mo ago), licensed Apache-2.0. It adds 47 tokens to every session and 538 once invoked, about $0.0002 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-08-30.
Other skills, from other repositories
promptfoo-redteam-setup
Create or refine promptfoo redteam setup configs: purpose, targets, plugins, strategies, frameworks, multi-input target inputs, policy text, grader guidance, contexts, and static-code-derived target/threat mapping. Use when preparing a red team scan plan from live probes, code evidence, or provider configs, or when…
redteam-plugin-development
Standards for creating redteam plugins and graders. Use when creating new plugins, writing graders, or modifying attack templates.
promptfoo-evals
Write, refine, run, and QA promptfoo evaluation suites: promptfooconfig.yaml, prompts, providers, vars, tests, assertions, model-graded rubrics, transforms, datasets, exports, and CI gates. Use for non-redteam eval coverage, regression tests, or new eval matrices. Do not use for adversarial redteam plugin or strategy…
promptfoo-provider-setup
Configure promptfoo providers or redteam targets for hosted models, live HTTP APIs, Python/JavaScript local scripts, agent SDKs, or multi-input systems. Use when connecting promptfoo to the system under test, mapping vars, auth env vars, request bodies, response transforms, or static-code-derived provider wrappers. Do…
promptfoo-redteam-run
Run, rerun, inspect, and QA promptfoo redteam scans from generated redteam YAML or an existing redteam setup config. Use when executing promptfoo redteam eval or promptfoo redteam run, exporting results, triaging attack success rate, grader failures, target errors, filter/rerun commands, reports, or CI gates. Do not…
search-params
URL search param and hash state management. Use when adding or modifying URL search params, working with useSearchParams, setSearchParams, useSearchParamState, or navigate() with query strings or hash fragments, or fixing browser back/forward button issues.