Snap forge
SNAP — agent skills for smart models that ship real software.
npx -y skills add sadiksaifi/skills --skill snap-forgeAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Implement ready tasks with strict test-driven development. Use when the user wants to build features or fix bugs using TDD cycles, mentions "red-green-refactor", wants integration tests, or asks for test-first development with committed TDD progress.
SKILL.md
5.8 KB, as published. Nobody here has run it
Invocation
Syntax: /skill:snap-forge [branch[=name]] [worktree[=path]]
Args
| Key | Values | Default | Notes |
|---|---|---|---|
help | bool | false | show usage |
branch | bool/text | false | branch derives a branch name; branch=name uses name |
worktree | bool/text | false | worktree derives a worktree path/branch; worktree=path uses path |
Test-Driven Development
Philosophy
Core principle: Tests should verify meaningful behavior through public interfaces, not implementation details. Code can change entirely; tests shouldn't.
Good tests are integration-style: they exercise real code paths through public APIs. They describe what the system does, not how it does it. A good test reads like a specification - "user can checkout with valid cart" tells you exactly what capability exists. These tests survive refactors because they don't care about internal structure. Write tests because the behavior is important, risky, or complex; do not add low-value tests just to raise coverage.
Bad tests are coupled to implementation. They mock internal collaborators, test private methods, or verify through external means (like querying a database directly instead of using the interface). The warning sign: your test breaks when you refactor, but behavior hasn't changed. If you rename an internal function and tests fail, those tests were testing implementation, not behavior.
See tests.md for examples and mocking.md for mocking guidelines.
Anti-Pattern: Horizontal Slices
DO NOT write all tests first, then all implementation. This is "horizontal slicing" - treating RED as "write all tests" and GREEN as "write all code."
This produces crap tests:
- Tests written in bulk test imagined behavior, not actual behavior
- You end up testing the shape of things (data structures, function signatures) rather than user-facing behavior
- Tests become insensitive to real changes - they pass when behavior breaks, fail when behavior is fine
- You outrun your headlights, committing to test structure before understanding the implementation
Correct approach: Vertical slices via tracer bullets. One test → one implementation → repeat. Each test responds to what you learned from the previous cycle. Because you just wrote the code, you know exactly what behavior matters and how to verify it.
WRONG (horizontal):
RED: test1, test2, test3, test4, test5
GREEN: impl1, impl2, impl3, impl4, impl5
RIGHT (vertical):
RED→GREEN: test1→impl1
RED→GREEN: test2→impl2
RED→GREEN: test3→impl3
...
Workflow
1. Planning
When exploring the codebase, use the project's domain glossary so that test names and interface vocabulary match the project's language, and respect ADRs in the area you're touching. If the user passes an issue reference, PRD, spec, URL, or path, fetch it recursively and read the relevant body, comments, and linked context.
If branch or worktree is provided, prepare it before editing. Bare branch or worktree means derive a sensible name; branch=name or worktree=path means use the provided value.
Before writing any code:
- Confirm with user what interface changes are needed
- Confirm with user which behaviors to test (prioritize)
- Identify opportunities for deep modules (small interface, deep implementation)
- Design interfaces for testability
- List the behaviors to test (not implementation steps)
- Get user approval on the plan
Ask: "What should the public interface look like? Which behaviors are most important to test?"
You can't test everything. Confirm with the user exactly which behaviors matter most. Focus testing effort on critical paths and complex logic, not every possible edge case. Do not write unnecessary coverage-only tests.
2. Tracer Bullet
Write ONE test that confirms ONE thing about the system:
RED: Write test for first behavior → test fails
GREEN: Write minimal code to pass → test passes
This is your tracer bullet - proves the path works end-to-end. When it is green, verify the relevant checks and commit the completed behavior with a small, atomic Conventional Commits v1.0.0 message.
3. Incremental Loop
For each remaining behavior:
RED: Write next test → fails
GREEN: Minimal code to pass → passes
Rules:
- One test at a time
- Only enough code to pass current test
- Don't anticipate future tests
- Keep tests focused on observable behavior
- When the behavior is green, verify the relevant checks and commit it with a small, atomic Conventional Commits v1.0.0 message
- Keep commits small and atomic: one completed behavior per commit
4. Refactor
After all tests pass, look for refactor candidates:
- Extract duplication
- Deepen modules (move complexity behind simple interfaces)
- Apply SOLID principles where natural
- Consider what new code reveals about existing code
- Run tests after each refactor step
Never refactor while RED. Get to GREEN first. Commit refactoring separately when it changes code.
Checklist Per Cycle
[ ] Test describes behavior, not implementation
[ ] Test uses public interface only
[ ] Test would survive internal refactor
[ ] Test covers meaningful behavior, not coverage padding
[ ] Code is minimal for this test
[ ] No speculative features added
[ ] Relevant checks pass
[ ] Completed behavior is committed