Agent skill

Commit

by tbhb in tbhb/vale-ai-tells

Group changes into one atomic commit, draft a Conventional Commit message in COMMITAGENTMSG, put it through an independent review and the commit-msg gates, confirm it with the operator, then commit…

Apache-2.0Auto-check passedDevelopment

Install Commit

skills CLI
$ npx skills add tbhb/vale-ai-tells --skill commit -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install tbhb/vale-ai-tells commit --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/tbhb/vale-ai-tells.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/commit .claude/skills/commit && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
commit
GitHub stars
115
Token cost
~3.3k tokens
SKILL.md length
1,921 words
Files
6 (incl. scripts)
Skills in repo
27
Repo updated
First seen
Licence
Apache-2.0

At a glance

Group changes into one atomic commit, draft a Conventional Commit message in COMMITAGENTMSG, put it through an independent review and the commit-msg gates, confirm it with the operator, then commit…

  • Works in 10 steps: the checklist → choose the rebase base → group the changes into atomic commits → …
  • The user asks to commit work in a tbhb repo (commit this
  • SKILL.md covers Preflight, Step 0: the checklist, Step 1: choose the rebase base and Step 2: group the changes into…, plus 8 more sections
  • Runs Shell scripts from its folder; calls git, mise and bash

What it does

Commit is an agent skill from tbhb/vale-ai-tells. Group changes into one atomic commit, draft a Conventional Commit message in COMMITAGENTMSG, put it through an independent review and the commit-msg gates, confirm it with the operator, then commit and rebase. Use this skill whenever the user asks to commit work in a tbhb repo ("commit this," "commit the staged changes," "write a commit message") or whenever a task ends in creating a commit.

Its SKILL.md is about 3.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `scripts/commit.sh`, `scripts/guard-git.sh` and `scripts/preflight.sh`).

It sits in Development, covering Commit messages. The repository describes itself as: In today's rapidly evolving landscape, vale-ai-tells is a comprehensive, cutting-edge Vale style package that empowers writers to seamlessly delve into the rich tapestry of AI…. The licence is Apache-2.0.

When your agent uses it

  • The user asks to commit work in a tbhb repo (commit this
  • Commit the staged changes
  • Write a commit message)
  • Whenever a task ends in creating a commit

Example prompts

  • “commit this,”
  • “commit the staged changes,”
  • “write a commit message”
  • “/commit”

Requirements

  • A Bash shell

Workflow steps

10 steps, taken from the step headings in SKILL.md.

  1. the checklist
  2. choose the rebase base
  3. group the changes into atomic commits
  4. stage the paths for this commit
  5. draft the message in COMMIT_AGENTMSG
  6. pass the prose gates
  7. review the draft
  8. run the commit-msg gates
  9. confirm with the operator
  10. commit and rebase

What it can do on your machine

Read from SKILL.md and the folder at commit a96c5fe. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 4 files in scripts/ (Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • git
    • mise
    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use git, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Commit loads about 3.3k tokens when it runs. Until then it costs about 101 tokens; SKILL.md has 1,921 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~101
When it runs · the whole SKILL.md, loaded when a task matches
~3.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from tbhb/vale-ai-tells at commit a96c5fe, republished under its Apache-2.0 licence (© tbhb). 1,921 words, ~3,295 tokens.

Download SKILL.mdSave it as .claude/skills/commit/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.
name
commit
description
Group changes into one atomic commit, draft a Conventional Commit message in COMMIT_AGENTMSG, put it through an independent review and the commit-msg gates, confirm it with the operator, then commit and rebase. Use this skill whenever the user asks to commit work in a tbhb repo ("commit this," "commit the staged changes," "write a commit message") or whenever a task ends in creating a commit.
license
Apache-2.0

Commit workflow

Work the steps in order. A guard hook runs alongside them and refuses whole-tree staging along with any git commit you write out yourself. Step 8 names the one script that commits, and that script refuses an inline -m message, a --no-verify, and a draft the reviewer hasn't seen in its current form.

Those hooks stay registered for the rest of the session so they carry a scope. Preflight records the commit HEAD sits on now, and the guard refuses while HEAD is still there. Step 8 moves HEAD past that mark, and the guard refuses nothing after that. Work later in the session is none of the guard's business. A second commit means invoking this skill again rather than carrying on from here.

Preflight

!bash ${CLAUDE_SKILL_DIR}/scripts/preflight.sh

Step 0: the checklist

Track these steps with the session's task-list tools where it carries them. Newer harnesses leave those tools out by default, and a session without them works the list in order as written. They're the checklist the rest of this document expands.

  1. Choose the rebase base
  2. Group the changes into atomic commits
  3. Stage the paths for this commit
  4. Draft the message in COMMIT_AGENTMSG
  5. Pass the prose gates with fix-prose
  6. Review the draft with review-commit-message
  7. Run the commit-msg gates
  8. Confirm the message with the operator
  9. Commit and rebase

Stop before any of it if preflight reports a rebase, merge, or cherry-pick in progress, or a missing precondition. Say what's wrong and hand back.

Step 1: choose the rebase base

Preflight computed this under == rebase base ==. Take its recommendation:

  • Local default branch carries everything the remote has, so rebase onto the local branch.
  • Local default branch sits behind the remote, so rebase onto origin/<default> and skip the stale local copy.

Record the base now. Step 9 rebases onto it without asking again. Worktrees under .claude/worktrees are the usual layout here, and each one has its own checkout of the branch.

Step 2: group the changes into atomic commits

Read the diff before deciding anything. One commit carries one logical change: the reader can state its purpose in a sentence, and reverting it undoes that purpose and nothing else.

Split when the outstanding work covers more than one of these:

  • A behavior change and an unrelated refactor
  • A fix and the formatting sweep that came with it
  • A pair of features that don't depend on each other
  • Production code and unrelated tooling or configuration

A dependency doesn't force a split. Code and the test that covers it belong together, as do a change and the documentation that describes it.

When the work splits, commit the first group through this workflow, then say which groups remain and run the workflow again for each. Never bundle them because bundling is quicker.

When one file mixes two logical changes, stage the relevant hunks with git add -p, or say so and let the operator decide.

Step 3: stage the paths for this commit

Name every path:

text
git add -- path/one path/two

Never git add -A, git add ., or git add --all. They sweep in whatever else is uncommitted, which is how an atomic commit stops being atomic. The guard hook refuses all three.

Confirm the result with git diff --cached --stat and git status --short. The staged set matches the group from step 2, and anything left unstaged belongs to a later commit.

Step 4: draft the message in COMMIT_AGENTMSG

Write the whole message to COMMIT_AGENTMSG at the repo root. A gitignore entry keeps it out of history, and a post-commit hook deletes it after the commit succeeds.

Subject

<type>(<scope>)?(!)?: <description>, with the type drawn from the list preflight printed. Imperative mood, present tense, lowercase after the colon, no trailing period, and the whole line inside the bounds preflight reported. Write the description as the instruction the commit carries out: explain the tools, not explains and not explained.

Body

The body answers why this change exists. The diff already says what changed, and a reader who wants the what reads the diff.

Write:

  • The problem, the constraint, or the tradeoff that made this the answer
  • Why this approach rather than the obvious alternative
  • What breaks without it, or where the need came from
  • A decision worth recording, so nobody relitigates it later

Avoid:

  • Restating the diff. Adds a helper to foo.go and calls it from bar.go is the diff, spelled out longer.
  • Counting. No file, line, test, function, or commit counts. A count goes stale as soon as other work merges, and it reads as padding.
  • Provenance filler. Nothing about requests, review rounds, sessions, prompts, models, or tools. The Assisted-by trailer carries attribution.
  • Claims you haven't checked. Leave out benchmark numbers you didn't measure and a fixes the flake for a flake you never reproduced.
  • Selling it. Drop robust, comprehensive, significantly, seamlessly, and their neighbors.
  • Markdown. No fenced blocks, headings, emphasis, links, or tables. Backticks around a literal identifier are fine.

Hard wrap the body at the width preflight reported. Wrap trailers at the footer width.

Trailers

Assisted-by before Signed-off-by, matching the format and the sign-off identity preflight printed. Never credit a model through Co-authored-by.

Step 5: pass the prose gates

Invoke the fix-prose skill before the review, passing the draft and the task that judges it:

text
Skill(fix-prose, args: "COMMIT_AGENTMSG mise run lint-commit-msg")

It runs the lint rounds in a subagent, so the findings and the retries stay out of this session. The commit scope is stricter than the repository-wide one, and a message copied verbatim out of the diff still fails it, so this is rarely a no-op.

Order matters here. The review in the next step signs the exact bytes it read, and a later lint fix voids that signature and costs another review round over a comma. Running fix-prose first holds the loop to one round.

Where it returns PROSE: PARTIAL, a finding needs a decision rather than another round. Read the short list, settle it, and send the answer back in the arguments.

Step 6: review the draft

Invoke the review-commit-message skill, passing the repo root from preflight as its argument. It runs as an independent agent that hasn't watched you work, which is the point: it reads the draft against the staged diff with no memory of what you meant to write.

This step is mandatory, and the script in step 8 enforces it. A clean verdict signs the exact bytes of the draft, and a finding erases any earlier signature, so the commit stays blocked until a review clears the text as it stands. Editing the draft afterward voids the signature the same way.

Fix everything it returns. Push back only when it's demonstrably wrong about the diff, and say why.

Show full SKILL.md (810 more words)Show less

Step 7: run the commit-msg gates

text
mise run lint-commit-msg

That task mirrors the commit-msg hook:

  • vale under the commit scope, which catches AI tells through ai-tells-commits
  • cspell with the commit dictionary
  • commitlint for the Conventional Commits shape
  • commit-trailers for trailer order

Step 5 should have left this clean. Where it hasn't, send the findings back to fix-prose rather than editing the draft here, because a hand-edit spends the context that skill exists to save.

Edited the draft to make the linters pass? Then step 6 runs again before you commit, because the gate compares bytes rather than intentions.

Whatever this task reports, .git/COMMIT_EDITMSG and its commit-msg hook stay the real gate. A clean run here only predicts that hook's verdict.

Step 8: confirm with the operator

AskUserQuestion truncates its options, so the operator reads the message in your message text rather than in the widget. Print this first, verbatim:

text
Staged: <paths, comma separated>

<the entire COMMIT_AGENTMSG contents, verbatim>

Preflight answered this under == pre-approval ==. Where it reported commit: GRANTED, the operator answered this question for the whole session in advance, through mise run preapprove. Print the preceding block so the message still reaches them, name the grant this commit goes under, and move to step 9 without calling AskUserQuestion.

The grant answers one question, commit this message, and says nothing about whether this is the right commit. Ask anyway where any of these holds:

  • the review returned a finding nobody acted on
  • a gate needed more than a mechanical fix
  • the grouping changed after step 2
  • the commit reaches past what the session set out to do

The operator withdraws a grant with mise run revoke-preapproval. Say so where a run keeps arriving at one of those exceptions.

Where preflight reported commit: not granted, call AskUserQuestion with question set to Commit this message?, header set to Commit, multiSelect set to false, and these four options in order:

LabelDescription
Commit itThe subject line, verbatim
Revise the messageStaging stands. Redraft the message, review it again, and come back.
Restage and redraftThe grouping is wrong. Regroup the changes and start from step 2.
Stop hereLeave the draft, the index, and the branch untouched.

Follow the answer. Revising or restaging sends you back through the review, because the gate compares bytes.

Step 9: commit and rebase

text
bash .claude/skills/commit/scripts/commit.sh

Nothing else commits. The guard hook refuses a git commit you write out yourself whatever flags it carries, because every gate named below lives in the script and a hook on the tool call can't reach inside one.

That script checks the review signature and records what the staging area holds before it commits, then reads the commit back and compares. prek stashes and restores the worktree around the pre-commit hooks. A failed run can leave a path unstaged that you staged before the attempt, and the retry then commits part of the group without reporting it. The script prints every path it expected and didn't find and then fails. Its output is the check, so nothing needs a git show --stat after it.

The script pins commit.cleanup=whitespace for you. At the default of strip, git drops every body line opening with a number sign, and it does so after review-commit-message has hashed the file, so the bytes the reviewer cleared stop matching the bytes git records.

Only --amend passes through, which is the form fix-pr routes here for. The script refuses every other flag, because a hook reading the tool call sees bash commit.sh and none of the flags underneath it.

Then rebase onto the base from step 1, without asking:

text
git -c rebase.updateRefs=false -c rebase.autoSquash=false rebase --autostash <base>

Same reasoning, two more knobs. rebase.updateRefs quietly moves other local branches that point into the replayed range. rebase.autoSquash collapses any fixup! commit, each of which earned its own review.

--autostash scopes the save to the rebase itself. Never a bare git stash pop: worktrees share one stash stack, so a bare pop can take another session's entry.

Where that rebase stops on a conflict, hand it to the rebase skill rather than resolving it here. That skill classifies each conflicted path before resolving it, then checks what the replay did to each commit.

Report the resulting commit, then the groups still waiting from step 2, if any.

Preconditions

This skill assumes the shared tbhb toolchain:

  • a mise run lint-commit-msg task
  • a gitignore entry for COMMIT_AGENTMSG
  • the prek hooks installed, including the post-commit stage
  • the review-commit-message and fix-prose skills deployed alongside this one

Preflight checks each. When one is missing, tell the operator rather than improvising a substitute.

The workflow commits the repository holding the session. review-commit-message reads its draft and its diff from that root, and step 8's script reads the draft and the signature from whichever repository it runs in. A sibling checkout has no signature of its own, so the script stops there rather than committing on a review that read another tree. To commit a different repository, open a session there.

© tbhb, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 5 other files (scripts) in .claude/skills/commit of tbhb/vale-ai-tells.

  • SKILL.md
  • scripts/commit.sh
  • scripts/guard-git.sh
  • scripts/preflight.sh
  • scripts/stamp-review.sh
  • tokens.json

Open the folder on GitHubat commit a96c5fe

Compare with similar skills

Commit next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Commit compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Commit this skilltbhb/vale-ai-tells115—~3.3kAutomated safety check: PassApache-2.0
Contextual Commit Messagesyamadashy/repomix29k1 repos~2.7kAutomated safety check: PassMIT
React Router Release Notes Prepremix-run/react-router57k—~1.1kAutomated safety check: PassMIT
PR Finalize Reviewmicrosoft/garnet12k—~3.1kAutomated safety check: PassMIT
Caveman Commitvishiri/fantasia-archive40913 repos~642Automated safety check: PassGPL-3.0
ToolJet Multi-Repo CommitToolJet/ToolJet41k—~1.3kAutomated safety check: PassAGPL-3.0

Similar skills

  • Writes Conventional Commits whose bodies carry action lines recording the intent, decisions and constraints behind a change, not only what changed.

    29k GitHub starsUsed in 1 repo~2.7k tokens
    DevelopmentAuto-check passed
  • React Router Release Notes Prep

    remix-run/react-router

    Polishes pending React Router change files before the versioning scripts run, and decides whether a long-form What's Changed section is warranted.

    57k GitHub stars~1.1k tokensUpdated today
    DevelopmentAuto-check passed
  • PR Finalize Review

    microsoft/garnet

    Official

    Checks that a pull request's title and description match its implementation and reviews the code for Garnet best practices, reporting findings without posting them.

    12k GitHub stars~3.1k tokensUpdated today
    DevelopmentAuto-check passed
  • Caveman Commit

    vishiri/fantasia-archive

    Ultra-compressed commit message generator. An agent skill from vishiri/fantasia-archive.

    409 GitHub starsUsed in 13 repos~642 tokens
    DevelopmentAuto-check passed
  • Commits changes across ToolJet's root repo and its server/ee and frontend/ee submodules, writing messages from the diffs and updating submodule pointers in order.

    41k GitHub stars~1.3k tokensUpdated today
    DevelopmentAuto-check passed
  • Git Workflow and Versioning

    addyosmani/agent-skills

    Sets git habits for every change: short-lived branches, atomic commits with descriptive messages, clean pull requests, plus versioning, tagging and changelogs for releases.

    102k GitHub starsUsed in 2 repos~3.5k tokens
    DevelopmentAuto-check: notes

More from tbhb/vale-ai-tells

All 27 skills in this repo
  • Analyze Session

    tbhb/vale-ai-tells

    Query a Claude Code transcript without reading it into context, then write the retrospective to disk so it remains available after the session ends.

    115 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Codex Analyze Session

    tbhb/vale-ai-tells

    Query a Codex transcript without reading it into context, then write the retrospective to disk so it remains available after the session ends.

    115 GitHub stars~1.4k tokensUpdated today
    Auto-check passed
  • Codex Fix PR

    tbhb/vale-ai-tells

    Diagnose failing pull request checks, reproduce them locally, make focused fixes, commit them through codex-commit, and refresh the published description when needed.

    115 GitHub stars~575 tokensUpdated today
    Auto-check passed
  • Codex Merge PR

    tbhb/vale-ai-tells

    Squash merge a pull request. An agent skill from tbhb/vale-ai-tells.

    115 GitHub stars~3k tokensUpdated today
    Auto-check passed
  • Codex PR

    tbhb/vale-ai-tells

    Open or update a pull request for the current branch with an independently drafted and reviewed PRAGENTDESC.md.

    115 GitHub stars~846 tokensUpdated today
    Auto-check passed
  • Codex Rebase

    tbhb/vale-ai-tells

    Replay the current branch onto its base and establish that the result is sound.

    115 GitHub stars~2k tokensUpdated today
    Auto-check passed

Categories

Questions about Commit

What does Commit do?

Group changes into one atomic commit, draft a Conventional Commit message in COMMITAGENTMSG, put it through an independent review and the commit-msg gates, confirm it with the operator, then commit…. Commit is an agent skill from tbhb/vale-ai-tells. Group changes into one atomic commit, draft a Conventional Commit message in COMMITAGENTMSG, put it through an independent review and the commit-msg gates, confirm it with the operator, then commit and rebase.

When should I use Commit?

Commit fits situations like: the user asks to commit work in a tbhb repo (commit this; commit the staged changes; write a commit message); whenever a task ends in creating a commit.

How do I install Commit in Claude Code?

Run `npx skills add tbhb/vale-ai-tells --skill commit -a claude-code`. Or copy the skill folder (.claude/skills/commit in tbhb/vale-ai-tells) into .claude/skills/commit in your project. Claude Code loads it when a task matches its description.

How do I install Commit in Codex?

Run `npx skills add tbhb/vale-ai-tells --skill commit -a codex`. Or copy the skill folder (.claude/skills/commit in tbhb/vale-ai-tells) into .agents/skills/commit in your project. Codex loads it when a task matches its description.

Can I use Commit in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add tbhb/vale-ai-tells --skill commit -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/commit, .gemini/skills/commit, .github/skills/commit and .opencode/skills/commit in your project.

What does Commit need to run?

Going by SKILL.md and its folder, Commit needs a shell for the scripts in its folder and the command-line tools its instructions call (git, mise and bash). Our summary lists: A Bash shell.

Does Commit access the network?

SKILL.md contains no URLs. Its commands use git, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Commit safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Commit use?

Commit is published under the Apache-2.0 licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Commit use?

About 3.3k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Commit?

Skills that share tags, products or a category with Commit: Contextual Commit Messages (yamadashy/repomix, 29k stars), React Router Release Notes Prep (remix-run/react-router, 57k stars), PR Finalize Review (microsoft/garnet, 12k stars) and Caveman Commit (vishiri/fantasia-archive, 409 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Commit?

tbhb (a GitHub user) maintains it in tbhb/vale-ai-tells, which has 115 GitHub stars. The repository holds 27 skills in this directory. The repository was last updated on October 7, 2026.

Source: tbhb/vale-ai-tells on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.