Arbiter
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 dashboard
Why Arbiter exists
AI-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.
What makes Arbiter different
| 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 |
Scoring model
| 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).
Install
From PyPI (recommended)
pip install arbiter-score # core (LibCST runtime)
pip install "arbiter-score[analyzers]" # + ruff, radon, vulture, bandit
Note: The PyPI package is arbiter-score (not arbiter, which is different). The CLI command is arbiter.
From source
git clone https://github.com/hummbl-dev/arbiter.git && cd arbiter
pip install -e ".[analyzers]"
Tests
pip install -e ".[test]"
python -m pytest tests/ -v
Requirements
- Python 3.11+
- git
Quality gates
Arbiter enforces quality checks in CI.
arbiter score . --fail-under 90 --json
arbiter diff . --base main --fail-under 80
Common gotchas
- 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.
License
Apache 2.0 — see LICENSE.
Built by HUMMBL.
Metadata
Release files for arbiter-score 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| arbiter_score-1.1.0.tar.gz | 220.6 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| arbiter_score-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 384.5 kB
Release files / arbiter_score-1.1.0.tar.gz
| Download URL | arbiter_score-1.1.0.tar.gz |
|---|---|
| Size | 220.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6ae1d7f380e6c6ee75bc51106c35745c6ae9c5494b5c0754d313bb0fa45687ad
|
|
BLAKE2b-256 checksum How to use checksums |
6fcc28084198e37169c18d4004eec73a27a431b6502e3adc5545f73b21cf9590
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logRelease files / arbiter_score-1.1.0-py3-none-any.whl
| Download URL | arbiter_score-1.1.0-py3-none-any.whl |
|---|---|
| Size | 163.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bd7acef1f32b70297febe8255da61ec66a5f1786d0e8911e946e33ebb902fad9
|
|
BLAKE2b-256 checksum How to use checksums |
685da30a39bc35580fbc32da465e8156b9feaa1f20efd5033c9976bd709b7891
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logSecurity for arbiter-score 1.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for arbiter_score-1.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 22, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.