TDD
pietheinstrengholt/rssmonster
Test-driven development. An agent skill from pietheinstrengholt/rssmonster.
A skill your agent uses when writing tests from the outside-in, defining behavior before code, or any feature where tests should start from observable business behavior and let internal design emerge
$ npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install SebastienDegodez/copilot-instructions outside-in-tdd --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/SebastienDegodez/copilot-instructions.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/superpowers-whetstone/skills/outside-in-tdd .claude/skills/outside-in-tdd && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "outside-in-tdd" agent skill from https://github.com/SebastienDegodez/copilot-instructions/tree/main/plugins/superpowers-whetstone/skills/outside-in-tdd into .claude/skills/outside-in-tdd/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "outside-in-tdd", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/SebastienDegodez/copilot-instructions/tree/main/plugins/superpowers-whetstone/skills/outside-in-tddType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install SebastienDegodez/copilot-instructions outside-in-tdd --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SebastienDegodez/copilot-instructions.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/superpowers-whetstone/skills/outside-in-tdd .agents/skills/outside-in-tdd && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "outside-in-tdd" agent skill from https://github.com/SebastienDegodez/copilot-instructions/tree/main/plugins/superpowers-whetstone/skills/outside-in-tdd into .agents/skills/outside-in-tdd/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "outside-in-tdd", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install SebastienDegodez/copilot-instructions outside-in-tdd --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SebastienDegodez/copilot-instructions.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/superpowers-whetstone/skills/outside-in-tdd .cursor/skills/outside-in-tdd && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "outside-in-tdd" agent skill from https://github.com/SebastienDegodez/copilot-instructions/tree/main/plugins/superpowers-whetstone/skills/outside-in-tdd into .cursor/skills/outside-in-tdd/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "outside-in-tdd", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/SebastienDegodez/copilot-instructions.git --path plugins/superpowers-whetstone/skills/outside-in-tdd--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install SebastienDegodez/copilot-instructions outside-in-tdd --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SebastienDegodez/copilot-instructions.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/superpowers-whetstone/skills/outside-in-tdd .gemini/skills/outside-in-tdd && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "outside-in-tdd" agent skill from https://github.com/SebastienDegodez/copilot-instructions/tree/main/plugins/superpowers-whetstone/skills/outside-in-tdd into .gemini/skills/outside-in-tdd/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "outside-in-tdd", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install SebastienDegodez/copilot-instructions outside-in-tddInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/SebastienDegodez/copilot-instructions.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/superpowers-whetstone/skills/outside-in-tdd .github/skills/outside-in-tdd && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "outside-in-tdd" agent skill from https://github.com/SebastienDegodez/copilot-instructions/tree/main/plugins/superpowers-whetstone/skills/outside-in-tdd into .github/skills/outside-in-tdd/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "outside-in-tdd", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install SebastienDegodez/copilot-instructions outside-in-tdd --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/SebastienDegodez/copilot-instructions.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/superpowers-whetstone/skills/outside-in-tdd .opencode/skills/outside-in-tdd && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "outside-in-tdd" agent skill from https://github.com/SebastienDegodez/copilot-instructions/tree/main/plugins/superpowers-whetstone/skills/outside-in-tdd into .opencode/skills/outside-in-tdd/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "outside-in-tdd", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
outside-in-tddA skill your agent uses when writing tests from the outside-in, defining behavior before code, or any feature where tests should start from observable business behavior and let internal design emerge
Outside In TDD is an agent skill from SebastienDegodez/copilot-instructions. Use when writing tests from the outside-in, defining behavior before code, or any feature where tests should start from observable business behavior and let internal design emerge
Its SKILL.md is about 1.8k tokens, which your agent loads only when the skill is triggered. The skill folder holds 7 other files, including reference files and assets (for example `references/cqrs-patterns.md`, `references/test-examples.md` and `references/testing-strategy.md`).
It sits in Testing & QA, covering Test-driven development. The repository describes itself as: A comprehensive codebase of best practices, coding rules, and workflow automation for AI-assisted development with GitHub Copilot. Includes DDD, Clean Architecture, testing… The licence is Apache-2.0.
3 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 0f0dccf. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships script files (C#), which the agent can run.
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Outside In TDD loads about 1.8k tokens when it runs, and up to ~7.4k if it reads all its reference files. Until then it costs about 49 tokens; SKILL.md has 780 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from SebastienDegodez/copilot-instructions at commit 0f0dccf, republished under its Apache-2.0 licence (© SebastienDegodez). 780 words, ~1,836 tokens.
.claude/skills/outside-in-tdd/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.Complete testing guide for outside-in development. Start from observable behavior (Gherkin), let design emerge from tests.
Core rule: Real domain objects, mocked external boundaries, fast in-memory tests.
Prerequisite: Gherkin scenarios must be written and approved before this skill applies. This includes new features, bug fixes, and behavior-changing refactoring. If Gherkin scenarios are already approved for the current task, proceed directly to Step 1 — gherkin-gate is already done.
REQUIRED SUB-SKILL: superpowers-whetstone:gherkin-gate — run first, wait for approval, then return here.
STOP. Do NOT create any domain class, value object, entity, policy, or enum before your first test fails to compile. Design MUST emerge from red — not from upfront thinking. Even if you already know the domain from context, create nothing until the test's compilation failure confirms what's needed. This includes adding 'just a new variant' of something that already exists: a new vehicle type, a new rejection reason, a new value object field, or a new boundary value — even if similar ones already exist in the codebase. Wait for the test's compilation failure before creating the new type.
Test failures reveal the domain you need. Let the design emerge from failing tests — don't design upfront.
Once both acceptance and domain test streams are green:
REQUIRED SUB-SKILL: superpowers-whetstone:mutation-testing — run NOW, before merge. 100% on business logic, equivalent mutants are the only accepted survivors. This applies to ALL changes — not just new features. Bug fixes, refactoring, and edge case additions must also pass mutation testing if any test was written or changed to make this work.
Test the system entry point with real domain objects. Mock only external boundaries. Verify orchestration + observable behavior.
[Fact]
public async Task WhenSubmittingValidRequest_ShouldPersistPendingRecord()
{
var repository = A.Fake<IRequestRepository>();
var handler = new SubmitRequestHandler(repository);
var command = new SubmitRequestCommand(
UserId.CreateNew(),
new UserInfo(Age: 25, YearsOfExperience: 3),
new ResourceInfo(Type: "standard", Age: 1));
await handler.Handle(command);
A.CallTo(() => repository.AddAsync(
A<RequestRecord>.That.Matches(r => r.Status == RequestStatus.Pending),
A<CancellationToken>._)).MustHaveHappenedOnceExactly();
}Test business policies, rules, and domain services — not data structures directly.
No mocks — pure state-based assertions.
[Fact]
public void WhenUserIsUnderMinimumAge_ShouldBeRejected()
{
var policy = new EligibilityPolicy();
var user = new UserInfo(Age: 17, YearsOfExperience: 0);
var resource = new ResourceInfo(Type: "standard", Age: 1);
var result = policy.Evaluate(user, resource);
Assert.False(result.IsEligible);
Assert.Equal("minimum_age_not_met", result.RejectionReason);
}What NOT to test directly:
| Signal | Route to |
|---|---|
| Orchestration (load/save/publish) | Use Case test (Acceptance) |
| Business rule inside an Aggregate | Use Case test (Acceptance) |
| Complex invariants, large edge-case matrices, or reused rules | Extract to Policy + Domain test |
| Simple rule | Already covered by primary Use Case test |
Default: Start with a Use Case test. Add Domain tests only if extracting a complex rule makes testing simpler.
WhenCondition_ShouldOutcome)After both test streams are green, verify test effectiveness with mutation testing.
REQUIRED SUB-SKILL: superpowers-whetstone:mutation-testing — run after tests green, before merge. 100% on business logic, equivalent mutants are the only accepted survivors.
| Mistake | Fix |
|---|---|
| Mocking domain objects in acceptance tests | Use real domain objects, mock only external boundaries |
| Designing domain objects upfront | Let domain emerge from test failures — don't design before testing |
| Treating compilation errors as failures | Stub to compile, then confirm behavior failure (see red-synthesize-green) |
| Skipping Gherkin ("too small") | Even small features benefit from behavior-first thinking |
| Missing human validation loop | Ensure red-synthesize-green cycle is followed exactly |
| Polluting Gherkin with class/endpoint names | Keep scenarios in business language only |
| Testing data structures directly by default | Test policies/rules; data types are covered by usage |
| Skipping mutation testing before merge | Run mutation-testing skill after tests green |
| Skipping Gherkin for a bug fix | Always write a failing Gherkin scenario that reproduces the bug before fixing it — gherkin-gate applies to bug fixes too |
REQUIRED SUB-SKILL: superpowers-whetstone:gherkin-gate — scenarios approved before this skill
REQUIRED SUB-SKILL: superpowers-whetstone:red-synthesize-green — follow the 2-step AI TDD cycle
REQUIRED SUB-SKILL: superpowers-whetstone:mutation-testing — run after tests green, before merge
© SebastienDegodez, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references, assets) in plugins/superpowers-whetstone/skills/outside-in-tdd of SebastienDegodez/copilot-instructions.
Open the folder on GitHubat commit 0f0dccf
Outside In TDD next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Outside In TDD this skillSebastienDegodez/copilot-instructions | 198 | — | ~1.8k | Automated safety check: Pass | Apache-2.0 | |
| TDDpietheinstrengholt/rssmonster | 564 | 30 repos | ~906 | Automated safety check: Pass | MIT | |
| TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph | 112 | 11 repos | ~2.4k | Automated safety check: Pass | None | |
| TDDsanity-io/sanity | 6.4k | 20 repos | ~1k | Automated safety check: Pass | MIT | |
| Test Driven Developmentfarm-fe/farm | 5.6k | 52 repos | ~2.5k | Automated safety check: Pass | MIT | |
| Tapd Story PipelineTencentBlueKing/bk-bcs | 840 | — | ~2.6k | Automated safety check: Pass | Custom licence |
pietheinstrengholt/rssmonster
Test-driven development. An agent skill from pietheinstrengholt/rssmonster.
hellangleZ/burn-in-cceverywhere-ralph
A skill your agent uses when writing new features, fixing bugs, or refactoring code.
sanity-io/sanity
Test-driven development with red-green-refactor loop. An agent skill from sanity-io/sanity.
farm-fe/farm
A skill your agent uses when implementing any feature or bugfix, before writing implementation code
TencentBlueKing/bk-bcs
单需求实现流水线——把一个 TAPD 需求从零推进到代码提交。自动串联技术澄清、 开发计划、任务拆分、TDD 实现、架构/安全校验、代码提交六个阶段。
maddhruv/absolute
One-time setup for absolute: interview how you want it to behave (output style, autonomy, TDD strictness, spec dir, families) + detect the stack once, then write .absolute.config.json (project…
SebastienDegodez/copilot-instructions
A skill your agent uses when configuring Git hooks in .NET projects before team commits occur, to enforce commit message standards and code formatting automatically
SebastienDegodez/copilot-instructions
A skill your agent uses when domain logic leaks into API/Infrastructure, project references violate layer boundaries, or you need to decide between CQS (always), CQRS bus (complex domains), and DDD…
SebastienDegodez/copilot-instructions
A skill your agent uses when building Model Context Protocol (MCP) servers in .NET, configuring tools, transports (SSE/stdio), JSON serialization for AOT, or testing MCP endpoints
SebastienDegodez/copilot-instructions
A skill your agent uses when creating OpenAPI mock examples for Microcks, setting up request/response routing with dispatchers, or mapping request fields to mock responses
SebastienDegodez/copilot-instructions
A skill your agent uses when understanding project composition by language, measuring code change impact, or generating code statistics for CI/CD metrics
SebastienDegodez/copilot-instructions
A skill your agent uses when listing all methods, functions, or classes in a file, exploring unfamiliar code, getting API overviews, or deciding what to read selectively without loading entire files
Categories
A skill your agent uses when writing tests from the outside-in, defining behavior before code, or any feature where tests should start from observable business behavior and let internal design emerge. Outside In TDD is an agent skill from SebastienDegodez/copilot-instructions.
Outside In TDD fits situations like: writing tests from the outside-in; defining behavior before code; any feature where tests should start from observable business behavior and let internal design emerge.
Run `npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a claude-code`. Or copy the skill folder (plugins/superpowers-whetstone/skills/outside-in-tdd in SebastienDegodez/copilot-instructions) into .claude/skills/outside-in-tdd in your project. Claude Code loads it when a task matches its description.
Run `npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a codex`. Or copy the skill folder (plugins/superpowers-whetstone/skills/outside-in-tdd in SebastienDegodez/copilot-instructions) into .agents/skills/outside-in-tdd in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/outside-in-tdd, .gemini/skills/outside-in-tdd, .github/skills/outside-in-tdd and .opencode/skills/outside-in-tdd in your project.
Going by SKILL.md and its folder, Outside In TDD needs C# for the scripts in its folder.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Outside In TDD is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 1.8k tokens (SKILL.md is roughly 7.3k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 5.5k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Outside In TDD: TDD (pietheinstrengholt/rssmonster, 564 stars), TDD Workflow (hellangleZ/burn-in-cceverywhere-ralph, 112 stars), TDD (sanity-io/sanity, 6.4k stars) and Test Driven Development (farm-fe/farm, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
SebastienDegodez (a GitHub user) maintains it in SebastienDegodez/copilot-instructions, which has 198 GitHub stars. The repository holds 19 skills in this directory. The repository was last updated on October 6, 2026.
Source: SebastienDegodez/copilot-instructions on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.