{% from "components.html" import dot %} {% set shell_base = base ~ "/shell" %}

SHELL POLICY

{% if shell_gate.policy_id %} Open policy {% endif %}
Policy
{% if shell_gate.policy_id %} {{ shell_gate.policy_name }} {% else %} {{ "temporary edit" if shell_gate.policy_tag[0] == "temporary" else "none" }} {% endif %} {{ shell_gate.policy_tag[0] }}
Configured
{{ shell_gate.configured }}
Capabilities
{% for name in shell_gate.capabilities %} {{ name }} {% else %} none {% endfor %}
Mount root
{% for root in shell_gate.roots %} {{ root }} {% else %} none {% endfor %}
Changed live
{{ shell_gate.changed }}
{% for tile in shell_gate.tiles %}
{{ tile.label | upper }}
{% if tile.tone and tile.counted %}{{ dot(tile.tone) }}{% endif %} {{ tile.value }}
{{ tile.note }}
{% endfor %}
{% if not shell_gate.started %}
The Run has not started The runner configures the shell gate when it starts the VM. Calls show here from then on.
{% elif not shell_gate.groups and not shell_gate.grants %}
No call yet This Run has no shell policy, so the gate grants no capability and the agent is offered no shell tool. Calls and the paths they read show here once a policy grants a capability.
{% else %}

CALLS BY CAPABILITY · {{ shell_gate.groups_total }}

denied first · grouped by capability and path
{% for group in shell_gate.groups %} {% else %} {% endfor %}
CAPABILITY PATH ALLOWED DENIED LAST CALL
{{ group.capability }} {{ group.path }} {{ group.allowed }} {{ group.denied }} {{ group.last }}
No call yet.

CALLS · {{ shell_gate.total }}

{% for key, label in shell_gate.filters %} {% set href = shell_base ~ ("" if key == "all" else "?decision=" ~ key) %} {{ label }} {% endfor %}
{% for row in shell_gate.calls %} {% else %} {% endfor %}
TIME DECISION CAPABILITY PATH REASON
{{ row.time }} {{ row.decision }} {{ row.capability }} {{ row.path }} {{ row.reason }}
No call yet.
{% endif %}