Skip to main content

Lint AI coding agent git diffs using static analysis.

Project description

agentlint

CI Python License

agentlint is a Python CLI that lints AI coding-agent git diffs for common risky patterns using static analysis only (no LLM calls).

Install

pip install ai-agentlint

For local development:

pip install -e ".[dev]"

Quick Start

Basic check against last commit:

agentlint check

Check staged changes:

agentlint check --staged

Check a commit range:

agentlint check HEAD~3..HEAD

Pipe a diff through stdin:

git diff | agentlint check --stdin

Provide task context for scope-aware checks:

agentlint check --task "only update parser error handling"

JSON output for automation:

agentlint check --format json

Markdown output for PR comments:

agentlint check --format markdown

Available report formats: text (default), json, and markdown.

Checks

  • scope_drift: Warns when changed files appear unrelated to --task. Example: task is "parser bugfix" but diff edits infra/main.tf.
  • secret_leak: Errors on likely credential leaks (AWS/GitHub tokens, passwords, private keys, DB URLs). Example: added line password = "supersecret123".
  • test_regression: Warns when test lines are deleted without replacement or tests are changed off-task. Example: delete tests/test_api.py assertions and add no test updates.
  • config_vandalism: Warns for CI/infra/lock-file edits outside scope. Example: modify .github/workflows/ci.yml in a docs-only task.
  • dependency_injection: Warns when new dependencies are introduced unexpectedly. Example: add flask==3.0.0 to requirements.txt without dependency-related task text.
  • todo_bombs: Warns/errors on TODO/FIXME/HACK spikes. Example: adding 4 TODO markers raises an error.
  • permission_escalation: Errors on risky patterns (sudo, permissive chmod, eval, exec, shell=True, os.system). Example: subprocess.run(cmd, shell=True).
  • dead_code: Warns on added commented-out code blocks (5+ lines). Example: pasting a large block of # old implementation lines.

Configuration

agentlint discovers .agentlint.toml by walking up from the current directory.

disabled_checks = ["scope_drift"]

[severity]
todo_bombs = "error"
config_vandalism = "info"

[ignore]
secret_leak = ["tests/fixtures/*"]
scope_drift = ["docs/*"]

[secrets]
allowed_patterns = ["^dummy_token_for_tests$"]

CLI config controls:

  • --config PATH: Load config from explicit file.
  • --no-config: Ignore discovered config files.

GitHub Actions

Use the bundled composite action in this repository to lint PR diffs and post markdown results as a pull request comment.

name: agentlint
on:
  pull_request:

permissions:
  contents: read
  pull-requests: write

jobs:
  lint-diff:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
      - run: git fetch origin main --depth=1
      - uses: ./
        id: agentlint
        with:
          fail-on-error: true
          fail-on-warning: false
          format: markdown
          comment: true
          python-version: "3.12"
      - if: always()
        run: |
          echo "exit-code=${{ steps.agentlint.outputs.exit-code }}"
          printf '%s\n' "${{ steps.agentlint.outputs.report }}"

Why agentlint?

  • Enforces deterministic, static checks suitable for CI gates.
  • Focuses on agent-specific failure patterns in patch output.
  • Fast enough to run on every PR and staged commit.

Part of the Agent Toolkit

agentlint is one of three tools for AI coding agent quality:

  • coderace — Race coding agents against each other on real tasks. Automated, reproducible, scored comparisons.
  • agentmd — Generate and score context files (CLAUDE.md, AGENTS.md, .cursorrules) for AI coding agents.
  • agentlint — Lint AI agent git diffs for risky patterns. Static analysis, no LLM required.

Measure (coderace) → Optimize (agentmd) → Guard (agentlint).

Contributing

  1. Create a branch.
  2. Add or update checks/tests/docs together.
  3. Run pytest -v --cov=agentlint --cov-report=term-missing.
  4. Open a PR with a short rationale and sample diff cases.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ai_agentlint-0.2.0.tar.gz (26.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ai_agentlint-0.2.0-py3-none-any.whl (22.2 kB view details)

Uploaded Python 3

File details

Details for the file ai_agentlint-0.2.0.tar.gz.

File metadata

  • Download URL: ai_agentlint-0.2.0.tar.gz
  • Upload date:
  • Size: 26.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ai_agentlint-0.2.0.tar.gz
Algorithm Hash digest
SHA256 659a0a0b26de9d241065dddcf0c2c5c9d6a79d3ef0f25d3cc364a748e5081bf9
MD5 a675f40b1ec9405c23eb9c6a91dfa102
BLAKE2b-256 cd876094eaafe7468991844ba42cca9a5b6fb0aa12256c00cf88bc83bbbb13a4

See more details on using hashes here.

File details

Details for the file ai_agentlint-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ai_agentlint-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 22.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for ai_agentlint-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a819c42d43cf190878ed2284117fb061f72ceecccffd0a4eed920b7910a0e0f8
MD5 b49839bc922637492bd9863c24ad5ea4
BLAKE2b-256 2c093db6000851544108c2e2d9afbac35334346989265fda0b20873f5c31a70a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page