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 nullhack/temple8 --skill author-test-stubsgit clone --depth 1 https://github.com/nullhack/temple8Wrote 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/nullhack/temple8/author-test-stubs)<a href="https://agentmods.dev/skills/nullhack/temple8/author-test-stubs"><img src="https://agentmods.dev/badge/skills/nullhack/temple8/author-test-stubs/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/nullhack/temple8/author-test-stubs"><img src="https://agentmods.dev/badge/skills/nullhack/temple8/author-test-stubs.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.00030 | $0.00675 |
| Opus 5.5 | $0.00012 | $0.00270 |
| Sonnet 5.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 1mo 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.
- 1mo 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 29d ago), licensed MIT. It adds 30 tokens to every session and 675 once invoked, about $0.0001 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-08-30.
Other skills, from other repositories
python-fastapi-test-conventions
This skill should be used when writing unit tests, integration tests, creating test factories, mocking dependencies, or reviewing test coverage. Covers test pyramid, conventions, factories, and per-layer rules.
unit-test
Testing patterns for the Python/FastAPI + React/TypeScript stack. Covers pytest configuration, conftest fixtures, database safety guards, external API mocking, async tests, Celery eager mode, and Vitest for frontend.
mem0-test-integration
Verify a Mem0 integration produced by /mem0-integrate. Runs in the same workspace on the same branch (loose coupling) — installs dependencies, runs the repo's native test suite, then exercises a real end-to-end smoke flow against the user's API key. Produces a scorecard. TRIGGER when: user has just run /mem0-integrate…
typescript-sdk
Implement or modify TypeScript SDK behavior in @composio/core or shared TypeScript packages, including tools, toolkits, sessions, auth configs, connected accounts, modifiers, and generated SDK surfaces. Use for TS runtime/API work; pair with typescript-testing for verification and cross-sdk-parity when Python must…
python-sdk
Implement or modify Python SDK behavior under python/composio, including tools, toolkits, sessions, auth configs, connected accounts, client integration, and shared Python models. Use for Python core runtime/API work; pair with python-testing and cross-sdk-parity when TypeScript must match.
test-generator
Generate pytest test cases for Python functions and classes.