Skip to main content

git-commit

Execute git commit with conventional commit message analysis, intelligent staging, message generation, and an `Assisted-by: <agent-name>:<model-id>` trailer disclosing AI involvement. Use when the user asks to commit changes, create a git commit, or mentions "/commit". Also trigger on any git commit activity visible in the session — commits you make yourself, or commits the user makes outside your tool calls that surface in the conversation — even without an explicit request, so the trailer stays attached. Also trigger when the user explicitly asks to tag existing commits in a branch (e.g. "add assisted-by to commits in this branch").

소스 정보

저장소
lirios/fluid
최근 소스 활동
2026년 8월 5일 06:21
감지된 SKILL.md 언어
영어
스타
891
포크
120

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

파일 탐색기
2 개 파일

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
git-commit
description
Execute git commit with conventional commit message analysis, intelligent staging, message generation, and an `Assisted-by: <agent-name>:<model-id>` trailer disclosing AI involvement. Use when the user asks to commit changes, create a git commit, or mentions "/commit". Also trigger on any git commit activity visible in the session — commits you make yourself, or commits the user makes outside your tool calls that surface in the conversation — even without an explicit request, so the trailer stays attached. Also trigger when the user explicitly asks to tag existing commits in a branch (e.g. "add assisted-by to commits in this branch").
license
MIT
allowed-tools
Bash
# Git Commit with Conventional Commits ## Overview Create standardized, semantic git commits using the Conventional Commits specification, each carrying an `Assisted-by: <agent-name>:<model-id>` trailer that discloses AI involvement. Analyze the actual diff to determine appropriate type, scope, and message. `<agent-name>` and `<model-id>` identify the AI assistant (CLI/harness) and LLM version that **authored the code changes being committed** — not necessarily the model executing this skill. If this skill runs under a different agent or model than the one that wrote the diff (e.g. a dedicated commit subagent pinned to a smaller model), the caller must pass the authoring session's agent-name/model-id through explicitly. Never default to this skill's own runtime identity — that would misattribute the disclosure to the wrong model. ## Conventional Commit Format ``` <type>[optional scope]: <description> [optional body] [optional footer(s)] ``` ## Commit Types | Type | Purpose | | ---------- | ------------------------------ | | `feat` | New feature | | `fix` | Bug fix | | `docs` | Documentation only | | `style` | Formatting/style (no logic) | | `refactor` | Code refactor (no feature/fix) | | `perf` | Performance improvement | | `test` | Add/update tests | | `build` | Build system/dependencies | | `ci` | CI/config changes | | `chore` | Maintenance/misc | | `revert` | Revert commit | ## Breaking Changes ``` # Exclamation mark after type/scope feat!: remove deprecated endpoint # BREAKING CHANGE footer feat: allow config to extend other configs BREAKING CHANGE: `extends` key behavior changed ``` ## Workflow ### 1. Analyze Diff ```bash # If files are staged, use staged diff git diff --staged # If nothing staged, use working tree diff git diff # Also check status git status --porcelain ``` ### 2. Stage Files (if needed) If nothing is staged or you want to group changes differently: ```bash # Stage specific files git add path/to/file1 path/to/file2 # Stage by pattern git add *.test.* git add src/components/* # Interactive staging git add -p ``` **Never commit secrets** (.env, credentials.json, private keys). ### 3. Generate Commit Message Analyze the diff to determine: - **Type**: What kind of change is this? - **Scope**: What area/module is affected? - **Description**: One-line summary of what changed (present tense, imperative mood). Aim for 50 characters, hard cap at 72. ### 4. Execute Commit Pass the `Assisted-by` trailer directly on the commit command — this is the clean path and avoids amend noise. Never use `Co-authored-by:` for AI assistance; that convention is reserved for human collaborators, `Assisted-by:` is the correct semantic. ```bash # Single line git commit -m "<type>[scope]: <description>" --trailer "Assisted-by: <agent-name>:<model-id>" # Multi-line with body/footer git commit -m "$(cat <<'EOF' <type>[scope]: <description> <optional body> <optional footer> EOF )" --trailer "Assisted-by: <agent-name>:<model-id>" ``` ## When a Commit Lands Outside This Workflow Sometimes a commit lands on HEAD that you did not run yourself — the user invoked git via a shell escape (e.g. Claude Code's `! git commit ...`) or a separate terminal. Your only window is after the fact, and the trailer still needs to land. Run the bundled safety-check script before amending. It prints `safe`, or `skip:<reason>` if HEAD is already pushed, already trailered, a merge, or has a rebase/cherry-pick/revert/bisect in progress. Invoke it with the script's full path — resolve `scripts/safety-check.sh` against the directory this SKILL.md was loaded from, not the current working directory (the two are almost never the same): ``` <skill-dir>/scripts/safety-check.sh ``` Only when the output is exactly `safe`, amend: ```bash git commit --amend --no-edit --trailer "Assisted-by: <agent-name>:<model-id>" ``` Follow up with one short line so the user knows the hash moved, e.g. "Amended HEAD to add Assisted-by trailer." If the output starts with `skip:`, tell the user why the commit was skipped. ## Tagging an Entire Branch Triggered by phrases like "add assisted-by to commits in this branch", "tag the commits on this branch", or "backfill the trailer". This is the **only** mode that rewrites more than HEAD, and only because the explicit request authorizes it. Never enter this mode on autopilot. ### Pick the base Default to `@{u}` — it guarantees the range is only unpushed commits, which removes the force-push question entirely. If the branch has no upstream, ask the user for an explicit base ref rather than guessing. If the user names a base themselves ("from the last release tag"), honor it. ### Show the plan, then confirm 1. `git log --oneline <base>..HEAD` so the user can see the commits that will be rewritten. 2. If `<base>` is anything other than `@{u}`, run `git rev-list <base>..@{u} 2>/dev/null`. If non-empty, those commits are already on the remote — warn the user that after the rebase they will need to force-push to publish the rewrite, and confirm before proceeding. 3. If the range contains merge commits, stop and ask how to handle them. Default rebase linearizes merges (destructive), and `--rebase-merges` with `--exec` on merges is fragile — not worth the risk without the user's judgment. ### Run it The exec short-circuits on commits that already carry the trailer, so the pass is idempotent: ```bash git rebase <base> --exec 'git log -1 --format=%B | git interpret-trailers --parse | grep -qi "^Assisted-by:" || git commit --amend --no-edit --trailer "Assisted-by: <agent-name>:<model-id>"' ``` Afterwards, report how many commits were tagged vs skipped. If the branch was already pushed, tell the user they will need to run `git push --force-with-lease` themselves to publish the rewrite. If the rebase hits a conflict, do not try to resolve it. Surface the conflict to the user and let them choose `--continue` vs `--abort`. ## Best Practices - One logical change per commit - Present tense: "add" not "added" - Imperative mood: "fix bug" not "fixes bug" - Reference issues: `Closes #123`, `Refs #456` - Never fabricate or prettify the `<agent-name>:<model-id>` token — use the actual agent/CLI/harness name and model ID/version ## Git Safety Protocol - NEVER update git config - NEVER run destructive commands (--force, hard reset) without explicit request - NEVER skip hooks (--no-verify) unless user asks - NEVER force push to main/master - NEVER run `git push` yourself in any mode, even after a rebase or amend — publishing new or rewritten history is the user's call; surface the state and let them decide - If commit fails due to hooks, fix and create a NEW commit (don't amend)
GitHub에서 보기