commit

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.

Released
October 25, 2026
npx skills add timerise-ai/commit
Current release
v0.1.1
Reference docs
6
Non-negotiables
6
License
MIT

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.

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

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 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` 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.

Read the full record in provenance.md ›

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.

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

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 git and 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 releaseInsteadbumpv
  • 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`

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/commit

Claude 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 directory
  • references/staging.mdReviewing the tree, untracked files, what is never staged, grouping, staging by path, a file with two changes
  • references/validation.mdFinding the repository's check per project type, when to skip it, and reading its result
  • references/messages.mdTypes and how bumpv reads them, scope, subject, body, footers, breaking changes, examples
  • references/committing.mdThe heredoc commit, verifying what landed, hooks, when amending is allowed, repository states, the report
  • references/adaptation.mdThe seam contract: the host's conventions and where they win, the contract with bumpv, the order of work, the non-negotiables
  • references/provenance.mdThe engineering ledger: what the audit changed, what was kept deliberately, and what was added here
  • README.mdThis file
  • CHANGELOG.mdOne section per release, newest first
  • CLAUDE.mdThe editing conventions, for an agent editing this repository
  • LICENSEMIT
  • evals/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

  1. v0.1.1October 25, 2026

    Fix release, from scoring the prompt-1 agent eval runs against 0.1.0.

  2. 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.

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.

  1. Add an API route at /api/health that returns { "status": "ok" } as JSON, then commit it.

  2. 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 store
  3. 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.

    No data store

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.

  • Gemini CLI0.65.0

    gemini-3.8-flash

    Built, checks pass
    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

    Result file ›Agent log ›

    What we saw

    Rubric 8/8. It staged app/api/health/route.ts by path, committed feat(api): add /api/health route with a body, and read the message back with git log -1 --format=%B, which settles the doubt left by the previous run. tsconfig.json was left unstaged as rewritten by the build. It used a one-off -c identity, and the report gives the hash, both checks, the file left out and that nothing was pushed. Scored from the JSON summary.

  • Codex CLIcodex-cli 0.164.0

    gpt-6.1-sol

    Built, checks pass
    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

    Result file ›Agent log ›

    What we saw

    Rubric 8/8. It staged the route alone by path, checked git diff --staged, --check and --stat, committed feat: add health API route and read it back with git log -1 --format=%B. The build's tsconfig.json rewrite stayed unstaged and is named in the report. Scored from the transcript's commands and diffs.

  • Claude Code2.1.310

    claude-opus-5-5

    Built, checks pass
    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

    Result file ›Agent log ›

    What we saw

    Rubric 8/8. Typecheck and build passed, and it committed app/api/health/route.ts alone as feat(api): add /api/health endpoint. It left the build's tsconfig.json rewrite 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