Skip to content

anchildress1/rai-lint

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

156 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RAI Lint Banner

Stop playing hide-and-seek with AI in your commits.

A dual-language validation framework that makes AI attribution non-negotiable.


📊 Project Stats

GitHub Repo Stars GitHub Issues Release License: Polyform Shield License 1.0.0

Sonar Tech Debt Bugs Code Smells Coverage

🗣️ Languages

JavaScript Badge TypeScript Badge Python Badge

📦 Packages

NPM Version PyPI Version

🤖 AI & Automation

Verdent AI Badge GitHub Copilot Badge ChatGPT Badge Claude Badge GitHub Actions Badge

🔧 Quality & Standards

Conventional Commits Badge commitlint Badge ESLint Badge Lefthook Badge

SonarQube Cloud Badge Codecov Badge


InstallationQuick StartRequired Commit FootersDocumentation


What is this? 🤖

RAI Lint enforces Responsible AI (RAI) attribution in every commit. No more "who wrote this?" moments. No more mystery code. Just honest, trackable AI contributions.

Read the full story: Did AI Erase Attribution? Your Git History Is Missing a Co-Author

%%{init: {'theme':'dark'}}%%
flowchart LR
    A[Developer Commits] --> B{Has AI Footer?}
    B -->|Yes| C[Commit Accepted ✅]
    B -->|No| D[Commit Rejected ❌]
    C --> E[Clear AI Attribution]
    D --> F[Add Footer & Retry]
Loading

Why does this exist?

Because transparency matters. When AI writes code, everyone should know. This isn't about fear or compliance theater—it's about building trust and maintaining clear audit trails.


Features 🎯

🔒 Enforcement by Default

Blocks commits without valid AI attribution footers. No exceptions.

🌍 Dual-Language Support

Native plugins for both JavaScript/TypeScript (commitlint) and Python (gitlint).

📊 Five Attribution Levels

From human-only to AI-generated, track exactly who did what.

Zero Config Start

Works out-of-the-box with sensible defaults. Customize when ready.


Required Commit Footers 🏷️

Every commit must include:

  1. One AI attribution footer (pick the one that fits)
  2. Signed-off-by footer (your human accountability stamp — git commit -s)

💡 Complete audit trail: AI attribution plus human accountability. gitlint-rai enforces both out of the box; for commitlint, enable the plugin's rai-signed-off-by rule alongside rai-footer-exists.

AI Attribution Footers

Pick one of these based on AI involvement:

Footer Format When to Use Example
Authored-by Human-only work, zero AI involvement Authored-by: Jane Doe <jane@example.com>
Commit-generated-by Trivial AI help (docs, messages, reviews) Commit-generated-by: ChatGPT <chatgpt@openai.com>
Assisted-by AI helped, but human did primary work Assisted-by: GitHub Copilot <copilot@github.com>
Co-authored-by Roughly 50/50 AI and human split Co-authored-by: Verdent AI <verdent@verdent.ai>
Generated-by Majority AI-generated code Generated-by: GitHub Copilot <copilot@github.com>

Signed-off-by Footer

Human accountability. This is YOUR stamp confirming you reviewed and take responsibility for the AI attribution above.

Format: Signed-off-by: Your Name <your.email@example.com>

Automate it: git commit -s (or --signoff)

Note

All patterns are case-insensitive and follow the Git trailer format. Email addresses must use angle brackets (Name <email@example.com>) — this is stricter than Git's spec but matches Git's own convention and ensures consistency.

Both plugins ship a rai-signed-off-by rule that enforces this footer. gitlint-rai enables it by default (rule id UC2; opt out with ignore=rai-signed-off-by in .gitlint). For commitlint, add 'rai-signed-off-by': [2, 'always'] to your rules.


Installation 📦

Node.js / Commitlint

npm install --save-dev commitlint-plugin-rai

Configure in commitlint.config.js:

export default {
  extends: ['@commitlint/config-conventional'],
  plugins: ['commitlint-plugin-rai'],
  rules: {
    'rai-footer-exists': [2, 'always'],
    'rai-signed-off-by': [2, 'always'],
  },
};

Python / Gitlint

uv add gitlint-rai

Run the bundled gitlint-rai CLI (recommended) — it loads the RAI rules automatically and accepts all gitlint arguments:

gitlint-rai --msg-filename .git/COMMIT_EDITMSG

Or point plain gitlint at the installed package in .gitlint:

[general]
extra-path=/path/to/site-packages/gitlint_rai

Get that path with:

python -c "import gitlint_rai, pathlib; print(pathlib.Path(gitlint_rai.__file__).parent)"

Quick Start 🚀

Hook Integration

Lefthook
commit-msg:
  commands:
    commitlint:
      run: npx --no-install commitlint --edit {1}
Husky
npx husky add .husky/commit-msg 'npx --no-install commitlint --edit $1'
pre-commit
repos:
  - repo: local
    hooks:
      - id: gitlint
        name: gitlint
        entry: gitlint-rai
        args: [--msg-filename]
        language: python
        additional_dependencies: ['gitlint-rai']
        stages: [commit-msg]

Monorepo Structure 🛠️

rai-lint/
├── packages/
│   ├── node-commitlint/          # Node.js/ESM plugin
│   │   ├── src/
│   │   │   ├── rules/
│   │   │   │   ├── rai-footer-exists.ts
│   │   │   │   └── rai-signed-off-by.ts
│   │   │   └── index.ts
│   │   |── package.json
│   │   ├── tests/
│   │
│   └── python-gitlint/            # Python plugin
│       ├── gitlint_rai/
│       │   ├── __init__.py
│       │   └── rules.py
│       ├── tests/
│       └── pyproject.toml
│
├── docs/                          # Documentation

Contributing 🤝

Contributions welcome! See CONTRIBUTING.md for guidelines.


License 📄

Look, I'm not gonna hide behind a wall of legalese here.

This runs on the PolyForm Shield License 1.0.0. That's not open source — but before you rage-quit, hear me out.

What this means in actual English (this is a plain-language summary — the LICENSE is what actually controls):

Use it. Break it. Fix it. Ship it in your CI pipeline at work. Bake it into a product your company sells, as long as the linter itself isn't the thing being sold. Use it to enforce commit messages on your team and become the office villain. I'm cool with all of that.

What I'm not cool with? Someone spinning this up as "AI Lint Pro" with a $99/month subscription and a fancy landing page. The license already covers this: anything that's a practical substitute for this tool — a resale, a rebrand, a hosted version (paid or free) — counts as competing, and competing is the one thing Shield forbids. If you want to sell something that's basically this project, we need to have a conversation first: anchildress1@gmail.com.

One housekeeping note: if you redistribute this, keep the license (or its URL) and any Required Notice: lines intact. That's the entire attribution ask.

The vibe: This is a tool to solve a real problem — AI attribution in commits is messy, and someone needed to standardize it. If you're using it for that purpose, internal or otherwise, you're good. If you're thinking about selling it... let's chat.

Sound fair? Cool. Now go lint some commits. 🚀


Show Some Love 🫶

If you find this project useful or want to support its development, consider starring the repo or connecting with me!

BuyMeACoffee dev.to Badge LinkedIn


Stop guessing. Start tracking.

Co-authored-by: Claude, Codex, Verdent AI & GitHub Copilot

About

Dual-language linter for Responsible AI commit footers — shared logic for Node (commitlint) and Python (gitlint).

Topics

Resources

Contributing

Security policy

Stars

Watchers

Forks

Releases

Sponsor this project

Used by

Contributors

Languages