Skip to main content
CLUX

Methodology · rubric v7.0.0

How CLUX scores a CLI

Every CLUX report can be traced back to this page: the rubric the evaluator reads, the policy CLUX uses to turn ratings into a score, and the rules for what counts as evidence. The rubric sections are rendered from the same files that produce your score.

How it works

UX signals, optional rules, one report

CLUX runs up to two analyses. Each looks at the command from a different perspective, and each produces its own findings and fixes:

Analysis Question it answers File Output
UX heuristics How good is the experience of using this command? UXHeuristics.md Signal ratings → CLUX Score
Rules (optional) Does the command follow the rules the user chose? Conventions.md Rule verdicts (no score)

How ratings become scores (weights, ranges, grade caps, coverage) is defined in Scoring.md and applied by the server, not by the evaluator.

  • Evidence first, knowledge labelled

    Every rating quotes the evidence you supplied, or says it rests on CLUX's knowledge of the command. CLUX never invents flags or behaviour.

  • Unknown is never ignored

    A signal CLUX couldn't check stays in the score as an unknown. It widens the score's range instead of disappearing, so a score can't look perfect on thin evidence.

  • The evaluator is blind to the weights

    It rates signals without seeing weights, ranges or grade bands, so they can't bias its ratings. CLUX applies them afterwards.

  • Ratings show certainty; rules stay binary

    Ratings and findings say how sure the evaluator is. A rule is passed, violated, or can't verify when the evidence does not settle it.

From evidence to report

  1. 1

    You supply evidence

    A command name, its --help, real output and an error message. More real output means more signals can be checked and a narrower range.

  2. 2

    The evidence is cleaned

    Control characters are stripped and prompt-injection phrases neutralised. Your input is treated as data, never as instructions.

  3. 3

    The evaluator rates every signal

    A Claude model reads the UX heuristics below and rates each signal 0–4 for your audience, plus any rules you chose.

  4. 4

    CLUX checks the output

    The reply must match a strict structure. Signals the rubric marks N/A are forced to N/A, and ratings that don't state their basis become unknowns.

  5. 5

    CLUX computes the result

    Points, unknowns, weights, ranges, coverage and the grade cap are applied by fixed code, so the same ratings always produce the same score.

Two audiences

Human-first or AI-agent first

Every command is evaluated for one audience, chosen by the user:

  • Human-first — a person using the CLI at a terminal.
  • Agent-first — an AI agent or automation operating the CLI through text alone: help text, stdout, stderr and exit codes.

Judge only against the column for the selected audience. Where a signal is N/A for that audience, skip it.

Human-first

Built for a person using the CLI at a terminal.

Ease of Use 50% · Pleasantness 12% · Safety 18% · Security 12% · Accessibility 8%

AI-agent first

Built for an AI agent or automation operating the CLI through text alone: help text, stdout, stderr and exit codes.

Ease of Use 50% · Pleasantness 5% · Safety 24% · Security 21% · Accessibility 0%

The rubric

Rating the signals

The sections below are rendered from the same rubric file the evaluator reads, so this page and the evaluator can't disagree.

Read-only commands still receive a Safety assessment

CLUX does not remove Safety just because a command does not mutate state. It assesses whether the operation is clear, the query scope and matching rules are explicit, each result can be safely selected for the next command, and partial, stale or failed output cannot look complete. Only mutation-specific safeguards are N/A.

Two assessment levels, two honest claims

Command review assesses one command from its help, output and any genuine error response. If recovery has not been exercised, it stays unknown. Repository review applies the full rubric to a CLI-wide evidence bundle, including workflows, cross-command consistency and the complete team ruleset. The resulting scores answer different questions and should not be compared as if they had the same scope.

Rate every signal on this scale:

Rating Meaning
4 Target met, and shown directly in the evidence.
3 Target met, with a minor gap.
2 Partly met, or met in some places and not others.
1 Mostly not met; only a token effort.
0 Not met, or the command works against the target.
N/A The rubric marks the signal N/A for this audience, or a command fact makes it N/A (see Command facts).
Can't verify The signal applies, but neither the evidence nor CLUX's knowledge can settle it.

At Command review level, Can't verify on ERR-4 through ERR-7 means recovery behaviour not exercised unless a genuine error transcript was supplied. It is neither a pass nor a finding. The report says what evidence would make it assessable.

In each table, the audience columns describe what 4 looks like and 0 looks like describes the failure. Ratings 1–3 fall between them.

Can't verify is not ignored. It counts as an unknown in the score and widens the score's range (see Scoring.md). It is always better than a guess.

Evidence rules

  1. Every rating from 0 to 4 states its basis — a short quote or a precise reference from the evidence, or, when it rests on knowledge (rule 4), what that knowledge is. A rating with neither is Can't verify.
  2. A 3 or 4 needs positive support. The absence of a visible problem is not proof of quality.
  3. Absence counts only where the evidence is complete. Complete help text is a contract: if the full help is supplied and a safeguard or flag is not documented, rate it as missing. If a signal depends on behaviour (error output, success output, interruption) and that behaviour was not supplied, return Can't verify. Where that behaviour is supplied — a transcript of real output or of an error — rate those signals from it and quote it. Answering them from knowledge instead throws the rating away (rule 4), and what the transcript shows counts even by its absence: output carrying no escape codes is real evidence for ACC-2.
  4. CLUX's knowledge may rate design-level signals. For a real, widely used command, its default behaviour, what its verbs mean, which sibling commands exist and which flags it documents may come from CLUX's knowledge of that command. Mark such a rating as knowledge. Knowledge can stand in only for help and repo evidence (the Evidence column): what the command documents and what the rest of the CLI offers. A signal that only output, error or runtime evidence can establish always needs supplied evidence, and CLUX enforces this. Behaviour that has to be observed — exact output, exit codes, error wording, prompts — still needs supplied evidence. Never invent a flag, subcommand or behaviour.
  5. N/A is decided by the rubric, not by judgement. A signal is N/A only where its table marks it N/A for the audience, or where a command fact makes it N/A (see Command facts). Any other N/A counts as Can't verify: letting the evaluator choose which signals count would let it choose the score. Never rate a signal 4 because the thing it guards against doesn't exist for this command — report the fact instead. A 4 needs the quality to be present: output shown with no colour codes, say, is a 4 for ACC-2.
  6. Stay in scope. Signals whose evidence is repo compare commands. Rate them only when the evidence contains more than one command from the same CLI, or from knowledge of a well-known CLI; otherwise return Can't verify.
  7. Root cause once, knock-on effects where they land. Rate the root cause in the signal the notes under each table assign it to. If that problem also causes a separate, observable cost elsewhere, rate that cost in its own signal too, and say in the note which root cause it follows from. For example, a misleading verb is a Learnability problem (LRN-3); if it also forces users to read the help before a routine task, that costs Efficiency (EFF-6); if it keeps surprising people who already know the command, that costs Pleasantness (PLS-7). Never lower a signal for a cost the evidence doesn't show.

Evidence types

Code Evidence
help Command name, usage line, --help, man page, documented flags and examples
error Actual error output, with the exit code where available
output Actual success output or a run transcript
repo Other commands from the same CLI
runtime Behaviour only observable by running the command or reading its source. Usually Can't verify from pasted text unless explicitly documented

Each signal lists the evidence types that can establish it, strongest first.

Command facts

The evaluator reports four facts about the command. CLUX uses them — not the evaluator's judgement — to decide which signals are N/A. A signal whose subject doesn't exist for this command is N/A through a fact, never a 4: having no credentials is not good credential handling.

Fact When it is For These signals are N/A
readOnly — it only reads state true both audiences SAF-2, SAF-4, SAF-5, ERR-7
handlesSecrets — it takes credentials or tokens, or can print sensitive data false both audiences SEC-1, SEC-2
interactive — it can prompt, or runs an interactive UI false both audiences ACC-4, EFF-3
interactive false Human-first PLS-3
showsProgress — it runs long enough to show progress, spinners or animation false both audiences PLS-4, ACC-6
selectsByName — it takes a name, identifier or search term to pick what it acts on or shows false both audiences EFF-7

When a fact is unclear, report the value that keeps the signals applicable.

Never being interrupted is not good or bad for a person in general: it depends on the task. So a command that can't prompt earns nothing on PLS-3 for Human-first. For Agent-first it still counts: a command that never prompts can't hang a script or an agent, which is real value.

The five dimensions

The rubric has five dimensions:

  1. Ease of Use — measured through three facets: Learnability, Efficiency and Error Tolerance. A CLI that rates well on all three is easy to use.
  2. Pleasantness
  3. Safety
  4. Security
  5. Accessibility

Accessibility is assessed for Human-first only. Agent-first assesses the execution contract instead: plain, structured output, stderr, exit codes and non-interaction belong to Efficiency, Error Tolerance and Safety.

The Ease of Use facets can trade off

A command can be very learnable yet slow for experts (a guided wizard), or fast for experts yet hard to learn (terse flags). This is common, and it is why many CLIs offer both interactive and non-interactive modes.

Therefore:

  • Rate each facet on its own. A strong facet never lifts a weak one.
  • A command that offers both a guided path and a direct path can rate well on Learnability and Efficiency.
  • When Learnability and Efficiency diverge, the fix is usually to add the missing path — not to weaken the strong one.

1.1 Learnability

How quickly a first-time user forms a correct model of what the command does and how to invoke it.

Signal Human-first — 4 looks like Agent-first — 4 looks like 0 looks like Evidence
LRN-1 Purpose discoverability What the command is for is clear from its name and the first line of help Purpose and operational principle are stated, so nothing has to be guessed Purpose must be guessed from the flags help
LRN-2 Invocation clarity Usage line shows required vs optional arguments and their order Invocation grammar is explicit: required, optional, repeatable and mutually exclusive parts are declared Usage is missing or contradicts the examples help
LRN-3 Naming clarity Command, subcommand and flag names say what they do Each name maps to exactly one concept and one action Names are misleading, overloaded or internal jargon help
LRN-4 Familiarity Follows conventions users already know, so little is new Follows conventions agents have strong priors for (--help, --version, --json, --) Familiar-looking forms behave unexpectedly help, repo
LRN-5 Concept consistency Knowledge transfers between similar commands Patterns can be safely generalised across commands The same concept has different names or behaviour across commands repo
LRN-6 Outcome discoverability The user can tell what will happen before running it The intended state change can be determined before execution The effect of running is unstated help
LRN-7 Capability boundaries Help makes clear what the command does not do Unsupported actions are recognisable as unsupported; unknown flags and arguments are rejected, not silently ignored Unknown input is accepted silently, inviting invented flags help, error
LRN-8 Progressive disclosure Common usage comes first; advanced options are separated The full contract is available on request without trial and error Everything is presented at once, or essential detail is hidden help

Notes:

  • LRN-3 judges the name against the command's default behaviour (what it does with no arguments). A verb that describes an optional mode (find → search) while the default does something else (list) is misleading: rate 1 or lower, even if the help text explains it. Its finding is at least high severity (see Severity).
  • A name that misrepresents the default behaviour also limits what can be learned from it: rate LRN-1 2 or lower (the purpose can't be discovered from the name) and LRN-6 2 or lower (the outcome can't be predicted from the name), however clearly the help or documentation explains it. CLUX reports this as one judgement for the command and applies the LRN-1, LRN-3, LRN-6, PLS-7 and EFF-6 caps itself.
  • LRN-4 judges only whether unfamiliar conventions cost learning. Whether the command complies with a ruleset belongs to Conventions.md. A command that answers --help with an error, or with no usage, breaks the most familiar convention of all: rate LRN-4 1 or lower.
  • LRN-5 owns all cross-command consistency.
  • LRN-7 owns misfit resistance: an agent should be able to decline an unsupported action rather than invent a command or flag.

1.2 Efficiency

How cheaply someone who already knows the command gets the task done, repeatedly.

Signal Human-first — 4 looks like Agent-first — 4 looks like 0 looks like Evidence
EFF-1 Task economy The goal takes few steps, with no ceremony The goal takes few calls and round trips A routine goal needs several commands or repeated confirmation help, output
EFF-2 Input burden Defaults, config or environment variables remove repeated typing State and context don't have to be resubmitted on every call The same information is re-entered on every run help
EFF-3 Expert path Experts can bypass guided or interactive flows with flags, shortcuts or aliases Every guided or interactive flow has a flag-driven, non-interactive equivalent The only path is guided or interactive help
EFF-4 Output economy Output shows what matters; detail sits behind --verbose A machine-readable format (e.g. --json) is available, with little noise to parse The result is buried in noise; no machine-readable format help, output
EFF-5 Composability Repetitive work can be scripted: reads stdin, writes clean stdout, supports batches Operations compose reliably; the machine output contract is stable and documented Can't be piped or batched; output format changes without notice help, output
EFF-6 Self-sufficiency The task completes without looking things up elsewhere Everything a call needs (IDs, names, valid values) can be obtained through the CLI itself Required values must be found outside the CLI help, repo
EFF-7 Input forgiveness Names and search terms are forgiving: a partial, prefix or case-insensitive term finds the item, and a miss suggests the closest matches Accepted forms of each name are documented, and a miss returns the closest valid values Only an exact match works, and a miss gives no hint of what would have matched output, help

Notes:

  • EFF-3 owns whether a fast path exists. PLS-3 owns whether prompts appear unexpectedly. A command with no guided or interactive flow has nothing to bypass: EFF-3 is N/A through the interactive fact.
  • EFF-7 applies to commands that pick something by name, identifier or search term (the selectsByName fact). Help that says "partial" or "alias" is not enough for a 3 or 4: rate it from a run that shows what a partial or near-miss term returns. Without that run, return Can't verify.
  • EFF-4 owns structured, machine-readable output for agents.

1.3 Error Tolerance

How well the command prevents mistakes, and how well the user recovers when something goes wrong.

Signal Human-first — 4 looks like Agent-first — 4 looks like 0 looks like Evidence
ERR-1 Error prevention Invalid or conflicting input is caught before anything happens Invalid invocations are rejected before any side effect, naming the invalid parameter Bad input is acted on, or the command fails midway help, error
ERR-2 Error recognition It is obvious that something went wrong Failure is machine-detectable: a non-zero exit code, distinguishable from success Failure looks like success, or exits 0 on failure error, help
ERR-3 Stream separation Errors and warnings stand apart from normal output on stderr, so they aren't lost in output or piped into files Diagnostics go to stderr and data to stdout; a failure never leaves partial data on stdout that looks like a result Errors are mixed into stdout error, output, help
ERR-4 Cause clarity Says what was wrong Identifies the violated precondition or invalid input A generic message or a stack trace error
ERR-5 Concept-revealing failure The error teaches how the CLI works The failure exposes the concept and its valid states, enough to recover autonomously The error reveals nothing about the underlying model error
ERR-6 Recovery guidance Says how to fix it or what to run next, including "did you mean" A valid next action can be determined, ideally as an exact command No path forward error
ERR-7 Work preservation A mistake doesn't destroy prior work; the user can correct and re-run without starting over A failed call leaves no ambiguous state Failure discards input or leaves an unknown state error, runtime

Notes:

  • ERR-4 → ERR-5 → ERR-6 form a ladder: what was wrong, which concept it involves, what to do next. Rate each on its own.
  • Retry semantics and idempotency are owned by SAF-5.
  • Command review documented baseline. A complete usage line directly establishes that the command publishes an invocation contract, so CLUX assesses ERR-1 as documented prevention (rating 3) even when no failure was exercised. A rating of 4 still needs an observed invalid invocation caught before side effects. ERR-2 through ERR-7 are never invented from this baseline: they need their listed evidence.

Findings & certainty

What gets reported, and how sure CLUX is

Recommending fixes is the goal of every evaluation.

For every signal rated 0–2, report a finding with:

  • the signal ID (e.g. ERR-3);
  • the evidence — a short verbatim quote or a precise reference — and whether the finding rests on the evidence or on knowledge;
  • an example whenever one makes the finding concrete: a short terminal snippet, $ command then what the user sees;
  • a severity (below);
  • a fix, with an after snippet showing the improved experience where possible. Make it concrete when the problem is local to the command. When the right fix depends on the wider CLI, describe the direction of improvement only. Do not invent commands or prescribe the CLI's structure from a single command.

Severity

Severity reflects consequence × likelihood for the selected audience:

Severity Meaning
critical Likely data loss or secret exposure, or the command is unusable for this audience (e.g. an agent hangs on an unexpected prompt)
high Frequent failure, or major friction on the main task
medium Noticeable friction, or a gap on a secondary path
low Polish

Severity is independent of the rating. A 0 on SEC-1 can be critical; a 0 on PLS-6 is usually low.

A command name or verb that misrepresents the command's default behaviour is at least high: users act on the wrong prediction every time they use it, not just the first time. Certainty reflects the basis (evidence or knowledge), not the severity.

Certainty

Ratings and findings carry certainty: “92% certainty” on findings and “85% certain” on signal ratings. It is the evaluator's own estimate of how well the evidence supports the claim. Rules are different: they are passed, violated, or can't verify when the evidence does not settle them. Anything marked “from CLUX's knowledge” is clearly labelled so you can distinguish it from supplied evidence.

  • 90–100%Directly shown in the evidence supplied.
  • 50–89%Inferred from the evidence; plausible but not shown outright.
  • 0–49%Speculative; a lead to check, not a finding.

Findings are ranked by severity, then by certainty. A critical finding at 70% certainty or more caps the grade (see Scoring). Severity also decides how firmly the fix is worded:

  • CriticalRecommended fix · do this first
  • HighRecommended fix
  • MediumSuggested fix
  • LowSuggested polish

Scoring

From ratings to the CLUX grade

CLUX applies this policy on the server after the evaluator has finished. The evaluator never sees it, so the weights can't bias its ratings. The report leads with the grade and shows each dimension as High, Medium or Low; the score below explains how the grade was reached.

From ratings to scores

  1. Signal points = rating × 25, giving 0, 25, 50, 75 or 100.
  2. N/A signals are left out. Only the rubric decides N/A (the audience columns and the command facts); an N/A from the evaluator counts as Can't verify.
  3. Enough to score. A facet or dimension is scored only when it has at least 2 rated signals. Otherwise it shows – and is left out of the CLUX Score, with its weight redistributed proportionally across the scored ones. Its ratings are still shown. This covers both too little evidence and a facet or dimension where fewer than 2 signals apply at all. Command review exception: Error Tolerance may score from one directly evidenced documented safeguard (ERR-1 to ERR-3). This prevents a real, command-level prevention signal from being discarded solely because recovery was not exercised; the remaining unknown signals still widen its range. Repository review retains the two-signal threshold.
  4. Unknowns inside a scored facet or dimension stay in. Missing evidence is never ignored and never a pass. Each scored facet and dimension reports three numbers over its applicable signals:
    • Low — unknowns count as 0;
    • High — unknowns count as 100;
    • Score, the best estimate — unknowns count as 50.
  5. Ease of Use = the weighted mean of its scored facets, applied to the score, the low and the high separately.
  6. Pleasantness coherence. Pleasantness is the overall feeling of using the command, not a separate polish bonus. When both are scored, Pleasantness is capped at Ease of Use for the estimate, low and high values. A tidy table or polite wording cannot offset a confusing command.
  7. CLUX Score = the weighted mean of the scored dimensions, using the audience weights below, again with its low–high range. It is a weighted mean, not a plain average, so a lightly weighted dimension can't count as much as Ease of Use. The report says how many dimensions the score rests on.
  8. Coverage = rated signals ÷ applicable signals. The score is labelled provisional when coverage is below 50%, or when the scored dimensions carry less than 50% of the audience's weight.
  9. Knowledge is labelled. A rating or finding that rests on CLUX's knowledge of the command, rather than on supplied evidence, is marked in the report so the reader can distinguish its provenance.

Examples, for a Human-first command:

  • Accessibility with 1 of its 6 signals rated shows –. With 2 of 6 rated 4 and 4 unknown, it scores 67, with a range of 33–100.
  • Ease of Use at 54 and Accessibility at 80, with the other dimensions showing –, give a CLUX Score of (0.50 × 54 + 0.08 × 80) ÷ 0.58 = 58.
  • A read-only command is assessed on SAF-1, SAF-3, SAF-6 and SAF-7: clarity that it does not mutate, query scope, result verification and partial-result safety. Mutation-only safeguards are N/A.

Signals within a facet or dimension are weighted equally. This keeps the number of tuning knobs small and the score easy to explain. A root cause is rated once; it lowers other signals only through separate, observable knock-on costs (evidence rule 7 in UXHeuristics.md), so one problem lowers several dimensions only when it really costs the user in each.

Scripting

There is no separate scripting score. Whether code can call a command reliably (machine-readable output, exit codes, stdout and stderr kept apart, a non-interactive path for every prompt) is rated in the Agent-first profile, through Efficiency (EFF-3 to EFF-5), Error Tolerance (ERR-2, ERR-3) and Pleasantness (PLS-3). Run an Agent-first review to assess a CLI for scripts and automation.

Weights

Dimensions

Dimension Human-first Agent-first
Ease of Use 50% 50%
Safety 18% 24%
Security 12% 21%
Pleasantness 12% 5%
Accessibility 8% 0%

Ease of Use facets (share of the Ease of Use score)

Facet Human-first Agent-first
Learnability 40% 30%
Efficiency 25% 30%
Error Tolerance 35% 40%

Rationale

  • Ease of Use is half the score for both audiences: it is the core of whether a CLI is usable.
  • Agent-first raises Safety and Security. An agent acts with delegated authority, and no human pauses before each call.
  • Agent-first excludes Accessibility. Visual and assistive-technology experience belongs to the person using the terminal. Its 3% moves to Safety and Security, which govern unattended automation. Output that is safe for scripts remains assessed under Efficiency, Error Tolerance and Safety rather than being relabelled as Accessibility.
  • Humans are stopped first by learning, so Learnability leads the Human-first facets.
  • Agents re-read help on every call, so repeated-call cost (Efficiency) matters as much as learning. Recovering from failure without a human (Error Tolerance) is how agents finish tasks.

These are starting values. Change them only against the benchmark set (below), never on argument alone. Every change is a new rubric version.

Critical findings cap the grade

A weighted mean lets strengths hide a critical failure. A command that prints an API token could otherwise still earn a B.

If any finding is critical with confidence ≥ 70, the grade is capped at D, whatever the score. The score is still shown unchanged, together with the finding that capped it.

Grade bands

The grade follows the score (the best estimate).

Grade Score Label
A 90–100 Excellent
B 75–89 Good
C 60–74 Usable, fixes needed
D 40–59 Painful
F 0–39 Do not ship

How results are reported

The grade is the result. It leads the report, with its label (for example "D · Painful"). The number behind it is shown smaller, with its range: it explains the grade, but a few points of difference between two evaluations of the same command are noise, not a different result.

Each dimension, and each Ease of Use facet, is reported as a level, on the same cut-offs as the grade bands:

Level Score Grades
High 75–100 A, B
Medium 60–74 C
Low 0–59 D, F

A dimension with too little evidence shows –.

Security is not graded in a Command review. Whether a CLI is secure depends on how the whole tool handles credentials, permissions and trust boundaries: how tokens move between commands, what each command is allowed to do, and whether boundaries hold across workflows. One command can't show that. So a Command review leaves Security out of the grade, out of coverage and out of its fixes, shares its weight across the graded dimensions, and explains instead what Security covers and how Repository review assesses it across every command. One exception keeps the grade honest: a critical exposure the evidence shows outright, such as a token passed in a flag, is still reported and still caps the grade (see Critical findings cap the grade). Repository review grades Security in full.

Two evaluations of the same command agree when they give the same grade and name the same top problems. That, not an identical number, is what CLUX is held to.

Ease of Use trade-off

When Learnability and Efficiency each have at least one rated signal and their scores differ by 25 points or more, the report flags the trade-off:

  • Learnability higher → "Easy to learn, slow for experts." Recommend an expert path (EFF-3).
  • Efficiency higher → "Fast for experts, hard to learn." Recommend a guided path or better progressive disclosure (LRN-8).

The flag is advice, not a penalty. The score is unchanged.

What does not affect the score

  • Rule results. Rules are optional and a separate analysis.

Versioning

Every evaluation result records the rubric version it used.

Same input, same report. A request with the same evidence, audience, rules, rubric, evaluator prompt and model returns the stored report instead of a new evaluation, so repeating a run can't change its score. What is stored is the evaluator's ratings: the score is recomputed from them, so a fix to the scoring applies to stored evaluations too. Any change to the rubric or prompt starts fresh.

Change Version bump
Wording that should not change any rating Patch
Clarified anchors or notes; ratings may shift slightly Minor
Signals added, removed or moved; weights, caps or thresholds changed Major

Scores from different major versions are not comparable. CI baselines compare results only within the same major version.

Worked example (Human-first)

Computed by the same code that scores real evaluations. Inside each scored dimension, unchecked signals count as 50 and widen the range. Accessibility has no rated signals here, so it shows – and its 8% weight is shared across the scored dimensions.

DimensionScoreRange× Weight= PointsChecked
Ease of Use4831–6454%25.814/21
↳ Learnability5947–7240% of EoU6/8
↳ Efficiency5033–6725% of EoU4/6
↳ Error Tolerance3211–5435% of EoU4/7
Pleasantness4831–6413%6.24/7
Safety3614–5720%7.04/7
Security4613–7913%6.02/6
Accessibilitynot scored———0/6
CLUX Score (rounded)4525–65

Agent cost

The Token Footprint

Measured beside the grade and never part of it. CLUX counts it in code from the transcript, with no model, so the same evidence always gives the same numbers.

CLUX Agent Cost

Cost spec version: 0.2.0 (draft, for the owner's review)

Changes from 0.1.0 (2026-10-08, from an outside review): the footprint says what it measures and what it doesn't; every number is observed or labelled an illustration; bounded output has four states; the session estimate is a labelled illustration, never the headline; prices carry a date and a source; a "Footprint opportunities" list turns the measures into action; the full panel is shown to the Agent-first audience only; the build notes moved to docs/agent-cost-notes.md.

This file defines the Token Footprint: what a command's output costs an AI agent to read, measured from the evidence, not judged. It sits beside the CLUX Score and never changes it (Scoring.md, "What is reported, not scored"). Every number here is deterministic: the same transcript gives the same numbers every time, with no model involved.

It counts what the command printed. It doesn't count the agent's own prompt and tool definitions, its reasoning and replies, retries, caching, or how a tool host trims output before the model sees it. Those belong to the task benchmark (see "Free and paid"), which measures an agent completing real tasks end to end.

Why it exists

Every token a command prints costs an agent twice: once in money (input tokens) and once in time (the model reading them), on every call, for every agent that uses the tool. A command that prints 4,000 tokens where 200 would do is slow and expensive forever. The UX score says whether a command is pleasant for an agent; the footprint says what its output costs, and the opportunities list says where that cost could drop.

Who sees it

The footprint is about agents, so the Agent-first report shows the full panel: the measures, the opportunities and the contract taster (AgentContract.md, "The free taster").

The Human-first report shows one line under the score, no panel: the observed call footprint in tokens and a link to the Agent-first view. A Human-first report is about a person at a terminal; the maintainer reading it should learn that the footprint exists without the report changing subject.

The methodology page documents the footprint once, for both audiences.

What it is measured from

The evidence transcript, split into runs at each $ line (the same split the evidence rules use), with CLUX's fetched documentation set aside.

Runs are classed as:

  • help: the command was run with --help, -h or help; or, when the pasted text has no $ line at all, the text starts with Usage: or has an Options: heading. A help run inferred this way is reported as "run type inferred from the text".
  • error: an invalid invocation (an unknown flag or subcommand), or output whose first non-empty line starts with a failure marker (error:, Error:, fatal:, or usage: after a rejected call), or a recorded non-zero exit code when the evidence carries one. A word like "error" anywhere else in the output never makes a run an error: "0 errors" is a success.
  • output: any other run that printed something.

Pasted text with no $ line that doesn't look like help is one unclassified run: its tokens are reported, but nothing else can be concluded from it.

A number needs its run. Where the evidence has no run of that kind, the measure is not measured, never guessed, and the report says which run would settle it.

A run that was cut short (the evidence says "… truncated at N characters") counts as at least its printed size, shown as "≥ N tokens". Nothing derived from it (a median, a cost, the 100-call illustration) is shown as an exact figure: it's shown as a lower bound, or not at all.

Counting

Unit Rule
Tokens Counted with the reference tokenizer, o200k_base, offline and open, so the count is reproducible by anyone. Other models count tokens differently, and by how much depends on the text; prices on other models use this count as an approximation, and the report says so.
Characters and lines Shown beside tokens because they're the same for every model.
Cost tokens ÷ 1,000,000 × the model's input price per million tokens. All output a command prints is input to the model.

Reference tokenizer and prices live in this file, so changing them is a rubric decision, not a code change.

Price references

Prices as of 2026-10-08, standard (uncached) input, US dollars before tax, from the Vercel AI Gateway model list (ai-gateway.vercel.sh/v1/models) and the providers' own price pages. Refreshed monthly; the table is curated (the models agents actually run), not every model that exists.

Model Input $/MTok Shown in
claude-sonnet-5 (reference) 2.00 Free and paid
claude-opus-5-5 4.00 Paid
claude-haiku-4-5 1.00 Paid
claude-fable-5-1 10.00 Paid
gpt-5.5 5.00 Paid
gemini-3.5-flash 1.50 Paid
mistral-large-4 0.68 Paid

The free report prices on the reference model only. Paid tiers show every model in this table, so a team can see the cost on the model its agents actually use.

A report keeps the prices it was made with. A later "reprice at today's rates" view is labelled as such and never replaces the stored figures.

The measures

Measure What it answers How it's computed Needs
Help footprint What does it cost an agent to learn this command? Tokens, characters and lines of the help run. Subcommand count: lines listed under a Commands: heading. help run
Observed call footprint What did the observed calls cost? Each output run's tokens, listed with its command. When two or more runs are the same command and subcommand, their median and the number of runs. Runs of different commands are never combined, and a structured-output run is compared in "Plain vs structured", not averaged in here. output run
Error footprint What does a failure cost? Tokens of the error run, and whether it points to a fix: the text contains a usage line, a --help pointer, "did you mean", or "try …". error run
Formatting overhead How much of the output is layout? The share of output tokens taken by ANSI escape codes, lines made only of box-drawing, -, =, +, ` ` and spaces, and blank lines. Layout can help a reader, so this is a cost, not a fault.
Plain vs structured What does the structured flag change? The help documents a structured-output flag (--json, -o json, --output json, --format json, --porcelain). Measured only when the evidence has the same command with the same arguments once plain and once with that flag: shown as a token difference either way (+ or −). Structured output can be larger and still worth it, because an agent parses it reliably. Otherwise documented, not measured. help; the matching pair for a measured difference
Bounded output Can this command flood the context window? One of four states, below. "Bounded" alone is never shown. help and runs
Speed How long does the command itself take? Wall-clock per run, when the transcript records it (npm run capture records it; a user can paste a timed run). Reported per run kind. timing in the evidence
100-call illustration What would 100 calls like these cost? (help + 100 × observed call) × reference price. Always labelled as an illustration with its assumptions, never called "per session". It may be the panel's headline, labelled as an estimate, with the measured tokens it rests on shown directly beneath it. It assumes no failures; retries are measured by the task benchmark, not invented here. help and output runs
Bounded output states
State Meaning Evidence
Limiter documented The help lists a result-limiting flag: --limit, --max-count, --max-results, --max-items, --tail, -n <num>, --page, --per-page. Flags that limit something else don't count (--head names a branch in gh; --max-time limits time). help run
Limiter verified A run used that flag and printed less than a run of the same command without it. two output runs
Large output observed A run printed more than 2,000 tokens with no limiter used. any run
Not assessed None of the above.

The contract taster's AGC-19 (AgentContract.md) uses these same states, so the panel and the taster never disagree about the same runs.

Each measure is shown with the rule that produced it and the run it came from, so a reader can check it against the transcript.

Footprint opportunities

Beside the measures, the report lists what would lower the footprint, each tied to the run that shows it and worded as the next step, not a verdict. The list is empty when the evidence shows nothing to lower. Examples:

  • Verify a limiter on the call that printed 9,000 tokens.
  • Capture plain and structured output of the same call to measure the difference.
  • Trim the default fields: 40% of the output is layout.
  • Add a recovery hint to the error that has none; a failure that doesn't point to a fix costs a retry.
  • Record a timed run to measure speed.

These never change the grade or the ranked UX fixes. They are how a measurement becomes a reason to spend engineering time.

What it must never do

  • Change the CLUX Score, the grade, coverage or the ranked fixes.
  • Guess a number the evidence can't support.
  • Show an illustration as an observation.
  • Show an exact figure that rests on a run that was cut short.
  • Price on a model the file doesn't list.

Free and paid

Free Pro Team
Footprint of one command, reference-model cost, 100-call illustration, opportunities ✓ ✓ ✓
Prices on every model in the table ✓ ✓
Whole-CLI totals and the most expensive commands ✓ ✓
Cost per successful task: an agent runs pinned tasks in a sandbox; tokens, retries, time and spend, counted end to end ✓ ✓
Cost trend across releases, on every pull request, compared only on the same tasks, fixtures, model and prices ✓

Decisions taken in 0.2.0

  1. 2,000 tokens stays the "large output" line until real captures say otherwise.
  2. No error rate in the 100-call illustration: an invented failure rate makes an invented number more invented.
  3. The price table holds the models agents actually run, refreshed monthly, with its date and source above it.
  4. Pasted help without a $ line counts as help when it looks like help, and the report says the type was inferred.
  5. The Human-first report shows one line, the Agent-first report the panel.
  6. The estimated cost leads the Agent-first panel (owner, 2026-10-09): the price sells the footprint, and the measured tokens beneath it keep it honest.

Worked example: tar --help

Computed by the same code that measures real reports, from CLUX's capture of tar --help (bsdtar 3.5.3 - libarchive 3.5.3 zlib/1.2.12 liblzma/5.4.3 bz2lib/1.0.8). Run 1 is the help run (368 tokens); Run 2 is the error run (16 tokens). Where the capture has no run of a kind, the measure says which run would settle it.

MeasureResult, run and rule
Help

368 tokens · 1,135 characters · 24 lines

Run 1 · tar --help

Rule

Help footprint: tokens, characters and lines of the help run. Subcommands are the lines listed under a Commands: heading.

Observed calls

Not measured

To settle it: Paste a real run of the command that prints its usual output, starting with its $ line.

Rule

Observed call footprint: each output run's tokens, listed with its command. When two or more runs are the same command and subcommand, their median and the number of runs. Runs of different commands are never combined, and a structured-output run is compared in Plain vs structured, not counted here.

One error

16 tokens · 66 characters · 1 line

Doesn't point to a fix

Run 2 · tar -tf /nonexistent-clux.tar

Rule

Error footprint: tokens of the error run. It points to a fix when it has a usage line, a --help pointer, "did you mean" or "try …".

Formatting overhead

Not measured

To settle it: Paste a real run of the command that prints its usual output, starting with its $ line.

Rule

Formatting overhead: the share of output tokens taken by ANSI escape codes, lines made only of box-drawing, -, =, +, | and spaces, and blank lines (1 − content tokens ÷ total tokens). Layout can help a reader, so this is a cost, not a fault. A run the capture cut short is left out.

Plain vs structured

No structured-output flag in the help

Run 1 · tar --help

Rule

Plain vs structured: the help documents a structured-output flag. Measured only when the evidence has the same command with the same arguments once plain and once with that flag, as a token difference (structured − plain, + or −). Structured output can be larger and still worth it, because an agent parses it reliably.

Bounded output

Not assessed

Runs 1, 2

To settle it: Paste a real run of the call likely to print the most, such as a listing over a large input, or the same call with and without a limiting flag.

Rule

Bounded output, one of four states. Limiter documented: the help lists a result-limiting flag (--limit, --max-count, --max-results, --max-items, --tail, -n <num>, --page, --per-page). Limiter verified: a run used that flag and printed less than a run of the same command without it. Large output observed: a run printed more than 2,000 tokens with no limiter used. Not assessed: none of the above.

Speed

Not measured

To settle it: Capture it with npm run capture, or paste a run prefixed with the shell's time.

Rule

Speed: wall-clock time per run, reported per run kind, when the transcript or CLUX's capture records it.

Rules

Optional: the UNIX philosophy, or your own rules

Why rules are separate

Rules are choices, not measures of experience. A team may deliberately depart from a common convention, and that is a policy decision rather than a UX flaw. That is also why no ruleset is checked unless the user asks for one: being more UNIX-like does not by itself make a command easier to use.

The same evidence can appear in both analyses. For example, error messages printed to stdout:

  • violate UNIX-09 Errors to stderr here — does it follow the rule?
  • lower Error Tolerance in the UX heuristics — does it hurt the user?

This is intended. Each analysis explains the problem from its own perspective, and only the UX heuristics produce a score, so nothing is counted twice.

Which rules are checked

The user chooses one of:

  • None (the default). No rules are checked and the report has no rules section.
  • UNIX philosophy. CLUX checks the rules below that apply to one command. Rules that require an inventory of the whole CLI are reserved for a whole-tool review.
  • Your rules. The user's own ruleset, such as a team style guide.

Results

Each rule returns exactly one result:

Result Meaning
Violated The evidence shows the command breaking the rule. Quote it.
Passed The evidence positively shows the rule is followed.
Can't verify The evidence needed was not supplied. Rules that compare commands are reserved for a whole-tool review rather than included here.

The evidence rules in UXHeuristics.md apply. Design-level rules (naming, verb meaning, what the command is for) may be judged from CLUX's knowledge of a well-known command; say so in the explanation. Rules about exact output, exit codes or error wording need supplied evidence. Missing evidence is never a silent pass.

Fixes

For every violation, state the smallest change that brings the command into conformance — for example, "Send error messages to stderr."

If that fix would conflict with a UX heuristic, say so. The conflict is useful information for the team deciding whether to keep the rule.

The UNIX philosophy ruleset

  1. UNIX-01Composability & pipes

    Accepts stdin and writes clean stdout so it composes with pipes.

  2. UNIX-02Do one thing well

    Avoids feature bloat and combining unrelated operations.

  3. UNIX-03Everything is a file

    Treats file paths and stdin/stdout interchangeably where applicable.

  4. UNIX-04Silence is golden

    Produces no output on success unless asked; no banners or chatter.

  5. UNIX-05Rule of clarity

    Command name and flags clearly describe what happens.

  6. UNIX-06Rule of transparency

    Side effects are predictable and observable (e.g. --dry-run, --verbose).

  7. UNIX-07Rule of diversity

    Human text by default, a machine format (e.g. --json) for scripting.

  8. UNIX-08Meaningful exit codes

    Exit 0 on success, non-zero on failure; codes are consistent and documented.

  9. UNIX-09Errors to stderr

    Errors, warnings and diagnostics go to stderr, never stdout.

  10. UNIX-10--help / -h everywherewhole CLI

    Every command and subcommand responds to --help or -h with usage. *(Whole-CLI rule; reserved for a tool review.)*

  11. UNIX-11Respect NO_COLOR

    Honours NO_COLOR and offers --no-color; never forces color in pipelines.

  12. UNIX-12Secrets not in flags

    Credentials come from env vars, files or prompts — never command-line flags.

Limits

What CLUX won't claim

  • A CLUX Score is a summary, not a release decision. Use it to find problems, and let people decide what ships.
  • Reports cover one command at a time. Rules that compare commands are “can't verify” unless more than one command is supplied.
  • Whether each command has one clear purpose, with no overlap between commands, can only be judged across the whole CLI. That check is part of repository analysis, not this report.
  • Ratings and findings marked “from CLUX's knowledge” come from the model's knowledge of a well-known command, not from your evidence. Check them against the real command.
  • AI evaluations can be wrong. Each rating quotes its evidence so you can check it, and certainty is an estimate, not a guarantee.
  • A score's range shows only what unchecked signals could do. It says nothing about signals CLUX rated wrongly.
  • Scores from different major rubric versions aren't comparable.