Write scenario-driven tests for an OpenFoot Manager feature, bug fix or story, or characterize weakly covered behaviour before a refactor.

GPL-3.0Auto-check: notesDevelopment

Install Write Tests

skills CLI
$ npx skills add openfootmanager/openfootmanager --skill write-tests -a claude-code

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

GitHub CLI
$ gh skill install openfootmanager/openfootmanager write-tests --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/openfootmanager/openfootmanager.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/write-tests .claude/skills/write-tests && 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
write-tests
GitHub stars
1.1k
Token cost
~2.2k tokens
SKILL.md length
941 words
Files
1
Skills in repo
8
Repo updated
First seen
Licence
GPL-3.0

At a glance

Write scenario-driven tests for an OpenFoot Manager feature, bug fix or story, or characterize weakly covered behaviour before a refactor.

  • Works in 6 steps: Scenarios before implementation → Fixtures and assertions that discriminate → RED, verified → …
  • Tasks that involve Test generation
  • SKILL.md covers 1. Scenarios before…, 2. Fixtures and assertions…, 3. RED, verified and 4. GREEN, then effectiveness…, plus 2 more sections
  • Calls git, cargo and npm

What it does

Write Tests is an agent skill from openfootmanager/openfootmanager. Write scenario-driven tests for an OpenFoot Manager feature, bug fix or story, or characterize weakly covered behaviour before a refactor. Verify named red and green runs, fixture discrimination, state/persistence seams and regression effectiveness in a disposable copy.

Its SKILL.md is about 2.2k 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 Development, covering Test generation, Debugging and Agent memory. It works with Rust. The repository describes itself as: An open source soccer/football manager game. The licence is GPL-3.0.

When your agent uses it

  • Tasks that involve Test generation
  • Tasks that involve Debugging
  • Tasks that involve Agent memory

Example prompts

  • “/write-tests”

Requirements

  • Pre-approved tools (allowed-tools): Read, Edit, Write, Grep, Glob, Bash

Workflow steps

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

  1. Scenarios before implementation
  2. Fixtures and assertions that discriminate
  3. RED, verified
  4. GREEN, then effectiveness evidence
  5. Property tests when an invariant earns them
  6. Handoff

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Edit
    • Write
    • Grep
    • Glob
    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • cargo
    • npm

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

  • Network

    Links to these hosts (documentation or services it may open):

    • github.com

    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

Write Tests loads about 2.2k tokens when it runs. Until then it costs about 71 tokens; SKILL.md has 941 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~71
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Edit, Write, Grep, Glob, Bash

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 openfootmanager/openfootmanager at commit a87841b, republished under its GPL-3.0 licence (© openfootmanager). 941 words, ~2,178 tokens.

Download SKILL.mdSave it as .claude/skills/write-tests/SKILL.md (or your agent's skills folder).
name
write-tests
description
Write scenario-driven tests for an OpenFoot Manager feature, bug fix or story, or characterize weakly covered behaviour before a refactor. Verify named red and green runs, fixture discrimination, state/persistence seams and regression effectiveness in a disposable copy.
allowed-tools
Read, Edit, Write, Grep, Glob, Bash
when_to_use
Writing tests for a feature, bug fix or story, or characterizing behaviour before a refactor.
argument-hint
[feature, bug or scenario to test]
<!-- Adapted for OFM from obra/superpowers test-driven-development (MIT), revision
8ca22dba9a94f28898bbce59f2537ff4d87c747d:
https://github.com/obra/superpowers/blob/8ca22dba9a94f28898bbce59f2537ff4d87c747d/skills/test-driven-development/SKILL.md
Copyright (c) 2025 Jesse Vincent; and po4yka/rust-skills rust-tdd (BSD-3-Clause), revision
9f4a3a4c904c1cbc507991b65397195ff724fa70:
https://github.com/po4yka/rust-skills/blob/9f4a3a4c904c1cbc507991b65397195ff724fa70/skills/rust-tdd/SKILL.md
Copyright (c) 2026 Nikita Pochaev. Full notices: ../../THIRD_PARTY_NOTICES.md.
GWT naming, OFM fixtures and persistence seam guidance are project-specific adaptations. -->

Write tests

Read the root Code quality rules and nearby tests first. Search canonical builders in ofm_core and use src/test-setup.ts on the frontend. Do not replace the project's runtime or install a whole testing framework. Tests pin the caller-visible contract; they do not mirror the implementation.

1. Scenarios before implementation

Write a named Given/When/Then table and carry it into the PR body:

ScenarioGivenWhenThenLayer / test namePredicted failure

Cover happy, edge, failure/abuse, user and AI routes for shared rules, and save/load. Mark routes inapplicable with a reason. When no written scenarios exist, state those for the touched routes before coding. Every applicable scenario gets one independently reported test; parameterize cases with the same outcome, split different outcomes. Preserve scope and discuss unclear acceptance criteria rather than inventing a larger story.

Use a plain sentence test name plus a Given/When/Then doc comment naming the scenario. Rust sentence names use snake_case in a same-file #[cfg(test)] module; frontend tests use a sentence in it(...) in co-located *.test.ts(x) files. For example:

rust
/// Given a non-default budget, when the club is saved and reloaded, then the budget is preserved.
#[test]
fn a_saved_budget_survives_reload() { /* scenario assertions */ }
typescript
/** Given a rejected save, when the player submits, then the form shows the error. */
it("shows the error when saving fails", () => { /* scenario assertions */ });

Existing cross-crate tests belong at the owning integration layer. Command tests are in the root lib target.

2. Fixtures and assertions that discriminate

Use the smallest world containing the interaction, with real existing builders and seeded RNG. If generation/distribution is the behaviour, use the real generator rather than a hand-built population. Distinguish competing worlds: two competitions on one matchday, different wage units, non-default persisted values, a positive control for a negative assertion, and nonempty inputs before assertion loops. Expected values come from literals or an independent oracle, not the code under test. Preserve intentional engine mirrors and independent test computations.

Choose the cheapest layer that observes the claimed behaviour. Pure rules use unit tests; wiring uses the component/service or shared &StateManager seam. Read live state after mutations, not a returned clone alone. Persistence uses the real writer and a fresh DB connection/reader, with non-default values and absent-field old-save fixtures. Failure scenarios assert no partial mutation.

Frontend mocks retain the side effects the scenario needs. A controlled host feeds changed values back into props; a bare onChange={vi.fn()} proves only notification. Keep real hook behaviour for hook-order regressions (a hook-free i18n mock hides them). Prefer role/name or label queries; cover keyboard and focus. Service failure tests verify usable UI/error outcomes, not only a mock call.

3. RED, verified

Write the scenario test before production code. Name the predicted failed assertion and value, then run only that test and confirm its name and count appear:

bash
cargo test --locked --manifest-path src-tauri/Cargo.toml -p <crate> '<scenario>' -- --exact '<module>::tests::<scenario>'
cargo test --locked --manifest-path src-tauri/Cargo.toml --lib '<scenario>'
# Add --features mcp to the lib command for an MCP scenario.
npm ci
npm test -- <co-located-test-file> -t '<scenario>'

These are templates: fill in a real target and use its full Rust path for --exact.

Observed resultNext action
Predicted assertion failsRecord test count and failure line; implement the minimum fix
Passes unexpectedlyCheck existing behaviour and fixture; make correct and broken outcomes differ, without weakening the assertion
Zero testsRepair the selection; it proves nothing
Wrong assertion/setup panicRepair setup or understanding, then rerun
Compile-invalidAdd only the necessary API/stub so the test can reach its behavioural assertion; rerun
Timeout/tool failureResolve or report the execution limit; do not call it RED

A pure refactor's characterization tests may pass initially: name that evidence characterization, not a fabricated red run. Do not delete prior work to restart TDD, commit stubs or change unrelated code.

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

4. GREEN, then effectiveness evidence

Implement the smallest production change, rerun the same scenario, then related tests. Keep each scenario test with the implementation it drove. Do not skip, weaken or bless away an unexplained failure.

Before the PR, use either a small relevant Rust mutation run or manual fix removal. Run experiments in a disposable directory only. For a committed revision:

bash
git clone --no-hardlinks --no-checkout . /tmp/ofm-test-proof-<unique-id>
git -C /tmp/ofm-test-proof-<unique-id> checkout --detach <reviewed-sha>

For uncommitted work, make a separate filesystem copy of the exact source under review, excluding .git, node_modules, target and outputs, then copy necessary untracked tests explicitly. Inspect the source-copy diff, install dependencies there and record the snapshot identity. Never git stash, git checkout, git restore or reverse-patch the caller's worktree. Do not run deletion commands on an existing directory whose provenance you have not verified.

In the copy, run the named test green, remove only the production fix while retaining the test and unrelated setup, inspect the removal diff, run the same command, quote its behavioural failure, then restore the copied production file and run green again. A wholesale checkout of the base also removes the test and is not proof. If the removal breaks compilation, report compile-invalid and repair the experiment without changing the caller's files.

For Rust mutation testing, create a production diff for the reviewed revision and, after checking installed cargo mutants --help, run in the copy:

bash
cargo mutants --manifest-path src-tauri/Cargo.toml --in-diff <production-diff-file>

Record selection, killed/survived/timeout/compile-invalid statuses and tool exit code separately. Empty selection is unproved; survivors need a discriminating scenario. Prefer manual fix removal when mutation tooling is unavailable. Never describe a narrow slice as project mutation coverage. Ask ofm-test-reviewer to inspect the evidence and unproved scenarios.

5. Property tests when an invariant earns them

Use bounded proptest generators for pairing uniqueness, money conservation, conversion round-trips or lineup permutations where a small pure input suffices. Avoid full-Game properties or adding a dependency for an example test. If proptest is absent, add it as a dev-dependency only with the first real property test in the authorized implementation change. A shrunk failure becomes a named GWT example with a literal input; do not commit a shared failure file or let RNG make it flaky.

6. Handoff

Run /preflight, including default and MCP tests where applicable. In the PR give scenario -> test -> observed red/fix-removal -> green command, selected counts, canonical rule owner/layer, reviewer result and every unrun check. No runtime behaviour changed in a prose-only task: use artifact validation and disclose that runtime RED does not apply.

© openfootmanager, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/write-tests of openfootmanager/openfootmanager.

Open the folder on GitHubat commit a87841b

Compare with similar skills

Write Tests 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.

Write Tests compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Write Tests this skillopenfootmanager/openfootmanager1.1k—~2.2kAutomated safety check: NotesGPL-3.0
OpenROAD Bug FixerThe-OpenROAD-Project/OpenROAD3.2k—~784Automated safety check: PassBSD-3-Clause
Alefxberg-io/alef100—~1.7kAutomated safety check: PassMIT
State Snapshot InstrumenterArabelaTso/Skills-4-SE253—~2.2kAutomated safety check: PassApache-2.0
Feature ContractFastLED/FastLED7.5k—~1.7kAutomated safety check: PassMIT
Code Repair Generation ComboArabelaTso/Skills-4-SE253—~1.3kAutomated safety check: PassApache-2.0

Similar skills

  • OpenROAD Bug Fixer

    The-OpenROAD-Project/OpenROAD

    Fixes an OpenROAD bug from a GitHub issue or error code: finds the root cause, implements the fix, adds a regression test and prepares a signed-off commit.

    3.2k GitHub stars~784 tokensUpdated today
    DevelopmentAuto-check passed
  • Alef

    xberg-io/alef

    Use Alef correctly for Rust-to-polyglot binding generation. An agent skill from xberg-io/alef.

    100 GitHub stars~1.7k tokensUpdated today
    DevelopmentAuto-check passed
  • State Snapshot Instrumenter

    ArabelaTso/Skills-4-SE

    Instrument programs (Python, C/C++, Java) to capture snapshots of key program states at runtime, including variables, memory, and call stacks.

    253 GitHub stars~2.2k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Feature Contract

    FastLED/FastLED

    Generate a structured implementation contract before making any code changes to FastLED.

    7.5k GitHub stars~1.7k tokensUpdated today
    DevelopmentAuto-check passed
  • Code Repair Generation Combo

    ArabelaTso/Skills-4-SE

    Automatically repair buggy code and generate comprehensive tests for Python, Java, and C++ programs.

    253 GitHub stars~1.3k tokensUpdated 1 mo ago
    DevelopmentAuto-check passed
  • Decides whether an OpenLogi device problem on macOS is a privacy-permission (TCC) problem, using agent log lines, and says which identity needs which grant.

    23k GitHub stars~2.5k tokensUpdated today
    DevelopmentAuto-check: notes

More from openfootmanager/openfootmanager

All 8 skills in this repo
  • Add UI String

    openfootmanager/openfootmanager

    Add or change any text a player can see, in every locale the game ships in.

    1.1k GitHub stars~2.6k tokensUpdated yesterday
    Auto-check passed
  • Add Domain Field

    openfootmanager/openfootmanager

    Add a field to a domain type so it survives save/load. An agent skill from openfootmanager/openfootmanager.

    1.1k GitHub stars~1.7k tokensUpdated yesterday
    Auto-check passed
  • Add MCP Tool

    openfootmanager/openfootmanager

    Add a tool to the MCP server that lets AI agents play OpenFoot Manager.

    1.1k GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • Add Tauri Command

    openfootmanager/openfootmanager

    Expose new backend behaviour to the frontend over Tauri IPC.

    1.1k GitHub stars~1.6k tokensUpdated yesterday
    Auto-check passed
  • New UI Surface

    openfootmanager/openfootmanager

    Build a new frontend component, panel, dashboard tab, or screen that matches the Matchday design language, works in light and dark, is keyboard and screen-reader accessible, reuses existing…

    1.1k GitHub stars~1.9k tokensUpdated yesterday
    Auto-check passed
  • Preflight

    openfootmanager/openfootmanager

    Verify a pull request with the frontend scripts, default and MCP backend tests and clippy, formatting, architecture checks and review evidence.

    1.1k GitHub stars~1.3k tokensUpdated yesterday
    Auto-check passed

Works with

Questions about Write Tests

What does Write Tests do?

Write scenario-driven tests for an OpenFoot Manager feature, bug fix or story, or characterize weakly covered behaviour before a refactor. Write Tests is an agent skill from openfootmanager/openfootmanager. Write scenario-driven tests for an OpenFoot Manager feature, bug fix or story, or characterize weakly covered behaviour before a refactor.

When should I use Write Tests?

Write Tests fits situations like: tasks that involve Test generation; tasks that involve Debugging; tasks that involve Agent memory.

How do I install Write Tests in Claude Code?

Run `npx skills add openfootmanager/openfootmanager --skill write-tests -a claude-code`. Or copy the skill folder (.claude/skills/write-tests in openfootmanager/openfootmanager) into .claude/skills/write-tests in your project. Claude Code loads it when a task matches its description.

How do I install Write Tests in Codex?

Run `npx skills add openfootmanager/openfootmanager --skill write-tests -a codex`. Or copy the skill folder (.claude/skills/write-tests in openfootmanager/openfootmanager) into .agents/skills/write-tests in your project. Codex loads it when a task matches its description.

Can I use Write Tests 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 openfootmanager/openfootmanager --skill write-tests -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/write-tests, .gemini/skills/write-tests, .github/skills/write-tests and .opencode/skills/write-tests in your project.

What does Write Tests need to run?

Going by SKILL.md and its folder, Write Tests needs the command-line tools its instructions call (git, cargo and npm). Its frontmatter pre-approves these tools: Read, Edit, Write, Grep, Glob, Bash.

Does Write Tests access the network?

SKILL.md names 1 domain. As links in the text: github.com. This is read from the text; nothing was executed.

Is Write Tests safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Write Tests use?

Write Tests is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Write Tests use?

About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Write Tests?

Skills that share tags, products or a category with Write Tests: OpenROAD Bug Fixer (The-OpenROAD-Project/OpenROAD, 3.2k stars), Alef (xberg-io/alef, 100 stars), State Snapshot Instrumenter (ArabelaTso/Skills-4-SE, 253 stars) and Feature Contract (FastLED/FastLED, 7.5k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Write Tests?

openfootmanager (a GitHub organization) maintains it in openfootmanager/openfootmanager, which has 1,135 GitHub stars. The repository holds 8 skills in this directory. The repository was last updated on October 9, 2026.

Source: openfootmanager/openfootmanager on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.