Docs/Desktop app

Desktop app

Hooks screen

The approved catalog and the per-hook decision that goes with it: what a policy does, why it exists, which events it gates, and whether the live session in front of you has it enabled. Three zones — facets, table, inspector. The catalog itself is read-only here; the sealed registry model is hook-model.

The approved catalog and the per-hook decision that goes with it: what a policy does, why it exists, which events it gates, and whether the live session in front of you has it enabled. Three zones — facets, table, inspector. The catalog itself is read-only here; the sealed registry model is hook-model.

Title Hooks; scope session <first-8> when a live session is selected on Session; freshness counts policies. One action: Reveal source, enabled only when the selected hook has an archived source path. The toolbar search prompt is Search hook id, category, event or description, and it matches exactly those four fields.

#Facets

  • EnforcementAll hooks, Blocking (warning tone while any exist), Non-blocking.
  • Category — ranked by count descending, then alphabetically; counts are measured inside the current enforcement scope, so the number beside a category is the number of rows selecting it produces.
  • In this session — only with a live session: Enabled here / Not enabled here (warning tone when anything is not enabled).

The rail footer Selection reads <visible> of <total>.

#Centre

Catalog re-read failed (banner over a stale-but-present catalog) and Catalog unavailable (no catalog at all) carry the loader's error sentence verbatim, with Retry. Loading reads Reading the approved hook catalog. The empty states are exact: This build carries no hooksThe sealed catalog declares no policies. Rebuild Tama against a tama release that does. — and No hook matches this selection with a Clear filters action. The table is HOOK, CATEGORY, EVENTS (count), FLAG; the Blocking / Advisory chip marks the minority, so when most of the catalog blocks, the pill moves to the advisory rows.

#Inspector

Eyebrow is the category, title the hook id, badges the status (capitalized; success only for active) plus Blocking. Sections: What it does, Why it exists, Side effects — the registry's own prose — then EVENTS with a per-event Blocking chip and <timeout>s, then Source (No archived source path for sealed-backend hooks) and Command. Unselected: Choose a policy to read what it does, why it exists, which events it runs on, and whether the live session has it enabled.

#The one mutation

With a live session, the inspector adds In <agent> session: Enabled / Not enabled, and — only when not enabled — the primary Enable in this session. Enabling restores policy, so it needs no dialog; the disabling direction does not exist per hook by design (core-contracts). The note under the button states persistence exactly:

  • normally: The override is stored for this agent session and restored when the same session is resumed.
  • during a global disable: All hooks are globally disabled. Enabling writes an allowlist entry for this agent session only.

The mutation reports Enabling <hook-id> in session <id>… then <hook-id> is enabled in <agent> session <id>., over the same validated request channel as Session (concepts/session-enable).