Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Reconnoiter, classify, validate, group, and commit a large or continuously changing Happier worktree as coherent, human-understandable commits while preserving concurrent work and excluding temporary, generated, QA, evidence, build, and other unwanted artifacts. Use when the user asks to commit many existing uncommitted changes, continue a long-running commit campaign, explain what remains, recover that campaign after compaction or interruption, or safely process newly landed changes in a shared
.claude/skills/happier-dev-happier-commit-worktree/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-13 | ✗→✓ | ▲ Improved | 133% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 160% | 0% |
| case-04 | ✓→✗ | ▼ Worse | 28% | 0% |
| case-12 | ✓→✗ | ▼ Worse | 175% | 0% |
| case-16 | ✓→✗ | ▼ Worse | 88% | 0% |
Turn an existing moving worktree into a sequence of reviewable commits without treating file count, directory boundaries, or the current index as truth. Preserve all bytes on disk, prove what each commit contains, and leave uncertain material uncommitted with a specific reason.
A large-worktree request is a campaign, not a request for one commit or one analysis wave. Continue recon, packet preparation, committing, and residual classification until every current path is committed or has an evidence-backed exclusion or blocker. Producing a few commits while commit-ready paths remain is incomplete execution unless the user explicitly pauses the campaign.
Require an explicit user request to commit. Analysis alone does not authorize staging or commits.
Apply these invariants throughout:
git reset, git restore, git clean, git checkout, git switch, or an equivalent destructive operation.git config user.name and git config user.email for every ordinary commit. Verify both before the first commit; never rewrite them to a bot, PR author, issue author, or other contributor, and stop rather than inventing a missing identity.Co-authored-by: attribution per packet. Add a verified contributor only when that packet materially incorporates their code, patch, design, causal diagnosis, decisive reproduction, or substantially adopted fix direction; never infer attribution from PR/issue authorship or participation alone.Read private-index-protocol.md before the first commit in a campaign. Read recovery-and-audit.md whenever the index is unusual, a process was interrupted, HEAD moved, a lock appeared, or the user asks whether everything was preserved.
Record compact observed evidence before grouping:
bashgit rev-parse HEAD git status --short git diff --cached --name-status git diff --stat git ls-files --others --exclude-standard
Do not equate a clean shared index with a clean worktree. Do not equate an untracked path with source code. If the shared index is non-empty, inspect it before proceeding; never clear inherited staging by assumption.
Build a resumable inventory grouped by package, domain, change kind, and likely provenance. Snapshot at wave boundaries and refresh paths that overlap a completed commit or changed during analysis; do not repeat repository-wide recon after every commit when independent inventory remains valid.
Use maximum useful parallelism where it shortens the critical path. Give each lane an exact, preferably disjoint path inventory and require:
The lane must account for every assigned path as part of a commit-ready packet, an evidence-backed exclusion, or an unresolved item with the exact missing fact. It does not finish after finding representative groups or the first few commits. Sampling is not successful reconnaissance.
Reconnaissance lanes do not stage or mutate Git unless explicitly assigned commit authority. A single orchestrator should normally perform HEAD updates. If multiple agents must commit, each uses a private index and compare-and-swap update from its observed parent; a stale agent rebuilds from the new HEAD rather than forcing or replaying blindly.
Follow the active subagent context policy. Default to no inherited transcript and provide a self-contained brief with exact scope, evidence, paths, checks, output, and stop conditions. Do not let lanes create ad hoc review files or use path "custody" as a substitute for checking current bytes and actual hunk collisions.
Read campaign-throughput.md before orchestrating a large or continuing campaign. It defines rolling waves, confidence lanes, packet queues, parallel topology, validation reuse, progress gates, compaction anchors, and valid stopping conditions. Read grouping-and-messages.md for the classification rubric, artifact policy, commit sizing, and message standard.
Keep the serial commit authority supplied with prepared work:
Green packets proceed immediately. Yellow investigation and red exclusions must not idle unrelated green work. Maintain a compact in-memory queue containing each packet's intent, owner, exact paths/hunks, dependencies, message, validation, and confidence. If many valid paths remain but the ready queue is empty, reconnaissance has failed and must resume rather than ending the campaign.
Parallelize reconnaissance, history/provenance checks, message preparation, and independent validation. Keep final packet adjudication, private-index creation, CAS HEAD updates, and shared-index synchronization under one serial authority by default. Parallel commit writers are exceptional: private indexes isolate staging but not history, so CAS retries and overlap recovery can cost more than they save.
Group by one reviewable intent, invariant, migration, or user outcome, not by arbitrary path count. Include the complete slice needed to understand and verify that intent:
Prefer useful batches, commonly 5-50 files and sometimes larger for uniform mechanical migrations, provider matrices, icon replacements, snapshots, or generated-contract updates. File count is a throughput heuristic, never permission to mix unrelated work. Avoid one-file commits when nearby changes complete the same idea, but keep a truly self-contained one-file correction separate.
Split a file by hunk when its changes serve different intents. Do not force an entire mixed file into the first convenient group.
Order packets by dependency: contracts and shared owners before consumers, implementation with defining tests, migrations before cleanup, and mechanical follow-ups after behavior is established.
Before staging an unfamiliar path, determine what produced it and whether it belongs in source control. Use current bytes, repository references, ignore rules, tracked history, build scripts, test harnesses, and timestamps as evidence. Typical exclusions include:
.tmp*, .vite-node, probes, logs, screenshots, recordings, coverage, evidence, and QA captures;Do not delete uncertain paths as part of committing. Leave them uncommitted and report why. Add a narrow ignore rule when the producer is legitimate, recurrence is likely, and the path class is never source material. Do not hide a tracked source path or broad directory merely to make status disappear.
Inspect the exact private-index diff before creating a commit:
bashGIT_INDEX_FILE="$idx" git diff --cached --stat GIT_INDEX_FILE="$idx" git diff --cached --check GIT_INDEX_FILE="$idx" git diff --cached --name-status GIT_INDEX_FILE="$idx" git diff --cached
Run the narrowest deciding tests appropriate to each packet. Batch compatible package-wide typechecks, builds, and broader suites once per wave rather than repeating an identical expensive check after every commit. Record which packets a shared check covers and invalidate that evidence only when later bytes touch its deciding corridor. For pre-existing behavior changes, inspect whether tests and implementation agree rather than automatically changing whichever fails. Classify failures as a real defect, test drift, harness/environment failure, external-contract change, resource saturation, or unrelated concurrent failure.
git commit-tree does not run ordinary pre-commit, prepare-commit-msg, commit-msg, or post-commit hooks. Before the campaign's first commit, inspect repository hook policy and run the required hook-equivalent checks explicitly for every applicable packet and message. Preserve required signing policy rather than silently creating unsigned commits.
Check for accidental secrets and objects that violate the remote's file-size policy before committing large or binary material. Never solve a source-control size failure by assuming Git LFS or committing a vendor/build tree without establishing that repository policy requires it.
Do not claim a test or typecheck passed unless it ran. A coherent commit may proceed with a known unrelated failing check or unavailable saturated test environment only when the limitation is evidenced, unaffected, and disclosed. Do not repeatedly launch checks known to be infrastructure-blocked; continue independent packets and retry at a useful wave boundary.
Follow private-index-protocol.md exactly. The essential transaction is:
HEAD as the intended parent;git commit-tree;HEAD with git update-ref HEAD <commit> <expected-parent>;Compare-and-swap is mandatory. If HEAD moved, discard only the temporary index and rebuild the packet from the new HEAD and current worktree bytes. Never force the ref and never assume the previously built tree can simply be attached to a different parent.
This transaction never rewrites the worktree. If new bytes land in a committed file after private staging, the committed snapshot becomes HEAD and the newer bytes remain visible as an uncommitted modification. That is the required behavior.
Immediately verify:
bashgit show --stat --oneline --decorate -1 git diff --cached --name-status git status --short -- <committed-paths...>
An M after the commit can be correct: compare HEAD, index, and worktree to determine whether later bytes remain. A staged deletion after a successful commit is usually an index-synchronization defect; explicitly remove the deleted path from the shared index as documented in the protocol.
Maintain a compact campaign ledger in the conversation or an already-approved tracking document, not a new ad hoc report file. Track completed commit ids, domain coverage, validation, residual groups, exclusions, and blockers. This is the anchor after compaction or interruption; always inspect live Git state before trusting it.
At each wave boundary record the starting and remaining path counts, paths consumed, commits created, ready queue depth, exclusions, unresolved count, current HEAD, next prepared packets, and validation constraints. Progress is reduced unresolved work, not merely commit count. Preserve this anchor in every compaction or continuation handoff so the next agent resumes instead of restarting recon.
When no clear candidate group remains:
"Uncertain" is not a convenient stopping label. Before using it, inspect the current diff, references/callers, relevant history, owner/test relationship, and provenance evidence appropriate to the path. State the exact decision that remains unresolved and the observation that would decide it. Continue all independent work that cannot prejudge that decision.
Do not stop because one wave completed, one domain is exhausted, an agent returned partial results, a preferred test environment is saturated, or some red paths remain. Stop only when every current path is committed or classified, no commit-ready packet remains, and safely obtainable evidence cannot resolve the remaining blockers; or when the user explicitly pauses.
Say "everything appropriate is committed" only when every current residual path has an observed reason not to commit. Never shorten that to "everything is committed" when artifacts, uncertainty, later changes, or blockers remain.
Before handoff, run .agents/skills/attack-conclusion: challenge grouping coherence, missing siblings, artifact provenance, index cleanliness, concurrent-byte preservation, dependency ordering, and the possibility that a passing check did not exercise the changed contract.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 7,707 | 7,980 | +4% | 1 | 1 | 0% | 188 | 3,348 | +1681% | 0 | 0 | — |
case-02 | fail→fail | 7,154 | 12,811 | +79% | 1 | 1 | 0% | 330 | 3,400 | +930% | 0 | 0 | — |
case-03 | fail→fail | 9,683 | 9,080 | -6% | 1 | 1 | 0% | 191 | 3,301 | +1628% | 0 | 0 | — |
case-04 | pass→fail | 17,681 | 11,498 | -35% | 1 | 1 | 0% | 2,707 | 3,456 | +28% | 0 | 0 | — |
case-05 | pass→pass | 7,835 | 9,358 | +19% | 1 | 1 | 0% | 1,615 | 4,418 | +174% | 0 | 0 | — |
case-06 | fail→fail | 5,473 | 23,194 | +324% | 1 | 1 | 0% | 739 | 4,344 | +488% | 0 | 0 | — |
case-07 | pass→pass | 12,188 | 6,454 | -47% | 1 | 1 | 0% | 1,515 | 3,725 | +146% | 0 | 0 | — |
case-08 | fail→fail | 7,870 | 11,624 | +48% | 1 | 1 | 0% | 1,182 | 3,523 | +198% | 0 | 0 | — |
case-09 | pass→pass | 11,956 | 7,568 | -37% | 1 | 1 | 0% | 1,684 | 4,161 | +147% | 0 | 0 | — |
case-10 | fail→fail | 11,154 | 6,278 | -44% | 1 | 1 | 0% | 952 | 3,959 | +316% | 0 | 0 | — |
case-11 | fail→fail | 9,800 | 3,546 | -64% | 1 | 1 | 0% | 1,448 | 3,438 | +137% | 0 | 0 | — |
case-12 | pass→fail | 35,304 | 8,690 | -75% | 1 | 1 | 0% | 1,330 | 3,656 | +175% | 0 | 0 | — |
case-13 | fail→pass | 16,945 | 26,177 | +54% | 1 | 1 | 0% | 2,312 | 5,380 | +133% | 0 | 0 | — |
case-14 | fail→pass | 13,726 | 10,304 | -25% | 1 | 1 | 0% | 1,632 | 4,244 | +160% | 0 | 0 | — |
case-15 | pass→pass | 11,955 | 14,117 | +18% | 1 | 1 | 0% | 1,832 | 4,149 | +126% | 0 | 0 | — |
case-16 | pass→fail | 13,895 | 9,408 | -32% | 1 | 1 | 0% | 1,887 | 3,546 | +88% | 0 | 0 | — |
case-17 | pass→pass | 11,888 | 6,147 | -48% | 1 | 1 | 0% | 1,435 | 3,572 | +149% | 0 | 0 | — |
case-18 | pass→pass | 9,410 | 5,283 | -44% | 1 | 1 | 0% | 1,312 | 3,684 | +181% | 0 | 0 | — |
case-19 | pass→pass | 9,818 | 7,368 | -25% | 1 | 1 | 0% | 1,297 | 3,964 | +206% | 0 | 0 | — |
case-20 | pass→pass | 17,097 | 13,817 | -19% | 1 | 1 | 0% | 2,041 | 5,516 | +170% | 0 | 0 | — |
case-21 | pass→pass | 13,059 | 20,502 | +57% | 1 | 1 | 0% | 2,126 | 6,087 | +186% | 0 | 0 | — |
case-22 | pass→pass | 6,035 | 8,997 | +49% | 1 | 1 | 0% | 991 | 4,418 | +346% | 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 16 counted toward the lift figure. The other 6 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 -5 percentage points is the difference between those two pass rates over the 16 comparable cases. 3 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.