vibe-commit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited vibe-commit (Agent Skill) and scored it 91/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} is the classic direct prompt-injection phrasing. Placed in a skill body that the agent reads as trusted instructions, it tries to make the agent abandon its prior rules and follow whatever comes next — a full system-prompt override.
ignore/disregard/forget … previous instructions sentence.Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
A vague "commit please" is a request to turn a messy working tree into one clean, correctly scoped commit — not a request to run git add -A && git commit. The instruction is underspecified on purpose: the user trusts the agent to decide what belongs in the commit, keep junk out, and leave a message and history a future maintainer can use.
This skill governs the execution of that: which files to stage, what to keep out, how to re-verify the staged set before committing, how to transport a multi-line message without corruption, and how to amend or repair a commit while keeping authorship trailers intact. The guidance here is distilled from real agent sessions where these exact steps prevented — or, when skipped, caused — commit mistakes.
Commit work splits cleanly between message content and execution:
Conventional Commit subject, body only for durable context the diff cannot recover, durable verification references, no prompt/session/plan labels, and no Markdown wrappers in message bytes.
vibe-commit owns the execution: staging, exclusion, the pre-commitverification gate, command safety, history mutation, message transport, and trailers as a transport mechanism.
Apply the compact message rules in references/history-and-trailers.md whenever this skill prepares, inspects, amends, or repairs a commit message. The commit's bytes — file set, message transport, trailer footer, and stored message — are this skill's responsibility, and you verify them after committing.
Committing locally is reversible; publishing is not. Stay on the reversible side of that line unless the user says otherwise.
push. Do not git push unless the user explicitly asks.
commit rewrites history other clones depend on. Only amend/rebase commits that have not left this machine, and never force-push a shared branch without an explicit, informed request.
git add -f an ignoredpath, and never stage files outside the change being committed, unless the user explicitly asks to include that ignored path after you have surfaced why it is ignored and what risk that creates. Decide scope by the user-visible change, not by whatever happens to be dirty.
hooks the repo did not ask for as a byproduct of committing.
Follow this spine. Each step names the load-bearing command; the references go deeper on the judgment calls.
git status --short --branch --untracked-files=alland git status --ignored show every modified, staged, untracked, and ignored path in one view. Add git log -1 --oneline and git branch --show-current so you know the branch and the commit you might extend.
git diff --stat, then `gitdiff -- <file> for specific files and git diff -- <newfile>` (or open it) for untracked ones. Decide what each path is before deciding whether it belongs.
deliverable that forms ONE logical change — implementation plus its tests and the docs/CHANGELOG/spec it fulfills — versus (b) out-of-scope edits or generated artifacts. Split unrelated concerns into separate commits. See references/file-selection.md.
unrelated lock, agent-state (.agents/, .claude/, .codex/), and secret paths unstaged. A lockfile that records a dependency change needed by the selected commit is in-scope with the manifest; do not drop it just because it is a lockfile. When unsure whether a path is ignored, git check-ignore -v <path>. See references/file-selection.md.
git add -- <path1> <path2> … by full name. Avoid `gitadd . / -A / globs in a dirty tree — they silently sweep in strays. For a file with mixed in-scope and out-of-scope hunks, git add -p <file>`.
what you are about to commit: git diff --cached --name-only (exact files), git diff --cached --stat (volume sanity), git diff --cached (read the hunks), git diff --cached --check (whitespace/line-ending errors). In-scope files present, out-of-scope/ignored files absent, diff matches intent. This 2–3 second gate is the single highest-leverage habit; see references/staging-and-recovery.md.
--amend tofix the immediately preceding, unpushed commit. See references/history-and-trailers.md.
type(scope): summary(imperative, ≤72 chars) naming the outcome, blank line, then a body only when it preserves durable context the diff cannot recover. Detect the repo's trailer convention first: git log -5 --format='%H%n%B'.
(git commit -F - <<'EOF' … EOF, single-quoted delimiter) or git commit -F <file>. Add or repair authorship trailers with a git commit ... --trailer 'Key: value' command — including git commit --amend ... --trailer or git commit -C <ref> --trailer ... for local rewrites — not by typing them into the body or a synthesized message payload. Never embed raw newlines in a single -m. See references/history-and-trailers.md.
git show -s --format=%B HEAD confirmssubject/body/trailer landed byte-correct and the trailer parsed as a footer; for newly added or repaired authorship trailers, also confirm the command path used git commit ... --trailer. For body messages, inspect the stored message for low-signal verification dumps and local-only proof-source leakage such as git-unmanaged local generated artifacts, ignored result files, local-only run IDs, or private tool-session records. git show --stat HEAD confirms the committed file set; git status --short confirms only intentionally-left files remain and nothing leaked.
git restore --staged <file> to unstage, git reset --soft HEAD~1 to undo a commit while keeping changes, git commit --amend --no-edit --trailer … to fix a just-made local commit. See references/staging-and-recovery.md.
Not every invocation is a full "commit please." Jump to the relevant reference:
stray file → references/staging-and-recovery.md
recover lost work → references/staging-and-recovery.md
Co-Authored-By, multi-linemessage corruption → references/history-and-trailers.md
references/file-selection.md
mandatory staged-set gate before committing and the stored-commit verification after committing.
git commit ... invocation, but do not collapse the answer to that one line. The safe artifact is the command sequence: staged-set verification, commit command, then stored-message/file-set verification. Simple docs commits and trailer-only commits are not exempt.
git status, git diff, or git log excerpts → treat themas evidence, but still run or show the corresponding inspection commands in the sequence. Do not jump from supplied excerpts straight to staging, committing, amending, or splitting.
subject before showing an executable git commit, or stop before the commit command. Use supplied user intent even when it is broad: a named feature, bug fix, module, or behavior change is enough for a conservative subject. Do not defer a usable broad subject to future diff output merely to make it more precise. If paths/status are the only evidence and no behavior or fix class is supplied, inspect git diff or git diff --cached first; in a response-only command plan, show that inspection step and omit git commit until a concrete subject can be written. A commit command block whose subject contains angle-bracket text, unresolved-marker words, or instructions to fill the subject later is still an invalid shown command even if prose says not to run it.
git diff --cached <file> for the committed hunk and git diff <file> for the intentionally-left local hunk. Show both as explicit verification commands before committing; a prose note or git status is not a substitute.
risk: other clones can diverge and collaborators may have to rebase, reset, or reconcile duplicated commits.
git status → check `git check-ignore -v<path>` before deciding. If it is ignored, especially local config or secret-like data, do not force-add it merely because the path was named; state that the requested scope cannot be fully committed without an explicit override after the ignore rule is known.
git add . / -A / a glob in a dirty tree, sweeping in unrelated edits,generated output, lock files, or secrets.
git add without re-reading the staged diff.workspaces, plans/, .codex/, .env).
(evals/<name>/ vs. evals/<name>/evals.json).
-m with embedded newlines, or adouble-quoted heredoc that lets the shell expand $/backticks.
git interpret-trailers --trailer plus plumbing or a synthesized message file, dropped when rewording with --amend -m (re-add with --trailer), wrong capitalization, or a stray Key: value body line folding into the footer.
messy.
git reset --hard, force-push) thatloses work or rewrites shared history.
Before reporting the commit done:
generated, ignored, or secret files?
git diff --cached (not just the file list) and run --check?context the diff cannot recover?
git show -s --format=%B HEAD andgit show --stat HEAD), not just the command you ran?
authorship form for the agent that wrote the commit and the repo's existing convention?
use git commit --trailer, git commit --amend ... --trailer, or git commit -C ... --trailer, never a hand-edited footer, raw append, or plumbing-created message?
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.