🎯

commit-validator

🎯Skill

from oimiragieo/agent-studio

VibeIndex|
What it does

commit-validator skill from oimiragieo/agent-studio

commit-validator

Installation

Node.jsRun Node.js server
node .claude/tools/validate-commit.mjs "feat(auth): implement jwt login"
πŸ“– Extracted from docs: oimiragieo/agent-studio
1
-
Last UpdatedJan 29, 2026

Skill Details

SKILL.md

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.

Overview

Commit Message Validator - Programmatically validates commit messages against the [Conventional Commits](https://www.conventionalcommits.org/) specification.

  • Before committing code
  • In pre-commit hooks
  • In CI/CD pipelines
  • During code review
  • To enforce team standards

Step 1: Validate Commit Message

Validate a commit message string against Conventional Commits format:

Format: ():

Types:

  • feat: A new feature
  • fix: A bug fix
  • docs: Documentation only changes
  • style: Code style changes (formatting, etc.)
  • refactor: Code refactoring
  • perf: Performance improvements
  • test: Adding or updating tests
  • chore: Maintenance tasks
  • ci: CI/CD changes
  • build: Build system changes
  • revert: Reverting a previous commit

Validation Rules:

  1. Must start with type (required)
  2. Scope is optional (in parentheses)
  3. Subject is required (after colon and space)
  4. Use imperative, present tense ("add" not "added")
  5. Don't capitalize first letter
  6. No period at end
  7. Can include body and footer (separated by blank line)

Implementation

Use this regex pattern for validation:

```javascript

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 };

}

```

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

```

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

```

Pre-commit Hook (.git/hooks/pre-commit):

```bash

#!/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

```

CI/CD Integration:

```yaml

# .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

```

Output Format

Returns structured validation result:

```json

{

"valid": true,

"type": "feat",

"scope": "auth",

"subject": "add OAuth2 login support",

"warnings": []

}

```

Or for invalid messages:

```json

{

"valid": false,

"error": "Commit message does not follow Conventional Commits format",

"suggestions": [

"Use format: (): ",

"Valid types: feat, fix, docs, style, refactor, perf, test, chore, ci, build, revert"

]

}

```

Example Commands:

```bash

# 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

```

  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

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.