---root: falsetargets: ["claudecode", "cursor"]description: "Git commit conventions: message format…"globs: []cursor: alwaysApply: true---
<!-- playbook:git v5 (2026-10-08) — when to commit isn't inferred from a change instruction --><!-- source: andrej-kolic/playbook .rulesync/rules/git.md; edits elsewhere are overwritten -->
# Git Commit ConventionsGoverns commit message content, commit granularity…The problem
Each coding agent reads its instructions from its own place: Claude Code from
.claude/rules/, Cursor from .cursor/rules/, others from their own folders. Keeping
commit, testing and writing rules by hand in every project and every agent means the copies
drift, and a stale one keeps applying without anyone noticing.
The approach
Rules and skills are written once, under .rulesync/, and
rulesync generates each agent’s copy from them.
Skills install once per machine, with pnpm dlx github:andrej-kolic/playbook skills, and
work in every project — x-issue-to-pr, for one, takes a GitHub issue through branch and
pull request. Rules install per project, with … playbook rules, and the project commits
them, so cloud sessions and review bots get them without an install step and a rule change
shows up in review.
Every generated file starts with a playbook:<name> vN (date) line, so a stale copy is
visible to anyone who opens it, and a source line that says where to edit instead.
The tradeoffs
Snapshots, not links. A generated copy doesn’t update itself. After a rule changes, a
project keeps applying the old text until it runs pnpm rules:update; pnpm rules:outdated
lists the rules that changed, but nothing updates them on its own.
Only hosts a skill runs in. A skill lists the agents it is actually used in, not every agent rulesync can target. A skill that calls Cursor’s CLI from Claude Code is not a Cursor skill.