The problem
What problem does commit solve?
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.
The tool
What does the skill do?
This skill adds no module to your app: your agent runs it as a tool. What commit does:
- 1. A working tree turned into clean Conventional Commits
- 2. The diff read and the repository's own check run first
- 3. Staging by path that keeps secrets and build output out
- 4. Unrelated changes split into separate commits
- 5. Breaking changes marked with ! and a BREAKING CHANGE footer for bumpv
- 6. Hooks respected
- 7. A check that no attribution trailer landed
Provenance
Where do the rules come from?
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 withgit diff --staged --statbefore the commit; every breaking change marked with both!and aBREAKING CHANGE:footer; every commit's message read back withgit log -1 --format=%B, so no attribution trailer stays; and no amend after a failed hook or on a pushed commit. `references/provenance.md` has the record.
The engineering ledger for this skill, for the person editing it. The earlier implementation is the single-file version of this skill that preceded 0.1.0: one SKILL.md with the process, the message format and the attribution rule, used to write the history every Timerise skill is released from. The 0.1.0 audit read it against git's documented behaviour and against bumpv, which reads what it writes. This ledger has fifteen entries.
Non-negotiables
What are the 6 rules the module never breaks?
Every module built from this skill holds these, whoever builds it. The same list is in the skill's README and SKILL.md, so the agent reads it before it writes a line.
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=%Bafter every commit verifies it, and an amend removes one that a harness or hook added.Stage by path, never with
git add .,-Aorgit 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 --statlists 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.
bumpvpicks a MAJOR from the markers alone; the!shows ingit log --onelineand theBREAKING 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 writeschore(release):; pushing is the user's call.
Fit
When should you use it, and when not?
Use it for
- 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
gitand a shell. The repository's own check and conventions are used when they exist and skipped when they do not.
Not for
- Bumping the version, writing the changelog, tagging a releaseInstead
bumpv - Pushing, or opening and describing a pull requestInsteadthe user, after this skill reports
- Rewriting published history: rebase, squash, force pushInsteada deliberate, separately confirmed step
- Reviewing the change for bugs before it is committedInsteada code review skill
- Hardening a skill from its agent evalsInstead`skill-eval-loop`
Install
How do I install it?
One command. The skills.sh CLI installs the skill into every skills-compatible agent it finds.
$ npx skills add timerise-ai/commitClaude Code
Invoke with /commit
Codex CLI
Invoke with $commit
Gemini CLI
Invoke with /skills
Name the agents instead with -a, for example npx skills add timerise-ai/commit -a claude-code -a codex. Or clone the repository into your agent's skills folder. Nothing in it is agent-specific.
What is inside the repository (13 entries)
SKILL.mdEntry point: the flow diagram, the seam, critical facts, hard rules, quick start and reference directoryreferences/staging.mdReviewing the tree, untracked files, what is never staged, grouping, staging by path, a file with two changesreferences/validation.mdFinding the repository's check per project type, when to skip it, and reading its resultreferences/messages.mdTypes and howbumpvreads them, scope, subject, body, footers, breaking changes, examplesreferences/committing.mdThe heredoc commit, verifying what landed, hooks, when amending is allowed, repository states, the reportreferences/adaptation.mdThe seam contract: the host's conventions and where they win, the contract withbumpv, the order of work, the non-negotiablesreferences/provenance.mdThe engineering ledger: what the audit changed, what was kept deliberately, and what was added hereREADME.mdThis fileCHANGELOG.mdOne section per release, newest firstCLAUDE.mdThe editing conventions, for an agent editing this repositoryLICENSEMITevals/The prompts an operator types after installing (prompts.md) and one file per agent eval: the skill installed into an empty Next.js app, one prompt that asks for a change and its commit, no help, then type-checked and built.github/workflows/agent-eval.ymlThe caller of the index's reusable eval workflow, run on every published release and on a maintainer's dispatch
Recent releases
- v0.1.1October 25, 2026
Fix release, from scoring the prompt-1 agent eval runs against 0.1.0.
- v0.1.0October 25, 2026
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.
After installing
What do I tell my agent?
Say what you need in your own words; the skill supplies the how. These are starting points, and the ones we tested say how it went.
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.
No data storeAdd 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.
No data store
Tested
How does it do in each agent?
We install the skill into an empty Next.js app, give the agent one of the prompts above and no further help, then type-check, build and run the tests it left behind. Nothing is fixed by hand before the checks, and a failing run is published like a passing one. The procedure and every result are public, and the first prompt runs again before each release.
- Built, checks pass
Gemini CLI0.65.0
gemini-3.8-flash
Add an API route at /api/health that returns { "status": "ok" } as JSON, then commit it.
Typecheck: passBuild: passTests: not run- Time
- 3 min
- Changed
- 2 files, +34 lines
- Stack
- No data store
- Skill
- v0.1.1
- Run
- Oct 25, 2026
What we saw
Rubric 8/8. It staged
app/api/health/route.tsby path, committedfeat(api): add /api/health routewith a body, and read the message back withgit log -1 --format=%B, which settles the doubt left by the previous run.tsconfig.jsonwas left unstaged as rewritten by the build. It used a one-off-cidentity, and the report gives the hash, both checks, the file left out and that nothing was pushed. Scored from the JSON summary. - Built, checks pass
Codex CLIcodex-cli 0.164.0
gpt-6.1-sol
Add an API route at /api/health that returns { "status": "ok" } as JSON, then commit it.
Typecheck: passBuild: passTests: not run- Time
- 1 min
- Changed
- 2 files, +32 lines
- Stack
- No data store
- Skill
- v0.1.1
- Run
- Oct 25, 2026
What we saw
Rubric 8/8. It staged the route alone by path, checked
git diff --staged,--checkand--stat, committedfeat: add health API routeand read it back withgit log -1 --format=%B. The build'stsconfig.jsonrewrite stayed unstaged and is named in the report. Scored from the transcript's commands and diffs. - Built, checks pass
Claude Code2.1.310
claude-opus-5-5
Add an API route at /api/health that returns { "status": "ok" } as JSON, then commit it.
Typecheck: passBuild: passTests: not run- Time
- 1 min
- Changed
- 2 files, +32 lines
- Stack
- No data store
- Skill
- v0.1.1
- Run
- Oct 25, 2026
What we saw
Rubric 8/8. Typecheck and build passed, and it committed
app/api/health/route.tsalone asfeat(api): add /api/health endpoint. It left the build'stsconfig.jsonrewrite uncommitted, citing the skill's rule for files only the build changed, and named it in the report. It left out the trailer the session asked for, naming the overriding rule, and used a one-command identity. The report says nothing was pushed. Scored from the JSON summary.
Generated from the skill's own files at commit 3e44eb9. Every rule above links to where the repository says it. All skills