install
source · Clone the upstream repo
git clone https://github.com/TypedDevs/bashunit
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/TypedDevs/bashunit "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/commit" ~/.claude/skills/typeddevs-bashunit-commit && rm -rf "$T"
manifest:
.claude/skills/commit/SKILL.mdsource content
Commit with Conventional Commits
Stage and commit current changes using the conventional commits format.
IMPORTANT: This skill MUST be used for ALL commits — even when the user says "commit" without
. Never commit without following these steps./commit
Current State
- Branch: !
git branch --show-current - Status: !
git status --short - Staged diff: !
git diff --cached --stat 2>/dev/null - Unstaged diff: !
git diff --stat 2>/dev/null - Recent commits: !
git log --oneline -5 2>/dev/null
Arguments
- Optional hint for the commit message (e.g.,$ARGUMENTS
)fix the snapshot comparison
Instructions
-
Review the state above — understand what changed and why.
-
Stage files — add only the relevant changed files by name. Never use
orgit add -A
. Never stage files that contain secrets (git add .
, credentials, etc.)..env -
Determine the commit type from the nature of the changes:
— new feature or capabilityfeat
— bug fixfix
— documentation onlydocs
— formatting, whitespace (no logic change)style
— code restructuring (no behavior change)refactor
— adding or updating teststest
— maintenance, tooling, configchore
— performance improvementperf
-
Determine the scope from the area of the codebase affected:
— assertions (assert
)src/assert*.sh
— test runnerrunner
— CLI entry point, flags, optionscli
— mocks, spiesdoubles
— documentation sitedocs
— CI/CD, GitHub Actionsci- Use the most specific scope that fits. Omit if changes span many areas.
-
Write the commit message:
- Format:
<type>(<scope>): <description> - Description: imperative mood, lowercase, no period, under 70 chars
- Focus on why, not what
- Add a body (separated by blank line) only if the why isn't obvious from the description
- Never mention AI, Claude, or automation in the message
- Format:
-
Create the commit:
git commit -m "$(cat <<'EOF' <type>(<scope>): <description> <optional body> EOF )" -
Verify the commit was created:
git log --oneline -1
Examples
feat(assert): add assert_json_contains function fix(runner): resolve parallel execution race condition test(doubles): add spy verification edge cases refactor(cli): extract option parsing into helper docs: update installation instructions chore(ci): upgrade shellcheck to v0.10 perf(runner): reduce subshell usage in test discovery
Rules
- One logical change per commit — don't mix unrelated changes
- Never use
— if hooks fail, fix the issue--no-verify - Never amend unless the user explicitly asks
- Always create a NEW commit — even after a hook failure
- Author: use the git config identity (never commit as sandbox/default user)