{% extends "base.html" %} {% block content %}
Administration

Hook control console

{% if config.chain_valid %} Audit chain intact {% else %} Audit chain BROKEN {% 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 appended to a SHA-256 hash-chained audit. {% if config.updated_by %}
Last change by {{ config.updated_by }}.{% endif %}

Surfaces

{% for surface, on in config.surfaces.items() %} {% endfor %}
Hook surfaceStatusAction
{{ surface }} {% if on %}Enforcing{% else %}Disabled{% endif %}

Tools

A tool switched off is denied by every enabled hook, regardless of arguments.

{% for t in config.known_tools %} {% set on = config.tools.get(t, True) %} {% endfor %}
ToolStatusAction
{{ t }} {% if on %}Allowed{% else %}Blocked{% endif %}

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 %}
{% for p in config.policies %} {% endfor %}
NameSide effectActionSchema
{{ p.name }} {{ p.side_effect | default("read") }} {{ p.action | default("allow") }}
view
{{ policies_json.get(p.name, "") }}
{% 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 %}
{% for tid, t in config.tenants.items() %} {% endfor %}
TenantStatusAllowed toolsDenied tools
{{ tid }} {% if t.enabled %}Enabled{% else %}Disabled{% endif %} {{ (t.allowed_tools | join(", ")) if t.allowed_tools else "all" }} {{ (t.denied_tools | join(", ")) if t.denied_tools else " - " }}
{% else %}
No managed tenants - every tenant is unrestricted.
{% endif %}

Add or edit a tenant

Change audit

head {{ (config.audit_head or "genesis")[:16] }}
{% if audit %}
{% for a in audit %} {% endfor %}
WhenActorChangeDetailChain hash
{{ a.created_at | round(0) }} {{ a.actor }} {{ a.action }} {{ a.detail }} {{ (a.this_hash or "")[:12] }}
{% else %}
No changes recorded yet.
{% endif %}
{% endblock %}