Notre avis
Valide les messages de commit selon la spécification Conventional Commits à l'aide d'une validation programmatique.
Points forts
- Renforce automatiquement une convention de commit standardisée dans l'équipe.
- S'intègre facilement dans les hooks pre-commit et les pipelines CI/CD.
- Fournit des retours immédiats et clairs en cas d'erreur de format.
- Implémentation simple avec une expression régulière légère.
Limites
- Ne vérifie que le format du message, pas la pertinence ni l'exactitude du contenu.
- Ne valide pas les scopes personnalisés au-delà de leur présence syntaxique.
- La limite de 72 caractères sur le sujet peut être contraignante pour certains messages.
Utilisez cette compétence pour imposer une convention de commit cohérente dans un projet d'équipe ou open-source.
Évitez si votre équipe utilise déjà un format de commit différent ou si vous avez besoin de validations plus complexes (ex: scopes autorisés, corps obligatoire).
Analyse de sécurité
PrudenceThe skill lists Bash among its allowed tools, which is a powerful execution capability. The instructions are limited to commit message validation and do not include destructive commands, but the presence of Bash slightly elevates risk.
- •Bash tool declared, enabling execution of arbitrary shell commands. While the skill itself focuses on validation scripts, misuse or injection risks exist if the agent is redirected.
Exemples
Validate this commit message against Conventional Commits: 'feat(auth): add OAuth2 support'Create a pre-commit hook that validates commit messages using the Conventional Commits specification.Why is the commit message 'Added new feature' invalid according to Conventional Commits?name: commit-validator description: Validates commit messages against Conventional Commits specification using programmatic validation. Replaces the git-conventional-commit-messages text file with a tool that provides instant feedback. version: 1.0.0 model: haiku invoked_by: both user_invocable: true tools: [Read, Grep, Bash] best_practices:
- Validate early in pre-commit hooks
- Provide clear error messages
- Enforce in CI/CD pipelines error_handling: graceful streaming: supported
References (archive): SCAFFOLD_SKILLS_ARCHIVE_MAP.md — commit validation logic inspired by claude-flow v3 git-commit hook, everything-claude-code commitlint.
<identity> Commit Message Validator - Programmatically validates commit messages against the [Conventional Commits](https://www.conventionalcommits.org/) specification. </identity> <capabilities> - Before committing code - In pre-commit hooks - In CI/CD pipelines - During code review - To enforce team standards </capabilities> <instructions> <execution_process>Step 1: Validate Commit Message
Validate a commit message string against Conventional Commits format:
Format: <type>(<scope>): <subject>
Types:
feat: A new featurefix: A bug fixdocs: Documentation only changesstyle: Code style changes (formatting, etc.)refactor: Code refactoringperf: Performance improvementstest: Adding or updating testschore: Maintenance tasksci: CI/CD changesbuild: Build system changesrevert: Reverting a previous commit
Validation Rules:
- Must start with type (required)
- Scope is optional (in parentheses)
- Subject is required (after colon and space)
- Use imperative, present tense ("add" not "added")
- Don't capitalize first letter
- No period at end
- Can include body and footer (separated by blank line) </execution_process> </instructions>
Use this regex pattern for validation:
const CONVENTIONAL_COMMIT_REGEX =
/^(feat|fix|docs|style|refactor|perf|test|chore|ci|build|revert)(\(.+\))?: .{1,72}/;
function validateCommitMessage(message) {
const lines = message.trim().split('\n');
const header = lines[0];
// Check format
if (!CONVENTIONAL_COMMIT_REGEX.test(header)) {
return {
valid: false,
error: 'Commit message does not follow Conventional Commits format',
};
}
// Check length
if (header.length > 72) {
return {
valid: false,
error: 'Commit header exceeds 72 characters',
};
}
return { valid: true };
}
</code_example>
<code_example> Valid Examples:
feat(auth): add OAuth2 login support
fix(api): resolve timeout issue in user endpoint
docs(readme): update installation instructions
refactor(components): extract common button logic
test(utils): add unit tests for date formatting
</code_example>
<code_example> Invalid Examples:
Added new feature # Missing type
feat:new feature # Missing space after colon
FEAT: Add feature # Type should be lowercase
feat: Added feature # Should use imperative tense
</code_example>
<code_example>
Pre-commit Hook (.git/hooks/pre-commit):
#!/bin/bash
commit_msg=$(git log -1 --pretty=%B)
if ! node .claude/tools/validate-commit.mjs "$commit_msg"; then
echo "Commit message validation failed"
exit 1
fi
</code_example>
<code_example> CI/CD Integration:
# .github/workflows/validate-commits.yml
- name: Validate commit messages
run: |
git log origin/main..HEAD --pretty=%B | while read msg; do
node .claude/tools/validate-commit.mjs "$msg" || exit 1
done
</code_example> </examples>
<examples> <formatting_example> **Output Format**Returns structured validation result:
{
"valid": true,
"type": "feat",
"scope": "auth",
"subject": "add OAuth2 login support",
"warnings": []
}
Or for invalid messages:
{
"valid": false,
"error": "Commit message does not follow Conventional Commits format",
"suggestions": [
"Use format: <type>(<scope>): <subject>",
"Valid types: feat, fix, docs, style, refactor, perf, test, chore, ci, build, revert"
]
}
</formatting_example> </examples>
<examples> <usage_example> **Example Commands**:# Validate a commit message
node .claude/tools/validate-commit.mjs "feat(auth): implement jwt login"
# Validate from stdin (e.g. in a hook)
echo "fix: incorrect variable name" | node .claude/tools/validate-commit.mjs
</usage_example> </examples>
<instructions> <best_practices> 1. **Validate Early**: Check commit messages before pushing 2. **Provide Feedback**: Show clear error messages with suggestions 3. **Enforce in CI**: Add validation to CI/CD pipelines 4. **Team Training**: Educate team on Conventional Commits format 5. **Tool Integration**: Integrate with Git hooks and IDEs </best_practices> </instructions>Memory Protocol (MANDATORY)
Before starting:
Read .claude/context/memory/learnings.md
After completing:
- New pattern ->
.claude/context/memory/learnings.md - Issue found ->
.claude/context/memory/issues.md - Decision made ->
.claude/context/memory/decisions.md
ASSUME INTERRUPTION: If it's not in memory, it didn't happen.
Expert Next.js App Router
Developpement
Un skill qui transforme Claude en expert Next.js App Router.
Générateur de README
Developpement
Crée des README.md professionnels et complets pour vos projets.
Rédacteur de Documentation API
Developpement
Génère de la documentation API complète au format OpenAPI/Swagger.