# ElizaOS Developer Update
**Week of October 22-29, 2025**

## 1. Core Framework

### MessageService Interface and Implementation
The team has integrated a pluggable message service architecture, making the message handling system more modular and extensible. This major architectural change allows developers to implement custom message handling logic while maintaining compatibility with the core framework.

```typescript
// Example of using the new MessageService
const customMessageService: IMessageService = {
  shouldRespond: async (message, context) => {
    // Custom response logic
    return { shouldRespond: true, reason: "Custom logic" };
  },
  // ... other methods
};

// Register with runtime
runtime.registerMessageService(customMessageService);
```

### Environment Variable Handling Improvements
PR #6102 fixed a critical bug where setting `character.settings.secret` would cause `.env` variables to be completely ignored. The solution implements a "smart merge" approach that properly combines global defaults and character-specific overrides.

```typescript
// Now correctly merges environment variables from multiple sources
// 1. .env file variables (base defaults)
// 2. character.settings.secrets (character-specific overrides)
// 3. runtime environment variables (highest priority)
```

### Optional Embedding Service
The embedding service is now optional when no `TEXT_EMBEDDING` model is configured, optimizing resource usage for deployments that don't require vector embeddings.

## 2. New Features

### x402 Middleware Integration
A major development effort is underway to implement x402 middleware, which will enable cryptocurrency payments for accessing ElizaOS agents and APIs. The middleware will be available for all plugin routes upon runtime registration.

```typescript
// Example of x402 middleware configuration
const x402Config = {
  enabled: process.env.X402_ENABLED === 'true',
  walletAddress: process.env.X402_WALLET_ADDRESS,
  price: process.env.X402_PRICE || '0.01', // Default: $0.01 
  network: process.env.X402_NETWORK || 'base-sepolia',
  useMainnet: process.env.X402_USE_MAINNET === 'true'
};
```

### Jobs API for One-Off Agent Messaging
A comprehensive Jobs API has been implemented (PR #6098) for stateless integrations, enabling external systems to send single messages to agents and poll for responses without maintaining persistent sessions.

```typescript
// Example usage with the API client
import { ElizaClient } from '@elizaos/api-client';

const client = new ElizaClient({ baseUrl: 'http://localhost:3000' });

// Simple usage
const result = await client.jobs.ask("What is the weather in New York?");
console.log(result.content); // "The weather in New York is..."

// Advanced usage with options
const job = await client.jobs.create({
  userId: "user-123",
  content: "What's the Bitcoin price?",
  metadata: { source: "dashboard" },
  timeoutMs: 60000 // 60 seconds
});

// Poll for result
const result = await client.jobs.poll(job.jobId);
```

### Unified Messaging API
A new unified messaging API has been implemented through PR #6095, providing a consistent interface for sending messages across all ElizaOS integrations:

```typescript
// New unified messaging API
await elizaOS.sendMessage({
  content: "Hello, agent!",
  userId: "user-123",
  channelId: "channel-456",
  metadata: { source: "api" }
});
```

## 3. Bug Fixes

### Character Settings and Environment Variables
A significant bug was fixed where setting `character.settings.secret` would cause `.env` variables to be ignored. This affected configuration merging between global defaults and character-specific overrides. The fix implements a smart merge solution that properly combines values from all sources.

### Bootstrap Message Handling
Several fixes to the bootstrap plugin have improved message handling:
- Fixed `BOOTSTRAP_KEEP_RESP` to work correctly in all message flow paths
- Improved handling of evaluation messages to prevent disruption of main conversation flow
- Resolved issues with missing thought content in action completion events

### Session API Responses
Fixed a bug in the session API where `channelId` was missing from responses, which was causing reliability issues with WebSocket connections.

## 4. API Changes

### generateText API
A new direct text generation API has been added to simplify one-off text generation without the complexity of full agent conversations:

```typescript
// New direct text generation API
const response = await runtime.generateText({
  prompt: "Explain quantum computing in simple terms",
  modelName: "openai/gpt-4o" // Optional
});

console.log(response); // "Quantum computing is..."
```

### Agent Identification Changes
The system now uses UUID-only agent identification, meaning:
- Agent names are no longer required to be unique
- All internal references use UUID rather than name
- This change allows multiple agents with the same display name but different functionality

## 5. Social Media Integrations

### Protocol 8004 Development
The team is working on various token utility angles for protocol 8004, with plans to have a functional MVP ready for Devcon in mid-November. This will significantly enhance the platform's cryptocurrency and token integration capabilities.

### x402.org Integration
Discussion about potential integration between ElizaOS and x402.org is ongoing, with reference to an interview ElizaOS conducted with Erik Reppel (creator of x402.org). This integration would expand the payment capabilities of ElizaOS agents.

## 6. Model Provider Updates

### OpenRouter Integration Enhancements
The team has improved the OpenRouter plugin with better multi-step bootstrapping, plugin relay capabilities, and web search integration. This provides more flexible deployment options for different environments.

### Voice Synthesis Alternatives
The team is exploring alternatives to ElevenLabs for voice synthesis, including neutts-air, which could provide more efficient voice generation options.

## 7. Breaking Changes

### V1 to V2 Migration Notes

#### UUID-Only Agent Identity
Agents now use randomly generated UUIDs for identification rather than names:
```typescript
// Old: Reference by name (no longer reliable for programmatic access)
const agent = await getAgentByName("MyAgent");

// New: Reference by UUID (guaranteed unique)
const agent = await getAgentById("550e8400-e29b-41d4-a716-446655440000");
```

#### MessageService API
If you've built custom message handling logic, you'll need to migrate to the new MessageService interface:
```typescript
// Old approach (no longer supported)
runtime.registerProvider("shouldRespond", myCustomProvider);

// New approach
runtime.registerMessageService({
  shouldRespond: myCustomShouldRespondFunction,
  // other methods...
});
```

#### Anthropic Claude Dependencies Removed
The CLI no longer includes Anthropic Claude dependencies. If your project relies on these, you'll need to add them explicitly:
```bash
# If you were using Claude-specific features, add the dependency
npm install @anthropic-ai/claude-code
```

Remember to check the complete documentation before upgrading to avoid disruption to your agents or applications.