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/nullhack/temple8/author-test-stubsnpx skills add nullhack/temple8 --skill author-test-stubsgit clone --depth 1 https://github.com/nullhack/temple8What 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.00030 | $0.00675 |
| Opus 5 | $0.00015 | $0.00338 |
| Sonnet 5 | $0.00006 | $0.00135 |
| Haiku 4.5 | $0.00003 | $0.00068 |
Grade A, and why
author-test-stubs 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 2d 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.
What it actually says
Author Test Stubs
- Load [[software-craft/test-stubs]], [[software-craft/test-design]] — stub conventions and what-to-test patterns.
- Read
.cache/<session_id>/journal.md(always present — bootstrapped at plan entry bymodel-data-schema) and.cache/<session_id>/interview-notes.md. Two rework trigger sources feed the backlog: (a) IF the journal carries escalation findings from build (contract gaps) THEN rework the contracts it names first; (b) IF the interview notes flag findings that MODIFY an existing block (rework — modifies existing <block>frominterview-building-blocks) THEN rework those contracts'.pyisignatures to match the changed requirement. Either source marks the affected contracts as rework;write-test-pyre-applies the@pytest.mark.pendingmarker to the affected tests soselect-build-targetpulls them from the backlog. A finding with no rework flag is new work — author a fresh stub. - Author integration and E2E test stubs only — no unit-test stubs. Author in build layer order so external-boundary contracts precede adapter, then internal-data, then internal contracts.
- Express the requirement in class and method signatures with type annotations: entity relationships, compositions, and the behaviour each test asserts. External-layer stubs assert against the captured cassettes — real shapes, not guesses.
- External-boundary replay rule. An HTTP (httpx) adapter test MUST use
with vcr.use_cassette(cassette_path(NAME)):as a context manager around the adapter call — in-process replay against the captured exchange per [[software-craft/external-fixtures]].pytesteris reserved for CLI subprocess tests ONLY; never use it for vcrpy cassette replay (it spawns a child pytest process, breaks collection, and hides the cassette contract from the type surface). Exception: a library-boundary adapter vcrpy cannot intercept (e.g. ddgs/primp) usesmonkeypatchon the adapter's transport, notpytester. The wrong-vs-right pattern and the kind-dispatch table are in [[software-craft/external-fixtures]]. - Make each stub a COMPLETE module surface: declare every module-level name the .py will expose (constants, fixtures, helper functions) plus the test class and its method signatures. The test .pyi must mirror the .py's full module surface per [[software-craft/test-stubs]].
- Import stdlib typing only. IF a third-party library is referenced THEN do not import it in the stub — third-party imports trip mypy import-untyped, and stubtest does not require them.
- Run ruff on the authored .pyi (
ruff check); the PYI rules lint stubs. Fix every violation. - IF authoring surfaces an important new domain concept THEN add it to the glossary.
- IF reworking an existing contract THEN change signatures here first; the body is re-marked at write-test-py.
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.
- 2d ago First seen · 18 lines · 30 tokens per session scan A 9f8241f74ad2
author-test-stubs is a skill published in the GitHub repository nullhack/temple8 (11 stars, last pushed 28d ago), licensed MIT. It adds 30 tokens to every session and 675 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
test-generator
Generate pytest test cases for Python functions and classes.
python-binance
Help developers use the python-binance library for trading on Binance. Use when code imports binance, references Client/AsyncClient, or asks about Binance API trading, market data, websockets, or account management.
exasol-udfs
Exasol User-Defined Functions (UDFs) and Scripts: CREATE SCRIPT syntax, language options, SQL-to-language data type mappings, ExaIterator API, BucketFS access, and Script Language Containers.
uv-workflow
Use when a coding agent needs to run Python code, modules, one-liners, tools, tests, or standalone scripts through uv, or create and maintain PEP 723 scripts with uv init/add/remove --script. Avoid direct python/python3 shell entrypoints.
pytest-testing
Write maintainable pytest suites — fixtures and scopes, parametrize, tmppath, monkeypatch, coverage, and a CI-friendly layout.
uv-mcp
Manage Python projects and environments with uv (Rust-based pip/poetry/pyenv replacement). Use in Python projects (pyproject.toml, uv.lock, or .py files) when dependency management, virtual environments, package installation, script execution, or Python version management is needed. Prefers the uv-mcp tools (run…