Atdd Mutate
swingerman/engineer
A skill your agent uses to add a third validation layer to the ATDD workflow — after acceptance tests verify WHAT and unit tests verify HOW, mutation testing verifies the tests actually catch bugs.
Creates backend e2e tests for new or existing endpoints. An agent skill from letehaha/moneymatter.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add letehaha/moneymatter --skill e2e-test-creator -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install letehaha/moneymatter e2e-test-creator --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/letehaha/moneymatter.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/e2e-test-creator .claude/skills/e2e-test-creator && 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 "e2e-test-creator" agent skill from https://github.com/letehaha/moneymatter/tree/dev/.claude/skills/e2e-test-creator into .claude/skills/e2e-test-creator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-test-creator", 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/letehaha/moneymatter/tree/dev/.claude/skills/e2e-test-creatorType 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 letehaha/moneymatter --skill e2e-test-creator -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install letehaha/moneymatter e2e-test-creator --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letehaha/moneymatter.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/e2e-test-creator .agents/skills/e2e-test-creator && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "e2e-test-creator" agent skill from https://github.com/letehaha/moneymatter/tree/dev/.claude/skills/e2e-test-creator into .agents/skills/e2e-test-creator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-test-creator", 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 letehaha/moneymatter --skill e2e-test-creator -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install letehaha/moneymatter e2e-test-creator --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letehaha/moneymatter.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/e2e-test-creator .cursor/skills/e2e-test-creator && 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 "e2e-test-creator" agent skill from https://github.com/letehaha/moneymatter/tree/dev/.claude/skills/e2e-test-creator into .cursor/skills/e2e-test-creator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-test-creator", 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/letehaha/moneymatter.git --path .claude/skills/e2e-test-creator--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 letehaha/moneymatter --skill e2e-test-creator -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install letehaha/moneymatter e2e-test-creator --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letehaha/moneymatter.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/e2e-test-creator .gemini/skills/e2e-test-creator && 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 "e2e-test-creator" agent skill from https://github.com/letehaha/moneymatter/tree/dev/.claude/skills/e2e-test-creator into .gemini/skills/e2e-test-creator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-test-creator", 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 letehaha/moneymatter e2e-test-creatorInstalls 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 letehaha/moneymatter --skill e2e-test-creator -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/letehaha/moneymatter.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/e2e-test-creator .github/skills/e2e-test-creator && 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 "e2e-test-creator" agent skill from https://github.com/letehaha/moneymatter/tree/dev/.claude/skills/e2e-test-creator into .github/skills/e2e-test-creator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-test-creator", 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 letehaha/moneymatter --skill e2e-test-creator -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install letehaha/moneymatter e2e-test-creator --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/letehaha/moneymatter.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/e2e-test-creator .opencode/skills/e2e-test-creator && 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 "e2e-test-creator" agent skill from https://github.com/letehaha/moneymatter/tree/dev/.claude/skills/e2e-test-creator into .opencode/skills/e2e-test-creator/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "e2e-test-creator", 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.
e2e-test-creatorCreates backend e2e tests for new or existing endpoints. An agent skill from letehaha/moneymatter.
E2E Test Creator is an agent skill from letehaha/moneymatter. Creates backend e2e tests for new or existing endpoints. Auto-triggers after implementing a new API endpoint. Also runs when asked to add test coverage or triggered by "/e2e-test-creator". Follows project conventions for test structure, helpers, and assertions.
Its SKILL.md is about 2.4k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Testing & QA, covering End-to-end testing, REST APIs and Test coverage. The repository describes itself as: A personal budget tracking application. Track your balances and transactions with bank connections or manual entry, categorize and analyze expenses and income, and many more. The licence is AGPL-3.0.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit de5319f. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteEditGrepGlobBashAskUserQuestionFrom allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
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.
E2E Test Creator loads about 2.4k tokens when it runs. Until then it costs about 70 tokens; SKILL.md has 628 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 patterns that need a careful read before installing.
Run from `packages/backend/`. Do NOT wait for user confirmation — run tests immediately after writing them.allowed-tools: Read, Write, Edit, Grep, Glob, Bash, AskUserQuestionAutomated 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 letehaha/moneymatter at commit de5319f, republished under its AGPL-3.0 licence (© letehaha). 628 words, ~2,396 tokens.
.claude/skills/e2e-test-creator/SKILL.md (or your agent's skills folder).Creates properly structured e2e tests for backend API endpoints following this project's exact conventions.
This skill is primarily a reference guide — read the conventions below and write tests directly based on the endpoint just implemented. However, if there's ambiguity about what scenarios to cover (e.g., complex business logic, unclear edge cases), it's fine to ask the user a brief clarifying question before writing.
/e2e-test-creatorBefore writing any test, read these files to understand what you're testing:
packages/backend/src/tests/helpers/<domain>.ts)Every endpoint needs a corresponding test helper function. If one doesn't exist, create it first.
Location: packages/backend/src/tests/helpers/<domain>.ts
import type { myService as apiMyService } from '@services/<domain>/my-service';
import { makeRequest } from './common';
export async function myEndpoint<R extends boolean | undefined = undefined>({
raw,
// ... endpoint-specific params
}: {
raw?: R;
// ... param types
} = {}) {
return makeRequest<Awaited<ReturnType<typeof apiMyService>>, R>({
method: 'get', // or post, put, patch, delete
url: '/<domain>/endpoint',
raw,
});
}Key rules:
<R> pattern for the raw parameterpayload for GET requests (makeRequest converts them to query string)packages/backend/src/services/<domain>/<feature>.e2e.tskebab-case.e2e.tsimport { describe, expect, it } from '@jest/globals';
import * as helpers from '@tests/helpers';
// Import enums/types needed for test data
import { SOME_ENUM } from '@bt/shared/types';
describe('Feature Name', () => {
// Group by logical concern
describe('GET /endpoint', () => {
it('returns expected data for happy path', async () => {
// ARRANGE: create prerequisite data via helpers
const account = await helpers.createAccount({ raw: true });
// ACT: call the endpoint being tested
const result = await helpers.myEndpoint({ raw: true });
// ASSERT: verify the response
expect(result.someField).toBe(expectedValue);
});
it('returns empty/default when no data exists', async () => {
const result = await helpers.myEndpoint({ raw: true });
expect(result.count).toBe(0);
});
it('filters by query parameter', async () => {
// Create mixed data
await helpers.createThing({ type: 'a', raw: true });
await helpers.createThing({ type: 'b', raw: true });
// Filter
const result = await helpers.myEndpoint({ type: 'a', raw: true });
expect(result.length).toBe(1);
});
});
});raw: false for status code checks)// WRONG
const result = await getSubscriptionsSummary({ userId: 1 });
// CORRECT
const result = await helpers.getSubscriptionsSummary({ raw: true });raw: true for happy path, raw: false for error checks// Happy path — get extracted data directly
const data = await helpers.getSomething({ raw: true });
expect(data.name).toBe('expected');
// Error case — check HTTP status code
const res = await helpers.getSomething({ id: 'nonexistent' });
expect(res.statusCode).toBe(404);200 — success404 — not found409 — conflict (e.g., duplicate link)422 — Zod validation errors (invalid params, query, body). NOT 400 — the validateEndpoint middleware returns 422 Unprocessable Entity for schema validation failures.expectedAmount: 1599 (= $15.99)expect(result.amount).toBe(15.99)beforeEach truncates tables)it() block via helpersawait Promise.all([...]) for independent data creationAfter writing the test, run it automatically using the test-runner subagent:
npm run test:e2e -- --testPathPattern='<pattern>'Run from packages/backend/. Do NOT wait for user confirmation — run tests immediately after writing them.
import { SUBSCRIPTION_FREQUENCIES, SUBSCRIPTION_TYPES } from '@bt/shared/types';
import { describe, expect, it } from '@jest/globals';
import * as helpers from '@tests/helpers';
describe('Subscriptions Summary', () => {
describe('GET /subscriptions/summary', () => {
it('returns summary with correct monthly cost', async () => {
await helpers.createSubscription({
name: 'Netflix',
expectedAmount: 1500,
expectedCurrencyCode: global.BASE_CURRENCY_CODE,
frequency: SUBSCRIPTION_FREQUENCIES.monthly,
startDate: '2025-01-01',
raw: true,
});
const summary = await helpers.getSubscriptionsSummary({ raw: true });
expect(summary.activeCount).toBe(1);
expect(summary.estimatedMonthlyCost).toBe(15);
expect(summary.projectedYearlyCost).toBe(180);
expect(summary.currencyCode).toBe(global.BASE_CURRENCY_CODE);
});
it('returns zeros when no active subscriptions exist', async () => {
const summary = await helpers.getSubscriptionsSummary({ raw: true });
expect(summary.activeCount).toBe(0);
expect(summary.estimatedMonthlyCost).toBe(0);
expect(summary.projectedYearlyCost).toBe(0);
});
it('filters by subscription type', async () => {
await helpers.createSubscription({
name: 'Netflix',
type: SUBSCRIPTION_TYPES.subscription,
expectedAmount: 1500,
expectedCurrencyCode: global.BASE_CURRENCY_CODE,
frequency: SUBSCRIPTION_FREQUENCIES.monthly,
startDate: '2025-01-01',
raw: true,
});
await helpers.createSubscription({
name: 'Electricity',
type: SUBSCRIPTION_TYPES.bill,
expectedAmount: 10000,
expectedCurrencyCode: global.BASE_CURRENCY_CODE,
frequency: SUBSCRIPTION_FREQUENCIES.monthly,
startDate: '2025-01-01',
raw: true,
});
const subsOnly = await helpers.getSubscriptionsSummary({
type: SUBSCRIPTION_TYPES.subscription,
raw: true,
});
expect(subsOnly.activeCount).toBe(1);
expect(subsOnly.estimatedMonthlyCost).toBe(15);
const billsOnly = await helpers.getSubscriptionsSummary({
type: SUBSCRIPTION_TYPES.bill,
raw: true,
});
expect(billsOnly.activeCount).toBe(1);
expect(billsOnly.estimatedMonthlyCost).toBe(100);
});
});
});Cause: Endpoint is too slow or test has an unresolved promise
Solution: Check for missing await keywords, infinite loops, or endpoints that need optimization.
Cause: Migration hasn't been applied to the test database Solution: Verify migrations are up to date. The test setup should handle this automatically, but check for new migration files.
Cause: The validateEndpoint middleware returns 422 for Zod validation failures, not 400
Solution: Always expect 422 for schema validation errors. Use 400 only for custom validation in service logic.
© letehaha, AGPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/e2e-test-creator of letehaha/moneymatter.
Open the folder on GitHubat commit de5319f
E2E Test Creator 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 |
|---|---|---|---|---|---|---|
| E2E Test Creator this skillletehaha/moneymatter | 160 | — | ~2.4k | Automated safety check: Warn | AGPL-3.0 | |
| Atdd Mutateswingerman/engineer | 154 | — | ~2.7k | Automated safety check: Pass | MIT | |
| E2E Test ThinkerUniClipboard/UniClipboard | 1.9k | — | ~1.7k | Automated safety check: Pass | AGPL-3.0 | |
| Check Test Coverageopenshift/oc-mirror | 124 | — | ~853 | Automated safety check: Pass | Apache-2.0 | |
| Platform Dsar Policy Manageforcedotcom/sf-skills | 1.1k | — | ~5.2k | Automated safety check: Pass | Apache-2.0 | |
| Post Dev Testsd0xdev/sd0x-harness | 192 | — | ~1.8k | Automated safety check: Notes | MIT |
swingerman/engineer
A skill your agent uses to add a third validation layer to the ATDD workflow — after acceptance tests verify WHAT and unit tests verify HOW, mutation testing verifies the tests actually catch bugs.
UniClipboard/UniClipboard
Analyze the current branch's diff against main and determine which changes are testable via CLI-based end-to-end tests.
openshift/oc-mirror
Analyze oc-mirror CLI feature coverage across integration and e2e tests, identifying untested features and gaps
forcedotcom/sf-skills
Configure, run, and audit DsarPolicy Right-to-Portability exports end to end: author the data map over a subject's related records, resolve a request's subject (email/name/id) to a root-entity…
sd0xdev/sd0x-harness
Post-development test completion. An agent skill from sd0xdev/sd0x-harness.
luongnv89/skills
Generate unit tests for untested branches and edge cases. An agent skill from luongnv89/skills.
letehaha/moneymatter
Deep-dive specification planner. An agent skill from letehaha/moneymatter.
letehaha/moneymatter
Add a new tool to the MoneyMatter MCP server. An agent skill from letehaha/moneymatter.
letehaha/moneymatter
Hunt "AI slop" in this codebase — duplication, reinvented wheels, over-engineering, defensive cruft, dead code, comment slop, performance antipatterns.
letehaha/moneymatter
Frontend conventions and component usage rules. An agent skill from letehaha/moneymatter.
letehaha/moneymatter
Occasional i18n catch-up: strip unused en keys, then fill any uk translations that slipped through via i18n-editor subagents.
letehaha/moneymatter
Smart PRD generator. An agent skill from letehaha/moneymatter.
Categories
Creates backend e2e tests for new or existing endpoints. An agent skill from letehaha/moneymatter. E2E Test Creator is an agent skill from letehaha/moneymatter. Creates backend e2e tests for new or existing endpoints.
E2E Test Creator fits situations like: after implementing a new API endpoint; tasks that involve End-to-end testing; tasks that involve REST APIs.
Run `npx skills add letehaha/moneymatter --skill e2e-test-creator -a claude-code`. Or copy the skill folder (.claude/skills/e2e-test-creator in letehaha/moneymatter) into .claude/skills/e2e-test-creator in your project. Claude Code loads it when a task matches its description.
Run `npx skills add letehaha/moneymatter --skill e2e-test-creator -a codex`. Or copy the skill folder (.claude/skills/e2e-test-creator in letehaha/moneymatter) into .agents/skills/e2e-test-creator 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 letehaha/moneymatter --skill e2e-test-creator -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/e2e-test-creator, .gemini/skills/e2e-test-creator, .github/skills/e2e-test-creator and .opencode/skills/e2e-test-creator in your project.
Going by SKILL.md and its folder, E2E Test Creator needs the command-line tools its instructions call (npm). Its frontmatter pre-approves these tools: Read, Write, Edit, Grep, Glob, Bash, AskUserQuestion.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): tells the agent its actions are pre-authorized / not to stop for confirmation. Read the flagged lines before installing; the check is not a guarantee either way.
E2E Test Creator is published under the AGPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.4k tokens (SKILL.md is roughly 9.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with E2E Test Creator: Atdd Mutate (swingerman/engineer, 154 stars), E2E Test Thinker (UniClipboard/UniClipboard, 1.9k stars), Check Test Coverage (openshift/oc-mirror, 124 stars) and Platform Dsar Policy Manage (forcedotcom/sf-skills, 1.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
letehaha (a GitHub user) maintains it in letehaha/moneymatter, which has 160 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.
Source: letehaha/moneymatter on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.