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/adambien/airails/zunitnpx skills add AdamBien/airails --skill zunitgit clone --depth 1 https://github.com/AdamBien/airailsWrote 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/adambien/airails/zunit)<a href="https://agentmods.dev/skills/adambien/airails/zunit"><img src="https://agentmods.dev/badge/skills/adambien/airails/zunit.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.00111 | $0.01177 |
| Opus 5 | $0.00056 | $0.00589 |
| Sonnet 5 | $0.00022 | $0.00235 |
| Haiku 4.5 | $0.00011 | $0.00118 |
Grade A, and why
zunit 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 — 141 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Generate and run zunit tests for a java-cli-app project using $ARGUMENTS. Apply all rules below strictly.
What is zunit
zunit is a zero-dependency test runner. It discovers *Test.java source files and runs each directly via java --source 25. No compilation step, no JUnit, no framework.
Test Convention
- Test files: name ends with
Test.java, placed intest/directory - Each test file is a self-contained Java source script with
void main() - Tests run via
java --source 25 --class-path <classpath> - Failure: any thrown exception or non-zero exit = failed
- Success: clean exit with code 0
- All test files run concurrently in separate JVMs
Test File Structure
Every test file follows this pattern:
void main() {
// arrange
var input = ...;
// act
var result = SomeClass.someMethod(input);
// assert
assert expected.equals(result) : "expected %s but got %s".formatted(expected, result);
}
Assertion Style
- No assertion libraries — use the built-in
assertstatement; zunit runs every test with-ea - Always attach a descriptive message including expected and actual values:
assert condition : message - One test file can contain multiple assertions — the first failure stops the file
- For testing exceptions, use try/catch and throw
AssertionErrorexplicitly:
void main() {
try {
SomeClass.methodThatShouldFail(badInput);
throw new AssertionError("expected exception was not thrown");
} catch (IllegalArgumentException expected) {
// success
}
}
Caveat: assert only executes with assertions enabled. Running a test file directly requires the flag: java -ea FooTest.java.
Test Discovery for java-cli-app Projects
Directory Layout
project-root/
├── src/main/java/ # main source (compiled by zb)
├── test/ # zunit test sources
│ ├── SomethingTest.java
│ └── AnotherTest.java
├── zbo/app.jar # zb output (auto-detected as classpath)
└── .zb # zb config
What ships with it
1 file 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.
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 First seen · 141 lines · 111 tokens per session scan A 7814070297b8
zunit is a skill published in the GitHub repository AdamBien/airails (48 stars, last pushed 15d ago), licensed MIT. It adds 111 tokens to every session and 1,177 once invoked, about $0.0006 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
java-junit
Get best practices for JUnit 5 unit testing, including data-driven tests.
zephyr-testing
Comprehensive guidance for unit testing and integration testing Zephyr RTOS applications. Use this skill when you need to: (1) Create test suites using the Ztest framework, (2) Write test cases with fixtures, assertions, and expectations, (3) Configure testcase.yaml for Twister test runner, (4) Mock functions using…
java-coding-standards
Java coding standards for Spring Boot services: naming, immutability, Optional usage, streams, exceptions, generics, and project layout.
cmd_flutter_test
Run Flutter/Dart tests, report failures, and incrementally fix test issues. Covers unit, widget, golden, and integration tests.
cargo-test
Skill "cargo-test" from rootwarp/claude-code-plugins-monorepo, covering /cargo-test and instructions.
go-test
Skill "go-test" from rootwarp/claude-code-plugins-monorepo, covering /go-test and instructions.