Install any skill in seconds. Free to start, no credit card required.
Get Started Free →A disciplined loop for implementing, fixing, refactoring, or unblocking a single feature or slice in an existing codebase. Reads the relevant docs/specs first and reports drift before coding, splits work into small file-disjoint commit units, and for each unit runs a build/test gate then dispatches two independent reviewers in parallel and reconciles their findings before handing off a commit you run yourself (it never auto-commits). Use when the user says things like "implement this feature", "
.claude/skills/ccplugins-slicewise/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-07 | ✗→✓ | ▲ Improved | 515% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 153% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 78% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 94% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 73% | 0% |
The everyday discipline for building one slice at a time in an existing codebase. You write the code yourself, but every commit unit is objectively verified — a full test gate plus two independent reviewers reconciled against each other — and the human, not the agent, decides what lands.
한국어 안내는 README.ko.md를 참고하세요.
git commit. You hand the user exact, file-disjoint gitblocks and they run them, on a fresh branch for the current issue. (Only commit yourself if the user explicitly says "commit it" / "do it".)
then reconciled. No risk-based gating — the small unit that "looks trivial" is where the subtle bug hides. If only one reviewer is available, run it and warn that this invariant is relaxed.
anything lands. Risky changes get real integration tests, not mocks or fakes.
dependencies, edits to unrelated files — you ask first.
Read .slicewise.yml (or .json) at the repo root if present; otherwise auto-detect the toolchain from the ecosystem. See docs/configuration.md for the schema and the detect table. The keys you care about: build, test, integration, lint, docs (globs to read in Phase 1), reviewers (the roster for Phase 4), troubleshooting_log, commit_convention. When a key is absent, detect it (package.json→npm, Cargo.toml→cargo, go.mod→go test, pom.xml/build.gradle→mvn/gradle, pyproject.toml→pytest, Makefile→make) and state what you detected so the user can correct you.
docs globs (default: docs/**, **/*.md, plus any OpenAPI/schema/ADR files),the related code, and any design notes for this slice. Understand the contract before touching it.
code (a spec that no longer matches the schema, a data model that drifted from the migration), you report it and get a decision before writing code. Silently "fixing" it the wrong way is the classic trap.
docs). If one file is touched by two units, merge them into one unit.
lay down the skeleton with // TODO(impl) markers and fill it in deliberately — don't fake it.
systems go through a port/adapter, not a direct call.
build command). It must pass — that's the floor, not the goal.document mapping, concurrency and locking, migrations, money, auth/authorization, anything with a data-loss or ownership-boundary failure mode. Assert hard — exercise boundary values, ownership checks, time/ordering — so a false green can't sneak through.
test suite and confirm it is green (failures = 0).Dispatch the reviewer roster in parallel, in one message. All reviewers are read-only (they report; they never edit). The zero-config default roster is the bundled code-reviewer agent run twice with different lenses:
For cross-model diversity, set reviewers: ["codex", "code-reviewer"] in config to use one Codex reviewer (via the codex plugin, if installed) plus one Claude reviewer. If a configured reviewer isn't available, degrade to single and warn that the always-dual-review invariant is relaxed.
Shared prompt template (same for every reviewer, only the lens differs):
git diff of the working tree + the list of changed/new file paths + a couple ofreference files showing the pattern to match.
bugs, and security within that design instead of re-litigating the architecture.
file:line and a concrete fix. Explicit instruction: "If it's sound, say it's sound. Do not fabricate issues."
TOCTOU, migration safety, test adequacy, doc↔code consistency.
Reconcile (this step is the whole point). Compare the two reports; don't just concatenate them. See docs/reconcile-rubric.md for the full decision table. In short:
disagree, resolve by evidence, not by vote.
explicitly as the adoption). "Deterministic key, so a per-segment HEAD check is unnecessary — rejected."
test suite again — green. git add <exact paths for this unit> git commit -m "<conventional subject>" -m "<body>" Add a trailer (sign-off, issue ref, co-author) only if the project already uses one. The user runs the blocks. If they say "do it", then you run them.
status, ER diagrams, counts/summaries).
grep for its old name across every docand generated artifact (overview docs, exported schema JSON, SVG diagrams) so no straggler survives. Mark generated artifacts (SVGs, etc.) for regeneration. Historical changelog lines are history — leave them.
gh pr view <n> --json mergeable,mergeStateStatus,reviewDecision →CONFLICTING (conflicts) / UNSTABLE or BLOCKED (checks) / review.
origin/<base> in, resolve only the conflicts (union / consistency),confirm zero markers, and get the whole merge tree green before handing off the push.
When you hit a real troubleshooting trap (build, test, runtime, or a design pitfall), append it to the configured troubleshooting_log (default TROUBLESHOOTING.md). Create it if missing; append to the bottom if it exists — never a fresh file each time. Format each entry as: a one-line title (date + feature/branch), then Cause / Resulting problem / Fix / Alternatives considered. Record only reusable traps, not one-off typos — this is an accumulating asset so the next person doesn't hit the same wall.
git diff (assume a clean baseline before the unit).build/test/lint and gh run via Bash. Prefer the repo's own scripts over ad-hoc commands.switch), write it down where the project keeps such notes so it isn't lost.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 6,545 | 8,628 | +32% | 1 | 1 | 0% | 254 | 2,835 | +1016% | 0 | 0 | — |
case-02 | fail→fail | 39,778 | 6,571 | -83% | 1 | 1 | 0% | 7,683 | 2,634 | -66% | 0 | 0 | — |
case-03 | fail→fail | 5,694 | 7,464 | +31% | 1 | 1 | 0% | 159 | 2,702 | +1599% | 0 | 0 | — |
case-04 | pass→fail | 48,240 | 5,534 | -89% | 1 | 1 | 0% | 8,230 | 2,425 | -71% | 0 | 0 | — |
case-05 | pass→fail | 22,500 | 8,472 | -62% | 1 | 1 | 0% | 3,935 | 2,520 | -36% | 0 | 0 | — |
case-06 | pass→fail | 22,376 | 7,041 | -69% | 1 | 1 | 0% | 3,436 | 2,521 | -27% | 0 | 0 | — |
case-07 | fail→pass | 5,663 | 18,433 | +225% | 1 | 1 | 0% | 794 | 4,884 | +515% | 0 | 0 | — |
case-08 | pass→pass | 9,227 | 8,411 | -9% | 1 | 1 | 0% | 1,384 | 3,670 | +165% | 0 | 0 | — |
case-09 | fail→pass | 8,435 | 9,825 | +16% | 1 | 1 | 0% | 1,533 | 3,883 | +153% | 0 | 0 | — |
case-10 | fail→fail | 15,138 | 7,929 | -48% | 1 | 1 | 0% | 2,486 | 2,588 | +4% | 0 | 0 | — |
case-11 | fail→pass | 13,297 | 6,951 | -48% | 1 | 1 | 0% | 1,898 | 3,369 | +78% | 0 | 0 | — |
case-12 | fail→fail | 16,597 | 8,626 | -48% | 1 | 1 | 0% | 1,363 | 2,668 | +96% | 0 | 0 | — |
case-13 | fail→pass | 12,309 | 7,002 | -43% | 1 | 1 | 0% | 1,733 | 3,368 | +94% | 0 | 0 | — |
case-14 | fail→fail | 3,790 | 9,360 | +147% | 1 | 1 | 0% | 306 | 2,634 | +761% | 0 | 0 | — |
case-15 | fail→pass | 18,010 | 11,386 | -37% | 1 | 1 | 0% | 2,428 | 4,205 | +73% | 0 | 0 | — |
case-16 | fail→fail | 13,104 | 9,137 | -30% | 1 | 1 | 0% | 2,043 | 2,631 | +29% | 0 | 0 | — |
case-17 | fail→fail | 4,012 | 7,830 | +95% | 1 | 1 | 0% | 432 | 2,579 | +497% | 0 | 0 | — |
case-18 | fail→fail | 5,288 | 10,289 | +95% | 1 | 1 | 0% | 686 | 2,648 | +286% | 0 | 0 | — |
case-19 | fail→pass | 9,968 | 6,979 | -30% | 1 | 1 | 0% | 1,179 | 3,223 | +173% | 0 | 0 | — |
case-20 | fail→pass | 15,289 | 10,094 | -34% | 1 | 1 | 0% | 2,232 | 3,632 | +63% | 0 | 0 | — |
case-21 | pass→pass | 7,851 | 3,811 | -51% | 1 | 1 | 0% | 1,365 | 2,802 | +105% | 0 | 0 | — |
case-22 | fail→fail | 8,977 | 8,537 | -5% | 1 | 1 | 0% | 1,374 | 3,488 | +154% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 10 counted toward the lift figure. The other 12 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +18 percentage points is the difference between those two pass rates over the 10 comparable cases. 6 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.