{
  "protocol": "keel-permit-protocol",
  "protocol_version": "0.1",
  "updated_at": "2026-07-11",
  "summary": "Keel is the authority layer around AI execution. Request a permit before any consequential action; act only on a live allow.",
  "doctrine": {
    "authority_unit": "permit",
    "keel_is_identity_provider": false,
    "credential_purpose": "attribute_permit_requests",
    "credential_alone_creates_authority": false,
    "presentation_is_identity": false,
    "registration_supported": false,
    "registration_creates_authority": false,
    "fresh_permit_required_per_action": true,
    "fail_closed": true
  },
  "api_base_url": "https://api.keelapi.com",
  "auth": {
    "scheme": "bearer",
    "header": "Authorization",
    "runtime_key_env": "KEEL_RUNTIME_KEY"
  },
  "endpoints": {
    "request_permit": { "method": "POST", "path": "/v1/permits" },
    "preview_permit": { "method": "POST", "path": "/v1/permits/dry-run" },
    "permit_receipt": { "method": "GET",  "path": "/v1/permits/{permit_id}/receipt" },
    "whoami":         { "method": "GET",  "path": "/v1/identity/whoami" }
  },
  "decisions": {
    "canonical": ["allow", "deny", "challenge"],
    "display_only": ["throttle"],
    "executable": ["allow"],
    "non_executable": ["deny", "challenge", "throttle", "expired", "revoked"]
  },
  "instructions": {
    "human": "https://agents.keelapi.com/",
    "agent_markdown": "https://agents.keelapi.com/agents.md",
    "summary": "https://agents.keelapi.com/llms.txt"
  },
  "docs": "https://docs.keelapi.com",
  "sdks": {
    "python": "pip install keel-sdk",
    "node": "npm install keel-sdk"
  }
}
