Foreman Debug
VisionForge-OU/foreman
Headless root-cause debugging loop for a Foreman worker whose tests, build, or acceptance check are failing — especially on a retry.
Carry out ONE chunk of a py4vasp change test-first: RED (watch the test fail for the right reason) → GREEN → refactor → one local commit.
$ npx skills add vasp-dev/py4vasp --skill tdd-py4vasp -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install vasp-dev/py4vasp tdd-py4vasp --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/vasp-dev/py4vasp.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/tdd-py4vasp .claude/skills/tdd-py4vasp && 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 "tdd-py4vasp" agent skill from https://github.com/vasp-dev/py4vasp/tree/master/.claude/skills/tdd-py4vasp into .claude/skills/tdd-py4vasp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tdd-py4vasp", 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/vasp-dev/py4vasp/tree/master/.claude/skills/tdd-py4vaspType 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 vasp-dev/py4vasp --skill tdd-py4vasp -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install vasp-dev/py4vasp tdd-py4vasp --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vasp-dev/py4vasp.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/tdd-py4vasp .agents/skills/tdd-py4vasp && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "tdd-py4vasp" agent skill from https://github.com/vasp-dev/py4vasp/tree/master/.claude/skills/tdd-py4vasp into .agents/skills/tdd-py4vasp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tdd-py4vasp", 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 vasp-dev/py4vasp --skill tdd-py4vasp -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install vasp-dev/py4vasp tdd-py4vasp --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vasp-dev/py4vasp.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/tdd-py4vasp .cursor/skills/tdd-py4vasp && 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 "tdd-py4vasp" agent skill from https://github.com/vasp-dev/py4vasp/tree/master/.claude/skills/tdd-py4vasp into .cursor/skills/tdd-py4vasp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tdd-py4vasp", 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/vasp-dev/py4vasp.git --path .claude/skills/tdd-py4vasp--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 vasp-dev/py4vasp --skill tdd-py4vasp -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install vasp-dev/py4vasp tdd-py4vasp --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vasp-dev/py4vasp.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/tdd-py4vasp .gemini/skills/tdd-py4vasp && 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 "tdd-py4vasp" agent skill from https://github.com/vasp-dev/py4vasp/tree/master/.claude/skills/tdd-py4vasp into .gemini/skills/tdd-py4vasp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tdd-py4vasp", 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 vasp-dev/py4vasp tdd-py4vaspInstalls 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 vasp-dev/py4vasp --skill tdd-py4vasp -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/vasp-dev/py4vasp.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/tdd-py4vasp .github/skills/tdd-py4vasp && 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 "tdd-py4vasp" agent skill from https://github.com/vasp-dev/py4vasp/tree/master/.claude/skills/tdd-py4vasp into .github/skills/tdd-py4vasp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tdd-py4vasp", 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 vasp-dev/py4vasp --skill tdd-py4vasp -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install vasp-dev/py4vasp tdd-py4vasp --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/vasp-dev/py4vasp.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/tdd-py4vasp .opencode/skills/tdd-py4vasp && 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 "tdd-py4vasp" agent skill from https://github.com/vasp-dev/py4vasp/tree/master/.claude/skills/tdd-py4vasp into .opencode/skills/tdd-py4vasp/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "tdd-py4vasp", 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.
tdd-py4vaspCarry out ONE chunk of a py4vasp change test-first: RED (watch the test fail for the right reason) → GREEN → refactor → one local commit.
TDD Py4vasp is an agent skill from vasp-dev/py4vasp. Carry out ONE chunk of a py4vasp change test-first: RED (watch the test fail for the right reason) → GREEN → refactor → one local commit. Use it for each chunk of an approved chunk list, and for any change small enough to be a single chunk on its own — one method, one narrow behavior, a focused bug fix. If the work turns out bigger than one method or behavior, or there is no chunk list yet, it stops and chunks the work with the plan-py4vasp skill first rather than coding ahead. Triggers: "TDD", "test-driven"…
Its SKILL.md is about 2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `run_tests.py`).
It sits in Testing & QA, covering Test-driven development and Debugging. The repository describes itself as: Python interface for VASP. The licence is Apache-2.0.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 83a1168. 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 (Python), which the agent can run.
Shell commands in SKILL.md call:
pythongituvFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use git and uv, 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.
TDD Py4vasp loads about 2k tokens when it runs. Until then it costs about 160 tokens; SKILL.md has 1,011 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 vasp-dev/py4vasp at commit 83a1168, republished under its Apache-2.0 licence (© vasp-dev). 1,011 words, ~1,972 tokens.
.claude/skills/tdd-py4vasp/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Carry one chunk from failing test to commit. A chunk is normally one method of one class (or one narrow behavior): you write its tests, watch them fail for the right reason, implement until they pass, refactor away duplication, and commit. Then you stop — the next chunk is a fresh pass.
Tests are run with the wrapper .claude/skills/tdd-py4vasp/run_tests.py, which
imports py4vasp from this checkout's src (see Gotchas). All paths
below are relative to the repo/worktree root.
Decide which of three situations you are in before writing anything:
That last branch is the fallback that matters: a chunk you cannot describe in one sentence is a plan you have not written yet. Reaching for it is cheap; discovering it four files into an implementation is not.
Take it even when you could plausibly implement the whole thing in one pass — the value of the chunk list is that the user sees the shape of the work while changing it is still free. If you genuinely cannot pause for sign-off (a non-interactive or delegated run), you still produce the chunk list first and state it up front, then work it one chunk at a time with a commit each — never a single sweeping commit.
Then, for the chunk you settled on:
Write the test(s) for this chunk only, following the conventions below. Run
just those tests and confirm they fail for the right reason — a real
AssertionError or the missing-method AttributeError, not a typo, bad
import, or wrong fixture. A test that errors before reaching its assertion is
not a valid RED; fix the test first.
python .claude/skills/tdd-py4vasp/run_tests.py tests/calculation/test_symmetry.py::test_read -qRun only the tests you expect to fail. If your change may have side effects elsewhere, add those specific untouched tests to the same run to watch them stay green — but do not run the full suite here.
Write the simplest implementation that makes the RED tests pass. Re-run the same selection until green. Resist implementing the next chunk's behavior because it is obvious and nearby — it will arrive without a failing test to justify it.
python .claude/skills/tdd-py4vasp/run_tests.py tests/calculation/test_symmetry.py -qWith tests green, remove duplication introduced by this chunk and against
existing code the new code now overlaps with. Apply the same to the tests: pull
shared setup into fixtures and use @pytest.mark.parametrize — this codebase is
fixture-heavy, mirror it. Re-run the chunk's tests to confirm still green.
Commit the tests + implementation + refactor together, locally, on the current
branch. Match the repo's message style (Feat:, Fix:, Refactor: prefix):
git add -A && git commit -m "Feat: add Symmetry.multiplicity"Do not push or open a PR — that is a separate, later step
(push-py4vasp). For a multi-line message use git commit -F <file> or a
heredoc, never git commit -m @'...'@ in the Bash tool (it wraps the message
in literal @).
After the commit lands, say which chunk is done and what the next one is. Start the next chunk as a fresh pass through this skill — do not roll straight on.
Only after the last chunk of the list run the whole suite once, and only report the work as done to the user if it is green:
python .claude/skills/tdd-py4vasp/run_tests.py -qRead a sibling test before writing yours — tests/calculation/test_symmetry.py
is a good template. Key patterns:
tests/conftest.py: raw_data (a RawDataFactory),
Assert (use Assert.allclose(actual, desired) for arrays/dataclasses),
format_, check_factory_methods.SomeClass.from_data(raw_data.<quantity>("Sr2TiO4")). Tests attach a
reference namespace (obj.ref = types.SimpleNamespace(); obj.ref.raw = ...)
and assert against it.read/to_dict (with a
test_to_dict_is_alias_of_read), print/_repr_, and
test_factory_methods(raw_data, check_factory_methods).src/py4vasp/_demo/ and register a
method on RawDataFactory in tests/conftest.py, so raw_data.<quantity>()
exists for your test.tests/test_doctest.py executes examples from _calculation with path and
py4vasp injected as globals, so the example must build its own data.py4vasp.exception; user selections go through
select.Tree / index.Selector.pytest.importorskip("spglib") as existing tests do..pth
file pointing at the main repo's src. Inside a .claude/worktrees/<name>
worktree, a bare pytest silently tests the main repo and ignores your edits.
Always run tests through run_tests.py (it prepends the correct src to
PYTHONPATH and prints which one it used) — or set PYTHONPATH to the
worktree src yourself. Verify with:python -c "import py4vasp; print(py4vasp.__file__)"There is no app to launch — this is a workflow skill. Developers run the same tests directly with the project's tooling:
uv run --active pytest tests/calculation/test_symmetry.pyUse run_tests.py (or set PYTHONPATH) instead when working inside a worktree,
so the tests exercise your edits rather than the main checkout.
© vasp-dev, 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 1 other file in .claude/skills/tdd-py4vasp of vasp-dev/py4vasp.
Open the folder on GitHubat commit 83a1168
TDD Py4vasp 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 |
|---|---|---|---|---|---|---|
| TDD Py4vasp this skillvasp-dev/py4vasp | 100 | — | ~2k | Automated safety check: Pass | Apache-2.0 | |
| Foreman DebugVisionForge-OU/foreman | 443 | — | ~1.1k | Automated safety check: Pass | Custom licence | |
| Fix Bugtddworks/ClaudeBar | 1.5k | — | ~2.2k | Automated safety check: Pass | Apache-2.0 | |
| Deck Reproasheshgoplani/agent-deck | 1k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Bug Fix TDDstacklok/toolhive-studio | 170 | — | ~1.7k | Automated safety check: Notes | Apache-2.0 | |
| Opsmill Dev Test Driving Bugsopsmill/infrahub | 531 | — | ~4k | Automated safety check: Pass | Apache-2.0 |
VisionForge-OU/foreman
Headless root-cause debugging loop for a Foreman worker whose tests, build, or acceptance check are failing — especially on a retry.
tddworks/ClaudeBar
Guide for fixing bugs in ClaudeBar following Chicago School TDD and rich domain design.
asheshgoplani/agent-deck
Reproduce agent-deck bugs from an issue, transcript excerpt, or description in an isolated environment, and prove fixes with the same reproduction and a regression test.
stacklok/toolhive-studio
Reproduce and fix bugs using TDD. An agent skill from stacklok/toolhive-studio.
opsmill/infrahub
Writes a single failing test that reproduces a bug after its root-cause analysis is complete, before any fix is written.
ruby-git/ruby-git
Follows a strict Test-Driven Development (TDD) workflow with four phases: triage, prepare, execute, and finalize.
vasp-dev/py4vasp
Plan a py4vasp change as an ordered list of test-first chunks — that chunk list is the plan.
vasp-dev/py4vasp
Push py4vasp changes to origin and open a PR. An agent skill from vasp-dev/py4vasp.
vasp-dev/py4vasp
Code review for py4vasp changes. An agent skill from vasp-dev/py4vasp.
vasp-dev/py4vasp
Validate a py4vasp change from the outside by dispatching a subagent to role-play a user who may read only the documentation, never the source.
Categories
Carry out ONE chunk of a py4vasp change test-first: RED (watch the test fail for the right reason) → GREEN → refactor → one local commit. TDD Py4vasp is an agent skill from vasp-dev/py4vasp. Carry out ONE chunk of a py4vasp change test-first: RED (watch the test fail for the right reason) → GREEN → refactor → one local commit.
TDD Py4vasp fits situations like: each chunk of an approved chunk list; for any change small enough to be a single chunk on its own — one method; one narrow behavior; A focused bug fix.
Run `npx skills add vasp-dev/py4vasp --skill tdd-py4vasp -a claude-code`. Or copy the skill folder (.claude/skills/tdd-py4vasp in vasp-dev/py4vasp) into .claude/skills/tdd-py4vasp in your project. Claude Code loads it when a task matches its description.
Run `npx skills add vasp-dev/py4vasp --skill tdd-py4vasp -a codex`. Or copy the skill folder (.claude/skills/tdd-py4vasp in vasp-dev/py4vasp) into .agents/skills/tdd-py4vasp 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 vasp-dev/py4vasp --skill tdd-py4vasp -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/tdd-py4vasp, .gemini/skills/tdd-py4vasp, .github/skills/tdd-py4vasp and .opencode/skills/tdd-py4vasp in your project.
Going by SKILL.md and its folder, TDD Py4vasp needs Python for the scripts in its folder and the command-line tools its instructions call (python, git and uv). Our summary lists: Python 3.
SKILL.md contains no URLs. Its commands use git and uv, 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 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.
TDD Py4vasp 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 2k tokens (SKILL.md is roughly 7.9k 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 TDD Py4vasp: Foreman Debug (VisionForge-OU/foreman, 443 stars), Fix Bug (tddworks/ClaudeBar, 1.5k stars), Deck Repro (asheshgoplani/agent-deck, 1k stars) and Bug Fix TDD (stacklok/toolhive-studio, 170 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
vasp-dev (a GitHub organization) maintains it in vasp-dev/py4vasp, which has 100 GitHub stars. The repository holds 5 skills in this directory. The repository was last updated on October 7, 2026.
Source: vasp-dev/py4vasp on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.