{% extends "base.html" %}
{% block content %}
{% 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 %}
| Hook surface | Status | Action |
{% for surface, on in config.surfaces.items() %}
| {{ surface }} |
{% if on %}Enforcing{% else %}Disabled{% endif %} |
|
{% endfor %}
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 %}
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
{% if audit %}
| When | Actor | Change | Detail | Chain hash |
{% for a in audit %}
| {{ a.created_at | round(0) }} |
{{ a.actor }} |
{{ a.action }} |
{{ a.detail }} |
{{ (a.this_hash or "")[:12] }} |
{% endfor %}
{% else %}
No changes recorded yet.
{% endif %}
{% endblock %}