Agents & mandates

An agent authenticates with its own key and acts only inside a mandate - its scope of authority.

Mandate fields

FieldMeaning
Allowed actionsAction-type patterns the agent may attempt, e.g. payment.send, payment.*, llm.complete
Allowed resourcesResource patterns it may target, e.g. vendor:*, invoice:*, https://api.openai.com/*
Denied resourcesPatterns always blocked (deny-list beats allow-list), e.g. vendor:sanctioned-*
Value unitWhat the caps are denominated in - a currency code or any label (USD, tokens). Default USD
Max per-action valueHard ceiling (in the mandate's unit); above it the action is denied
Require approval overValue above which the action is held for a human
Rate limit / minuteMax authorize calls per rolling 60s
Permitted hours (UTC)Optional window; outside it actions are held for approval

Value units

Every value in Provenant is an integer in minor units (1/100) of a user-defined unit - an ISO currency code or any free-text label: USD, EUR, tokens, credits. The unit is declared per mandate (default USD), so one organization can govern dollar payments, euro invoices, and token consumption side by side - each fleet under its own mandate.

  • An action inherits its mandate's unit; the optional currency field on authorize() overrides it.
  • There is never FX conversion. An action explicitly denominated in a different unit than its mandate is held for human approval - its value is not compared against the mandate's caps, because cross-unit numbers aren't comparable.
  • Budgets count only actions in their unit, and dashboards aggregate spend per unit - unlike numbers are never summed.
  • A delegated child agent always inherits its parent's unit.

Version history & rollback

Editing a mandate changes the authority of every agent attached to it, so every edit is versioned: open a mandate to see its history and roll back to a prior revision (which itself creates a new version, keeping the trail complete).

The agent registry

Each agent has a per-agent API key (shown once at registration; rotatable), an owner, an environment, tags, a behavioral risk profile, and a lineage if it was spawned by another agent. From an agent's page you can run the what-if simulator, review its risk factors, suspend / re-activate it, rotate its key, and page through its recent actions. Suspending or archiving an agent cascade-revokes its delegated subtree.

An agent can do nothing until it has a mandate. Start there.