cap
Stage all changes, commit with a short message that matches the repo's existing commit style, and push. Use when the user wants to ship the current diff with no fuss.
适合你,如果想快速完成git工作流。
npx oh-my-skill add hawkyre/hawk-skills/capcurl -fsSL https://oh-my-skill.com/install.sh | bash -s -- hawkyre/hawk-skills/capnpx oh-my-skill verify hawkyre/hawk-skills/cap怎么用
商店整理自技能原文 · 版本 6ffb2d6 · 表述以原文为准安装后,Claude 能一键提交和推送所有更改:自动暂存文件、根据仓库历史生成简短提交信息,然后推送。还会检查是否含敏感文件,若推送被拒绝则尝试变基。
当用户想快速保存并推送当前代码变更时触发。无需指定参数,直接说出目标即可。
技能原文 SKILL.md
Cap
Commit and push the current working tree in one shot.
Process
- Read the state — run in parallel:
git statusto see what's changed and untrackedgit diff --statandgit diff --staged --statfor the size pre-check (always inline)git log -10 --onelineto learn the repo's commit message style
If the stat shows the diff is small (≲200 lines), read it inline with git diff / git diff --staged. If it's large, redirect: git diff > /tmp/hawk-cap-diff.patch 2>&1 and git diff --staged > /tmp/hawk-cap-diff-staged.patch 2>&1. Build the commit-message draft from rg -n '^(diff --git|@@|^\+|^-)' /tmp/hawk-cap-diff.patch | head -50 slices, not the whole capture.
- Match the repo's voice:
- Mirror tense, casing, length, and prefix conventions from recent commits
- If recent commits are lowercase imperative ("fix banner alignment"), do that
- If they use Conventional Commits ("feat: ..."), do that
- If they're terse one-liners, stay terse — do not pad
- Draft a commit message: one short line, summarizes the why of the change. No body unless the diff genuinely needs one.
Never include AI attribution. No "Generated with Claude", no "🤖", no Co-Authored-By: Claude ... trailer, no mention of Anthropic, AI, or any model — not in the subject, not in the body, not in a trailer. Even if the repo's history contains such trailers, do not add them. The commit must read as if a human wrote it.
- Stage explicitly: add the specific files you intend to commit by name. Never
git add -Aorgit add .— that risks sweeping in.env, credentials, or other untracked files the user did not mean to commit.
- Sanity check before committing:
- If staged files include anything that smells like a secret (
.env*,*.pem,credentials*,*.key), stop and ask - If the working tree is clean, say so and exit — do not create empty commits
- Commit and push:
- Commit with the drafted message
- If the branch has no upstream, push with
-u origin <branch>; otherwise plaingit push - If pre-commit hooks fail, fix the issue and create a new commit (never
--amend, never--no-verify)
- Handle non-fast-forward rejections — if push is rejected because the remote moved ahead:
- Run
git pull --rebaseto replay your local commits on top of the remote tip. This is safe — you're only rebasing your unpushed commits, which no one else has. - If the rebase hits conflicts: stop, surface the conflicting paths, and let the user resolve. Do not auto-resolve.
- After a clean rebase, retry
git push. - Do not fall back to a merge pull (
git pullwithout--rebase) — that creates noisyMerge branch 'main' of origin/...commits, which is exactly what we're avoiding. - Do not force-push to recover from a rejection.
- Report: the short SHA, the message, and the push destination. One line.
Rules
- Never push to
main/masterwith--forceor--force-with-lease - Never skip hooks (
--no-verify,--no-gpg-sign) - Never amend a commit that's already been pushed
- If the user is mid-rebase, mid-merge, or has conflicts, stop and surface the state instead of committing through it
- Big-output discipline. Heavy command output (project check, full
git diff, repo-wide search, long log, large fetch) goes to/tmp/hawk-cap-<step>.log, thenrg -n '<pattern>' /tmp/hawk-cap-<step>.log | head -50extracts what you need.Readthe file only withoffset/limit. See README → Big-output discipline.