{% macro step(value, label, klass="policy__add") -%} {%- endmacro %} {% macro text(name, value, label, placeholder="", mono=false, error="") -%} {%- endmacro %} {% macro choose(name, value, options, label) -%} {%- endmacro %} {% macro rule(item, at, number, servers, effects, fresh=false) -%}
Rule {{ number }} {% if fresh %}new{% endif %} {{ step("drop:rules:" ~ (number - 1), "Remove", "policy__remove") }}
{{ choose(at ~ "effect", item.effect, effects, "Effect") }} {{ choose(at ~ "server", item.server, servers, "Server") }} {{ text(at ~ "target", item.target, "Tool or resource prefix", "search, * or docs://alpha/", mono=true, error="required · a tool or a resource prefix") }}
{{ text(at ~ "arguments", item.arguments, "Arguments, JSON", "no constraint", mono=true) }} {{ text(at ~ "per_minute", item.per_minute, "Calls / min", "—") }} {{ text(at ~ "per_run", item.per_run, "Calls / Run", "—") }}
{%- endmacro %} {% macro hidden_rule(item, at) -%} {% for key, value in item.items() %} {% endfor %} {%- endmacro %} {% macro rules(form, servers, effects, folded=0, fresh=0) -%} {% set items = form.items("rules") %}

RULES · {{ items | length }} {% if folded %} {{ folded }} unchanged {{ "rule is" if folded == 1 else "rules are" }} folded · {{ step('unfold', 'Show all', 'card__link mcp__unfold') }} {% endif %}

{% for item in items %} {% if loop.index0 < folded %} {{ hidden_rule(item, "rules." ~ loop.index0 ~ ".") }} {% else %} {{ rule(item, "rules." ~ loop.index0 ~ ".", loop.index, servers, effects, fresh and loop.index0 >= fresh) }} {% endif %} {% endfor %} {% if not form.full("rules") %}{{ step('add:rules', '+ Add rule') }}{% endif %} {%- endmacro %} {% macro grants(form, secrets) -%} {% set items = form.items("grants") %}

SECRETS GRANTED TO AGENTS · {{ items | length }} Manage secrets

{% for item in items %} {% set at = "grants." ~ loop.index0 ~ "." %}
{{ step("drop:grants:" ~ loop.index0, "Remove", "policy__remove") }}
{% endfor %}
{% if not form.full("grants") %}{{ step('add:grants', '+ Grant secret') }}{% endif %}

A value the agent reads belongs to the agent from then on: it may reach the model provider, its own files and the console log. A secret is granted by its exact name, never by a pattern.

{%- endmacro %}