Policy
{% with tab = "policy" %}{% include "_settings_tabs.html" %}{% endwith %}What agents may do on each kind of environment, what the guard counts as a change and what counts as a secret. Layers, a later one winning: preset → config.toml → global file → project → environment; an environment's own level on Stands & access wins over all of them. The guard is a safety net, not a sandbox.
{{ message }}
{% endif %} {% if error %}{{ error }}
{% endif %} {% if confirm %}Confirm
{{ confirm.message }}
Preset
Effective policy
Layers: {% for layer in effective.layers %}{{ layer.name }}{% if layer.error %} ignored: {{ layer.error }}{% endif %}{% if not loop.last %} → {% endif %}{% endfor %}
Edit the {{ scope }} layer
{% if scope == "global" %}The file {{ policy_file.path }}{% if not policy_file.text %} does not exist yet{% endif %}. Edits to the file are picked up without a restart.{% if policy_file.error %}
The file is broken, so the last valid version is in effect: {{ policy_file.error }}{% endif %}
{% else %}Stored in the database. Empty removes the layer.
{% endif %} {% if preview %}Preview: the effective policy after this change
{% if widened %}Widens agents' access on live: {{ widened|join(", ") }}. Saving asks for a confirmation.
{% else %}Valid. Does not widen agents' access on live.
{% endif %} {{ values_table(preview) }} {% endif %}Project and environment layers
{% if layers %}-
{% for row in layers %}
{%- set s = row.project_slug ~ ("/" ~ row.environment_name if row.environment_name else "") %}
{{ s }}changed by {{ row.updated_by }}{{ row.body }}
{% endfor %}
None yet. Pick a project or environment above to add one.
{% endif %}