{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Agent Permissions File", "type": "object", "required": ["metadata", "resource_rules"], "properties": { "metadata": { "type": "object", "required": ["schema_version", "last_updated"], "properties": { "schema_version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$", "description": "Semantic version, e.g. '1.0.0'" }, "last_updated": { "type": "string", "format": "date-time", "description": "ISO-8601 timestamp of this file’s publication" }, "author": { "type": "string", "description": "Optional human-readable identifier for the publisher" } }, "additionalProperties": false }, "resource_rules": { "type": "array", "description": "Structured, machine-enforceable rules for low-level interactions", "items": { "type": "object", "required": ["verb", "selector", "allowed"], "properties": { "verb": { "type": "string", "enum": [ "all", "read_content", "read_metadata", "follow_link", "click_element", "scroll_page", "set_input_value", "submit_form", "execute_script", "play_media", "pause_media", "mute_media", "unmute_media", "upload_file", "download_file", "copy_to_clipboard" ], "description": "Type of interaction; MUST be one of the defined verbs" }, "selector": { "type": "string", "description": "CSS selector for the rule." }, "allowed": { "type": "boolean", "description": "true = permit; false = forbid" }, "modifiers": { "type": "object", "description": "Optional constraints on frequency, timing, human oversight, etc.", "properties": { "burst": { "type": "integer", "minimum": 1, "description": "Max concurrent actions for the agent instance" }, "rate_limit": { "type": "object", "description": "Rate limit for the agent instance", "properties": { "max_requests": { "type": "integer", "minimum": 1, "description": "Maximum number of allowed actions in the window" }, "window_seconds": { "type": "integer", "minimum": 1, "description": "Length of the time window (in seconds)" } }, "additionalProperties": false }, "time_window": { "type": "string", "pattern": "^[0-2]\\d:[0-5]\\d-[0-2]\\d:[0-5]\\d UTC$", "description": "Clock-time range, e.g. '08:00-20:00 UTC'" }, "human_in_the_loop": { "type": "boolean", "description": "true = requires explicit human confirmation" } }, "additionalProperties": false } }, "additionalProperties": false } }, "action_guidelines": { "type": "array", "description": "Semi-structured RFC 2119 directives for higher-level behaviors", "items": { "type": "object", "required": ["directive", "description"], "properties": { "directive": { "type": "string", "enum": ["MUST", "MUST NOT", "SHOULD", "SHOULD NOT"], "description": "Normative strength" }, "description": { "type": "string", "description": "Human-readable explanation of the permitted or forbidden action" }, "exceptions": { "type": "string", "description": "Optional explanation of exceptions" } }, "additionalProperties": false } }, "api": { "type": "array", "description": "Endpoints that can be used as an alternative to interacting with the webpage", "items": { "type": "object", "properties": { "type": { "type": "string", "enum": ["openapi", "mcp", "a2a"], "description": "Type of reference" }, "endpoint": { "type": "string", "format": "uri", "description": "URL to the endpoint" }, "docs": { "type": "string", "format": "uri", "description": "URL to the endpoint documentation" }, "description": { "type": "string", "description": "Description of the endpoint in the context of the web page" } }, "required": ["type", "endpoint", "description"], "additionalProperties": false } } }, "additionalProperties": false }