CLI reference
tama standing
Every agent session's commit standing. The commit review makes every commit a session asks for, whatever the form of its files, and scores the session for it: a commit whose staged files are all in their formatter's form earns one point, and a commit that stages a file out of that form costs one point and names the files. A Rust file is judged by rustfmt; any other file by the formatter the committed tree declares for its extension in .tama/formatters.json, such as [{"extension": "swift", "argv": ["xcrun", "swift-format", "format", "--configuration", ".swift-format"]}], run in the tree written out into the checkout's ignored build directory with the file's path appended and its formatted text read from standard output. A tree without that file declares no formatter and its other files are not judged; a declaration that cannot be read or parsed, an entry with an empty argv, or a formatter that fails is reported with its cause and scores nothing. A session's standing is the points it earned less the points it lost; below zero it has committed more unformatted work than formatted, and block-negative-commit-standing refuses every tool call it makes until the operator takes a charge back.
#Invocation
tama standing list [--json]
tama standing show --session <ID> [--json]
tama standing score --repository <PATH> --range <RANGE> [--json]
tama standing withdraw <charge id> --reason <TEXT> [--json]
tama standing location
#Verbs
| Verb | What it does |
|---|---|
list | Every scored session, blocked ones first, with its points and each charge: the charge id, when it was recorded, the repository and the files out of their formatter's form |
show --session <ID> | One session's points and charges. A session never scored stands at zero and is free |
score --repository <PATH> --range <RANGE> | Charges the commits of a Git revision range made before each commit was scored, or in a checkout whose Git hooks did not run Tama's (see below) |
withdraw <charge id> --reason <TEXT> | Takes one charge back with the reason it was recorded in error. The id may be a prefix that names exactly one charge. The charge stays in the register under withdrawn with its reason and counts toward nothing |
location | The register's file: ~/Library/Application Support/Tama/commit-standing.json, or the file TAMA_COMMIT_STANDING_PATH names |
#Scoring commits made before they were scored
score reads each commit of the range, merges aside, and puts it to the session that made it, read from the session transcripts written since the range's oldest commit: the session one of whose bash calls names commit and the repository's folder, and was running when Git recorded the commit, from the moment the call was made to the moment its result came back. No author name and no guess decides it. Only OMP records its calls in the shape read here (~/.omp/agent/sessions, or TAMA_OMP_SESSION_ROOT), so a commit only a Claude or Codex session made is listed as uncovered. The commit's added and changed files are checked in its own tree, by the formatters that tree declares, as the commit review checks a staged one, and the session earns or loses its point. A commit whose tree the register already holds for that session is not scored twice, so a range may be scored again.
$ tama standing score --repository ~/src/sums --range origin/main~20..origin/main
4c1e… Add two numbers
sinner-session lost a point: src/lib.rs
9a07… Write the sum as rustfmt does
keeper-session earned a point
e3b2… Say what the package is
not scored: several sessions' commit calls were running when Git recorded it: keeper-session, second-session
With --json each commit is {"commit","subject","session","unformatted","recorded","cause"}; session and cause are null when they do not apply.
#Output document
{"session":String,"earned":Number,"lost":Number,"standing":Number,"blocked":Boolean,"charges":[{"id":String,"session":String,"agent":String,"repository":String,"tree":String,"unformatted":[String],"recordedAt":String}],"rule":String}
#Refusal boundary
A missing verb, an unknown argument, show without --session, score without --repository or --range, and withdraw without a charge id or --reason are refused with the sentence that names what is missing and the usage. withdraw refuses an empty reason and an id that names no charge or several. A register that cannot be read or written, a repository Git does not know, a range Git cannot read, and a transcript or a line of one that cannot be read refuse the run naming the file and the cause, since a commit it holds would otherwise go unscored without a word. While the register cannot be read, block-negative-commit-standing refuses every tool call naming the cause rather than freeing held sessions.
#Tama Desktop
The Commit standing screen lists every session with its points and charges, takes a charge back with its reason, and scores a revision range of a repository, through tama request standing/list, standing/show ({"session"}), standing/score ({"repository", "range"}) and standing/withdraw ({"id", "reason"}). They run the same functions as the verbs and answer the same documents; withdraw answers {"withdrawn", "standing"}. A request missing a field is a bad request naming it.
Return to tama reviews or the complete CLI tree.