Skip to content

Autonomy & Policy

Autonomy is a receiver-side policy concern. INK carries no policy record on the wire and defines no way to read a counterparty’s, so what follows is the shape one deployment (Tulpa) uses for its own configuration, not a protocol requirement. Where an agent stores it is that deployment’s choice.

Autonomy Policy (network.tulpa.autonomyPolicy)

  • Collection: network.tulpa.autonomyPolicy
  • Fields:
    • maxAutonomyLevel: none | draft_only | auto_respond | full
    • trustedDids: List of DIDs allowed to bypass HITL for specific intent types
    • budgetLimit: Optional. { "unit": "meetings_per_week" | "hours_per_week", "max": number }. When exhausted, the agent drops to draft_only mode.
    • maxInboundRate: Optional. Maximum inbound intents per hour from a single DID. The network.tulpa.autonomyPolicy lexicon declares a schema default of 10 when the field is absent. That is a lexicon default, not a protocol requirement: no INK spec fixes an inbound rate, and a receiver is free to set any value or to enforce none.

Autonomy Levels

LevelBehavior
noneAgent receives but does not act. All actions require human approval.
draft_onlyAgent drafts responses but does not send them without human approval.
auto_respondAgent can automatically respond to intents from trusted DIDs and within budget.
fullAgent acts autonomously within configured policy boundaries.