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 maksimzayats/specx --skill specx-testsgit clone --depth 1 https://github.com/maksimzayats/specxWrote 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/maksimzayats/specx/specx-tests)<a href="https://agentmods.dev/skills/maksimzayats/specx/specx-tests"><img src="https://agentmods.dev/badge/skills/maksimzayats/specx/specx-tests/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/maksimzayats/specx/specx-tests"><img src="https://agentmods.dev/badge/skills/maksimzayats/specx/specx-tests.svg" alt="Reviewed on agentmods" width="80" height="20"></a>- NVIDIA SkillSpector pass
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.00058 | $0.01621 |
| Opus 5 | $0.00029 | $0.00811 |
| Sonnet 5 | $0.00012 | $0.00324 |
| Haiku 4.5 | $0.00006 | $0.00162 |
Grade A, and why
specx-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 9d 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 — 132 lines — stays where its author put it; the contents beside it link to each section on GitHub.
specx Tests
Use this skill when behavior, wiring, or architecture boundaries need tests.
Read references/testing.md before creating test files.
Test Layers
tests/_support/: generic clients, DB helpers, and shared integration helpers only. This is not a test suite and does not hold project-specific doubles.tests/unit/: core services, use cases, and capabilities resolved from a fresh application container returned by the project'sget_container().tests/integration/: real internal graph tests. Core use-case integration tests call resolved use cases against the transactional DB; delivery integration tests exercise HTTP mapping; migrations prove Alembic behavior.tests/e2e/: optional whole-app smoke flows.tests/guardrails/: optional programmaticspecx.testing.architecture.assert_specx_architecturewrappers for genuinely project-specific extra rules. Standard packaged rules run throughuv run specx check.
Rules
- Test behavior and boundaries, not implementation ceremony.
- Required generated coverage is currently scoped to core services, use cases, and capabilities.
- Mirror source module paths directly with flat test files, for example
tests/unit/core/tasks/services/test_title_service.py. - Do not create per-target test folders,
harness.py, target factories, or target harnesses. tests/unit/conftest.pyowns the fresh real-appContainerfixture for unit tests and any project-wide test overrides.tests/integration/conftest.pyowns the transactional DB-backedcontainerfixture for integration tests.- Test functions receive
container, register any scenario-specific overrides before resolution, then callcontainer.resolve(Target). - If a complete replacement is needed by every test in one module, a
module-local
containerfixture may register it before returning the container. - Keep one-off class-based test doubles in the
test_*.pymodule that uses them. When the same double is reused by multiple unit modules, put it in a mirroredtests/unit/core/<scope>/{capabilities,gateways,repositories}/fake_<source_module>.pyfile. - Do not create
tests/_support/fakes,tests/**/_fakes.py, generic_scenarios.py, fake modules outside those mirrored unit port/capability packages, or double classes inconftest.py. - Use
MagicMockorAsyncMockinline in the test function when only one behavior needs to be changed for that scenario. Prefer autospeccing when call signatures matter andspec_setwhen unexpected attributes must fail. - Unit tests replace external IO, time, randomness, network, Redis, database, and framework resources with local doubles or inline mocks.
- Integration tests use the real internal app graph. Do not mock internal use cases, services, or capabilities; stub only external systems when needed.
- Add core use-case integration tests under
tests/integration/core/...for use cases that inject a UoW manager; delivery tests should own HTTP mapping, not be the only persistence proof. - Persistence integration tests use the production database family when dialect behavior matters. A rollback harness may not replace isolated commit-visible tests for locking, concurrency, isolation, or after-commit behavior.
- Core health tests cover required-dependency readiness and any reusable probe
services and use cases.
Delivery probe tests cover
/healthzand/readyzas operational endpoints, not versioned business API routes./healthzmust prove a lightweight process response only;/readyzmust prove required infrastructure readiness, including a real bounded DB check for SQLAlchemy services. - Probe route tests assert
Cache-Control: no-store, readiness failure returns503, probe routes are excluded from OpenAPI, and legacy/api/v1/healthis absent when replacing old generated health endpoints. - Unit-test logging configurators by overriding logging settings,
monkeypatching
logging.config.dictConfig, and asserting the generated stdlib config. Usecaplogonly when a log record is meaningful behavior. - Unit-test FastAPI lifecycle managers by overriding closeable infrastructure resources and asserting shutdown order. Route integration helpers must run ASGI lifespan explicitly.
- Use
httpx2, not legacyhttpx, for generated HTTP client and ASGI transport tests. EnterLifespanManager, then pass the yielded manager'smanager.apptoASGITransportso request scopes receive lifespan state. - FastAPI route tests compare response status codes with
fastapi.statusconstants, not raw integer literals. - Use
container.resolve(...)for normal synchronous graph construction, even when the resolved use case has an asyncexecute(...); useawait container.aresolve(...)only when DI construction itself has async providers. - Mock fixtures should register one external collaborator for the behavior under test. Do not bundle unrelated mocks in a dict or class-keyed fixture.
- Use native pytest fixtures for test dependencies. Do not enable
diwire.integrations.pytest_plugin, and do not useInjected[...]parameters in tests. - AnyIO runs tests on every installed supported backend by default. If the app
graph is asyncio-specific, override the top-level
anyio_backendfixture to return"asyncio"; leave it unpinned only when the suite intentionally supports every installed backend. - Do not add filler smoke tests that only assert
container.resolve(...)returns an instance. - Do not hand-build application graphs in test bodies. Resolve project classes from the container; local test doubles may be instantiated in the test module before registration.
- Keep unit tests free from FastAPI request objects and real external IO.
- Every test directory must include an empty
__init__.pyfile. - Use
uv run specx checkas the default guardrail mechanism for specx boundaries such as docstrings, use-case inputs, UoW injection, route paths, direct persistence dependency rejection in use cases, container imports, andAGENTS.mdcommand coverage. - Disable built-in guardrails only with exact semantic IDs under
[tool.specx].ignoreand a project reason recorded beside the configuration. - Generated projects use
[tool.specx].select = ["ALL"]. Narrower projects enable technology-specific families explicitly with[tool.specx].extend-select; FastAPI projects selectfastapi. - Add
extra_rulesonly for project-specific checks that are not covered by a built-inSpecxRuleId; use the programmatic wrapper for those projects. - Existing workflows and projects with custom rules may use
references/render_architecture_guardrails.pyto render the tiny wrapper.
What ships with it
3 files 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.
- 9d ago First seen · 132 lines · 58 tokens per session scan A 1d83c4db3a3c
specx-tests is a skill published in the GitHub repository maksimzayats/specx (201 stars, last pushed 1mo ago), licensed MIT. It adds 58 tokens to every session and 1,621 once invoked, about $0.0003 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
gsd-add-tests
Generate tests for a completed phase based on UAT criteria and implementation.
testing-python
Stratégie de Tests Python 3.14+. Use when writing tests, reviewing test coverage, or setting up testing.
testing-symfony
Stratégie de Tests Symfony 8.1 / PHP 8.5. Use when writing tests, reviewing test coverage, or setting up testing.
testing-reactnative
Testing React Native 0.85+. Use when writing tests, reviewing test coverage, or setting up testing.
three-tier-testing
Use when setting up test infrastructure, adding tests, reorganizing test directories, or reviewing test structure. Triggers include creating test files, discussing test strategy, separating unit from integration tests, or when tests need external services like databases or Docker.
principle-testing
Testing strategy and architecture — test pyramid (unit / integration / e2e), test doubles taxonomy (stub / mock / spy / fake), coverage-vs-confidence, mutation testing, flaky-test triage, contract testing, fixtures and test data builders. Distinct from principle-tdd which covers the red-green-refactor micro-cycle.…