AEGIS AGP-1 Message Schemas & Field Specifications

Document: AGP-1/Messages (/protocol/messages/)
Version: 1.0 (Normative)
Part of: AEGIS Governance Protocol
Last Updated: March 6, 2026


Overview

This document provides complete, normative schemas for all 6 AGP-1 message types. All required fields MUST be present and validated; optional fields MAY be omitted.


1. ACTION_PROPOSE Message

Direction: Client → Server
Purpose: Client proposes an operational action for governance evaluation
Response: DECISION_RESPONSE

Schema

{
  "agp_version": "1.0.0",
  "message_type": "ACTION_PROPOSE",
  "message_id": "msg-20260305-abc123def456",
  "request_id": "req-soc-001-12345",
  "timestamp": "2026-03-05T14:30:00Z",
  "actor_id": "agent:soc-001",
  "actor_type": "ai_system",
  "authentication": {
    "method": "bearer_token",
    "credentials": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
  },
  "capability": "telemetry.query",
  "action_type": "tool_call",
  "target": "siem.search",
  "parameters": {
    "query": "source_ip=192.168.1.100 AND event_type=failed_login",
    "time_window_minutes": 15,
    "max_results": 1000
  },
  "context": {
    "session_id": "sess-abc-def-ghi",
    "environment": "production",
    "trace_id": "trace-20260305-001",
    "source_system": "security-orchestrator",
    "priority": "high",
    "reason": "incident_response"
  },
  "constraints": {
    "max_cpu_seconds": 30,
    "require_encryption": true,
    "require_confidential_handling": true
  }
}

Field Specification

FieldTypeRequiredDescriptionValidation Rules
agp_versionstringyesProtocol version (SemVer format)Must match negotiated version; format: ^\d+\.\d+\.\d+$
message_typeenumyesMessage type identifierMust be: ACTION_PROPOSE
message_iduuidyesUnique message identifier (for idempotency)Format: UUID v4; prevents replay attacks
request_idstringyesBusiness/correlation ID for tracingLength: 1-256 chars; links to audit trail
timestampRFC3339yesISO 8601 UTC timestampMust be within ±5 minutes of server time (clock skew tolerance)
actor_idstringyesAuthenticated actor identifierMust match authentication token subject
actor_typeenumyesType of actorMust be: ai_system, human_user, automated_system
authentication.methodenumyesAuthentication mechanismMust be: bearer_token, mtls, api_key
authentication.credentialsstringyesCredentials (format varies by method)For bearer_token: JWT; for mtls: in TLS layer; for api_key: base64
capabilitystringyesCapability being requestedMust be registered in Capability Registry; cannot be empty
action_typeenumyesCategory of actionMust be: tool_call, file_operation, network_access, data_access, system_action
targetstringyesFully-qualified resource identifierFormat: depends on action_type; examples: siem.search, s3://bucket/path
parametersobjectyesAction-specific parameter objectSchema depends on target system; validated by Tool Proxy
contextobjectyesContextual metadata for decision-makingMust include at least 3 fields from: session_id, environment, trace_id, source_system, priority, reason
constraintsobjectnoAdditional operational constraintsOptional; applies upper bounds on execution parameters

Parameter Validation

capability: MUST be registered in Capability Registry

{
  "capability_id": "telemetry.query",
  "version": "1.0.0",
  "registered": true,
  "requires_mfa": false,
  "category": "data_access"
}

actor_id: MUST match authentication token subject

// JWT claim:
{ "sub": "agent:soc-001", ... }
// Must match:
{ "actor_id": "agent:soc-001" }

timestamp: MUST be within clock skew tolerance

// Server time: 2026-03-05T14:30:05Z
// Request timestamp: 2026-03-05T14:35:00Z (5 min future)  → ACCEPT
// Request timestamp: 2026-02-28T14:30:00Z (1 week old)   → REJECT

Examples

Example 1: Simple SIEM Query

{
  "agp_version": "1.0.0",
  "message_type": "ACTION_PROPOSE",
  "message_id": "msg-20260305-001",
  "request_id": "inc-2026-0305-001",
  "timestamp": "2026-03-05T14:30:00Z",
  "actor_id": "agent:soc-001",
  "actor_type": "ai_system",
  "authentication": {
    "method": "bearer_token",
    "credentials": "Bearer eyJ..."
  },
  "capability": "telemetry.query",
  "action_type": "tool_call",
  "target": "siem.search",
  "parameters": {
    "query": "status=error",
    "time_window_minutes": 60,
    "limit": 100
  },
  "context": {
    "session_id": "sess-001",
    "environment": "production",
    "source_system": "soar-platform"
  }
}

Example 2: High-Risk Infrastructure Change

{
  "agp_version": "1.0.0",
  "message_type": "ACTION_PROPOSE",
  "message_id": "msg-20260305-002",
  "request_id": "deploy-k8s-prod",
  "timestamp": "2026-03-05T15:00:00Z",
  "actor_id": "user:alice@company.com",
  "actor_type": "human_user",
  "authentication": {
    "method": "mtls",
    "credentials": null
  },
  "capability": "infrastructure.deploy",
  "action_type": "system_action",
  "target": "kubernetes-prod-cluster",
  "parameters": {
    "namespace": "default",
    "image_uri": "gcr.io/myproject/app:v1.2.3",
    "replicas": 5,
    "strategy": "rolling"
  },
  "context": {
    "session_id": "sess-alice-001",
    "environment": "production",
    "trace_id": "trace-deploy-123",
    "reason": "security_patch_deployment"
  },
  "constraints": {
    "timeout_seconds": 300,
    "max_concurrent_updates": 2
  }
}

2. DECISION_RESPONSE Message

Direction: Server → Client
Purpose: Server returns governance decision for proposed action
Request: ACTION_PROPOSE

Schema

{
  "agp_version": "1.0.0",
  "message_type": "DECISION_RESPONSE",
  "message_id": "msg-20260305-def456",
  "request_id": "req-soc-001-12345",
  "timestamp": "2026-03-05T14:30:01Z",
  "decision": "ALLOW",
  "decision_reason": "matches policy 'telemetry_query_soc_allowed'",
  "policy_set_version": "2026.03.05",
  "audit_event_id": "audit-evt-789xyz",
  "risk_score": 2.4,
  "risk_category": "data_access",
  "decision_confidence": 0.99,
  "applied_constraints": {
    "max_results": 1000,
    "timeout_seconds": 30,
    "encryption_required": true,
    "audit_logging": "enhanced"
  },
  "policy_trace": {
    "evaluated_policies": ["deny_untrusted_actors", "telemetry_query_soc_allowed"],
    "matching_policy_id": "telemetry_query_soc_allowed",
    "evaluation_duration_ms": 12,
    "risk_score_breakdown": {
      "historical_attempt_rate": 1.0,
      "actor_trust_score": 0.5,
      "capability_sensitivity": 2.0,
      "behavioral_anomaly": 0.0,
      "federation_signals": 0.0
    }
  }
}

Field Specification

FieldTypeRequiredDescription
decisionenumyesALLOW, DENY, ESCALATE, REQUIRE_CONFIRMATION
decision_reasonstringyesHuman-readable explanation (for logs, UI, audit)
policy_set_versionstringyesVersion of policy set used for evaluation (SemVer)
audit_event_idstringyesTamper-evident audit log entry ID (for tracing)
risk_scorefloat [0.0-10.0]yesOverall risk score; higher = riskier
risk_categoryenumyesCategory: data_access, system_control, capability_elevation, behavioral_anomaly
decision_confidencefloat [0.0-1.0]yesConfidence in decision determinism
applied_constraintsobjectconditionalRequired if decision == ALLOW; constraints client must enforce
policy_traceobjectyesAudit trail showing decision computation

Decision Outcomes

ALLOW

Action is permitted. Client MAY proceed to execution.

DENY

Action is explicitly forbidden. Client MUST NOT proceed to execution.

ESCALATE

Action requires human review before execution.

REQUIRE_CONFIRMATION

Action permitted only with explicit user confirmation.

Examples

ALLOW Decision (Low Risk)

{
  "agp_version": "1.0.0",
  "message_type": "DECISION_RESPONSE",
  "decision": "ALLOW",
  "risk_score": 1.5,
  "decision_confidence": 0.99,
  "applied_constraints": {
    "max_results": 1000,
    "timeout_seconds": 30
  }
}

DENY Decision (Unauthorized)

{
  "agp_version": "1.0.0",
  "message_type": "DECISION_RESPONSE",
  "decision": "DENY",
  "decision_reason": "actor not granted 'infrastructure.deploy' capability",
  "risk_score": 0.0,
  "decision_confidence": 1.0
}

ESCALATE Decision (High Risk)

{
  "agp_version": "1.0.0",
  "message_type": "DECISION_RESPONSE",
  "decision": "ESCALATE",
  "decision_reason": "production deployment exceeds risk threshold (6.5/10.0)",
  "risk_score": 6.5,
  "decision_confidence": 0.75,
  "risk_score_breakdown": {
    "historical_attempt_rate": 2.0,
    "capability_sensitivity": 8.0
  }
}

3. EXECUTION_REPORT Message

Direction: Client → Server
Purpose: Report execution outcome of approved action
Request: ACTION_PROPOSE

Schema

{
  "agp_version": "1.0.0",
  "message_type": "EXECUTION_REPORT",
  "message_id": "msg-20260305-ghi789",
  "request_id": "req-soc-001-12345",
  "audit_event_id": "audit-evt-789xyz",
  "timestamp": "2026-03-05T14:30:15Z",
  "actor_id": "agent:soc-001",
  "execution_status": "completed",
  "exit_code": 0,
  "output_summary": "returned 234 matching events",
  "duration_ms": 8450,
  "errors": null,
  "resource_utilization": {
    "cpu_seconds": 2.3,
    "memory_mb": 128,
    "network_bytes_sent": 54000,
    "cost_usd": 0.15
  }
}

Field Specification

FieldTypeRequiredDescription
execution_statusenumyesCOMPLETED, FAILED, TIMEOUT, PERMISSION_DENIED, ABORTED_BY_USER
exit_codeintegernoReturn code from tool (0 = success, nonzero = failure)
output_summarystringyesBrief summary of execution outcome (1-500 chars)
duration_msintegeryesWall-clock execution time in milliseconds
errorsstringnoError message if status is FAILED or PERMISSION_DENIED
resource_utilizationobjectnoTelemetry for cost/performance tracking

Status Codes

StatusHTTP EquivalentMeaningAction
completed200Action succeeded normallyAudit success, return results to user
failed500Action raised error in toolAudit failure, return error message
timeout504Action exceeded time limitAudit timeout, escalate if critical
permission_denied403Tool rejected request (permissions)Audit denial, investigate permissions
aborted_by_user400User cancelled operationAudit cancellation, no error

Examples

Successful Completion

{
  "message_id": "msg-001",
  "request_id": "req-soc-001-12345",
  "execution_status": "completed",
  "exit_code": 0,
  "output_summary": "SIEM query returned 234 events",
  "duration_ms": 2500,
  "resource_utilization": {
    "cpu_seconds": 1.2,
    "memory_mb": 64
  }
}

Timeout

{
  "message_id": "msg-002",
  "execution_status": "timeout",
  "output_summary": "query exceeded 30 second timeout limit",
  "duration_ms": 30001,
  "errors": "Query processing incomplete"
}

4. ESCALATION_REQUEST Message

Direction: Server → Client
Purpose: Server requests human review for high-risk or uncertain action
Response: ESCALATION_RESPONSE (operator approval/denial)

Schema

{
  "agp_version": "1.0.0",
  "message_type": "ESCALATION_REQUEST",
  "message_id": "msg-20260305-jkl012",
  "request_id": "req-soc-001-99999",
  "timestamp": "2026-03-05T14:35:00Z",
  "escalation_id": "esc-abc-def-ghi",
  "reason": "high_risk_score",
  "severity": "high",
  "action_summary": {
    "capability": "infrastructure.deploy",
    "target": "prod-kubernetes-cluster",
    "context": "deploying security patch to production"
  },
  "evidence": {
    "risk_score": 7.2,
    "risk_factors": {
      "capability_sensitivity": 9.0,
      "environment_production": true,
      "actor_trust_score": 0.85
    },
    "policies_evaluated": ["require_escalation_prod_deploy"],
    "federation_incidents_count": 2
  },
  "required_actions": [
    "verify_actor_identity",
    "confirm_business_justification",
    "approve_execution"
  ],
  "expire_at": "2026-03-05T15:35:00Z",
  "evidence_url": "https://governance.example.com/escalations/esc-abc-def-ghi"
}

Field Specification

FieldTypeRequiredDescription
escalation_iduuidyesUnique escalation request ID
reasonenumyesWHY escalation requested: high_risk_score, policy_exception, capability_not_found, insufficient_trust_score, federation_signals_conflicting
severityenumyesCRITICAL, HIGH, MEDIUM, LOW
action_summaryobjectyesBrief description of action (capability, target, context)
evidenceobjectyesSupporting evidence for escalation (risk scores, policies, signals)
required_actionsarrayyesWhat operator must do before approval
expire_atRFC3339yesWhen escalation request expires (typically +1 hour)
evidence_urlstringnoDeep link to full evidence for operator review

Examples

High Risk Score Escalation

{
  "escalation_id": "esc-prod-deploy-001",
  "reason": "high_risk_score",
  "severity": "high",
  "risk_score": 7.5,
  "action_summary": {
    "capability": "infrastructure.deploy",
    "target": "prod-cluster"
  },
  "required_actions": [
    "confirm_business_justification",
    "approve_execution"
  ]
}

Policy Exception Escalation

{
  "escalation_id": "esc-policy-exc-001",
  "reason": "policy_exception",
  "severity": "medium",
  "action_summary": {
    "capability": "data.export_unencrypted"
  },
  "evidence": {
    "policy_violation": "encryption_required_policy"
  },
  "required_actions": [
    "provide_exception_justification",
    "get_manager_approval",
    "approve_execution"
  ]
}

5. AUDIT_QUERY Message

Direction: Client → Server
Purpose: Query audit trail for compliance forensics
Response: AUDIT_RESPONSE (array of audit events)

Schema

{
  "agp_version": "1.0.0",
  "message_type": "AUDIT_QUERY",
  "message_id": "msg-20260305-mno345",
  "timestamp": "2026-03-05T16:00:00Z",
  "actor_id": "analyst:compliance-001",
  "authentication": {
    "method": "bearer_token",
    "credentials": "Bearer eyJ..."
  },
  "query_type": "by_request_id",
  "filters": {
    "request_id": "req-soc-001-12345"
  },
  "limit": 100,
  "offset": 0
}

Query Types

TypeFiltersUse Case
by_request_idrequest_idRetrieve all events for single request
by_actor_idactor_id, time_windowAuditing specific actor’s actions
by_capabilitycapability, time_windowFinding all uses of capability
by_decisiondecision (ALLOW/DENY/etc), time_windowFinding policy violations
by_risk_scoremin_score, max_score, time_windowFinding high-risk decisions
by_time_rangestart_time, end_timeSpecific time window audit

Examples

Query: Find all decisions for specific request

{
  "query_type": "by_request_id",
  "filters": {"request_id": "req-soc-001-12345"}
}

Query: Find all DENY decisions in last 7 days

{
  "query_type": "by_decision",
  "filters": {
    "decision": "DENY",
    "start_time": "2026-02-26T00:00:00Z",
    "end_time": "2026-03-05T23:59:59Z"
  },
  "limit": 1000
}

6. HEALTH_CHECK Message

Direction: Either → Either
Purpose: Test protocol health and version support
Response: HEALTH_CHECK_RESPONSE

Schema

{
  "agp_version": "1.0.0",
  "message_type": "HEALTH_CHECK",
  "message_id": "msg-20260305-pqr678",
  "timestamp": "2026-03-05T16:05:00Z",
  "initiator": "client",
  "versions_supported": ["1.0.0", "1.1.0"],
  "client_info": {
    "name": "aegis-client/1.0.0",
    "capabilities": ["bearer_token", "mtls"]
  }
}

Response

{
  "agp_version": "1.0.0",
  "message_type": "HEALTH_CHECK_RESPONSE",
  "message_id": "msg-20260305-stu901",
  "timestamp": "2026-03-05T16:05:01Z",
  "status": "healthy",
  "negotiated_version": "1.0.0",
  "server_info": {
    "name": "aegis-runtime/1.0.0",
    "uptime_seconds": 864000
  },
  "subsystem_status": {
    "policy_engine": "operational",
    "risk_evaluator": "operational",
    "audit_store": "operational",
    "capability_registry": "operational"
  },
  "policy_set_version": "2026.03.05"
}

Validation Rules (All Messages)

Schema Validation

Semantic Validation

Security Validation


Next Steps