Proposal
Add a small deterministic policy decision layer for agent actions.
This is an off-menu layer proposal related to PR #110. The intent is not to replace auth, privacy, trust, payments, or coordination. It adds a narrow decision point an agent can call before taking a risky action.
Why this belongs in NANDA Town
Existing layers answer adjacent questions:
- auth: who is allowed to hold a credential?
- privacy: who can see a message?
- payments: can value move?
- trust: how reliable is a counterparty?
A policy layer answers a different question: should this concrete action be permitted, denied, or require approval right now?
That matters before agents publish data, spend funds, call external tools, or mutate authority-bearing resources.
Proposed shape
Core interface:
PolicyRequest: actor, action, resource, data classes, optional amount, purpose, metadata
PolicyDecision: permit, deny, or approval_required
Policy: runtime-checkable protocol with decide(request, *, now)
Reference plugins:
strict_rules: deny-by-default policy
allow_all: intentionally unsafe foil for validators
Scenario:
policy_guard
- Plugin selected from
task.config.policy_plugin, not from global LayerConfig
- Validators check safe reads, sensitive public export denial, high-value payment approval, unknown-amount payment approval, and deny-by-default admin behavior
PR
Prototype: #110
Proposal
Add a small deterministic policy decision layer for agent actions.
This is an off-menu layer proposal related to PR #110. The intent is not to replace auth, privacy, trust, payments, or coordination. It adds a narrow decision point an agent can call before taking a risky action.
Why this belongs in NANDA Town
Existing layers answer adjacent questions:
A policy layer answers a different question: should this concrete action be permitted, denied, or require approval right now?
That matters before agents publish data, spend funds, call external tools, or mutate authority-bearing resources.
Proposed shape
Core interface:
PolicyRequest: actor, action, resource, data classes, optional amount, purpose, metadataPolicyDecision:permit,deny, orapproval_requiredPolicy: runtime-checkable protocol withdecide(request, *, now)Reference plugins:
strict_rules: deny-by-default policyallow_all: intentionally unsafe foil for validatorsScenario:
policy_guardtask.config.policy_plugin, not from globalLayerConfigPR
Prototype: #110