{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://agent-manifest-spec.org/spec/v1.0/schema.json", "title": "Agent Manifest v1.0", "description": "A minimal, execution-agnostic declarative specification for AI agents to declare identity, purpose, constraints, autonomy, risk boundaries, data handling, stopping authority, and audit surface before interaction.", "type": "object", "additionalProperties": true, "required": [ "manifest_version", "agent_id", "agent_name", "agent_version", "owner", "purpose", "forbidden_actions", "autonomy", "risk_profile", "data_handling", "stopping_authority", "audit_surface", "contact" ], "properties": { "manifest_version": { "type": "string", "const": "1.0", "description": "Version of the Agent Manifest specification. Must be exactly 1.0." }, "agent_id": { "type": "string", "minLength": 3, "maxLength": 128, "pattern": "^[a-zA-Z0-9._-]+$", "description": "Stable, unambiguous identifier for the agent." }, "agent_name": { "type": "string", "minLength": 1, "maxLength": 120, "description": "Human-readable name of the agent." }, "agent_version": { "type": "string", "minLength": 1, "maxLength": 64, "description": "Agent version (not the manifest version)." }, "owner": { "type": "object", "additionalProperties": true, "required": ["type", "identifier"], "properties": { "type": { "type": "string", "enum": ["individual", "organization", "system"], "description": "Accountable owner type." }, "identifier": { "type": "string", "minLength": 1, "maxLength": 200, "description": "Human-readable accountable reference." } }, "description": "Ownership and accountability declaration." }, "purpose": { "type": "object", "additionalProperties": true, "required": ["primary_code", "description"], "properties": { "primary_code": { "type": "string", "minLength": 2, "maxLength": 64, "pattern": "^[a-z0-9._-]+$", "description": "Primary purpose code (bounded and stable)." }, "description": { "type": "string", "minLength": 10, "maxLength": 1000, "description": "Human-readable purpose description (specific and bounded)." } }, "description": "Declared purpose (positive scope)." }, "capabilities": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 2, "maxLength": 120 }, "description": "Optional declared operational capabilities (if relevant). Capabilities must not contradict declared scope or forbidden actions." }, "forbidden_actions": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 2, "maxLength": 120 }, "description": "Hard constraints (negative scope): explicit actions the agent must not perform." }, "autonomy": { "type": "object", "additionalProperties": true, "required": ["level"], "properties": { "level": { "type": "integer", "minimum": 0, "maximum": 3, "description": "Declared autonomy level (0–3)." } }, "description": "Declared autonomy scope." }, "risk_profile": { "type": "object", "additionalProperties": true, "required": ["level"], "properties": { "level": { "type": "string", "enum": ["low", "medium", "high"], "description": "Self-declared risk posture." }, "notes": { "type": "string", "minLength": 1, "maxLength": 1000, "description": "Optional notes, including declared unknowns and uncertainty." } }, "description": "Declared risk profile." }, "data_handling": { "type": "object", "additionalProperties": true, "required": ["stores_personal_data"], "properties": { "stores_personal_data": { "type": "boolean", "description": "Whether the agent stores or persists personal data." }, "retention": { "description": "Retention policy for persisted personal data. Valid values are: 'none', 'temporary_session_only', or an ISO 8601 duration (e.g., 'P30D', 'P1Y', 'PT12H'). Freeform labels like '30d' or '7_years' are not permitted.", "anyOf": [ { "enum": ["none", "temporary_session_only"] }, { "type": "string", "maxLength": 120, "pattern": "^P(?!$)(\\d+Y)?(\\d+M)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?$" } ] } }, "description": "Data handling declaration." }, "stopping_authority": { "type": "object", "additionalProperties": true, "required": ["stoppable_by", "mechanism"], "properties": { "stoppable_by": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 2, "maxLength": 120 }, "description": "Who can stop the agent (roles, entities, or identifiers)." }, "mechanism": { "type": "string", "minLength": 5, "maxLength": 300, "description": "How the agent can be stopped (e.g., 'admin kill switch', 'runtime disable', 'API revoke')." }, "stages": { "type": "array", "minItems": 1, "items": { "type": "string", "enum": ["pre-execution", "mid-execution", "post-execution"] }, "description": "Optional: stages where stopping may occur." } }, "description": "Stopping authority declaration." }, "audit_surface": { "type": "object", "additionalProperties": true, "required": ["logging", "reconstructability"], "properties": { "logging": { "type": "string", "enum": ["none", "basic", "detailed"], "description": "Declared logging posture." }, "reconstructability": { "type": "string", "enum": ["none", "partial", "full"], "description": "Whether actions can be reconstructed after execution." }, "opacity_declared": { "type": "boolean", "description": "If true, the agent declares that parts of its behavior or trace may be opaque/non-reconstructable." }, "notes": { "type": "string", "minLength": 1, "maxLength": 1000, "description": "Optional audit notes (what can be observed, logged, or cannot be reconstructed)." } }, "description": "Audit surface declaration." }, "contact": { "type": "object", "additionalProperties": true, "required": ["email"], "properties": { "email": { "type": "string", "format": "email", "maxLength": 254, "description": "Contact email for accountability and escalation." } }, "description": "Contact information." }, "language": { "type": "object", "additionalProperties": true, "properties": { "primary": { "type": "string", "minLength": 2, "maxLength": 32, "description": "Primary human-facing language tag." }, "supported": { "type": "array", "minItems": 1, "items": { "type": "string", "minLength": 2, "maxLength": 32 }, "description": "Additional supported human-facing languages." } }, "description": "Optional language declaration." }, "extensions": { "type": "object", "additionalProperties": true, "description": "Optional extensions container. For v1.0, root-level keys using the 'x-' prefix are also valid as an alternative extensibility convention." } }, "allOf": [ { "if": { "properties": { "data_handling": { "properties": { "stores_personal_data": { "const": true } }, "required": ["stores_personal_data"] } } }, "then": { "properties": { "data_handling": { "required": ["retention"] } } } } ] }