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").

Informações da origem

Repositório
lirios/fluid
Última atividade na origem
5 de agosto de 2026 às 06:21
Idioma detectado do SKILL.md
inglês
Estrelas
891
Forks
120

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Explorador de arquivos
2 arquivos

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
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)
Ver no GitHub