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 tahirraufkeeyu/software-development-agent-stack--sdas --skill test-writergit clone --depth 1 https://github.com/tahirraufkeeyu/software-development-agent-stack--sdasWrote 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/tahirraufkeeyu/software-development-agent-stack--sdas/test-writer)<a href="https://agentmods.dev/skills/tahirraufkeeyu/software-development-agent-stack--sdas/test-writer"><img src="https://agentmods.dev/badge/skills/tahirraufkeeyu/software-development-agent-stack--sdas/test-writer/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/tahirraufkeeyu/software-development-agent-stack--sdas/test-writer"><img src="https://agentmods.dev/badge/skills/tahirraufkeeyu/software-development-agent-stack--sdas/test-writer.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.00075 | $0.02233 |
| Opus 5 | $0.00037 | $0.01117 |
| Sonnet 5 | $0.00015 | $0.00447 |
| Haiku 4.5 | $0.00007 | $0.00223 |
Grade A, and why
test-writer 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 8d 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 — 180 lines — stays where its author put it; the contents beside it link to each section on GitHub.
When to use
- User points at a file, function, or class and asks for tests.
- A bug was just fixed and a regression test is needed.
- Coverage report flagged an untested branch and the user wants it filled.
- New function was added alongside a feature and the PR review asked for tests.
Do not use this skill to design a test strategy for an entire service (use a broader testing-strategy skill) or to write end-to-end browser tests (those require a separate harness skill).
Inputs
- Target under test: a file path, or a file path plus a list of function/class/method names.
- Optional: a specific bug description ("reproduce this failure mode first, then fix-verify") or a branch in the code that must be covered.
Outputs
- One or more test files placed where the repo's convention expects them.
- Every new test function follows Arrange-Act-Assert, names the behaviour, and is deterministic.
- A short summary listing each test added with the behaviour it pins down and the branch it covers.
Tool dependencies
- Read, Glob, Grep for inspecting the existing test suite.
- Edit / Write for creating or updating test files.
- Ability to run the project's test command (the user should run it — do not assume a sandbox).
Procedure
- Locate existing tests. Use Glob on common patterns:
**/*.test.ts,**/*.spec.ts,**/test_*.py,**/*_test.go,tests/**/*.rs,spec/**/*_spec.rb. Read 2-3 representative files. - Infer conventions and record them before writing:
- Framework (Jest, Vitest, Mocha, pytest, unittest, go test + testify, Rust
#[test], RSpec). - File location: sibling (
foo.ts->foo.test.ts) vs mirrored tree (src/foo.ts->tests/foo.test.ts). - Naming (
describe/itvstest(...)vsclass TestFoovsTestFoo_Bar). - Setup/teardown (
beforeEach,pytestfixtures,TestMain,TestFixture). - Assertion style (
expect().toEqual(),assert ==,require.Equal, etc.). - Test data: factories/builders vs inline literals vs JSON fixtures.
- Mocking library if any (
jest.mock,unittest.mock,gomock,mockito). - Coverage tool and thresholds if configured (
jest.config,pyproject.toml [tool.coverage],go test -cover).
- Framework (Jest, Vitest, Mocha, pytest, unittest, go test + testify, Rust
- Read the target code. List every observable behaviour: normal case, each error/return branch, boundary values (0, 1, max, empty,
None/null), and every external effect (DB write, event emit, HTTP call). - Design one test per behaviour, not one test per method. Name each test after the behaviour:
returns 404 when user is missing, nottest_get_user_3. - For each test apply the AAA template:
- Arrange: build inputs with the repo's factory/builder or inline; stub collaborators but never the unit under test.
- Act: one call to the unit under test.
- Assert: observable outcome — return value, thrown error, published event, DB state, rendered output. Avoid asserting on internal calls unless that is the contract.
- Make every test deterministic: fake the clock, seed the RNG, fix timezone to UTC, stub network with the repo's chosen library (
nock,responses,httptest,wiremock). Never let a test touch the real network or wall clock. - Cover the negative space: invalid input, expired token, empty collection, duplicate key, concurrent write (if applicable), cancellation. At minimum add one "sad path" test per public function.
- For a bugfix, write the failing test first. Confirm it reproduces the bug against the un-patched code (describe this in the summary, e.g. "this test fails at commit
abc123"). - Run the test command. If any test fails that is not an intended reproduction, fix the test — never relax an assertion to make it pass.
- Emit a summary: new test files, count of tests added, which branches are now covered. Link each test name to the behaviour it pins down.
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.
- 8d ago First seen · 180 lines · 75 tokens per session scan A aed280229626
test-writer is a skill published in the GitHub repository tahirraufkeeyu/software-development-agent-stack--sdas (18 stars, last pushed 4mo ago), licensed MIT. It adds 75 tokens to every session and 2,233 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-30.
Other skills, from other repositories
migrate-xunit-to-xunit-v3
Migrate .NET test projects from xUnit.net v2 to xunit.v3 and fix v3 breaks. Use for package/CPM conversion, OutputType=Exe, preserving the VSTest or MTP runner (including projects currently using YTest.MTP.XUnit2), incompatible TFMs, async void tests, string-to-Type attributes, custom Fact/Theory/BeforeAfterTest…
go-testing
Trigger: Go tests, go test coverage, Bubbletea teatest, golden files. Apply focused Go testing patterns.
nw-fp-clojure
Clojure language-specific patterns, data-first modeling, REPL-driven development, and spec.
mobiai-ios-testing
Use when writing or running tests in an iOS project — unit tests, UI tests, snapshot tests, choosing the right framework.
restore-internals-seams-in-finally-blocks-after-each-test
When delegating a task affected by this skill, include.
testing-llm
LLM and AI testing patterns — mock responses, evaluation with DeepEval/RAGAS, structured output validation, and agentic test patterns (generator, healer, planner). Use when testing AI features, validating LLM outputs, or building evaluation pipelines.