CLI
The qualifier crate installs a binary called qualifier.
cargo install qualifier
Commands
qualifier
attest <artifact> [options] Add an attestation
show <artifact> Show attestations and scores
score [artifact...] Compute and display scores
ls [--below N] [--kind K] List artifacts by score/kind
check [--min-score N] CI gate: exit non-zero if below threshold
compact <artifact> [options] Compact a .qual file
graph [--format dot|json] Visualize the dependency graph
init Initialize qualifier in a repo
praise <artifact> Show who attested and why
All commands that produce output accept --format json for machine-readable output.
Typical workflows
Record a quality concern
qualifier attest src/parser.rs --kind concern --score -30 \
--summary "Panics on malformed UTF-8 input" \
--suggested-fix "Replace .unwrap() on line 42 with error propagation" \
--tag robustness --tag error-handling \
--issuer "mailto:alice@example.com"
See scores for all artifacts
qualifier score
ARTIFACT RAW EFF STATUS
lib/crypto -20 -20 ██░░░░░░░░ blocker
src/auth.rs -30 -30 █░░░░░░░░░ blocker
lib/http 50 50 ████████░░ healthy
src/parser.rs 5 5 ██████░░░░ ok
bin/server 50 -30 █░░░░░░░░░ blocker
CI gating
# In your CI pipeline
qualifier check --min-score 0
# Fails with exit code 1 if any artifact is below threshold
# Stderr shows which artifacts failed:
# FAIL lib/crypto eff: -20 (threshold: 0)
# FAIL src/auth.rs eff: -30 (threshold: 0)
# FAIL bin/server eff: -30 (threshold: 0)
Show details for one artifact
qualifier show src/parser.rs
src/parser.rs
Raw score: 5
Effective score: 5
Attestations (3):
[-30] concern "Panics on malformed UTF-8 input" alice 2026-02-24
[+40] praise "Excellent property-based test coverage" bob 2026-02-24
[ -5] suggestion "Consider adding fuzzing targets" carol 2026-02-24
Compact old attestations
# Preview what compaction would do
qualifier compact src/parser.rs --dry-run
# Prune superseded attestations
qualifier compact src/parser.rs
# Collapse everything to a single epoch attestation
qualifier compact src/parser.rs --snapshot
# Compact every .qual file in the repo
qualifier compact --all
Visualize the dependency graph
# Output as Graphviz DOT
qualifier graph --format dot | dot -Tpng -o graph.png
# Output as JSON
qualifier graph --format json
Initialize qualifier in a repo
qualifier init
Created qualifier.graph.jsonl (empty — populate with your dependency graph)
Detected VCS: git
Added *.qual merge=union to .gitattributes
List the worst offenders
qualifier ls --below 0
qualifier ls --kind blocker
qualifier ls --unqualified # artifacts with no attestations
Batch attestation (for agents)
# Pipe JSONL attestations from stdin
cat attestations.jsonl | qualifier attest --stdin
Configuration
Qualifier uses layered configuration (highest wins):
| Priority | Source | Example |
|---|---|---|
| 1 | CLI flags | --graph path/to/graph.jsonl |
| 2 | Environment | QUALIFIER_GRAPH, QUALIFIER_ISSUER |
| 3 | Project config | .qualifier.toml |
| 4 | User config | ~/.config/qualifier/config.toml |
| 5 | Built-in defaults |