Git workflow
Available scripts
scripts/git-info.sh— Emits a JSON snapshot of repository state for commit preparation.
Resolve the path relative to this
SKILL.mdfile's directory;
Guardrails
- If potential secrets are found: STOP and ask what to do.
- No
--no-verify, no--amend/rebase/force-push, no pushing unless asked. - Ask the user only if one of these is true:
- Changes appear to span multiple logical commits
- Potential secrets are present
- Recent commit subjects do not make the repo's commit style clear
- The staged diff does not match the intended commit
- Do not run
bash scripts/git-info.sh --helpduring normal flow. Use--helponly if the script fails or you are editing the script itself.
Fast workflow
Gather information
bash scripts/git-info.shRead the JSON snapshot first. Use it to inspect:
repoRoot,branchstatus.hasStaged,status.hasUnstaged,status.hasUntrackedfiles.staged,files.unstaged,files.untrackedstats.staged,stats.unstaged,stats.untrackedrecentCommits
If ambiguity remains after the JSON snapshot, inspect only the needed files with normal git commands:
git diff -- path/to/file git diff --cached -- path/to/file git diff --stat git diff --cached --stat git status --short git log --oneline -20Stage changes intentionally
git add path/to/file1 path/to/file2 # or: git add -A # when all changes belong to the commit to createVerify the staged set before committing:
git diff --cached --stat git diff --cachedIf the staged diff contains unrelated changes, STOP and ask what to do.
Write a concise commit message
Infer commit style from recent subjects:
- If recent subjects look like
type(scope): msg, use Conventional Commits. - Otherwise, match the common pattern (caps, prefixes, ticket IDs, etc.).
Subject rules:
- Imperative mood, no trailing period
- Prefer ≤ 72 chars (or match repo norm)
- Include scope only if the repo typically does
Body rules:
- Add a body only if it answers "why" or prevents confusion:
- Why this change is needed
- Key tradeoffs or constraints
- Notable side effects/follow-ups
- Use a heredoc for the full message — it avoids all quoting/escaping issues.
- If recent subjects look like
Create the commit Always use
git commit -F -with a quoted heredoc delimiter so the shell does not expand variables or backticks inside the message.git commit -F - <<'COMMIT_MSG' type(scope): concise summary COMMIT_MSG # or with body: git commit -F - <<'COMMIT_MSG' type(scope): concise summary Body paragraph that can span multiple lines naturally. No artificial splits, no embedded-newline breakage. COMMIT_MSG