{% if config.chain_valid and config.config_integrity_valid %}
Config and audit verified
{% else %}
Control-plane integrity failed
{% endif %}
{% if error %}
{{ error }}
{% endif %}
Changes take effect on the next tool call. Enforcement fails safe:
a missing or corrupt config leaves every hook ON. Every change below is
bound to an HMAC-SHA-256 audit chain.
{% if not config.config_integrity_valid %} {{ config.config_integrity_reason }}{% endif %}
{% if config.updated_by %} Last change by {{ config.updated_by }}.{% endif %}
{% if not config.config_integrity_valid %}
{% endif %}
Surfaces
Hook surface
Status
Action
{% for surface, on in config.surfaces.items() %}
{{ surface }}
{% if on %}Enforcing{% else %}Disabled{% endif %}
{% endfor %}
Tools
A tool switched off is denied by every enabled hook, regardless of arguments.
Tool
Status
Action
{% for t in config.known_tools %}
{% set on = config.tools.get(t, True) %}
{{ t }}
{% if on %}Allowed{% else %}Blocked{% endif %}
{% endfor %}
Tool policies
Override the built-in ToolGuard policy for any tool (JSON schema, side_effect,
action, escalate threshold). Validated before it is saved; an invalid policy
is rejected, never written.
{% if config.policies %}
Name
Side effect
Action
Schema
{% for p in config.policies %}
{{ p.name }}
{{ p.side_effect | default("read") }}
{{ p.action | default("allow") }}
view
{{ policies_json.get(p.name, "") }}
{% endfor %}
{% else %}
No policy overrides - every hook uses its built-in defaults.
{% endif %}
Add or edit a policy
Tenants
Per-tenant permissions: which tools a tenant may use. A tenant with no entry
is unmanaged (unrestricted). Empty "allowed" means all tools; a list limits
the tenant to exactly those. A hook enforces this against its
PRAMAGENT_TENANT_ID.
{% if config.tenants %}
Tenant
Status
Allowed tools
Denied tools
{% for tid, t in config.tenants.items() %}
{{ tid }}
{% if t.enabled %}Enabled{% else %}Disabled{% endif %}
{{ (t.allowed_tools | join(", ")) if t.allowed_tools else "all" }}