From exo
Write a single regression test that reproduces a bug. The test fails on the broken code and passes after the fix. Use "bug-repro write" before implementing the fix.
How this skill is triggered — by the user, by Claude, or both
Slash command
/exo:bug-reproThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
For the `bug` track, the dev-loop replaces full BDD authoring with a single regression test. The test asserts the **fixed** behavior so it fails against the current code and passes after the fix lands. This is the cheapest way to verify both the bug exists and the fix works.
For the bug track, the dev-loop replaces full BDD authoring with a single regression test. The test asserts the fixed behavior so it fails against the current code and passes after the fix lands. This is the cheapest way to verify both the bug exists and the fix works.
Generate one regression test that reproduces the bug.
Usage: bug-repro write
Steps:
Same logic as bdd-author's framework detection but for unit/integration tests:
pytest.ini, pyproject.toml [tool.pytest], conftest.py → pytestjest.config.*, vitest.config.*, package.json scripts.test → jest/vitestspec/spec_helper.rb → rspecgo.mod + existing *_test.go → standard testingCargo.toml + tests/ → built-inpom.xml / build.gradle → JUnitFrom $ISSUE_BODY extract:
If "Steps to reproduce" is missing, attempt to derive it from the body. If you cannot, return:
bug-repro: ABORT
Reason: no reproducible steps in issue #<number>
Action: ask the user for steps to reproduce, or downgrade the track from bug to spike.
The dev-loop agent should pause here.
test_issue_<number>_<short-slug>.<ext> (Python) or issue-<number>-<short-slug>.test.<ext> (JS/TS) or framework convention.test-loop full covers the rest.The test MUST:
bdd-author automate).main and PASS after the fix.Regression test for #<issue-number> [<REQ-ID if available>] — <one-line bug summary>.Python example:
def test_issue_42_reset_link_expires_in_one_hour():
"""Regression test for #42 [REQ-007] — reset link did not expire after 1h.
entry: POST /reset-password via TestClient | observe: HTTP response on second use
"""
client = TestClient(app)
# 1. Request a reset link
res = client.post("/reset-password", json={"email": "[email protected]"})
token = extract_token(res.json()["link"])
# 2. Advance the clock past the documented 1h TTL
with frozen_time("+1h 1m"):
# 3. Use the token — it should be rejected
res2 = client.post("/reset-password/confirm", json={"token": token, "password": "newp"})
assert res2.status_code == 410 # Gone — link expired
assert res2.json()["error"] == "link_expired"
JS/TS example:
test("issue #42 — reset link expires in 1h [REQ-007]", async () => {
// entry: POST /reset-password via supertest | observe: HTTP response on second use
const res = await request(app).post("/reset-password").send({ email: "[email protected]" });
const token = extractToken(res.body.link);
jest.useFakeTimers().setSystemTime(Date.now() + 60 * 60 * 1000 + 60 * 1000);
const res2 = await request(app)
.post("/reset-password/confirm")
.send({ token, password: "newp" });
expect(res2.status).toBe(410);
expect(res2.body.error).toBe("link_expired");
});
Execute the test once before reporting. The test SHOULD fail (because the bug isn't fixed yet). Capture the failure output.
git add <test-file-path>
git commit -m "test: add reproduction test for #<issue-number> [<REQ-ID>]"
Include [<REQ-ID>] only if available. Push.
Bug reproduction test: <path to test file>
Framework: <detected>
Test: <test function name>
Run result on current main: FAIL (as expected) | PASS (bug already fixed?) | ERROR (setup broken)
Traceability: #<issue-number> [REQ-XXX]
Next step: implement the fix, then run the test runner — the test should turn green.
.feature file for bugs.test-loop full step (Step 13 in dev-loop) runs after implementation and includes this regression test alongside the existing suite. No separate bdd test loop is needed for the bug track.nano-spec/README.md Traceability section so future maintainers can find it from the issue.npx claudepluginhub ubiquitousthey/exo --plugin exoProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.