caxton 0.1.4

A secure WebAssembly runtime for multi-agent systems
Documentation
# WebAssembly Runtime Architecture

## Overview

The Caxton WebAssembly Runtime provides a secure, isolated execution environment for multi-agent systems. Each agent runs in its own sandboxed WASM instance with enforced resource limits and security policies.

## Key Components

### 1. WasmRuntime
The main orchestrator that manages the lifecycle of all agents in the system.

**Responsibilities:**
- Agent deployment and lifecycle management
- Resource allocation and enforcement
- Security policy enforcement
- Message routing between agents

### 2. Sandbox
Each agent runs in an isolated sandbox that prevents interference with other agents or the host system.

**Features:**
- Complete memory isolation
- CPU fuel-based scheduling
- Controlled host function access
- Resource limit enforcement

### 3. Security Policy
Configurable security policies control what WASM features and host functions are available.

**Security Levels:**
- **Strict**: Minimal permissions, no advanced WASM features
- **Default**: Balanced security with essential features
- **Relaxed**: More permissive for trusted environments

### 4. Resource Manager
Enforces resource limits to prevent any single agent from consuming excessive resources.

**Managed Resources:**
- Memory (per-agent limit)
- CPU fuel (computation units)
- Execution time
- Message size

## Architecture Diagram

```
┌─────────────────────────────────────────────────────────┐
│                    Caxton Runtime                        │
├─────────────────────────────────────────────────────────┤
│                                                          │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐ │
│  │   Agent 1    │  │   Agent 2    │  │   Agent 3    │ │
│  │  (Sandbox)   │  │  (Sandbox)   │  │  (Sandbox)   │ │
│  └──────────────┘  └──────────────┘  └──────────────┘ │
│         ▲                 ▲                 ▲          │
│         │                 │                 │          │
│  ┌──────┴─────────────────┴─────────────────┴────────┐ │
│  │              Resource Manager                      │ │
│  │  • Memory limits                                  │ │
│  │  • CPU fuel tracking                              │ │
│  │  • Execution timeouts                             │ │
│  └────────────────────────────────────────────────────┘ │
│                                                          │
│  ┌────────────────────────────────────────────────────┐ │
│  │              Security Policy                       │ │
│  │  • WASM feature gates                             │ │
│  │  • Host function permissions                      │ │
│  │  • Sandboxing rules                               │ │
│  └────────────────────────────────────────────────────┘ │
│                                                          │
│  ┌────────────────────────────────────────────────────┐ │
│  │              Host Functions                        │ │
│  │  • log()                                          │ │
│  │  • get_time()                                     │ │
│  │  • send_message()                                 │ │
│  └────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
```

## Agent Lifecycle

```
   Unloaded
   Deploy (validate WASM module)
    Loaded
   Start (initialize sandbox)
   Running ◄─────┐
      │          │
      ▼          │
   Execute       │
   Functions ────┘
   Draining (graceful shutdown)
   Stopped
```

## Security Features

### 1. WASM Feature Restrictions
- **SIMD**: Disabled by default (prevents certain attack vectors)
- **Reference Types**: Disabled (reduces complexity)
- **Bulk Memory**: Disabled (prevents rapid memory operations)
- **Threads**: Disabled (simplifies isolation)

### 2. Fuel-Based Scheduling
- Each agent has a fuel budget for CPU operations
- Prevents infinite loops and resource hogging
- Enables cooperative multitasking

### 3. Memory Isolation
- Each sandbox has its own memory space
- No shared memory between agents
- Enforced memory limits per agent

### 4. Controlled Host Access
- Limited set of host functions exposed
- No direct filesystem access
- No raw network socket access
- Message-based communication only

## Resource Limits

### Default Limits
- **Memory**: 10MB per agent
- **CPU Fuel**: 1,000,000 units
- **Execution Time**: 5 seconds
- **Message Size**: 100KB

### Customization
Resource limits can be customized per deployment:

```rust
let config = WasmRuntimeConfig {
    resource_limits: ResourceLimits {
        max_memory_bytes: 5 * 1024 * 1024,  // 5MB
        max_cpu_fuel: 500_000,
        max_execution_time: Duration::from_secs(2),
        max_message_size: 50 * 1024,  // 50KB
    },
    ..Default::default()
};
```

## Performance Characteristics

### Startup Time
- Target: < 100ms per agent
- Achieved through:
  - Pre-compiled WASM caching
  - Lazy initialization
  - Minimal bootstrap overhead

### Throughput
- Supports 100+ concurrent agents
- Message passing overhead < 1ms
- Context switching via fuel metering

### Memory Efficiency
- Base overhead: ~1MB per sandbox
- Shared engine reduces duplication
- Automatic cleanup on agent removal

## Error Handling

### Resource Exhaustion
- Graceful degradation when limits reached
- Clear error messages for debugging
- Automatic resource cleanup

### Security Violations
- Immediate termination of violating agents
- Audit logging of violations
- No impact on other agents

### Recovery Mechanisms
- Automatic restart capabilities
- State checkpointing (future feature)
- Circuit breaker patterns

## Integration Points

### Management API
- gRPC and REST interfaces
- Agent deployment and control
- Monitoring and metrics

### Observability
- OpenTelemetry integration
- Structured logging
- Performance metrics
- Distributed tracing

### External Tools (via MCP)
- Controlled access to external resources
- Permission-based tool access
- Audit trail of tool usage

## Best Practices

### 1. Agent Design
- Keep agents small and focused
- Use message passing for communication
- Handle resource limits gracefully

### 2. Security
- Use strict policy for untrusted agents
- Regularly audit host function usage
- Monitor resource consumption

### 3. Performance
- Pre-warm agent pools for low latency
- Batch message processing
- Use appropriate resource limits

### 4. Operations
- Monitor agent health
- Set up alerts for resource exhaustion
- Regular security audits

## Future Enhancements

### Planned Features
- WebAssembly Component Model support
- Advanced scheduling algorithms
- State persistence and recovery
- Cross-instance agent migration
- Dynamic resource adjustment

### Research Areas
- Zero-copy message passing
- WASM JIT optimization
- Distributed agent coordination
- Machine learning-based resource prediction