Cook
π οΈ Dev Kit β lifecycle-driven Agent Skill for structured development workflows. Brainstorm, plan, implement, debug, fix, test & adversarial code review. Java/Spring Boot + TypeScript/React/Vue rules included. Compatible with Claude Code, Cursor, Kiro, and 40+ agentic clients.
npx -y skills add SoftwareOneHN/dev-kit --skill cookAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 0 stars0 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 tasks incrementally with test-first discipline. Use when ready to write code after planning. Supports --tdd flag for strict REDβGREENβREFACTOR cycle.
The file declares its own license as MIT. That is the authorβs claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
9.6 KB, as published. Nobody here has run it
Cook
Language Adaptation
Detect the user's language from their first message. If the user writes in a non-English language, ALL skill output β status updates, slice reports, questions β MUST be in that language. Do not mix languages.
Language-Specific Conventions
Before writing any code, detect the project language and load the corresponding convention file:
| Project type | Convention source |
|---|---|
Java (*.java, pom.xml, build.gradle) | /java-developer command |
Convention check hook: After touching ANY source file, verify the change against the loaded conventions BEFORE moving to the next step. If a violation is found, fix it immediately β do not proceed with a violation in place.
This is not optional. Every file touch triggers a convention check. No exceptions.
Overview
Build in thin vertical slices β implement one piece, test it, verify it, then move on. Never implement an entire feature in one pass. Each increment leaves the system in a working, testable state.
HARD GATE: Do NOT implement more than one slice without stopping to test and verify. Do NOT batch multiple slices into one pass. One slice at a time, no exceptions.
Modes
| Flag | Behavior |
|---|---|
| (default) | Incremental implementation with tests after each slice |
--tdd | Strict RED β GREEN β REFACTOR. Test written FIRST, must FAIL before any implementation |
When to Use
- Plan is approved and it's time to code
- Implementing any multi-file change
- Building a new feature from a task breakdown
- Fixing bugs (use
--tddwith the Prove-It Pattern)
When NOT to use: Single-line fixes, typo corrections, config-only changes.
The Increment Cycle (Default Mode)
ββββββββββββββββββββββββββββββββββββββββ
β β
β Implement βββ Test βββ Verify βββ β
β β² β β
β ββββββ Commit βββββββββββββββ β
β β β
β βΌ β
β Next slice β
β β
ββββββββββββββββββββββββββββββββββββββββ
For each slice:
- Implement the smallest complete piece of functionality
- Test β run the test suite (or write a test if none exists)
- Verify β confirm the slice works (tests pass, build succeeds)
- Commit β save progress with a descriptive message
- Report β tell the user what was done, what's next
- STOP β wait for user confirmation before next slice
The TDD Cycle (--tdd Mode)
RED GREEN REFACTOR
Write a test Write minimal code Clean up the
that fails βββ to make it pass βββ implementation βββ (repeat)
β β β
βΌ βΌ βΌ
Test FAILS Test PASSES Tests still PASS
Step 1: RED β Write a Failing Test
Write the test first. It MUST fail. A test that passes immediately proves nothing.
// RED: This test fails because createTask doesn't exist yet
@Test
void shouldCreateTaskWithDefaultStatus() {
Task task = taskService.createTask("Buy groceries");
assertThat(task.getId()).isNotNull();
assertThat(task.getTitle()).isEqualTo("Buy groceries");
assertThat(task.getStatus()).isEqualTo(TaskStatus.PENDING);
}
Step 2: GREEN β Make It Pass
Write the MINIMUM code to make the test pass. No over-engineering.
Step 3: REFACTOR β Clean Up
With tests green, improve the code without changing behavior. Run tests after every refactor step.
Then STOP. Report to user. Wait for confirmation before next cycle.
The Prove-It Pattern (Bug Fixes with --tdd)
Bug report arrives
β
βΌ
Write a test that demonstrates the bug
β
βΌ
Test FAILS (confirming the bug exists)
β
βΌ
Implement the fix
β
βΌ
Test PASSES (proving the fix works)
β
βΌ
Run full test suite (no regressions)
Slicing Strategies
Vertical Slices (Preferred)
Build one complete path through the stack:
Slice 1: Create a task (DB + API + basic UI)
β Tests pass, user can create a task
Slice 2: List tasks (query + API + UI)
β Tests pass, user can see their tasks
Slice 3: Edit a task (update + API + UI)
β Tests pass, user can modify tasks
Each slice delivers working end-to-end functionality.
Risk-First Slicing
Tackle the riskiest piece first:
Slice 1: Prove the WebSocket connection works (highest risk)
Slice 2: Build real-time updates on the proven connection
Slice 3: Add offline support and reconnection
If Slice 1 fails, you discover it before investing in Slices 2 and 3.
Rules
Rule 1: One Thing at a Time
Each increment changes one logical thing. Don't mix concerns.
Bad: One commit that adds a new component, refactors an existing one, and updates the build config.
Good: Three separate increments.
Rule 2: Keep It Compilable
After each increment, the project MUST build and existing tests MUST pass.
Rule 3: Scope Discipline
Touch only what the task requires.
Do NOT:
- "Clean up" code adjacent to your change
- Refactor imports in files you're not modifying
- Add features not in the spec
- Modernize syntax in files you're only reading
Rule 4: Simplicity First
Before writing any code, ask: "What is the simplest thing that could work?"
SIMPLICITY CHECK:
β Generic EventBus with middleware pipeline for one notification
β Simple function call
β Abstract factory pattern for two similar components
β Two straightforward components with shared utilities
Rule 5: No Batch Implementation
NEVER implement multiple slices in one go. After each slice:
- Report what was done
- Show test results
- Wait for user to say "next" or redirect
This is non-negotiable. The user must see each slice land before the next begins.
Writing Good Tests (--tdd)
Test State, Not Interactions
Assert on the outcome, not on which methods were called internally.
Prefer Real Implementations Over Mocks
Preference order:
1. Real implementation β Highest confidence
2. Fake β In-memory version of dependency
3. Stub β Returns canned data
4. Mock (interaction) β Use sparingly, at boundaries only
Arrange-Act-Assert Pattern
@Test
void shouldMarkOverdueTasksWhenDeadlinePassed() {
// Arrange
Task task = createTask("Test", LocalDate.of(2025, 1, 1));
// Act
OverdueResult result = checkOverdue(task, LocalDate.of(2025, 1, 2));
// Assert
assertThat(result.isOverdue()).isTrue();
}
One Assertion Per Concept
Each test verifies one behavior. Multiple assertions are fine if they verify the same concept.
Common Rationalizations
| Rationalization | Reality |
|---|---|
| "I'll test it all at the end" | Bugs compound. A bug in Slice 1 makes Slices 2-5 wrong. |
| "It's faster to do it all at once" | Feels faster until something breaks and you can't find which of 500 lines caused it. |
| "These changes are too small to commit separately" | Small commits are free. Large commits hide bugs. |
| "This is too simple to test" | Simple code gets complicated. The test documents expected behavior. |
| "I'll write tests after the code works" | You won't. And tests written after test implementation, not behavior. |
| "Let me just quickly add this too" | Scope expansion. Stop. |
Red Flags
- More than 100 lines written without running tests
- Multiple unrelated changes in a single increment
- Implementing the next slice without reporting the previous one
- Skipping the test/verify step to move faster
- Build or tests broken between increments
- Writing code before a failing test exists (in --tdd mode)
- Running the same test command twice without code changes in between
Verification
After each slice:
- The change does one thing completely
- All existing tests pass
- Build succeeds
- New functionality works as expected
- Change is committed
- User was informed before moving to next slice
After all slices complete:
- Full test suite passes
- Feature works end-to-end as specified
- No uncommitted changes remain
Gives 2 of the 12 instructions most tdd skills give
Counted across 439 of the 443 authors here whose files we hold, read 2026-08-06
- write minimal code to pass the testhere, and in 302 of 439, across 218 files
- write a failing test firsthere, and in 176 of 439, across 112 files
- refactor code only after tests passin 171 of 439, across 101 files
- watch the test fail before writing codein 142 of 439, across 93 files
- test one behavior per testin 106 of 439, across 44 files
- refactor code while keeping tests greenin 99 of 439, across 86 files
- delete code written before testsin 98 of 439, across 54 files
- run tests after each refactor stepin 85 of 439, across 54 files
- Use real code instead of mocks unless unavoidablein 64 of 439, across 21 files
- confirm the test fails for the right reasonin 64 of 439, across 60 files
- reproduce bugs with a test before fixingin 53 of 439, across 36 files
- write tests before implementationin 48 of 439, across 39 files
Said here and by no other author read
- match the user's language in all outputs
- load project conventions before writing code
- verify changes against loaded conventions after every file touch
- run tests after each slice
- wait for user confirmation before the next slice
- tackle the riskiest piece first
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once.