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

Apache-2.0Auto-check passedTesting & QA

Install Outside In TDD

skills CLI
$ npx skills add SebastienDegodez/copilot-instructions --skill outside-in-tdd -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install SebastienDegodez/copilot-instructions outside-in-tdd --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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-src

Use ~/.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/

Facts

Skill name
outside-in-tdd
GitHub stars
198
Token cost
~1.8k tokens
SKILL.md length
780 words
Files
6 (incl. references, assets)
Skills in repo
19
Repo updated
First seen
Licence
Apache-2.0

At a glance

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

  • Works in 3 steps: Map Scenario to Acceptance Test → Let Domain Emerge → Verify with Mutation Testing
  • Writing tests from the outside-in
  • SKILL.md covers Overview, Outside-In Approach, Acceptance-Style Tests… and Domain Tests (Pure — Rule Level), plus 7 more sections
  • Runs C# scripts from its folder

What it does

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.

When your agent uses it

  • 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

Example prompts

  • “/outside-in-tdd”

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. Map Scenario to Acceptance Test
  2. Let Domain Emerge
  3. Verify with Mutation Testing

What it can do on your machine

Read from SKILL.md and the folder at commit 0f0dccf. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships script files (C#), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

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.

Always · name and description, kept in context so the agent knows when to use it
~49
When it runs · the whole SKILL.md, loaded when a task matches
~1.8k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.4k

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.

Safety

Auto-check passed

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.

SKILL.md

The full file from SebastienDegodez/copilot-instructions at commit 0f0dccf, republished under its Apache-2.0 licence (© SebastienDegodez). 780 words, ~1,836 tokens.

Download SKILL.mdSave it as .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.
name
outside-in-tdd
description
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

Outside-In DDD Testing

Overview

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.

Outside-In Approach

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.

Step 1: Map Scenario to Acceptance Test
  1. Map Gherkin to test — translate scenario to a top-level acceptance-style test
  2. Write the test — mock only external boundaries, use real domain objects
Step 2: Let Domain Emerge

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.

  • Domain objects (policies, value objects, services) emerge from what the test demands
  • Orchestrators only coordinate — domain logic lives in the domain
  • Real domain objects (not mocked)
  • No design upfront — the test tells you what to build
Step 3: Verify with Mutation Testing

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.

Acceptance-Style Tests (Sociable — Entry Point Level)

Test the system entry point with real domain objects. Mock only external boundaries. Verify orchestration + observable behavior.

csharp
[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();
}

Domain Tests (Pure — Rule Level)

Test business policies, rules, and domain services — not data structures directly.
No mocks — pure state-based assertions.

csharp
[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:

  • Basic constructors (unless complex invariants)
  • Simple value objects (covered by usage in policies/orchestrators)
  • Simple getters/setters
  • DTOs or passive data structures

When to Write Which

SignalRoute to
Orchestration (load/save/publish)Use Case test (Acceptance)
Business rule inside an AggregateUse Case test (Acceptance)
Complex invariants, large edge-case matrices, or reused rulesExtract to Policy + Domain test
Simple ruleAlready 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.

Show full SKILL.md (312 more words)Show less

Testing Rules

DO ✅
  • Mock only external boundaries (repositories, external services)
  • Use real domain objects (entities, policies, services)
  • Keep tests fast (< 100ms, no DB, no network)
  • Name tests with business language (WhenCondition_ShouldOutcome)
  • Cover meaningful edge-case combinations
DON'T ❌
  • Don't mock domain objects
  • Don't centralize strategic rules in orchestrators
  • Don't use integration tooling in unit tests
  • Don't test implementation details — test behavior
  • Don't couple to a specific assertion library in the skill

Anti-Patterns

  • Strategic rules in orchestrators instead of domain
  • Over-mocking that hides real business behavior
  • Treating coverage percentage as the quality target
  • Duplicating acceptance test coverage with redundant domain tests

Mutation Testing (Third Validation Layer)

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.

Common Mistakes

MistakeFix
Mocking domain objects in acceptance testsUse real domain objects, mock only external boundaries
Designing domain objects upfrontLet domain emerge from test failures — don't design before testing
Treating compilation errors as failuresStub 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 loopEnsure red-synthesize-green cycle is followed exactly
Polluting Gherkin with class/endpoint namesKeep scenarios in business language only
Testing data structures directly by defaultTest policies/rules; data types are covered by usage
Skipping mutation testing before mergeRun mutation-testing skill after tests green
Skipping Gherkin for a bug fixAlways write a failing Gherkin scenario that reproduces the bug before fixing it — gherkin-gate applies to bug fixes too

Integration

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

References

© 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

Files

SKILL.md and 5 other files (references, assets) in plugins/superpowers-whetstone/skills/outside-in-tdd of SebastienDegodez/copilot-instructions.

  • SKILL.md
  • assets/CommandHandlerTestTemplate.cs
  • assets/QueryHandlerTestTemplate.cs
  • references/cqrs-patterns.md
  • references/test-examples.md
  • references/testing-strategy.md

Open the folder on GitHubat commit 0f0dccf

Compare with similar skills

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.

Outside In TDD compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Outside In TDD this skillSebastienDegodez/copilot-instructions198—~1.8kAutomated safety check: PassApache-2.0
TDDpietheinstrengholt/rssmonster56430 repos~906Automated safety check: PassMIT
TDD WorkflowhellangleZ/burn-in-cceverywhere-ralph11211 repos~2.4kAutomated safety check: PassNone
TDDsanity-io/sanity6.4k20 repos~1kAutomated safety check: PassMIT
Test Driven Developmentfarm-fe/farm5.6k52 repos~2.5kAutomated safety check: PassMIT
Tapd Story PipelineTencentBlueKing/bk-bcs840—~2.6kAutomated safety check: PassCustom licence

Similar skills

  • TDD

    pietheinstrengholt/rssmonster

    Test-driven development. An agent skill from pietheinstrengholt/rssmonster.

    564 GitHub starsUsed in 30 repos~906 tokens
    Testing & QAAuto-check passed
  • TDD Workflow

    hellangleZ/burn-in-cceverywhere-ralph

    A skill your agent uses when writing new features, fixing bugs, or refactoring code.

    112 GitHub starsUsed in 11 repos~2.4k tokens
    Testing & QAAuto-check passed
  • TDD

    sanity-io/sanity

    Official

    Test-driven development with red-green-refactor loop. An agent skill from sanity-io/sanity.

    6.4k GitHub starsUsed in 20 repos~1k tokens
    Testing & QAAuto-check passed
  • A skill your agent uses when implementing any feature or bugfix, before writing implementation code

    5.6k GitHub starsUsed in 52 repos~2.5k tokens
    Testing & QAAuto-check passed
  • Tapd Story Pipeline

    TencentBlueKing/bk-bcs

    单需求实现流水线——把一个 TAPD 需求从零推进到代码提交。自动串联技术澄清、 开发计划、任务拆分、TDD 实现、架构/安全校验、代码提交六个阶段。

    840 GitHub stars~2.6k tokensUpdated 2 days ago
    Testing & QAAuto-check passed
  • Absolute Init

    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…

    219 GitHub starsUsed in 1 repo~3k tokens
    Testing & QAAuto-check passed

More from SebastienDegodez/copilot-instructions

All 19 skills in this repo
  • Setup Husky Dotnet

    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

    198 GitHub stars~1.3k tokensUpdated 4 days ago
    Auto-check passed
  • Clean Architecture Dotnet

    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…

    198 GitHub stars~5.1k tokensUpdated 4 days ago
    Auto-check passed
  • Creating Dotnet MCP Servers

    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

    198 GitHub stars~1.3k tokensUpdated 4 days ago
    Auto-check passed
  • Generate Microcks Openapi Samples

    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

    198 GitHub stars~2.5k tokensUpdated 4 days ago
    Auto-check passed
  • Analyzing Code

    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

    198 GitHub stars~1k tokensUpdated 4 days ago
    Auto-check passed
  • Extracting Code Structure

    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

    198 GitHub stars~1.3k tokensUpdated 4 days ago
    Auto-check passed

Categories

Questions about Outside In TDD

What does Outside In TDD do?

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.

When should I use Outside In TDD?

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.

How do I install Outside In TDD in Claude Code?

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.

How do I install Outside In TDD in Codex?

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.

Can I use Outside In TDD in Cursor, Gemini CLI or GitHub Copilot?

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.

What does Outside In TDD need to run?

Going by SKILL.md and its folder, Outside In TDD needs C# for the scripts in its folder.

Does Outside In TDD access the network?

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.

Is Outside In TDD safe to install?

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.

What licence does Outside In TDD use?

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.

How many tokens does Outside In TDD use?

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.

What are the alternatives to Outside In TDD?

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.

Who maintains Outside In TDD?

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.