Skip to content
Back to skills

Incremental Commits

ASecurity

Commit boundaries and messages on a task branch. Use when deciding where to cut a commit or how to word one while implementing.

  • 109 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 19, 2026
ai-agentsgogit

Works with

  • terminal

Security analysis

A100/100

Scanned October 2, 2026

npx -y skills add makifbaysal/tasktrooper --skill incremental-commits --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Incremental Commits?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Incremental Commits
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/makifbaysal-incremental-commits/badge)](https://www.skillsdirectory.com/skills/makifbaysal-incremental-commits)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: incremental-commits
category: workflow
description: Commit boundaries and messages on a task branch. Use when deciding where to cut a commit or how to word one while implementing.
source: obra/superpowers (MIT), adapted
---
# Incremental Commits

## Overview

Work in bite-sized steps, not one large change. Small commits keep each step reversible and make revisions cheap to localize.

## The Process

1. Before coding, turn the task into a short ordered list of steps. Each step is ONE action worth 2–5 minutes:
   - "Write the failing test" — a step
   - "Run it and watch it fail" — a step
   - "Write minimal code to pass" — a step
   - "Run the tests, all green" — a step
   - "Commit" — a step
2. Commit locally after each green step on your task branch: `run_terminal` with `git add -A && git commit -m "<type>: <imperative summary>"`. Do not push, and do not call `commit_task_changes` mid-run — the system commits and pushes your run's final state and opens the pull request at hand-off; a mid-run commit of your own is never the one that ships.
3. Each commit is one logical change: the test and the code that satisfies it belong together; unrelated changes never share a commit.
4. Commit message: imperative summary line; explain WHY in the body when it is not obvious from the diff.

## Rules of Thumb

- Never accumulate a large uncommitted change — if the diff is hard to describe in one sentence, you missed a commit point.
- A step should end with an independently verifiable state (test green, build passing).
- Setup/scaffolding folds into the step whose deliverable needs it; don't commit empty skeletons.
- If a step balloons mid-way, stop, commit what is green, and re-slice the rest.

## Quick Reference

| Situation | Commit boundary |
|-----------|-----------------|
| Test + code that satisfies it | One commit together |
| Two unrelated behaviors | Two commits |
| Refactor + behavior change | Separate commits (refactor first, while green) |
| Setup/scaffolding | Folded into the step that needs it — no empty-skeleton commits |
| Formatting-only change | Its own commit, never mixed with logic |

## Worked Example

Task: add a `priority` field to task creation. A good branch history:

```
feat: add priority column migration
test: expect create to persist priority
feat: persist priority in create handler
test: default priority to "medium" when omitted
feat: default omitted priority to medium
```

Five focused commits. When QA later reports "omitted priority crashes," the fix and the guard test land on top as commit six — nobody re-reads the migration. Compare to one `feat: add priority` blob, where the same fix forces a reviewer back through the entire change.

## Why

- **Each green commit is a checkpoint, not a review unit.** PRs here are squash-merged and the reviewer reads the whole PR diff at once, not your individual commits — so commit granularity is for YOU: `git reset --hard` to the last green commit when a step goes wrong instead of untangling a half-finished working tree.
- When a revision comes back, small commits localize what to change even though the reviewer never saw them individually.
- If an approach fails, you lose one step, not the whole task.

## Red Flags

- The diff is hard to describe in one sentence → you missed a commit point.
- `git status` shows changes across five unrelated areas → you batched.
- You are about to commit with message "wip" or "fixes" → the step wasn't a clean logical unit.
- You are about to push or call `commit_task_changes` mid-run → that is the system's job at hand-off, not yours mid-task.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…