/commit-hygiene
Commit and branch naming standards for Engram contributors, enforced by GitHub rulesets. Trigger: Any commit creation, review, or branch cleanup.
$ npx -y skills add Gentleman-Programming/engram --skill commit-hygiene --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/commit-hygiene
Context preview
The summary Claude sees to decide when to auto-load this skill.
Commit and branch naming standards for Engram contributors, enforced by GitHub rulesets. Trigger: Any commit creation, review, or branch cleanup.
SKILL.md
commit-hygiene.SKILL.mdname: engram-commit-hygiene
description: >
Commit and branch naming standards for Engram contributors, enforced by GitHub rulesets.
Trigger: Any commit creation, review, or branch cleanup.
license: Apache-2.0
metadata:
author: gentleman-programming
version: "2.0"
When to Use
Use this skill when:
- Creating commits
- Creating or naming branches
- Reviewing commit history in a PR
- Cleaning up staged changes
---
Critical Rules
1. **Commit messages MUST follow Conventional Commits** — enforced by GitHub ruleset, rejected on push if invalid 2. **Branch names MUST follow `type/description` format** — enforced by GitHub ruleset, rejected on push if invalid 3. Keep one logical change per commit 4. Message should explain **why**, not only what 5. **NEVER** include `Co-Authored-By` trailers 6. **NEVER** commit generated/temp/local files
---
Commit Message Format (enforced by GitHub ruleset)
**Regex:** `^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-z0-9\._-]+\))?!?: .+`
<type>(<optional-scope>): <description>
<type>(<optional-scope>)!: <description> ← breaking change
Allowed Types
| Type | Purpose | |------|---------| | `feat` | New feature | | `fix` | Bug fix | | `docs` | Documentation only | | `refactor` | Code refactoring (no behavior change) | | `chore` | Maintenance, dependencies | | `style` | Formatting, whitespace | | `perf` | Performance improvement | | `test` | Adding or fixing tests | | `build` | Build system changes | | `ci` | CI/CD pipeline changes | | `revert` | Revert a previous commit |
Rules
- Type MUST be lowercase, one of the listed values
- Scope is optional, lowercase, allows `a-z`, `0-9`, `.`, `_`, `-`
- `!` before `:` marks a breaking change
- Description MUST start after `: ` (colon + space)
- Description should be imperative mood ("add", not "added" or "adds")
Valid Examples
feat(cli): add --json flag to session list command
fix(store): prevent duplicate observation insert on retry
docs(contributing): update workflow documentation
refactor(internal): extract search query sanitizer
chore(deps): bump github.com/charmbracelet/bubbletea to v0.26
style(tui): fix alignment in session detail view
perf(store): optimize FTS5 query for large datasets
test(sync): add coverage for conflict resolution
ci(workflows): split e2e into separate job
fix!: change session ID format
Invalid Examples (push will be rejected)
Fix bug ← no type prefix
feat: Add login ← description should be lowercase
FEAT(cli): add flag ← type must be lowercase
feat (cli): add flag ← no space before scope
feat(CLI): add flag ← scope must be lowercase
update docs ← no conventional commit format
---
Branch Naming Format (enforced by GitHub ruleset)
**Regex:** `^(feat|fix|chore|docs|style|refactor|perf|test|build|ci|revert)\/[a-z0-9._-]+$`
<type>/<description>
Allowed Types
`feat`, `fix`, `chore`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `revert`
Rules
- Type MUST be one of the listed values
- Description MUST be lowercase
- Only `a-z`, `0-9`, `.`, `_`, `-` allowed in description
- No uppercase, no spaces, no special characters
Valid Examples
feat/json-export-command
fix/duplicate-observation-insert
docs/api-reference-update
refactor/extract-query-sanitizer
chore/bump-bubbletea-v0.26
ci/split-e2e-job
Invalid Examples (push will be rejected)
feature/add-login ← "feature" not allowed, use "feat"
fix/Add-Login ← uppercase not allowed
my-branch ← no type prefix
fix_something ← missing "/" separator
---
Pre-Commit Checklist
- [ ] Commit message matches conventional commits format
- [ ] Branch name matches `type/description` format
- [ ] Diff matches commit scope (no unrelated changes)
- [ ] No secrets, credentials, or `.env` files
- [ ] No binaries, coverage outputs, or local artifacts
- [ ] No `Co-Authored-By` trailers
- [ ] Tests relevant to the change pass
Read more
name: engram-commit-hygiene description: > Commit and branch naming standards for Engram contributors, enforced by GitHub rulesets. Trigger: Any commit creation, review, or branch cleanup. license: Apache-2.0 metadata: author: gentleman-programming version: "2.0"
When to Use
Use this skill when:
- Creating commits
- Creating or naming branches
- Reviewing commit history in a PR
- Cleaning up staged changes
---
Critical Rules
1. **Commit messages MUST follow Conventional Commits** — enforced by GitHub ruleset, rejected on push if invalid 2. **Branch names MUST follow `type/description` format** — enforced by GitHub ruleset, rejected on push if invalid 3. Keep one logical change per commit 4. Message should explain **why**, not only what 5. **NEVER** include `Co-Authored-By` trailers 6. **NEVER** commit generated/temp/local files
---
Commit Message Format (enforced by GitHub ruleset)
**Regex:** `^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-z0-9\._-]+\))?!?: .+`
<type>(<optional-scope>): <description> <type>(<optional-scope>)!: <description> ← breaking change
Allowed Types
| Type | Purpose | |------|---------| | `feat` | New feature | | `fix` | Bug fix | | `docs` | Documentation only | | `refactor` | Code refactoring (no behavior change) | | `chore` | Maintenance, dependencies | | `style` | Formatting, whitespace | | `perf` | Performance improvement | | `test` | Adding or fixing tests | | `build` | Build system changes | | `ci` | CI/CD pipeline changes | | `revert` | Revert a previous commit |
Rules
- Type MUST be lowercase, one of the listed values
- Scope is optional, lowercase, allows `a-z`, `0-9`, `.`, `_`, `-`
- `!` before `:` marks a breaking change
- Description MUST start after `: ` (colon + space)
- Description should be imperative mood ("add", not "added" or "adds")
Valid Examples
feat(cli): add --json flag to session list command fix(store): prevent duplicate observation insert on retry docs(contributing): update workflow documentation refactor(internal): extract search query sanitizer chore(deps): bump github.com/charmbracelet/bubbletea to v0.26 style(tui): fix alignment in session detail view perf(store): optimize FTS5 query for large datasets test(sync): add coverage for conflict resolution ci(workflows): split e2e into separate job fix!: change session ID format
Invalid Examples (push will be rejected)
Fix bug ← no type prefix feat: Add login ← description should be lowercase FEAT(cli): add flag ← type must be lowercase feat (cli): add flag ← no space before scope feat(CLI): add flag ← scope must be lowercase update docs ← no conventional commit format
---
Branch Naming Format (enforced by GitHub ruleset)
**Regex:** `^(feat|fix|chore|docs|style|refactor|perf|test|build|ci|revert)\/[a-z0-9._-]+$`
<type>/<description>
Allowed Types
`feat`, `fix`, `chore`, `docs`, `style`, `refactor`, `perf`, `test`, `build`, `ci`, `revert`
Rules
- Type MUST be one of the listed values
- Description MUST be lowercase
- Only `a-z`, `0-9`, `.`, `_`, `-` allowed in description
- No uppercase, no spaces, no special characters
Valid Examples
feat/json-export-command fix/duplicate-observation-insert docs/api-reference-update refactor/extract-query-sanitizer chore/bump-bubbletea-v0.26 ci/split-e2e-job
Invalid Examples (push will be rejected)
feature/add-login ← "feature" not allowed, use "feat" fix/Add-Login ← uppercase not allowed my-branch ← no type prefix fix_something ← missing "/" separator
---
Pre-Commit Checklist
- [ ] Commit message matches conventional commits format
- [ ] Branch name matches `type/description` format
- [ ] Diff matches commit scope (no unrelated changes)
- [ ] No secrets, credentials, or `.env` files
- [ ] No binaries, coverage outputs, or local artifacts
- [ ] No `Co-Authored-By` trailers
- [ ] Tests relevant to the change pass
Persistent memory system for AI coding agents. Agent-agnostic Go binary with SQLite + FTS5, MCP server, HTTP API, CLI, and TUI.
Repo: Gentleman-Programming/engram
Other skills on gentleman-programming-engram.
- /memory
ALWAYS ACTIVE — Persistent memory protocol. You MUST save decisions, conventions, bugs, and discoveries to engram proactively. Do NOT wait for the user to ask.
Open skill - /memory
ALWAYS ACTIVE — Persistent memory protocol. You MUST save decisions, conventions, bugs, and discoveries to engram proactively. Do NOT wait for the user to ask.
Open skill - /architecture-guardrails
Architecture guardrails for Engram across local store, cloud sync, dashboard, and plugins. Trigger: Any change that affects system boundaries, ownership, state flow, or cross-package responsibilities.
Open skill - /backlog-triage
Backlog triage protocol for Engram: audit open issues and PRs, classify each item, infer maintainer ideology from comments, and produce an actionable disposition report. Trigger: Auditing open issues or PRs, triaging the backlog, reviewing contributor submissions as a
Open skill - /branch-pr
PR creation workflow for Engram following the issue-first enforcement system. Trigger: When creating a pull request, opening a PR, or preparing changes for review.
Open skill - /business-rules
Product and business-rule guardrails for Engram. Trigger: Any change that affects sync behavior, project controls, permissions, or memory semantics.
Open skill

