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 skills add an8079/take-skills --skill property-based-testinggit clone --depth 1 https://github.com/an8079/take-skillsWrote 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/an8079/take-skills/property-based-testing)<a href="https://agentmods.dev/skills/an8079/take-skills/property-based-testing"><img src="https://agentmods.dev/badge/skills/an8079/take-skills/property-based-testing.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.1 | $0.00080 | $0.02596 |
| Opus 5 | $0.00040 | $0.01298 |
| Sonnet 5 | $0.00016 | $0.00519 |
| Haiku 4.5 | $0.00008 | $0.00260 |
Grade A, and why
property-based-testing 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 7d 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 — 371 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Property-Based Testing — Test Once, Verify Against Thousands
Core Concept
Instead of writing specific test cases, you write properties — statements about what your code MUST do for ALL inputs:
Unit test: "sort([3,1,2]) == [1,2,3]" → 1 case
Property: "sorted(xs) == sorted(sorted(xs))" → thousands of cases
The testing library generates random inputs, runs the property, and shrinks failures to minimal counterexamples.
The Three Phases of PBT
1. GENERATE → library produces random inputs from domain
2. RUN → property function evaluated for each input
3. SHRINK → on failure, reduce input to smallest counterexample
Shrinking — Why It Matters
Shrink failure: [3, 9, 7, 1, 8, 2, 5] → [] (empty list triggers the bug)
Shrinking transforms massive inputs into minimal, readable bugs.
When PBT Beats Unit Testing
| Scenario | Why PBT wins |
|---|---|
| Boundary conditions | Hard to enumerate: negatives, zero, max_int, Unicode |
| Commutativity/associativity | Test f(a,b) == f(b,a) for thousands of pairs |
| Round-trip serialization | Encode→Decode→Decode == Encode |
| Invariant preservation | "sorting never loses elements" |
| Protocol/state machines | Exhaustively explore state transitions |
| Async race conditions | Generate interleavings |
Language Tooling
| Language | Library | Best For |
|---|---|---|
| Haskell | QuickCheck | The original, pure FP |
| Python | Hypothesis | Django, Flask, data pipelines |
| JavaScript | Fast-Check | Node.js, TypeScript |
| Go | testing/quick | Standard library, simple cases |
| Rust | proptest | Rust idiomatic PBT |
| Java | JUnit-QuickFIX | Legacy Java systems |
Python + Hypothesis
Setup
pip install hypothesis pytest
Basic Pattern
from hypothesis import given, strategies as st, assume, settings
@given(st.lists(st.integers(min_value=1, max_value=1000), min_size=1))
def test_sort_preserves_elements(xs):
"""Sorting never loses or duplicates elements."""
sorted_xs = sorted(xs)
assert len(sorted_xs) == len(xs)
assert set(sorted_xs) == set(xs) # preservation
assert sorted_xs == sorted(sorted_xs) # idempotence
@given(st.lists(st.integers()), st.lists(st.integers()))
def test_merge_preserves_all(a, b):
"""Merging two lists preserves all elements."""
merged = sorted(a + b)
expected = sorted(sorted(a) + sorted(b))
assert merged == expected
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.
- 7d ago First seen · 371 lines · 80 tokens per session scan A 9abc85bef3b3
property-based-testing is a skill published in the GitHub repository an8079/take-skills (4 stars, last pushed 5mo ago), licensed MIT. It adds 80 tokens to every session and 2,596 once invoked, about $0.0004 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-31.
Other skills, from other repositories
research-engineer
An uncompromising Academic Research Engineer. Operates with absolute scientific rigor, objective criticism, and zero flair. Focuses on theoretical correctness, formal verification, and optimal implementation across any required technology.
tika-eval-compare
Compare extracts from two Tika builds over a corpus to detect regressions in content, encoding, exceptions, and embedded-document handling. Use for "compare before/after extracts", "eval this change against the corpus".
neuron-evaluation-engineer
Create and run AI evaluations with datasets, assertions, and output drivers in Neuron AI. Use this skill whenever the user mentions evaluation, testing AI systems, creating evaluators, dataset-driven testing, assertion-based validation, or wants to measure AI system performance. Also trigger for tasks involving…
jetson-validate-image
Use after jetson-flash-image to run static BSP checks, on-target smoke/regression tests on a flashed DUT, or both. Not for build or flash steps. Triggers: validate bsp, on-target validation.
atmos-validation
Validate Atmos projects, components, arbitrary JSON Schema inputs, EditorConfig, and GitHub Actions; use affected-file selection and native CI annotations.
skill-benchmark
Benchmark AI skill effectiveness by measuring implementation quality against legacy constraints.