# ElizaOS Developer Update - Week of July 3 to July 9, 2025

## Core Framework

We're thrilled to announce the upcoming **ElizaOS V2** release with significant architectural improvements across the platform. The core has been redesigned for enhanced performance, featuring:

- **TEE Enhancements**: Secure enclave transaction processing with improved verification logic
- **Swarm Architecture**: Multi-agent coordination system allowing teams of agents to self-complete complex tasks
- **Dynamic Memory System**: Enhanced persistence layer enabling agents to recall user preferences across sessions
- **Cross-chain Support**: New architecture supporting multiple blockchains with 5-minute setup time
- **Performance Optimizations**: System-wide improvements yielding 40% lower latency

The deployment framework has also been expanded with two deployment options:
- **eliza-remote**: Our established remote deployment project
- **elizify**: A new containerized deployment solution with Mattermost integration and Coolify compatibility

```bash
# Deploy using elizify with Docker Compose
git clone https://github.com/elizaOS/elizify
cd elizify
docker-compose up
```

## New Features

### Action Chaining

The V2 release introduces action chaining for more complex agent workflows:

```typescript
// Example of action chaining in V2
const weatherAction = await agent.createAction({
  name: "getWeather",
  description: "Get current weather for a location",
  handler: async (params) => {
    const { city } = params;
    return await weatherAPI.fetch(city);
  }
});

const plannerAction = await agent.createAction({
  name: "planOutdoorActivity",
  description: "Plan activity based on weather",
  chainedActions: [weatherAction], // Chain the weather action
  handler: async (params, context) => {
    const { city, preference } = params;
    const weather = context.actionResults.getWeather;
    
    return planActivities(weather, preference);
  }
});
```

### Image Generation Action

A new built-in action has been added for image generation based on conversational context:

```typescript
// Using the new image generation action
import { generateImageAction } from '@elizaos/core';

// Register with your agent
agent.registerAction(generateImageAction);

// In your character configuration:
{
  actions: ["generateImage"],
  // Agent can now create images during conversation
}
```

### RAG Capabilities

V2 includes a powerful Retrieval-Augmented Generation system with:
- Instant document retrieval
- Automatic source citations
- Document chunking and embedding optimization

## Bug Fixes

### Windows Plugin Loading Fixed

A critical bug preventing plugin loading on Windows has been resolved in PR [#5437](https://github.com/elizaOS/eliza/pull/5437). The issue stemmed from path normalization differences between Unix and Windows systems:

```typescript
// Previous problematic code (simplified)
const pluginPath = path.join(process.cwd(), 'node_modules', pluginName);

// Fixed implementation
const pluginPath = path.normalize(
  path.join(process.cwd(), 'node_modules', pluginName)
);
```

This fix ensures `plugin-openai` and `plugin-bootstrap` load correctly on Windows environments.

### API Client Unwrapped Responses

PR [#5343](https://github.com/elizaOS/eliza/pull/5343) fixed a critical bug in `BaseApiClient` that was causing "Unknown error" responses. The client now correctly handles unwrapped server responses:

```typescript
// Previous implementation
try {
  const response = await fetch(...);
  const data = await response.json();
  
  if (!response.ok) {
    throw new Error('Unknown error');
  }
  
  return data.data; // Would fail when response wasn't wrapped
} catch (error) {
  // Error handling
}

// Fixed implementation
try {
  const response = await fetch(...);
  const data = await response.json();
  
  if (!response.ok) {
    throw new Error(data.error || 'Unknown error');
  }
  
  // Properly handle both wrapped and unwrapped responses
  return data.data !== undefined ? data.data : data;
} catch (error) {
  // Error handling
}
```

### SPA Routing for Global CLI Installations

PR [#5479](https://github.com/elizaOS/eliza/pull/5479) fixed Single Page Application routing failures when refreshing non-home routes with globally installed CLI:

```typescript
// Route handling enhancement
app.use('*', (req, res, next) => {
  // Skip API routes
  if (req.originalUrl.startsWith('/api')) {
    return next();
  }

  // Serve index.html for all other routes to support client-side routing
  const indexPath = path.join(clientPath, 'index.html');
  if (fs.existsSync(indexPath)) {
    return res.sendFile(indexPath);
  }
  
  next();
});
```

## API Changes

### Environment Variable Configuration

A new `LOG_TIMESTAMPS` environment variable has been added to control timestamp visibility in logs:

```
# Default is true (timestamps shown)
LOG_TIMESTAMPS=false
```

Additionally, the `ELIZA_UI_ENABLE` environment variable now allows toggling web UI availability in production:

```
# Disable the web interface completely
ELIZA_UI_ENABLE=false
```

### Chat API Refactoring

The DM channel creation logic has been refactored to fetch live message counts rather than relying on potentially stale cached data:

```typescript
// Updated approach for DM channel decisions
const shouldCreateNewChannel = async (agentId) => {
  // Directly query the database for accurate message count
  const messageCount = await db.messages.count({
    where: { channelId: existingChannel.id }
  });
  
  return messageCount > 0 || forceNew;
};
```

## Social Media Integrations

### Twitter Plugin Updates

The Twitter plugin documentation has been significantly improved in PR [#5408](https://github.com/elizaOS/eliza/pull/5408), clarifying authentication requirements:

```javascript
// Twitter API v1.1 authentication (recommended)
TWITTER_API_KEY=your-api-key
TWITTER_API_SECRET_KEY=your-api-secret
TWITTER_ACCESS_TOKEN=your-access-token
TWITTER_ACCESS_TOKEN_SECRET=your-access-token-secret

// Example Twitter plugin usage
const twitterPlugin = await agent.usePlugin('@elizaos/plugin-twitter');
await twitterPlugin.tweet('Hello world from ElizaOS agent!');
```

The documentation now explicitly warns about API limitations, including the severe restriction of only 1 DM per day on the basic tier, making it essentially unusable for agent interactions.

## Model Provider Updates

### Image Generation Support

The model provider system now supports image generation via the `ModelType.IMAGE` type:

```typescript
// Using an image generation model
const result = await useModel({
  modelKey: 'openai:dall-e-3',
  modelType: ModelType.IMAGE,
  prompt: 'A futuristic city with flying cars and neon lights',
  modelParams: {
    size: '1024x1024',
    quality: 'standard'
  }
});
```

## Breaking Changes

### V1 to V2 Migration

As we prepare for the V2 release, be aware of these breaking changes:

1. **Character Files**: The V2 format includes new fields for swarm coordination and dynamic memory. We're developing a character file migrator (issue [#5452](https://github.com/elizaOS/eliza/issues/5452)) to assist with the transition:

```typescript
// V1 character format
{
  name: "Agent",
  description: "A helpful agent",
  instructions: "Be concise and accurate"
}

// V2 character format
{
  name: "Agent",
  description: "A helpful agent",
  instructions: "Be concise and accurate",
  // New V2 fields
  memoryConfig: {
    retentionPolicy: "persistent",
    recallStrategy: "relevance"
  },
  swarmCapabilities: {
    canDelegate: true,
    canCoordinate: true
  }
}
```

2. **Plugin System**: The V2 plugin architecture requires updates to custom plugins:

```typescript
// V1 plugin structure
export default {
  name: "my-plugin",
  version: "1.0.0",
  actions: [...],
  providers: [...]
}

// V2 plugin structure
export default {
  name: "my-plugin",
  version: "2.0.0",
  actions: [...],
  providers: [...],
  // New V2 fields
  swarmIntegration: {
    capabilities: [...],
    protocols: [...]
  },
  memoryProvider: { ... }
}
```

Join us for a live demo of ElizaOS V2 tomorrow, July 9, 2025, where we'll showcase all these new capabilities.