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/kndoshn/testable-nextjs-skill-plugin/writing-testable-nextjsnpx skills add kndoshn/testable-nextjs-skill-plugin --skill writing-testable-nextjsgit clone --depth 1 https://github.com/kndoshn/testable-nextjs-skill-pluginWrote 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/kndoshn/testable-nextjs-skill-plugin/writing-testable-nextjs)<a href="https://agentmods.dev/skills/kndoshn/testable-nextjs-skill-plugin/writing-testable-nextjs"><img src="https://agentmods.dev/badge/skills/kndoshn/testable-nextjs-skill-plugin/writing-testable-nextjs.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.00058 | $0.01134 |
| Opus 5 | $0.00029 | $0.00567 |
| Sonnet 5 | $0.00012 | $0.00227 |
| Haiku 4.5 | $0.00006 | $0.00113 |
Grade A, and why
writing-testable-nextjs 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 6d 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 — 141 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Writing Testable Next.js
Purpose
When implementing or changing a Next.js application:
- Make the change testable by design (clear seams, deterministic behavior)
- Propose and/or implement the smallest meaningful automated test delta
- Reduce flaky tests by applying stability tactics early
Targets both App Router and Pages Router projects.
Non-negotiables
| Rule | Rationale |
|---|---|
No arbitrary time waits (sleep, waitForTimeout) |
Causes flaky tests |
Prefer accessible queries (getByRole, getByLabel, getByText) |
Tests user-observable behavior |
| Avoid mocking Next.js internals | Isolate business logic into pure modules instead |
| Keep mocking strategies consistent | Don't mix multiple network mocking approaches |
Workflow
Always follow these steps in order.
Step 1: Detect repository context
Inspect the repo to determine:
package.json → "next" version
app/ exists → App Router
pages/ exists → Pages Router
Identify test stack:
- Unit/component: Jest or Vitest
- E2E: Playwright or Cypress
- Network mocking: MSW (
mswin dependencies)
Identify runtime boundaries in the change:
- Client Component
- Server Component (sync/async)
- Server Actions
- Route Handler (
app/**/route.ts) - Proxy (
proxy.tsin Next.js 16+ /middleware.tsin legacy) next.config.*routing (redirects/rewrites/headers)
If information is missing, state your assumptions explicitly.
Step 2: Choose test level
Use the smallest test level that reliably verifies the behavior:
| Change type | Test level | Notes |
|---|---|---|
| Pure logic (validation, formatting, mapping) | Unit | No React, no Next.js |
| Client Component UI | Component (RTL) | Mock only what component uses |
Route Handler (app/**/route.ts) |
Integration | Call handler directly with Request |
| Server Actions / async RSC | E2E | Full cross-boundary verification |
next.config.* routing |
Unit (experimental) or E2E | Use experimental utilities if available |
Proxy (proxy.ts / middleware.ts) |
Unit + E2E smoke | Experimental utilities + small E2E |
What ships with it
43 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.
- CHANGELOG.md 415 B
- checklists/cypress-next16.md 920 B
- checklists/playwright-stability.md 759 B
- EVALS.md 1.4 KB
- PLAYBOOK_README.md 2.0 KB
- README.md 852 B
- reference/00_index.md 1.1 KB
- reference/01_test_strategy.md 1.9 KB
- reference/02_tooling_overview.md 2.2 KB
- reference/03_unit_component_testing.md 2.1 KB
- reference/04_e2e_testing_playwright.md 1.6 KB
- reference/05_cypress_tips.md 1.2 KB
- reference/06_testing_route_handlers.md 1.2 KB
- reference/07_mocking_network_msw.md 1.6 KB
- reference/08_testing_next_config_and_proxy.md 1.5 KB
- reference/09_security_and_origins.md 1.5 KB
- reference/10_ci_stability.md 1.3 KB
- reference/11_env_test_vars.md 1.1 KB
- reference/12_testable_design_patterns.md 1.8 KB
- reference/13_troubleshooting.md 1.8 KB
- reference/99_sources.md 1.7 KB
- snippets/next-navigation-mock/jest.ts.txt 517 B
- snippets/next-navigation-mock/vitest.ts.txt 540 B
- snippets/next-router-mock/jest.ts.txt 702 B
- snippets/rtl-query-priority.md 624 B
- templates/cypress/component.cy.tsx.txt 326 B
- templates/cypress/cypress.config.ts.txt 221 B
- templates/jest/jest.config.ts.txt 429 B
- templates/jest/jest.setup.ts.txt 127 B
- templates/msw/browser.ts.txt 129 B
- templates/msw/handlers.ts.txt 196 B
- templates/msw/jest.setup.ts.txt 529 B
- templates/msw/server.ts.txt 126 B
- templates/msw/vitest.setup.ts.txt 196 B
- templates/next-experimental-testing/next-config.test.ts.txt 836 B
- templates/next-experimental-testing/proxy.test.ts.txt 1.3 KB
- templates/playwright/example.spec.ts.txt 194 B
- templates/playwright/playwright.config.ts.txt 849 B
- templates/routes/ntarh-example.test.ts.txt 731 B
- templates/routes/simple-route-handler.test.ts.txt 414 B
- templates/vitest/vitest.config.mts.txt 288 B
- templates/vitest/vitest.setup.ts.txt 138 B
- VERSION 6 B
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.
- 6d ago First seen · 141 lines · 58 tokens per session scan A 941cc0978c60
writing-testable-nextjs is a skill published in the GitHub repository kndoshn/testable-nextjs-skill-plugin (4 stars, last pushed 8mo ago), licensed MIT. It adds 58 tokens to every session and 1,134 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-31.
Other skills, from other repositories
systematic-debugging
Use when encountering any bug, test failure, or unexpected behavior, before proposing fixes.
local-ai-agents
Build local-first AI agents that run entirely on a developer workstation with Microsoft Foundry Local and Qwen function-calling models. Covers Small Language Models (SLMs), the OpenAI-compatible local endpoint, sandboxed local tools, local RAG with Chroma, local MCP servers, hybrid cloud/local routing, and the…
chronicle
Analyze Copilot session history for standup reports, usage tips, session search, and session reindexing. Use when the user asks for a standup, daily summary, usage tips, workflow recommendations, wants to search or find past sessions by keyword/file/PR, wants to reindex their session store, or asks about deleting…
chat-pet-sprite-creation
Use when creating or changing VS Code chat pet sprite art, sprite sheets, state animations, eye treatments, Stable/Insiders variants, or pet transitions under src/vs/workbench/contrib/chat/browser/widget/media/chatPet.
cpu-profile-analysis
Analyze V8/Chrome CPU profiles (.cpuprofile) and DevTools trace files (Trace-.json). Use when: profiling performance, investigating slow functions, comparing code paths, finding bottlenecks, analyzing timeToRequest, understanding call trees from sampling profiler data, analyzing layout/paint/rendering, investigating…
next-cache-components-adoption
Turn on Cache Components in a Next.js app and resolve the blocking routes it surfaces. Use when the user wants to enable, adopt, or migrate to Cache Components, flip the cacheComponents flag, work through a flood of blocking-prerender / instant validation errors, run the cache-components-instant-false codemod, or…