Agent attribution for code quality.
Install arbiter-score, run arbiter score, and quickly see which AI agent or human produced your highest-risk code.
pip install "arbiter-score[analyzers]"
arbiter score .Example output:
┌──────────────────────┬──────────┬────────┐
│ Agent │ Quality │ Grade │
├──────────────────────┼──────────┼────────┤
│ claude │ 72.3% │ C │
│ gpt-4o │ 88.1% │ B │
│ copilot │ 91.4% │ A │
│ human (you) │ 94.2% │ A │
└──────────────────────┴──────────┴────────┘
Every team using AI coding tools has a "who wrote this mess?" moment. Arbiter makes that visible -- per file, per commit, and per author -- then grades the code quality signal.
pip install "arbiter-score[analyzers]" # one-time install
arbiter score . # grade everything
arbiter diff . --base main # only changed files in this branch
arbiter agents # author leaderboard
arbiter trend --days 30 # quality over time
arbiter worst --limit 20 # highest-risk files
arbiter audit-fleet ./repos # score every repo in a directory
arbiter serve # start web dashboardAI-written code often optimizes for speed over maintainability. The result can include unused imports, high complexity, duplicated logic, and risky patterns. Standard linters catch some symptoms; Arbiter also attributes risk back to the contributor model/actor so you can review the right places first.
In practice, teams tune gates per agent tier (for example: stricter thresholds for autonomous agents, looser for exploratory branches) and keep human review focused on high-risk commits.
| Feature | Traditional tools | Arbiter |
|---|---|---|
| Agent attribution | None | First-class: tracks contribution source (AI and humans) |
| Per-commit scoring | Repository-wide only | Scores changed files by commit and author |
| Diff analysis | Optional / limited | Scores only what changed in PR/branch workflows |
| Review workflows | Static report | Supports agent-specific gate thresholds |
| Dashboard output | SaaS + build steps | Local, single-file HTML dashboard endpoint |
| Core runtime | Multi-tool runtime | Lightweight core (LibCST only); optional analyzer dependencies |
| Analyzer | Weight | Finds |
|---|---|---|
| Lint (ruff) | 35% | Style violations, import errors, bugbear patterns |
| Security (bandit) | 30% | Hardcoded secrets, shell injection, risky command patterns |
| Complexity (radon) | 35% | Cyclomatic complexity by function (A-F) |
| Dead code (vulture) | penalty | Unused functions, imports, variables |
| Duplication (AST hash) | penalty | Near-duplicate function bodies |
Arbiter computes a normalized score from analyzer penalties and total lines of code.
Common format:
100 - (penalty / LOC) * normalization
Grades: A (90+), B (80+), C (70+), D (60+), F (<60).
pip install arbiter-score # core (LibCST runtime)
pip install "arbiter-score[analyzers]" # + ruff, radon, vulture, banditNote: The PyPI package is arbiter-score (not arbiter, which is different). The CLI command is arbiter.
git clone https://github.com/hummbl-dev/arbiter.git && cd arbiter
pip install -e ".[analyzers]"pip install -e ".[test]"
python -m pytest tests/ -v- Python 3.11+
- git
Arbiter enforces quality checks in CI.
arbiter score . --fail-under 90 --json
arbiter diff . --base main --fail-under 80- Use
arbiter-scorepackage name to avoid installing the wrong package. - Run from repository root for consistent path reporting and results.
- Optional analyzers improve signal quality, but many core checks run without the analyzer extras installed.
Apache 2.0 — see LICENSE.
Built by HUMMBL.