Docs/Reference

Reference

Runbook

Something refused — which sentence are you holding, what does it mean, and what do you check next? Every heading below is an exact string from this repository's sources or a state you can reproduce; each entry says where the sentence comes from, what it is really telling you, and the first read-only command to run. Attribution tooling is in scripts; the executed evidence for the integrity entries is in the two walkthroughs.

Something refused — which sentence are you holding, what does it mean, and what do you check next? Every heading below is an exact string from this repository's sources or a state you can reproduce; each entry says where the sentence comes from, what it is really telling you, and the first read-only command to run. Attribution tooling is in scripts; the executed evidence for the integrity entries is in the two walkthroughs.

#Bundled Tama hook release failed its integrity check

Raised by tama hooks install-release before any write, whenever the release tree no longer digests to its recorded releaseId (concepts/seal). You meet it during a runtime install, an emergency disable (which installs session controllers), or a re-enable. The message names no file on purpose — it is a gate, not a report.

First command:

tama hooks integrity --release <release-root>

It prints the sealed and actual digests and every file written after the seal (the suspects). A mismatch with no newer file is a permission change or a deletion — the digest covers mode bits (walkthrough-verify-release). Never repair a release tree in place: reinstall the same verified app artifact (operations).

#Installed Tama hook release failed its integrity check

The second, identically worded gate: after the content-addressed copy to hooks-runtime/releases/<id>, that tree must digest to <id>. The installer already deleted and recopied a stale pre-existing tree before checking, so meeting this sentence means the fresh copy failed — a filesystem-level problem (full disk, interference mid-copy), not stale state.

First command:

tama hooks integrity --home "$HOME"

It digests every installed tree against its directory name and marks current; a DRIFTED line is the tree an install or an enable would refuse.

#Installed and loaded releases disagree

Not an error string — a Posture reading: Installed release and Loaded release differ, or the Session screen warns The runtime is serving a stale registry. A live session keeps executing the release it loaded at start; installing a new one does not restart anybody (concepts/posture).

First command:

tama sessions

A lagging session shows a loaded count against a different registered count, or an old release id in --json. The repair is the session-scoped Enable all hooks, which binds an override to the installed release and checksum and schedules one runtime reload after the active turn settles (concepts/session-enable). The Session screen shows the pending state until the transition completes; rejection or session exit (The agent session ended before the session-control request completed.) is a reported failure, never assumed success.

#Tama found only legacy v1 session records. Reinstall the verified bundled runtime, then stop or resume the affected agent session to publish v2 state.

From SessionControlClient when discovery finds no live v2 record but a v1 record exists. v1 records cannot satisfy the v2 agentId contract and are deliberately not migrated (operations). Do what the sentence says, in that order — the reinstall updates the supervisor, the stop/resume republishes state.

#Unknown hook id '<id>'; the installed registry declares <N> hook ids, and the enforcement selection was not changed.

From tama enforcement only. The requested id is absent from the installed registry's unique agent-hook and Git-hook ids, so Tama refused the entire selection before writing state. The existing machine selection still applies.

First command:

tama list --json

Use the registry's exact ids, then retry the complete intended selection.

#Tama could not read the machine enforcement selection: <core error>. Falling back to all hooks.

From tama enforcement status. The state file was readable neither as a valid ai.wisent.tama.hook-enforcement.v1 document nor as its required shape. Dispatchers choose the safe all-hooks fallback; the status command reports that effective state and exits 1 rather than hiding the damaged record.

First command:

tama enforcement status --json

Inspect readError before replacing the operator-owned file through tama enforcement all or a corrected only command.

#enforcement: <OS/core error>

From a failed tama enforcement only or tama enforcement all write. The registry or atomic state transition failed, and no success is claimed.

First command:

tama enforcement status --json

Read the effective retained selection before retrying the operator mutation.

#At least one hook must remain selected. Choose Select all hooks, or add another hook first.

From the Hooks inspector when the selected row is the sole member of only mode. An empty only selection is invalid; the desktop leaves the machine state unchanged and offers the two valid directions named in the sentence.

First command:

tama enforcement status --json

Confirm the one selected id, then select all or add another id before removing it.

#Emergency-bypass evidence

The emergency switch has three observable evidence configurations under ~/Library/Application Support/Tama, separate from retained hook-enforcement.json:

emergency-backup/manifest.jsonhook-emergency-state.jsonMeaning
absentabsentEnforcing (or never installed)
presentpresent, disabled: trueGlobally disabled; Tama shows the machine as bypassed
one without the other—Interrupted transition: treat as disabled and run re-enable, which restores from the manifest and removes both

The script's own sentences: a repeat disable prints Tama hooks are already disabled.; enable without evidence refuses with Tama has no emergency backup manifest to restore.; success prints Disabled hooks. Supervised agent sessions will resume without an editor restart. or Enabled approved hook release <first-12>. Supervised agent sessions will resume without an editor restart. The desktop trusts only re-read durable state: Tama could not persist the emergency hook state. means the switch did not stick. During the bypass, the retained machine selection does not run; tama sessions prints each session's explicit allowlist (allowlist: empty when nothing was re-enabled) (walkthrough-runtime-status).

#The installer refuses

Without --release or --home the command prints its usage line and exits 2, the status of every Tama usage error, before anything is read. Each sentence from tama hooks install-release, surfaced verbatim behind Tama hook release installation failed: <reason> (exit 1):

SentenceMeaning
Unsupported Tama hook release manifestrelease.json schema is not ai.wisent.tama.hook-release.v1
no Node.js on PATH passes the release's runtime preflight: <each candidate and what it said> / the approved hook release carries no Node.js runtime preflight at <path>Every Node.js on PATH is older than the release's shared-hooks/node-runtime-preflight.cjs states, or the release has no preflight to ask
Hook registry does not identify its canonical source root / …its canonical homeThe registry's maintainedIn/adapters.codex.path self-references are malformed; path rewriting would be unsafe (concepts/registry)
Unsupported external hook source manifestexternal-sources.json schema mismatch
Approved hook source is missing: <id>: <path>A catalog hook's source resolves to nothing inside the release
Approved hook release is missing the Node.js runtime preflight / …the sealed Tama CLI / …the OMP Tama adapter / …the Tama hook dispatcherA load-bearing runtime file is absent from the release
Full hook installation requires an emergency manifestFull install invoked without --emergency-manifest. Nothing writes a manifest for a machine that was never in the bypass, so this is not the operator's entry point: take the machine through the switch with TAMA_HOOK_RELEASE_ROOT pointed at the release, disable then enable (hook-releases)
Approved repository hook is missing: <path>The manifest names a moved .githooks entry with no approved replacement in the release
Refusing to remove an obsolete path outside managed roots: <path>A previous install recorded a source file outside ~/.shared-hooks, ~/.claude/hooks, ~/.codex/hooks, or the managed launchers — the installer aborts rather than delete it
Tama runtime current path is not a symlink: <path>Something replaced hooks-runtime/current with a real file or directory; remove it manually, nothing else repairs this
<N> hook entrypoint(s) exist both active and disabled; resolve each one before restoring policy:Every conflicting pair is listed under it, each active file classified as tama-managed dispatcher — something the product wrote and the installer would rewrite anyway — or not Tama-managed, which is a person's file and their decision. Nothing is installed
Missing disabled hook entrypoint: <path>The manifest promises a .tama-disabled file that is gone
Could not read OMP extensions / Could not register OMP hook adapterThe omp config round-trip failed; the transaction rolls back, including a half-applied extensions change
OMP's extensions answer is not JSON / OMP's extensions answer is not an object / OMP's extensions value is not a list: <value> / OMP's extension list holds an entry that is not a path: <entry>omp config get extensions --json answered something other than a list of extension paths. The install and generate-configs read OMP's list the same way and write nothing: registering the adapter over a list they could not read would replace every other extension with Tama's. Only a setting OMP reports as unset (no value, or null) lists no extensions; an empty answer is refused

One refusal comes from the other side, before an install writes anything: Tama hooks are disabled and <path>.tama-disabled is the entrypoint the bypass is holding. Installing <name> here would leave both files in place, which a re-enable refuses. Re-enable policy first, then install. That is tama install declining to recreate a global Git dispatcher while a bypass holds it aside — leaving both files in place is a state a machine cannot be restored from. Re-enable, then install.

Every failure rolls the transaction back: originals restored, current re-pointed, the OMP extensions change reverted (hook-releases).

#The emergency switch refuses

From the desktop wrapper (HookEmergencySwitch), each verbatim:

  • The Tama bundle does not contain the emergency hook controller. — the bundled script is missing; the app bundle is incomplete, reinstall the verified artifact.
  • The Tama bundle does not contain the agent session-controller installer. / The Tama bundle does not contain an approved hook release for agent session control. — same class, for the installer and release.
  • The local policy command exceeded its bounded runtime and was terminated. Inspect local policy state before retrying. — the 300 s bound fired; the process tree got SIGTERM then SIGKILL. Check the global-disable state table above before retrying.
  • The local policy command exceeded Tama's bounded output limit. Inspect local policy state before retrying. — more than 64 KiB of output; same inspection.
  • Tama could not read bounded local policy output: <reason> — the output pipe failed; the command's own result is unknown, inspect state.
  • Tama could not update the installed hook configuration. — the script exited non-zero without printing anything.

From the script itself: Unsupported Tama emergency action: <value> (exit 2), Tama session supervisor is missing: <path> (exit 66), Tama could not resume one or more supervised agent sessions. (the exit trap's resume failed — sessions may still be paused; resume them via the supervisor).

#The backend refuses a repository

The Violations surface validates before anything runs, each sentence from ViolationsClient:

  • Enter a repository path first.
  • Choose an existing absolute Git repository directory: <path> — not absolute, not a directory, or no .git.
  • Tama refuses to mutate a repository not owned by the current user: <path> — UID mismatch; scanning and cleanup are owner-only.
  • A repair round asks Brama for a patch and applies it through Git. A Brama refusal or a patch-application failure is reported with its cause; installing Codex is not a prerequisite.
  • The clean command was cancelled. Partial working-tree edits remain visible; inspect them and complete a read-only scan before retrying.

Refusals from tama request arrive verbatim in {"error": "…"} envelopes on its one response event: an unknown operation is status 404 with unknown operation: <operation>, and a scan of a path that does not exist is status 400 with repo not found: <path> (tama request). A request process that cannot start reports The Tama backend did not start. (with the launch error when there is one); one that ends without answering reports The Tama backend ended with status <status> before it answered. followed by its stderr; a build without the sealed binary reports The Tama backend is missing from this build at <path>. Rebuild with Scripts/build-app.sh.

#The privileged backend is not Enabled

Statuses are macOS's answers, mapped verbatim by SystemPolicyServiceManager: Requires administrator approval, Network filter requires approval, Not registered, Partial setup: daemon enabled; System Extension not installed, Partial setup: <daemon-status>; network policy remains configured, System Extension status unavailable: <error>, and Restart required to finish System Extension activation. Approval-pending is never treated as success. The repair is in Settings: Register privileged backend, then the macOS Approval settings and Full Disk Access shortcuts (desktop/settings). Deactivation failures aggregate as Tama could not fully deactivate local policy components: <message> — each component is attempted independently, so fix the named one and deactivate again.

#The generated launcher refuses (exit 66)

~/.local/bin/tama-agent fails closed before starting a session: Tama Node.js runtime preflight is missing: <path>, Tama requires its validated Node.js executable: <path>, Tama session supervisor is missing: <path>, or Tama requires Python 3 for the universal session runtime. The first two mean the installed runtime under hooks-runtime/current moved or a pinned Node was removed — reinstall the runtime rather than editing the launcher; the pinning contract is in hook-releases.

The refusals about copying a repository — git worktree add, a local git clone, a recursive copy of a checkout, and tama worktrees remove — are in Runbook: repository copies.