What this is not
How to write an agent mandate: denials first, expiry, requires_human
This is not enforcement. A checked mandate does not stop an action. The runtime that could refuse is not released.
HANRIA is a coined name. No expansion, derivation, or translation is published or intended. A U.S. trademark application is pending; no registration or completed clearance is claimed.
Three rules that actually restrict
- Denials first. Clauses are first-match-wins. A denial written after a broader permit never runs. It reads as though it applies and does nothing. The checker refuses a mandate where a later denial is unreachable.
- Set
not_valid_after. An unbounded mandate lets delegated authority outlive the task it was granted for. After that timestamp every action is denied.
- List
requires_human. Typical kinds:credential_use,transaction,administrative. That list turns a permitting clause into an escalation. A ceiling narrows what may be asked for. It does not remove the person.
What does not restrict
Prose in purpose, a clause note, or a request justification is for whoever reviews this later. Only structured match conditions decide. Writing "never touch payroll" in purpose and not as a clause restricts nothing.
The mandate default must be deny or escalate. permit by default cannot express a limit.
Prefix matching is literal. It does not resolve symlinks. Directory prefixes end in /. Write /srv/tickets/, not /srv/tickets.
A worked shape
Deny secrets and home paths first. Then permit a narrow read. Then permit a narrow write or post. Keep transaction in requires_human even if you also write a refund ceiling.
The skill repository ships an example mandate that exercises permit, deny, escalate, and a shadowed-denial file that is supposed to be refused.
Entry
npx skills add HANRIA-AI/hanria-skill
python3 scripts/check_action.py --mandate MANDATE.json --action ACTION.json
Source: https://github.com/HANRIA-AI/hanria-skill Developers: https://hanria.dev/ Boundaries: https://hanria.ai/boundaries/
Honest verdict
Write the grant as clauses, not as hopes in a paragraph. Do not treat the skill as a lock. The lock is not released.