# ElizaOS Developer Update - October 31, 2025

## 1. Core Framework

This week marked significant advancements to the ElizaOS architecture with several major improvements:

- **Unified Messaging API**: PR #6095 introduced a standardized `elizaOS.sendMessage()` interface that eliminates code duplication across client implementations and improves maintainability.

- **New Jobs API**: PR #6098 added a powerful one-off agent messaging API that enables external systems to send single messages to agents and poll for responses without maintaining persistent sessions. The implementation includes full TypeScript support, automatic agent selection, configurable timeouts, and job status tracking.

```typescript
// Sample Jobs API usage
const response = await elizaClient.jobs.ask({
  content: "What is Bitcoin price?",
  userId: "user-123",
  timeoutMs: 30000
});
console.log(response.message.content);
```

- **Multi-Tenant Architecture**: PR #6101 implemented PostgreSQL Row-Level Security (RLS) for true multi-tenant isolation, allowing multiple ElizaOS servers to safely share a single database while maintaining security boundaries.

- **Agent Settings Persistence**: PR #6106 fixed a critical issue with agent settings persistence across restarts, ensuring configuration stability in production environments.

## 2. New Features

### generateText() API

PR #6062 implemented a Promise-based text generation API for direct agent access:

```typescript
// Simple text generation without maintaining a conversation
const result = await agent.generateText("What is ElizaOS?");
console.log(result.text);

// With configuration options
const result = await agent.generateText({
  input: "What is ElizaOS?",
  options: {
    temperature: 0.7,
    includePersonality: false,
    model: "gpt-4o"
  }
});
```

### Cloud Authentication

PR #6100 added a new `elizaos login` CLI command to facilitate cloud authentication:

```bash
# Authenticate with ElizaOS Cloud
elizaos login

# Deploy with authenticated credentials
elizaos deploy my-agent
```

### x402 Payment Integration

PR #6099 added x402 cryptocurrency payment middleware to the Jobs API, enabling pay-per-request AI agent access with flexible authentication modes:

```javascript
// Example configuration
X402_ENABLED=true
X402_WALLET_ADDRESS=0x123...def
X402_PRICE=0.01
X402_NETWORK=base-sepolia
```

## 3. Bug Fixes

### Environment Variable Merging

Fixed a critical issue (PR #6102) where setting `character.settings.secret` would cause `.env` variables to be completely ignored:

```typescript
// Previous behavior: only character settings would be used, .env ignored
// New behavior: proper merging of .env and character-specific settings

// In .env
API_KEY=global-default-key

// In character.ts
export default {
  settings: {
    secrets: {
      API_KEY: "character-specific-key" // Now correctly overrides .env
    }
  }
}
```

### DM Channel Creation

PR #6105 resolved a 403 Forbidden error when creating direct message channels in the GUI client:

```typescript
// Previous implementation
const createChannel = async () => {
  // Incorrect server ID usage caused 403 error
  return api.createDMChannel("wrong-id", agent.id);
}

// Fixed implementation
const createChannel = async () => {
  // Now uses actual server ID from context
  return api.createDMChannel(server.id, agent.id);
}
```

### Bootstrap Message Handling

Fixed issues with the bootstrap plugin's message handling:

- PR #6041 ensured `BOOTSTRAP_KEEP_RESP` works correctly to prevent discarding responses when newer messages arrive.
- PR #6045 fixed bootstrap types to correctly consume the runtime state cache.

## 4. API Changes

### Action Interface Extension

PR #6104 enhanced the `Action` interface to allow custom options via an index signature:

```typescript
interface Action {
  name: string;
  // Other standard fields...
  
  // New support for custom fields
  [key: string]: unknown;
}

// Example usage
const action = {
  name: "fetchData",
  description: "Fetches data from an API",
  customField1: "value1",    // Now supported
  x402Payment: true,         // Now supported
  userContext: { ... }       // Now supported
};
```

### Message Service Interface

PR #6048 introduced a pluggable `IMessageService` with a `DefaultMessageService` implementation:

```typescript
interface IMessageService {
  sendMessage(message: AgentMessage): Promise<string>;
  deleteMessage(messageId: string): Promise<void>;
  clearChannel(channelId: string): Promise<void>;
  shouldRespond(message: AgentMessage): Promise<boolean>;
}
```

## 5. Social Media Integrations

The Twitter/X plugin is being enhanced with media upload support (PR elizaos-plugins/plugin-twitter#45), which will enable agents to post images and other media content directly to Twitter using the Twitter API v2.

A new community project was proposed for Twitter/X profile picture integration:

```javascript
// Connect to Twitter/X API
// Extract user profile pictures
// Apply AI-generated style transformations
// Generate mascots with traits from profile pictures
```

## 6. Model Provider Updates

Work is underway to add support for new model providers:

- Issue #6064 proposes adding n1n.ai API as a model provider
- Issue #6055 requests CometAPI support
- Integration with x402.org enables cryptocurrency payments for model API access

## 7. Breaking Changes

### Token Migration

The ai16z token will migrate to the new multichain ElizaOS token on November 6th, with a 90-day window for completion:

- A dedicated migration portal will be provided (monitor official channels for the link)
- Migration ratio will be fixed with incentives for users who lock tokens
- Exchanges have been notified, but it's recommended to move tokens off exchanges
- Be vigilant about potential scams during migration period - only use official links

### V1 to V2 Migration Notes

- Agent identification now uses UUID-only approach (PR #6036) - duplicate agent names are now allowed
- Zod v4 migration is underway (Issue #5999) with 20-25 planned PRs
- If you're using the deprecated `AgentManager` in your code, replace it with `AgentServer.startAgents()` method
- Previously private message handling is now routed through the runtime message service

For further details on any of these updates, please check the linked PRs and issues on GitHub. As always, reach out in the #core-devs Discord channel for assistance with migration questions.