Skip to main content

Deterministic, polyglot code quality scoring with governance integration

Project description

Arbiter

CI PyPI Python 3.11+ License Dependencies Last commit Arbiter Score Complexity

Agent-aware code quality scoring for multi-agent codebases.

In 2026, code is written by fleets of AI agents. Arbiter knows who wrote each line -- human or AI -- and scores quality accordingly.

Learn more at hummbl.io.

Repository health, validation, and stewardship expectations are tracked in docs/REPO_HEALTH.md.

Quick Start -- 5 Minutes

pip install "arbiter-score[analyzers]"
arbiter score .

Example output:

Arbiter Scorecard: my-repo (main)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Overall:  87.3  →  Grade: B

By Analyzer:
  Lint       91.2  (ruff — 3 style issues)
  Security   95.0  (bandit — clean)
  Complexity 78.5  (radon — 2 functions > complexity 10)
  Dead Code  92.0  (vulture — 1 unused import)

By Agent (last 30 days):
  claude-code   89.1  (42 commits, 1,240 LOC)
  codex         85.3  (18 commits, 890 LOC)
  human         92.7  (5 commits, 120 LOC)

Top Issues:
  • src/api/routes.py:47  complexity C (15)  — agent: codex
  • src/utils.py:12       unused import os   — agent: claude-code
  • src/models.py:89      line too long      — agent: codex

Run `arbiter serve` to view the full dashboard.

Install

The Python distribution is arbiter-score; the installed CLI command is arbiter. Do not install the separate PyPI project named arbiter for this tool.

pip install arbiter-score                  # core (stdlib only)
pip install "arbiter-score[analyzers]"     # + ruff, radon, vulture, bandit

# Or from source
git clone https://github.com/hummbl-dev/arbiter.git && cd arbiter
pip install -e ".[analyzers]"

Usage

# Quick score -- no persistence, instant feedback
arbiter score /path/to/repo

# Full analysis with per-commit agent attribution
arbiter analyze /path/to/repo

# Agent leaderboard -- who writes the best code?
arbiter agents

# Start the dashboard (single HTML file, no build step)
arbiter serve --port 8080

What It Scores

Arbiter wraps tools you already trust and combines them into a deterministic composite score:

Analyzer Tool Weight What It Finds
Lint ruff 35% Style violations, import errors, bugbear patterns
Security bandit 30% Hardcoded secrets, shell injection, dangerous patterns
Complexity radon 35% Cyclomatic complexity (grade A-F per function)
Dead Code vulture penalty Unused functions, imports, variables
Duplication AST hash penalty Near-duplicate function bodies
Semgrep semgrep opt-in Custom rule enforcement (enable via config)

Scoring: 100 - (penalty / LOC) * normalization. Grades: A (90+) | B (80+) | C (70+) | D (60+) | F (<60).

What Makes Arbiter Different

Feature Traditional Tools Arbiter
Agent attribution None First-class: tracks Claude, Codex, Gemini, Copilot, humans
Per-commit scoring Repo-wide only Scores each commit's changed files individually
Diff analysis N/A Score only what changed in a PR/branch
Agent-specific gates N/A Different quality thresholds per agent trust tier
Dashboard SaaS login Single HTML file with per-agent timelines and fleet view
Dependencies Heavy Analysis tools only; core is stdlib Python

CLI Reference

arbiter analyze <repo>                     # Full analysis + per-commit scoring + persist
arbiter score <repo> [--json] [--exclude]  # Quick score (no persist)
arbiter diff <repo> [--base main] [--json] # Score changed files vs base branch
arbiter agents                             # Agent leaderboard
arbiter trend [--days 30]                  # Quality trend
arbiter worst [--limit 20]                 # Worst files
arbiter commits [--agent claude]           # Recent commits with scores
arbiter audit-fleet <directory>            # Audit all repos in a directory
arbiter triage                             # Auto-classify repos: green/yellow/red/archive
arbiter fix <repo> [--dry-run]             # Auto-fix ruff findings + before/after score
arbiter serve [--port 8080]                # API + dashboard

Tests

pip install ".[test]"
PYTHONPATH=src python -m pytest tests/ -v

Quality Gate

Arbiter grades itself on every push and PR. The CI runs arbiter score . and fails if the score drops below 90 (A grade).

# Run the same check locally
arbiter score . --fail-under 90

# Score only your changed files against main
arbiter diff . --base main --fail-under 80

Requirements

  • Python 3.11+
  • git (for historian)
  • Optional: ruff, radon, vulture, bandit (install via [analyzers] extra)

HUMMBL Ecosystem

Part of the HUMMBL cognitive AI architecture:

Learn more at hummbl.io.

License

Apache 2.0 -- see LICENSE.


Built by HUMMBL LLC from production experience coordinating Claude, Codex, Gemini, and human engineers on a 14,000+ test codebase.

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

arbiter_score-1.0.0.tar.gz (197.4 kB view details)

Uploaded Source

Built Distribution

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

arbiter_score-1.0.0-py3-none-any.whl (144.2 kB view details)

Uploaded Python 3

File details

Details for the file arbiter_score-1.0.0.tar.gz.

File metadata

  • Download URL: arbiter_score-1.0.0.tar.gz
  • Upload date:
  • Size: 197.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for arbiter_score-1.0.0.tar.gz
Algorithm Hash digest
SHA256 39dc2730d12c8374905223567c0a80a59a8c1e6a746b5aa79c59a279e5a81c69
MD5 041bb6605af6c13a85d464473b4b2a44
BLAKE2b-256 3221f3f92d200e864ac3e5a6e64733eafc3d75624118fdc0dcb740f00c237045

See more details on using hashes here.

File details

Details for the file arbiter_score-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: arbiter_score-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 144.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.5

File hashes

Hashes for arbiter_score-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c65df09603e128ea87d1fe17e4d024e5cff6b895b7e0c9419093ad85dbb62a39
MD5 2ef499ec13e222d5ec9c09d1a0a20af5
BLAKE2b-256 c56adc00e4765e04024d67553a38d0727172cff0583e2bd4d79776a6effdffc1

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