ReadonlyblockedReadonlydecisionThe decision the hook expressed, preferring the structured
permissionDecision ("allow"|"deny"|"ask") then legacy decision
("approve"|"block"), else undefined.
ReadonlyegressNetwork egress the hook attempted. With RunHookOptions.recordEgress:
every (blocked) attempt the proxy saw. With RunHookOptions.egress: the
allowlisted hosts that were actually reached (allowed: true, with packet
counts). Empty otherwise.
Optional ReadonlyegressAllowlisted-egress mode only: the aggregate off-allowlist traffic the
packet-layer wall dropped. packets === 0 means the hook stayed entirely
within the allowlist. Undefined when RunHookOptions.egress was unset.
ReadonlyexitReadonlyfilesFiles the hook wrote to its work dir (relative paths), recorded on confined
runs — what a hook touched on disk. Empty on a direct (unconfined) run.
Assert over it with assertNoWrite / assertWroteOnly.
ReadonlyjsonParsed stdout JSON if the hook emitted a JSON decision, else null.
ReadonlystderrReadonlystdout
Normalized decision: a deny/block via exit 2,
decision:"block", orpermissionDecision:"deny"all setblocked = true.