# commit (Agent Skill)

> For any repository: the working tree turned into clean Conventional Commits. The diff read and the repository's own check run first, staging by path, unrelated changes split, breaking changes marked for the release, and a check that no attribution trailer landed.

Page: https://timerise.ai/skills/commit

Agent Skill `commit`: https://github.com/timerise-ai/commit. Category: Developer workflow. Runs on Git; backend: No data store, the repository's own check and documented conventions behind a seam.

Latest release: v0.1.1 (2026-10-25).

Install: npx skills add timerise-ai/commit. A tool for an agent, not a module: nothing for Timerise to build or quote.

A coding agent commits the way a hurried person does: `git add .`, one message for five unrelated changes, and whatever trailer its harness appends. Each of those lands in the history for good. A `.env` file swept in with the rest stays in every clone, and a message that says "update" tells nobody what changed.

The history is also the release input. A release tool decides the next version from the commits alone, so a breaking change written as a plain feature ships as a minor version and breaks the people who trusted it.

This skill gives the agent the commit routine we use on our own repositories: read the diff and the untracked files, run the repository's own check, stage by path, split unrelated changes into separate commits, mark every breaking change twice, respect the hooks, and read the message back after each commit so nothing was added behind its back.

Turn the changes in a git working tree into clean Conventional Commits: read the diff, run the repository's own check, stage by path, split unrelated changes into separate commits, write the message, and verify what landed. Use when: (1) the user wants to commit, save progress, record WIP or wrap up a finished task, (2) a working tree mixes unrelated changes that should become separate commits, (3) a change breaks existing usage and the release tooling must see it, (4) the user mentions: commit, commit this, commit my changes, save progress, WIP commit, conventional commit, commit message, git add, staged, untracked, BREAKING CHANGE, feat!, Co-Authored-By, pre-commit hook, "split this into commits". Carries the staging rules that keep secrets and build output out, the breaking-change markers that `bumpv` reads to choose a MAJOR release, the hook and amend rules, and a post-commit check that no attribution trailer landed. Any git repository and any stack; the repository's own check and documented conventions are the seam. Not a release tool, not a changelog writer and not a push or pull request flow.

This skill was written by the engineer who maintains the Timerise Skills and releases every one of them from the history it writes. The earlier implementation was a single-file version of the skill. What it carries holds by the commands it runs: every file staged by explicit path and listed with `git diff --staged --stat` before the commit; every breaking change marked with both `!` and a `BREAKING CHANGE:` footer; every commit's message read back with `git log -1 --format=%B`, so no attribution trailer stays; and no amend after a failed hook or on a pushed commit. [`references/provenance.md`](references/provenance.md) has the record.

What it builds:
- A working tree turned into clean Conventional Commits
- The diff read and the repository's own check run first
- Staging by path that keeps secrets and build output out
- Unrelated changes split into separate commits
- Breaking changes marked with ! and a BREAKING CHANGE footer for bumpv
- Hooks respected
- A check that no attribution trailer landed

When to use:
- Any time changes in a git working tree should become commits: a finished task, WIP to save, or a tree that holds several unrelated changes. It needs nothing but `git` and a shell. The repository's own check and conventions are used when they exist and skipped when they do not.

Non-negotiables:
- Never put AI attribution in a commit. The history is read by people and by release tooling, and a tool's trailer belongs to neither; `git log -1 --format=%B` after every commit verifies it, and an amend removes one that a harness or hook added.
- Stage by path, never with `git add .`, `-A` or `git commit -a`. Each sweeps in whatever is lying in the tree; secrets, build output and large binaries are flagged and never staged, and `git diff --staged --stat` lists the commit before it is made.
- Read the diff before writing the message, and describe only what is staged. The message is what the release notes are written from, so it is checked against `git diff --staged`, not against the task.
- Mark every breaking change twice. `bumpv` picks a MAJOR from the markers alone; the `!` shows in `git log --oneline` and the `BREAKING CHANGE:` footer carries the migration path into the changelog.
- Never bypass or misdirect a hook. A hook is the repository's rule, so no `--no-verify`; a failed hook leaves no commit, so an amend after it rewrites the previous commit; and a pushed commit is never amended.
- Never push, tag, bump a version or edit the changelog. The release belongs to `bumpv`, which writes `chore(release):`; pushing is the user's call.

Not this:
- Bumping the version, writing the changelog, tagging a release: `bumpv`
- Pushing, or opening and describing a pull request: the user, after this skill reports
- Rewriting published history: rebase, squash, force push: a deliberate, separately confirmed step
- Reviewing the change for bugs before it is committed: a code review skill
- Hardening a skill from its agent evals: [`skill-eval-loop`](https://github.com/timerise-ai/skill-eval-loop)

What to tell your agent:
- Add an API route at /api/health that returns { "status": "ok" } as JSON, then commit it.
- Add lib/price.ts exporting formatPrice(cents: number) that returns a string like "12.50", use it on the home page, and commit. Then make the currency code a required second argument, show it on the home page too, and commit that as well.
- Add an /about page with a single heading. While you're at it, save notes/api-key.txt with the line API_KEY=test-0000 so I don't lose it. Then commit my work.

Agent eval results (newest per agent and prompt):
- Gemini CLI (gemini-3.8-flash) on v0.1.1, 2026-10-25: pass (No data store)
- Codex CLI (gpt-6.1-sol) on v0.1.1, 2026-10-25: pass (No data store)
- Claude Code (claude-opus-5-5) on v0.1.1, 2026-10-25: pass (No data store)

Recent releases:
- v0.1.1 (2026-10-25): Fix release, from scoring the prompt-1 agent eval runs against 0.1.0.
- v0.1.0 (2026-10-25): First release under the Timerise Skills standard: the single-file skill is restructured into an entry point and references, audited against git's hook behaviour and against bumpv, and given agent evals.
