# Developer Update - July 13, 2025

## Core Framework

The ElizaOS framework received significant enhancements this past week with several architectural improvements and stability fixes:

### Action Chaining
A new action chaining system has been implemented, allowing actions to pass state and return values between them for more complex agent behaviors:

```typescript
// Example action chain usage
const firstAction = async ({ state }) => {
  // Perform initial action
  const result = await someOperation();
  
  // Store in state for next action
  state.set('resultData', result);
  
  return { success: true, data: result };
};

const secondAction = async ({ state }) => {
  // Retrieve data from previous action
  const previousResult = state.get('resultData');
  
  // Use in follow-up operation
  await processData(previousResult);
  
  // Send message to user during action execution
  callback({ type: 'progress', message: 'Processing your data...' });
  
  return { success: true };
};
```

This enables more sophisticated agent workflows with proper state management between actions. The PR also includes comprehensive error handling and validation for action chains ([PR #5490](https://github.com/elizaOS/eliza/pull/5490)).

### Test Utilities
A new `@elizaos/test-utils` package has been added ([PR #5507](https://github.com/elizaOS/eliza/pull/5507)), providing a standardized way to test plugins with a Bun-friendly MockRuntime:

```typescript
import { createMockRuntime } from '@elizaos/test-utils';

describe('My Plugin', () => {
  it('should handle specific events', async () => {
    const runtime = createMockRuntime({
      config: {
        // Test configuration
      }
    });
    
    // Test your plugin logic
    await runtime.sendMessage('Hello, world');
    expect(runtime.lastResponse).toContain('expected text');
  });
});
```

### Configuration Package
A unified configs package has been added to standardize eslint, tsconfig, and prettier configurations across all plugins and projects ([PR #5508](https://github.com/elizaOS/eliza/pull/5508)), reducing boilerplate and ensuring consistent development practices.

## New Features

### Forms Plugin
A powerful new Forms plugin has been added ([PR #5487](https://github.com/elizaOS/eliza/pull/5487)) that allows other plugins to build, update, and cancel user-facing forms:

```typescript
// Create a form with the forms plugin
const formId = await formsPlugin.createForm({
  title: "Project Configuration",
  description: "Set up your new project parameters",
  fields: [
    {
      id: "projectName",
      label: "Project Name",
      type: "text",
      required: true,
      placeholder: "My Awesome Project"
    },
    {
      id: "framework",
      label: "Framework",
      type: "select",
      options: [
        { value: "react", label: "React" },
        { value: "vue", label: "Vue" },
        { value: "svelte", label: "Svelte" }
      ]
    }
  ]
});

// Later, handle form submission
formsPlugin.onSubmit(formId, async (values) => {
  const { projectName, framework } = values;
  // Process the form data
});
```

The forms plugin includes complete database persistence, Zod validation, transaction safety, and comprehensive error handling.

### Image Generation

A new image generation action has been added to the agent pipeline ([PR #5446](https://github.com/elizaOS/eliza/pull/5446)), enabling agents to create images based on conversational context:

```typescript
// Agent can now generate images with:
const result = await agent.generateImage({
  prompt: "A futuristic city with flying cars and neon signs",
  size: "1024x1024"
});
```

### UI Enhancements

Multiple significant UI improvements have been implemented to align with new Figma designs:

- Redesigned agent cards with improved layout and interactions ([PR #5351](https://github.com/elizaOS/eliza/pull/5351))
- Refactored sidebar with better organization and new button placements ([PR #5373](https://github.com/elizaOS/eliza/pull/5373))
- Improved chat component with better styling and message handling ([PR #5349](https://github.com/elizaOS/eliza/pull/5349))
- Enhanced header with dropdown functionality ([PR #5403](https://github.com/elizaOS/eliza/pull/5403))
- Auto-resizing ChatInput textarea for better UX ([PR #5546](https://github.com/elizaOS/eliza/pull/5546))

## Bug Fixes

Several critical bugs have been addressed this week:

### Windows Compatibility

A major issue preventing plugin loading on Windows has been fixed ([PR #5437](https://github.com/elizaOS/eliza/pull/5437)). The problem stemmed from path normalization differences between operating systems and localhost resolution issues:

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

// Fixed approach with cross-platform normalization
const pluginPath = path.normalize(
  path.join(process.cwd(), 'node_modules', pluginName)
).replace(/\\/g, '/');
```

This addresses user reports of `plugin-local-ai` and other plugins failing to load on Windows ([Issue #5499](https://github.com/elizaOS/eliza/issues/5499)).

### SPA Routing

Fixed critical Single Page Application (SPA) routing issues that were causing page refresh failures on non-home routes ([PR #5475](https://github.com/elizaOS/eliza/pull/5475), [PR #5477](https://github.com/elizaOS/eliza/pull/5477)). The solution implements proper history API fallback:

```typescript
// Server route handling to support SPA
app.use((req, res, next) => {
  if (req.method === 'GET' && !req.path.startsWith('/api/') && !req.path.includes('.')) {
    res.sendFile(path.join(clientPath, 'index.html'));
  } else {
    next();
  }
});
```

### Stream Handling

Fixed "stream is not readable" errors in client GUI by removing duplicate Express body parsers that were causing conflicts ([PR #5458](https://github.com/elizaOS/eliza/pull/5458)). This resolves issues when refreshing or creating new chats.

### Plugin Installation

Fixed issues with plugin installation paths for globally installed CLI ([PR #5450](https://github.com/elizaOS/eliza/pull/5450)), preventing potential permission problems and conflicts between projects.

## API Changes

### Environment Variables

Several new environment variables have been added:

- `LOG_TIMESTAMPS`: Controls whether timestamps are displayed in logs ([PR #5430](https://github.com/elizaOS/eliza/pull/5430))
- `ELIZA_UI_ENABLE`: Toggles web UI availability in production environments ([PR #5304](https://github.com/elizaOS/eliza/pull/5304))

The `.env.example` file has been reorganized for better clarity and maintainability ([PR #5372](https://github.com/elizaOS/eliza/pull/5372)), with related configuration sections grouped together.

### Character Configuration

Added V1 to V2 character conversion during JSON import for seamless backward compatibility ([PR #5536](https://github.com/elizaOS/eliza/pull/5536)):

```typescript
// Example of automatic conversion during import
const importCharacter = (jsonData) => {
  if (isV1Character(jsonData)) {
    // Automatically convert to V2 format with plugin matching
    return convertCharacterV1ToV2(jsonData);
  }
  return jsonData;
};
```

## Social Media Integrations

### Twitter Plugin

The Twitter integration has received several updates and fixes:

- Documentation updated to clarify that the free Twitter API tier is not supported ([PR #5408](https://github.com/elizaOS/eliza/pull/5408))
- Fixed rate limiting issues by adding `MAX_CONCURRENT_REQUESTS` and `REQUESTS_PER_MINUTE` parameters

Users have reported issues with the Twitter plugin due to rate limiting, even with `TWITTER_SEARCH_ENABLE=false`. This is because the plugin requires a Pro tier subscription at $200/month to function properly:

```
# Twitter Plugin Configuration
TWITTER_BEARER_TOKEN=your_bearer_token  # Requires Pro tier ($200/month)
TWITTER_SEARCH_ENABLE=false             # Still requires Pro tier for posting
MAX_CONCURRENT_REQUESTS=10              # Limit concurrent API calls
REQUESTS_PER_MINUTE=60                  # Respect rate limits
```

The documentation now explicitly indicates these requirements to avoid confusion.

## Model Provider Updates

### Local AI Improvements

The `plugin-local-ai` has received several fixes and enhancements:

- Better error handling for model loading failures
- Improved logging for clearer troubleshooting
- Active work on resolving Windows compatibility issues ([Issue #5499](https://github.com/elizaOS/eliza/issues/5499))

Users should note that when using Ollama or other local models, larger parameter models (8B+) are recommended to avoid issues like "Could not find XML block in text" errors.

### Google Generative AI

Fixed the Google Generative AI plugin installation during the `elizaos create` command ([PR #5503](https://github.com/elizaOS/eliza/pull/5503)). Previously, the system was trying to install an incorrectly named package.

### LLM Prompt Refinements

Several improvements to the core LLM prompting system have been implemented:

- Enhanced prompt to enforce correct fenced code block formatting ([PR #5525](https://github.com/elizaOS/eliza/pull/5525))
- Refined provider selection to reduce unnecessary provider use and improve response times ([PR #5526](https://github.com/elizaOS/eliza/pull/5526))
- Fixed ambiguity handling in LLM responses, particularly for IGNORE actions ([PR #5528](https://github.com/elizaOS/eliza/pull/5528), [PR #5529](https://github.com/elizaOS/eliza/pull/5529))

## Breaking Changes

### CLI Command Updates

The `--dir` flag has been removed from the `create` command to simplify the interface ([PR #5443](https://github.com/elizaOS/eliza/pull/5443)). Projects are now created in the current directory by default:

```bash
# Old usage (no longer works)
elizaos create --dir my-project

# New usage
cd my-project
elizaos create
```

This may require updates to any scripts or documentation that reference the `--dir` flag.

### Client Distribution Changes

The client distribution has been moved from the CLI package to the server package for better architecture ([PR #5483](https://github.com/elizaOS/eliza/pull/5483)). This should be transparent to most users but may affect custom implementations that directly reference client files.

For more details on these and other updates, please refer to the linked PRs and the [ElizaOS GitHub repository](https://github.com/elizaOS/eliza).