From agent-skills
Creates Odoo-style commits following official git guidelines: drafts `[TAG] module: short description` messages, amends unpushed commits, stages files explicitly, and squashes local history before PRs.
How this skill is triggered — by the user, by Claude, or both
Slash command
/agent-skills:odoo-commitThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
1. Run `git diff --stat` and `git status --short` to see what changed, plus
Run git diff --stat and git status --short to see what changed, plus
git log -1 --oneline (and git log @{u}.. --oneline if a remote-tracking
branch exists) to see the last local commit and whether it's still unpushed.
If the change is a direct continuation or fix of that unpushed HEAD commit,
skip drafting a new message and fold it in instead of creating a second commit
for the same logical change:
git add <file>
git commit --amend --no-edit # or drop --no-edit to also revise the message
Otherwise, draft a new commit message.
Stage relevant files by name - never git add -A or git add ..
Write the commit message to a temporary file, then commit with git commit -F:
cat > /tmp/odoo-commit-message.txt <<'EOF'
[TAG] module: short description
Optional body line.
EOF
git commit -F /tmp/odoo-commit-message.txt
Any equivalent temp-file flow is fine (for example, using PowerShell's
Set-Content or another editor) as long as the final commit is created with
git commit -F <file>.
Before opening a pull request, squash your own back-and-forth commits into one
clean commit per logical change (per OCA guidelines):
the rest of the world doesn't need your intermediate "fix bug 1", "fix bug 2"
history - only the final state and a clear summary. For a single trailing fix,
git commit --amend (step 2) is usually enough; for folding several commits
into one, use an interactive rebase instead:
git rebase -i HEAD~N # N = number of commits to fold
Keep the first line as pick with the real [TAG] module: description message,
mark the rest fixup (drop their messages) or squash (merge messages):
pick 1949129 [IMP] module: Introduce feature A
fixup d2cf643 Fix bug 1 of feature A
fixup 42bd9e8 Fix bug 2 of feature A
fixup 7f767d5 Fix bug 3 of feature A
Either way, only rewrite commits that are still local/unpushed, or on a branch you alone own - never amend or rebase shared history without confirming with the user first.
Report the resulting commit hash and subject.
Do not bypass pre-commit hooks. If a hook fails, fix the issue, re-stage the changes, and create the commit again.
[TAG] module: short description
Optional body explaining WHY, not what. What is visible in the diff.
Focus on motivation, constraints, and decisions made.
task-XXXX, opw-XXXXXX
[TAG] module: description - tag in brackets, then module name, colon, space, description[TAG] module: description) at about 50 characters for
readability; 72 is a hard ceiling, not something to aim for<header>" - e.g. [IMP] base: prevent to archive users linked to active partners -> "if applied, this commit will prevent to archive users linked to
active partners"hhc, plc, nhso_stddataset, imc)various[FIX] - bug fix; used in stable versions, also valid for recent dev bugs[REF] - refactoring: feature heavily rewritten[ADD] - adding new modules[REM] - removing resources: dead code, views, modules[REV] - reverting commits[MOV] - moving files (no content change; use git mv)[REL] - release commits: major/minor stable versions[IMP] - improvements: most incremental dev changes[MERGE] - merge commits / forward port of bug fixes[CLA] - signing Odoo Individual Contributor License[I18N] - translation file changes[PERF] - performance patches[CLN] - code cleanup[LINT] - linting passestask-XXXX, opw-XXXXXX, Fixes #123, Closes #123Examples from the official Odoo git guidelines:
[REF] models: use `parent_path` to implement parent_store
This replaces the former modified preorder tree traversal (MPTT) with the
fields `parent_left`/`parent_right`[...]
[FIX] account: remove frenglish
[...]
Closes #22793
Fixes #22769
[FIX] website: remove unused alert div, fixes look of input-group-btn
Bootstrap's CSS depends on the input-group-btn element being the first/last
child of its parent. This was not the case because of the invisible and
useless alert.
Header-only, illustrating the "valid sentence" self-test:
[IMP] base: prevent to archive users linked to active partners
npx claudepluginhub unclecatvn/agent-skillsAnalyzes staged changes and generates clear, semantic commit messages that explain the WHY behind changes, following conventional commits format.
Creates git commits with user approval, semantic commit format (conventional commits), and no Claude attribution. Groups related changes and presents a plan before committing.
Git commit message conventions: structure, formatting, scoping, body content, breaking changes, trailers. Invoke whenever task involves any interaction with commit messages — writing, reviewing, validating, or understanding message format.