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.
#Header and machine selection
Title Hooks; scope session <first-8> when a live session is selected on
Session; freshness counts policies. Reveal source is
enabled only when the selected hook has an archived source path. The compact
MACHINE SELECTION panel shows All hooks or
Only N selected, and in only mode offers Select all hooks. It states:
This selection is machine-wide and operator-owned. A session can only add a hook for itself; it cannot remove one from this selection.
The toolbar search prompt is Search hook id, category, event or description,
and it matches exactly those four fields.
#Facets
- Enforcement —
All 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 hooks — The 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, MACHINE. The
machine column reads Enforcing, Not selected,
Bypassed during emergency disable, or Not read after a state-read
failure. 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, then Source (No archived source path for sealed-backend hooks), Command, and
On this machine with the same machine status as the table. 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.
#Machine and session mutations
The operator can choose Add to machine selection or
Remove from machine selection in the inspector, and
Select all hooks in the machine panel. These selection changes do not use
the emergency confirmation dialog. Their progress text is
Changing the machine-wide hook selection… or
Selecting every registered hook on this machine…; success is
<id> is selected on this machine.,
<id> is not selected on this machine., or
Every registered hook is selected on this machine. Backend refusal text
is shown verbatim in the same mutation bar.
Only mode cannot become an empty selection. For its sole selected hook, the
remove action is unavailable and the inspector explains:
At least one hook must remain selected. Choose Select all hooks, or add another hook first.
With a live session, the inspector separately adds
In <agent> session: Enabled / Not enabled, and — only when not
enabled — Enable in this session. Session enable remains additive to the
machine selection and needs no dialog. During emergency disable, it writes
only a generation-bound allowlist entry for that session
(concepts/session-enable).