Reference
CLI
Tama Desktop bundles a sealed native Rust CLI at
Tama.app/Contents/Resources/hooks-release/bin/tama. Its public
usage starts with tama <command>. This index links every public
top-level command and command leaf; hidden runner and bridge entrypoints are
intentionally not part of the public surface.
#Catalog and release inspection
tama help— print the sealed public command summary.tama list [--json]— list the sealed hook catalog.tama show <hook-id> [--json]— inspect one hook.tama validate [--json]— validate catalog and source integrity.tama install plan [--json]— show enforcement targets and what each user-global Git hook holds, without writing them.tama mcp config— print the MCP server fragment.tama model-provider [show | set --origin URL --model MODEL | set --none | unset | check] [--json]— choose the model service Tama asks, Brama, an OpenAI-compatible service whose key is read from standard input, or none, and check whether it accepts this machine.tama sessions [--json] [--home <path>]— inspect live session records.tama sessions reload --session <ID> [--json]— reload the installed adapter in the same OMP process and require its loaded-digest receipt.tama assignment show --session SESSION_ID [--json]— read one session's newest operator instruction and fresh Oko task ledger, and record that both were read.tama attestation standard|check|record|show|list|remove— print the claims a commit message and an ending answer carry, check one commit or answer the wayreview-pushand the turn-end stop gates read it (word for word, no model), and record, read, list and remove a session's attestation, which the stop gates that would ask a model read when none is declared.tama task scope show|set|clear --session <ID> [--repository <NAME>]… [--defect <ID>] [--task <ID>] [--json]— declare which defect or task a session serves and which repositories it touches;block-off-task-workchecks every write against it.tama justify <record|show|remove|list> [--file <path>] [--justification <text>] [--kind file|cua] [--quote <text>] [--expires-at <iso>] [--home <path>] [--json]— record, read or remove a justification the authorization gates require.tama tests <approve|revoke|list|audit> [<path>…] [--remove] [--json]— the operator's approvals of test code, and the audit of every test nobody approved;block-unapproved-testsrefuses test code anywhere else.tama policy import|list|remove— validate and keep inactive policy bundles, list them, and remove one, without installing or enabling anything.tama hooks declare|undeclare|release|warm|stage|seal|source-identity|install-release|integrity|digest— add, withdraw, build, warm, package, install and verify hook releases.tama reviews list|show <id> [--json]— inspect retained commit-review outcomes and exact causes without repeating a review.tama standing list|show|score|withdraw|location [--json]— each agent session's commit standing: a point per formatted commit, one lost per unformatted one, every tool call refused below zero; charge commits made before scoring and take a charge back.tama format fold [--repository <path>] [--json]— fold rustfmt's form into the unpublished commits that wrote each Rust file.
#Command declaration review
When block-one-off-commands finds a declaration without a kept
verdict, it refuses the write immediately and names
tama commands judge <request>. The write atomically publishes
the request but starts no background judge. Run the named foreground command to
own the real review and read PASS or BLOCK with its
reason for each declaration, then repeat the write. A failed judge call remains
a refusal, not an approval. Its actual diagnostic is also retained in
command-verdicts/judge.log under Tama's state directory; inability
to retain that diagnostic is reported separately without losing the review cause.
Verdicts belong to the file path, command name and declaration together. Copying a declaration into another file requires its own review, because the judge receives that file's product context. Simultaneous requests for the same declarations share a locked request record; they never overwrite a record while its judge reads it. A second judge invocation refuses a request already owned by another review instead of starting a competing model call. The hook decision appears in the attached editor's refusal surface as well as the CLI output.
The real journey one_off_commands_kept_verdicts
invokes the actual built hook and foreground CLI with the real Oko model route,
then checks the persisted verdict and a repeated write. Its negative journey
uses an isolated home and executable path genuinely without Oko: the CLI must
retain its failure and the same declaration must remain refused. Both require
TAMA_TEST_SOURCE_REVISION, matching clean source and retained
executable, input and output evidence. Runs keep separate build directories and
never delete earlier evidence.
#Machine enforcement
tama enforcement status [--json]— read the durable machine selection.tama enforcement only <hook-id>...— enforce only selected hooks machine-wide.tama enforcement add|remove <hook-id>...— turn hooks on or off and keep the rest, from the selection as it is when the change is written.tama enforcement preflight <hook-id>— ask one hook whether it can work here and read what it answered.tama enforcement all— restore the all-hooks machine baseline.
#Installation and repository operations
tama install— install user-global Git dispatchers.tama uninstall [--unset-git-config]— remove the managed Git dispatchers and put back what they displaced.tama onboarding [--reset] [--policy-bundle <dir>] [--replace] [--home <path>]— the first-use walkthrough, optionally adopting an inactive policy bundle on the way in.tama violations find— scan repositories without modifying them.tama violations declare-root— declare a repository root whose files are fixed there by other tooling.tama vocabulary report --repo <path>… [--json]— every keyword list still in a repository, grouped by its words.tama violations clean— ask Brama for one patch per repository per round, apply it, and re-scan.tama justify <record|show|remove|list>— record, read and retire the justifications the write guards require.tama request <operation>— answer one Tama Desktop request: JSON body on stdin, NDJSON events on stdout.tama provider config --provider <id> --dispatcher <command> [--json]— print the hook block an install writes into that provider's config: Claude Code, Codex, Gemini CLI, Qwen Code, Factory Droid, CodeBuddy Code, Cursor, GitHub Copilot CLI, Windsurf, Kimi Code or Devin CLI.
#Adaptive doctor
tama adaptive <command> is the public
adaptive-layer command group. Its leaves are:
tama adaptive status— effective per-hook state and telemetry transport.tama adaptive drift— live-versus-archive content hashes.tama adaptive queue— queued repair requests.tama adaptive repair <hook-id> [--patch-file <path>]— validate and stage a proposal.tama adaptive apply <proposal-dir>— apply a validated proposal with owner consent.
#Worktrees
tama worktrees <command> is the public
worktree command group. A linked worktree is a second checkout of a repository
you already have, and creating one is refused by the
block-repository-copies hook; this group is how you inventory and remove
the ones that already exist. Its leaves are:
tama worktrees list [--root <PATH>]... [--json]— every linked git worktree under the roots.tama worktrees remove [--root <PATH>]... [--except <PATH>]... [--apply] [--force] [--json]— remove them; previews unless--apply.
--root is repeatable and required at least once on both leaves; there
is deliberately no machine-wide default root. --except is repeatable,
takes the path of one linked worktree to leave completely alone, and exists
on remove only — list removes nothing, so it has no
--except.
#Copies
tama copies <command> is the public
group for the other noun block-repository-copies refuses: a second full
checkout with its own .git directory, which a clone of a local path or a
recursive copy produces and which git never lists from the original. Its
leaves are:
tama copies list [--root <PATH>]... [--json]— every second full checkout under the roots.tama copies remove [--root <PATH>]... [--except <PATH>]... [--only <PATH>]... [--apply] [--force] [--json]— remove them; previews unless--apply.
A pass refuses any copy carrying uncommitted changes, commits absent from
every remote, no origin to compare against, linked worktrees of its own, or
no canonical checkout under the roots given. --except spares a copy and
--only narrows the pass to named copies, accepting them as removable
when they are the sole checkout here; the two are never combined.
#Existing policy bundles
A supported self-contained policy bundle or sealed release contains
shared-hooks/registry.json and regular, non-symlink files under
shared-hooks/, claude-hooks/,
codex-hooks/, repo-githooks/,
adaptive/, external-hooks/, and bin/,
plus supported root metadata such as release.json and
external-sources.json. Other top-level paths are reported in
ignoredPaths.
The complete registry and every registered source are validated before the
editable store changes. A sealed release must also match its
release.json tree identity. Results report imported, unchanged,
removed, conflicting, and rejected counts. Repeating an identical source is unchanged;
differing content conflicts unless explicit replacement is safe. Untracked and
locally changed stored files remain conflicts even with
--replace.
Every imported bundle is inactive: zero hooks are installed or
enabled, and the command does not change the current release,
~/.shared-hooks, agent settings, or Git configuration.
policy list returns canonical source paths, SHA-256 identities,
timestamps, hook counts, file counts, and retained bundle paths without
printing policy contents.
#Exit and refusal contract
Successful commands exit 0. Usage errors exit 2.
Operational failures and findings that fail the command's contract exit
1, except for explicitly documented disabled or empty outcomes.
Each command page records its required inputs, effects, output, and exact
relevant refusal text from the sealed dispatcher.