commit

A set of instructions for committing existing changes in a Git repository, which records file changes as a named checkpoint. It stages only the files the user identifies and creates one Conventional Commits message.

In plain words
What is it for?
Use it when changes are ready to record on a feature branch. It is for making one focused commit, not for editing, formatting, testing, or building the project.
Why use it?
It avoids accidentally committing unrelated work or changing source files during the commit. It also checks that the repository, branch, author identity, and signing settings are suitable.

Skill for Claude CodeCodex

Install

Getting it into your agent

One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.

agentmods
npx agentmods add skills/khrichtchatyi/ship-it/commit
Any agent
npx skills add khrichtchatyi/ship-it --skill commit
Clone the repo
git clone --depth 1 https://github.com/khrichtchatyi/ship-it

Made for: Claude Code, Codex.

Per session 51 Skills are progressive disclosure: only the name and description are preloaded; the body loads when the skill is used.
When invoked 1,885 The whole file, excluding the scripts and references it only reads on demand.
Security scan A 0 findings. Scan, not verified.
Origin original No closer match found in the catalogue.
Token cost

What it costs to keep this loaded

Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.

ModelPer sessionOnce invoked
Fable 5 $0.00051 $0.01885
Opus 5 $0.00026 $0.00942
Sonnet 5 $0.00010 $0.00377
Haiku 4.5 $0.00005 $0.00188

Measured yesterday against content hash af0c08ebcaad, method: parsed. Prices are Anthropic first-party input rates as of 2026-08-30, from the pricing page.

Security

Grade A, and why

commit scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.

A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.

Nothing flagged

None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.

skills/commit/SKILL.md · 245 lines

How it starts

The opening of the file, as written. The whole thing — 245 lines — stays where its author put it; the contents beside it link to each section on GitHub.

Operate on the Git repository in the current working directory.

Refuse to run when the directory is not a Git working tree.

Refuse to run when the branch has no commits yet and the user did not ask for an initial commit.

Refuse to run when the current branch is main, master, develop, trunk, or matches the remote's default branch from git symbolic-ref --short refs/remotes/origin/HEAD — commits belong on feature branches, not protected defaults.

Override the default-branch refusal only when the user said in plain words to commit directly to that branch.

Trust the user — the changes in the working tree exist on purpose, and this skill only records them.

Do not edit source files.

Do not reformat code, run the linter, run the test suite, or start a build to "verify" the change before committing.

Verify the commit identity with git config user.email and git config user.name before composing the message.

Refuse to run when either is empty — otherwise Git attributes the commit to root@hostname or a stale default.

Inspect commit.gpgsign and gpg.format with git config --get before running git commit.

Warn the user once when signing is required but no signing key is configured locally, so the commit does not fail mid-run on a hook.

Run git status and git diff (and git diff --staged when something is already staged) before composing the message.

Describe what is on disk, not what the conversation discussed earlier.

Show the user a one-line summary of the files about to be committed and the proposed subject.

Stop and wait for the user's reply before invoking git commit, so the user can redirect the scope or the wording before the commit lands.

Stage files with one git add <path> [<path> ...] call listing every path the user named.

Never run git add -A, git add ., or git commit -a unless the user said in plain words to stage everything — those forms sweep in unrelated edits and leak secrets.

Refuse to stage files whose names match a known secret pattern: .env, .env.*, *.pem, *.key, id_rsa, id_ed25519, credentials.json, *.tfstate, *.kdbx, or any path inside .ssh/.

Refuse to stage a file whose diff introduces a credential-looking line — an AKIA/ASIA AWS key, a gh[pousr]_ GitHub token, an sk- API key, a -----BEGIN ... PRIVATE KEY----- block, or a 40+ character base64 string assigned to a secret, token, password, or key variable — and ask the user to confirm before continuing.

Format the subject as <type>(<scope>): <description> per Conventional Commits 1.0.0.

The scope is optional; the colon-space separator is mandatory.

Pick the type from the standard set: feat, fix, docs, style, refactor, perf, test, build, ci, chore, revert.

Do not invent new types.

Include a scope when every staged path sits under one package, module, or top-level directory (fix(parser): ..., feat(api): ...).

Omit the scope when the change spans unrelated areas.

Never invent a scope that does not match a directory or module name.

Append ! after the type or scope (feat!: or feat(api)!:) when the commit breaks compatibility, and add a BREAKING CHANGE: footer so tooling can detect the break from the subject alone.

Write the description in the imperative mood, lowercase, with no trailing period.

Aim for 50 characters and never exceed 72 (fix(parser): handle empty input, not Fixed the parser.).

Leave one blank line between the subject and the body, and another between the body and any footer — the parser splits the message on those blank lines.

Keep the body to a few short sentences naming the motivation and the visible effect.

Wrap body lines at 72 columns.

Omit the body when the subject already says everything — one-line commits ship.

Derive the message from the diff and the user's words, not from the branch name or a guess at intent.

Read the full file on GitHub · 245 lines

Changes

What this file has done since we first saw it

Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.

  1. yesterday First seen · 245 lines · 51 tokens per session scan A af0c08ebcaad

Subscribe to this mod's changes

commit is a skill published in the GitHub repository khrichtchatyi/ship-it (2 stars, last pushed 19d ago), licensed MIT. It adds 51 tokens to every session and 1,885 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.