ARAL Core v1.2
ARAL Core Specification
Section titled “ARAL Core Specification”Version: 1.2
Status: Release Candidate
Layers: L1-L5
Requirements: 83
Philosophy: Persona-Centric Architecture
Preamble: Persona as Agent Identity
Section titled “Preamble: Persona as Agent Identity”“The persona is not a configuration of an agent—it IS the agent.”
ARAL adopts a persona-centric philosophy where:
- Identity is Primary: An agent without a persona has no identity, purpose, or behavioral contract
- Everything is Persona-Scoped: Memory, capabilities, reasoning—all bound to persona identity
- Cryptographic Provenance: Every action traces back to a signed persona
- Dynamic Evolution: Personas can be hot-swapped, orchestrated, and evolved
- Accountability Anchor: Personas provide verifiable audit trails
This specification defines the five foundational layers that enable persona-driven agent architectures. The runtime (L1) provides the body, memory (L2) the brain, capabilities (L3) the senses, reasoning (L4) the mind, and persona (L5) the soul.
See Also: Persona as Agent Identity Guide
1. Layer 1: Runtime
Section titled “1. Layer 1: Runtime”The Runtime layer manages execution environment, resources, and lifecycle.
1.1 Requirements
Section titled “1.1 Requirements”| ID | Requirement | Level |
|---|---|---|
| ARAL-L1-001 | Runtime MUST provide unique agent instance ID | MUST |
| ARAL-L1-002 | Runtime MUST implement graceful shutdown with configurable timeout | MUST |
| ARAL-L1-003 | Runtime MUST expose health check endpoint | MUST |
| ARAL-L1-004 | Runtime SHOULD implement resource quotas (CPU, memory, connections) | SHOULD |
| ARAL-L1-005 | Runtime MUST provide fallback behavior on resource exhaustion | MUST |
| ARAL-L1-006 | Runtime MUST log lifecycle events (start, stop, error) | MUST |
| ARAL-L1-007 | Runtime SHOULD support hot reload of configuration | SHOULD |
| ARAL-L1-008 | Runtime MUST enforce maximum execution time per request | MUST |
| ARAL-L1-009 | Runtime MUST provide metrics endpoint (Prometheus format) | MUST |
| ARAL-L1-010 | Runtime SHOULD implement backpressure mechanisms | SHOULD |
1.2 Schema
Section titled “1.2 Schema”See schemas/manifest.schema.json for agent manifest format.
2. Layer 2: Memory
Section titled “2. Layer 2: Memory”The Memory layer manages agent state and context.
2.1 Memory Types
Section titled “2.1 Memory Types”| Type | Scope | Persistence |
|---|---|---|
| Working | Current request | None |
| Short-term | Session | Session duration |
| Long-term | Agent lifetime | Persistent |
| Episodic | Specific events | Selective |
2.2 Requirements
Section titled “2.2 Requirements”| ID | Requirement | Level |
|---|---|---|
| ARAL-L2-001 | Memory MUST implement working memory for current context | MUST |
| ARAL-L2-002 | Memory MUST support TTL-based expiration | MUST |
| ARAL-L2-003 | Memory SHOULD implement vector similarity search | SHOULD |
| ARAL-L2-004 | Memory MUST provide atomic read-modify-write operations | MUST |
| ARAL-L2-005 | Memory MUST NOT store secrets in plaintext | MUST |
| ARAL-L2-006 | Memory SHOULD support memory partitioning by context | SHOULD |
| ARAL-L2-007 | Memory MUST log all write operations for audit | MUST |
| ARAL-L2-008 | Memory MUST implement size limits with eviction policy | MUST |
| ARAL-L2-009 | Memory SHOULD support snapshots for debugging | SHOULD |
| ARAL-L2-010 | Memory MUST handle concurrent access safely | MUST |
3. Layer 3: Capabilities
Section titled “3. Layer 3: Capabilities”The Capabilities layer defines available actions and tools.
3.1 Capability Definition
Section titled “3.1 Capability Definition”{ "id": "capability-uuid", "name": "web_search", "version": "1.0.0", "description": "Search the web", "input_schema": { "type": "object", "properties": {...} }, "output_schema": { "type": "object", "properties": {...} }, "permissions": ["network:read"], "rate_limit": { "requests": 100, "period": "1m" }, "timeout_ms": 30000}3.2 Requirements
Section titled “3.2 Requirements”| ID | Requirement | Level |
|---|---|---|
| ARAL-L3-001 | Capabilities MUST declare input/output schemas | MUST |
| ARAL-L3-002 | Capabilities MUST declare required permissions | MUST |
| ARAL-L3-003 | Capabilities MUST implement timeout handling | MUST |
| ARAL-L3-004 | Capabilities SHOULD implement retry with exponential backoff | SHOULD |
| ARAL-L3-005 | Capabilities MUST validate inputs against schema | MUST |
| ARAL-L3-006 | Capabilities MUST validate outputs against schema | MUST |
| ARAL-L3-007 | Capabilities MUST log invocations with trace ID | MUST |
| ARAL-L3-008 | Capabilities SHOULD implement rate limiting | SHOULD |
| ARAL-L3-009 | Capabilities MUST handle errors gracefully | MUST |
| ARAL-L3-010 | Capabilities MUST NOT exceed declared permissions | MUST |
| ARAL-L3-011 | Capabilities SHOULD provide estimated cost/latency | SHOULD |
| ARAL-L3-012 | Capabilities MUST support cancellation | MUST |
4. Layer 4: Reasoning
Section titled “4. Layer 4: Reasoning”The Reasoning layer handles decision-making, inference, and LLM interactions.
4.1 Requirements
Section titled “4.1 Requirements”| ID | Requirement | Level |
|---|---|---|
| ARAL-L4-001 | Reasoning MUST produce structured action decisions | MUST |
| ARAL-L4-002 | Reasoning MUST include confidence scores when applicable | MUST |
| ARAL-L4-003 | Reasoning MUST respect L5 Persona constraints | MUST |
| ARAL-L4-004 | Reasoning SHOULD implement chain-of-thought logging | SHOULD |
| ARAL-L4-005 | Reasoning MUST handle ambiguous inputs gracefully | MUST |
| ARAL-L4-006 | Reasoning MUST NOT directly modify L2 Memory | MUST |
| ARAL-L4-007 | Reasoning MUST NOT bypass L3 Capability validation | MUST |
| ARAL-L4-008 | Reasoning SHOULD support multiple inference strategies | SHOULD |
| ARAL-L4-009 | Reasoning MUST implement request timeout | MUST |
| ARAL-L4-010 | Reasoning MUST log all decisions with rationale | MUST |
| ARAL-L4-011 | Reasoning MAY implement self-reflection loops | MAY |
| ARAL-L4-012 | Reasoning MUST handle model errors gracefully | MUST |
| ARAL-L4-013 | Reasoning MUST support multiple LLM providers | MUST |
| ARAL-L4-014 | Reasoning MUST implement provider fallback chains | MUST |
| ARAL-L4-015 | Reasoning SHOULD support provider load balancing | SHOULD |
| ARAL-L4-016 | Reasoning SHOULD support cost-based routing | SHOULD |
| ARAL-L4-017 | Reasoning MAY implement multi-provider consensus | MAY |
| ARAL-L4-018 | Reasoning MUST support content safety moderation | MUST |
| ARAL-L4-019 | Reasoning SHOULD implement quality-based model selection | SHOULD |
| ARAL-L4-020 | Reasoning MUST track per-provider usage and costs | MUST |
| ARAL-L4-021 | Reasoning MUST support weighted LLM ponderation (blending) | MUST |
| ARAL-L4-022 | Reasoning MUST normalize ponderation weights to sum to 1.0 | MUST |
| ARAL-L4-023 | Reasoning MUST support advanced llm_config with providers array | MUST |
| ARAL-L4-024 | Reasoning SHOULD support routing_strategy options (specialized, cost_optimized, quality_first, latency_first) | SHOULD |
| ARAL-L4-025 | Reasoning SHOULD support response aggregation (best_of_n, ensemble, consensus) | SHOULD |
| ARAL-L4-026 | Reasoning MAY support per-provider configuration overrides | MAY |
| ARAL-L4-027 | Reasoning MAY support model-specific prompt customization (llm_specific) | MAY |
| ARAL-L4-028 | Reasoning MAY support task-based routing rules (extensions.routing_rules) | MAY |
4.2 Multi-LLM Orchestration
Section titled “4.2 Multi-LLM Orchestration”ARAL supports multiple LLM providers with intelligent routing and weighted blending:
{ "llm_config": { "providers": [ { "name": "openai", "models": ["gpt-4", "gpt-3.5-turbo"], "priority": 1, "cost_per_1k_tokens": 0.03, "max_tokens": 8192 }, { "name": "anthropic", "models": ["claude-3-opus", "claude-3-sonnet"], "priority": 2, "cost_per_1k_tokens": 0.015, "max_tokens": 200000 } ], "routing_strategy": "cost_optimized", "fallback_chain": ["gpt-4", "claude-3-opus", "gpt-3.5-turbo"], "load_balancing": "round_robin", "ponderation": { "enabled": false, "weights": { "gpt-5.2": 0.8, "claude-sonnet-4.5": 0.2 }, "merge_strategy": "weighted_blend" }, "consensus_mode": { "enabled": false, "min_providers": 2, "agreement_threshold": 0.75 }, "moderation": { "enabled": true, "provider": "openai", "block_on_violation": true } }}4.3 Routing Strategies
Section titled “4.3 Routing Strategies”| Strategy | Description | Use Case |
|---|---|---|
| cost_optimized | Route to cheapest model that meets quality | Production efficiency |
| quality_first | Always use highest-quality model | Critical decisions |
| latency_first | Route to fastest-responding provider | Real-time apps |
| round_robin | Distribute load evenly across providers | Load balancing |
| ponderation | Weighted blend of multiple model outputs | Ensemble responses |
| priority_based | Use providers in priority order | Fallback chains |
| consensus | Query multiple models, require agreement | High-stakes decisions |
4.4 Decision Format
Section titled “4.4 Decision Format”{ "decision_id": "uuid", "timestamp": "ISO8601", "action": "capability_id", "parameters": {...}, "confidence": 0.95, "rationale": "Chain of thought...", "alternatives": [...]}5. Layer 5: Persona — The Agent’s Identity and Soul
Section titled “5. Layer 5: Persona — The Agent’s Identity and Soul”“The persona is the agent. Without a persona, there is no agent—only an empty runtime.”
The Persona layer is the identity core of an ARAL agent. It defines:
- Who the agent is (identity, role, purpose)
- What the agent can do (capabilities, tools, domains)
- What the agent must not do (constraints, denials, safety limits)
- How the agent thinks (reasoning style, temperature, verbosity)
- How the agent collaborates (merge behavior, compatible modes)
- How the agent is accountable (audit criteria, signatures)
Every ARAL agent is incarnated through a persona. When you instantiate an agent with a persona, you are not merely configuring it—you are giving it life, identity, and purpose.
5.1 Persona as Constitutional Contract
Section titled “5.1 Persona as Constitutional Contract”A persona is a behavioral constitution that:
- Defines Identity: UUID, name, role, version
- Declares Rights: Allowed capabilities (what it CAN do)
- Sets Boundaries: Denied capabilities, max reasoning depth (what it CANNOT do)
- Establishes Values: Audit criteria, priorities, thinking style
- Builds Relationships: Compatible personas, defer_to, conflicts_with
- Ensures Accountability: Cryptographic signature, audit trails
5.2 Persona Definition
Section titled “5.2 Persona Definition”{ "id": "d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a", "name": "Research Analyst Pro", "role": "research_analyst", "version": "1.0.0",
"metadata": { "category": "research", "description": "Expert research analyst with multi-model ensemble", "tags": ["research", "analysis", "expert"], "skills": ["data-analysis", "synthesis", "critical-thinking"], "author": "ARAL Standard", "license": "MIT", "created": "2026-01-16T00:00:00Z", "updated": "2026-01-16T00:00:00Z" },
"config": { "temperature": 0.3, "formality": "academic", "verbosity": "detailed", "thinking_style": "analytical", "priority": 80,
"llm_ponderation": { "enabled": true, "weights": { "gpt-4": 0.6, "claude-opus": 0.3, "gemini-pro": 0.1 }, "merge_strategy": "weighted_blend", "execution": "parallel", "normalize": true } },
"prompts": { "system": "You are an expert research analyst...", "prefix": "Before answering, verify sources and cite evidence.", "examples": [ { "input": "Analyze climate change impact", "output": "Multi-faceted analysis with citations...", "context": "Research synthesis" } ] },
"capabilities": { "tools": ["web_search", "data_analysis", "statistical_modeling"], "domains": ["research-methodology", "statistics", "scientific-writing"], "languages": ["python", "r", "english"] },
"constraints": { "allowed_capabilities": ["read_data", "analyze_data", "search_literature"], "denied_capabilities": ["delete_data", "modify_source_data"], "max_reasoning_depth": 15, "require_confirmation": ["publish_results", "share_data"], "behavioral_constraints": [ "Always cite sources", "Acknowledge uncertainty", "Avoid overgeneralization", "Check for bias" ] },
"merge_behavior": { "compatible_modes": ["chain", "parallel", "consensus"], "defer_to": ["peer-reviewer-persona-uuid"], "conflicts_with": ["quick-response-agent-uuid"], "chain_position": "middle", "merge_strategy": "weighted_average" },
"audit": { "enabled": true, "criteria": [ "methodological-rigor", "source-reliability", "statistical-validity", "bias-detection" ], "trigger": "automatic", "audit_persona_id": "peer-reviewer-uuid" },
"signature": "Ed25519-base64-encoded-signature", "signature_algorithm": "Ed25519", "public_key": "-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----"}5.3 Requirements
Section titled “5.3 Requirements”| ID | Requirement | Level |
|---|---|---|
| ARAL-L5-001 | Persona MUST define unique UUID identifier | MUST |
| ARAL-L5-002 | Persona MUST define allowed/denied capabilities | MUST |
| ARAL-L5-003 | Persona MUST include metadata (category, description) | MUST |
| ARAL-L5-004 | Persona SHOULD be cryptographically signed | SHOULD |
| ARAL-L5-005 | Persona MUST be validated at agent startup | MUST |
| ARAL-L5-006 | Persona constraints MUST be enforced by runtime | MUST |
| ARAL-L5-007 | Persona MUST include semantic version | MUST |
| ARAL-L5-008 | Persona MAY define behavioral config (temperature, verbosity) | MAY |
| ARAL-L5-009 | Persona MUST be logged at startup and on switch | MUST |
| ARAL-L5-010 | Runtime MUST support persona hot-swapping | MUST |
| ARAL-L5-011 | Persona switching MUST preserve critical agent state | MUST |
| ARAL-L5-012 | Persona MUST include system prompts for behavior definition | MUST |
| ARAL-L5-013 | Persona switching MUST emit lifecycle event | MUST |
| ARAL-L5-014 | Persona MUST validate signature before loading | MUST |
| ARAL-L5-015 | Persona registry MUST support discovery by tags/category | MUST |
5.4 Persona Lifecycle: Birth, Life, Death
Section titled “5.4 Persona Lifecycle: Birth, Life, Death”Every persona follows a lifecycle:
DEFINED → VALIDATED → SIGNED → REGISTERED → INSTANTIATED → ACTIVE → SWAPPED/TERMINATED → ARCHIVEDBirth (Instantiation):
const agent = await runtime.instantiate({ persona: await loadPersona("research-analyst-pro.json"), memory: createPersonaMemory(persona.id), capabilities: filterCapabilities(persona.capabilities), reasoning: configureReasoning(persona.config),});Life (Execution):
- Agent executes with persona identity
- Every action traces to persona signature
- Constraints enforced in real-time
- Audit criteria monitored continuously
Death (Termination):
await agent.terminate({ reason: "scheduled_shutdown", archive: true, // Preserve audit records notify: ["audit-system", "monitoring"],});5.5 Persona Hot-Swapping (Identity Transformation)
Section titled “5.5 Persona Hot-Swapping (Identity Transformation)”Agents MUST support dynamic persona switching without requiring restart:
// Hot-swap persona (identity transformation)await agent.hotSwap({ newPersona: await loadPersona("data-scientist.json"), transition: { mode: "graceful", // or 'immediate' preserve_state: ["long_term_memory", "session_context"], clear_state: ["working_memory"], require_approval: true, rollback_on_error: true, },});Swap Requirements:
- ✅ Validate new persona signature
- ✅ Check swap compatibility (merge_behavior.compatible_modes)
- ✅ Preserve long-term memory and session context
- ✅ Clear working memory if specified
- ✅ Emit
persona_switchedevent with before/after IDs - ✅ Log transition with full audit trail
- ✅ Support rollback on validation failure
- ✅ Maintain cryptographic binding to new persona
Philosophical Note: When an agent hot-swaps personas, is it still the same agent? ARAL’s answer: No and Yes—the consciousness (persona) has changed, but the substrate (runtime + persistent memory) continues.
5.6 Persona-Scoped Resources
Section titled “5.6 Persona-Scoped Resources”All agent resources are persona-scoped:
| Resource | Scoping |
|---|---|
| Memory | persona:{persona_id}:memory:{type} |
| Capabilities | Filtered by persona.capabilities + persona.constraints |
| Reasoning | Configured by persona.config + persona.config.llm_ponderation |
| Audit Logs | Tagged with persona_id + persona_signature |
| Metrics | Labeled with persona_name + persona_version |
5.7 Cryptographic Identity Binding
Section titled “5.7 Cryptographic Identity Binding”Each agent instance is cryptographically bound to its persona:
{ "agent_instance_id": "runtime-generated-uuid", "persona_id": "d4e5f6a7-8b9c-0d1e-2f3a-4b5c6d7e8f9a", "persona_version": "1.0.0", "persona_signature": "Ed25519-signature-of-persona-hash", "binding_timestamp": "2026-01-16T12:00:00Z", "binding_signature": "runtime-signed-binding-proof", "binding_algorithm": "Ed25519"}This creates verifiable provenance: Every action can be cryptographically traced back to a specific persona version.
6. Cross-Layer Requirements
Section titled “6. Cross-Layer Requirements”| ID | Requirement | Level |
|---|---|---|
| ARAL-CL-001 | All layers MUST use Envelope format for communication | MUST |
| ARAL-CL-002 | All layers MUST propagate trace_id | MUST |
| ARAL-CL-003 | All layers MUST implement structured logging | MUST |
| ARAL-CL-004 | All layers MUST handle errors without exposing internals | MUST |
| ARAL-CL-005 | All layers SHOULD emit OpenTelemetry metrics | SHOULD |
| ARAL-CL-006 | All layers MUST NOT block on I/O without timeout | MUST |
Summary
Section titled “Summary”ARAL-CORE defines the foundational five layers for persona-centric AI agents.
| Layer | Requirements | Key Features |
|---|---|---|
| L1 Runtime | 10 | Lifecycle, health checks, metrics, resource management |
| L2 Memory | 10 | Persona-scoped memory, TTL, audit logging, concurrent access |
| L3 Capabilities | 12 | Schema validation, permissions, rate limiting, timeout handling |
| L4 Reasoning | 22 | Multi-LLM orchestration, ponderation (weighted blending), routing |
| L5 Persona | 15 | Identity, hot-swapping, cryptographic binding, behavioral contract |
| Cross-Layer | 6 | Envelope protocol, trace propagation, structured logging |
| Total ARAL-CORE | 83 | +15 from v1.1.0 |
Version History
Section titled “Version History”| Version | Date | Changes | Requirements |
|---|---|---|---|
| 1.0 | 2026-01-16 | Added persona-centric philosophy, hot-swapping (L5 +5), multi-LLM orchestration (L4 +8), ponderation (L4 +2) | 83 |
| 1.0 (initial) | 2026-01-15 | Initial release | 68 |
© 2026 IbIFACE — CC BY 4.0