# ElizaOS Developer Update (2026-04-11 → 2026-04-17)

This week’s work continued the push toward **safer agent runtimes**, **deterministic multi-party routing**, and **agent economic primitives** (wallet + identity + authorization proposals). Below is a technical summary of core changes merged recently (landing in the April window) and high-signal PRs/issues currently in review.

---

## 1) Core Framework (Runtime / Architecture / Plugin System)

### Local dev harness: new `agent/` workspace + runtime composition helpers
Merged: **“feat: add agent/ like starter in develop”** ([elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702))

Key additions for runtime hosts and core integrators:

- **`agent/` REPL harness** (stdin/stdout) for quickly booting `@elizaos/core` with a character and SQL adapter (via `@elizaos/plugin-sql`).
- New **runtime composition API surface** in TypeScript:
  - `loadCharacters(...)` now supports loading **character JSON via file paths** (with `cwd` support for relative resolution).
  - `createRuntimes(...)` adds a `checkShouldRespond` thread-through (host-level control over should-respond evaluation).
- Submodule-driven local plugin workflow (`plugins/plugin-sql`, `plugins/plugin-ollama`, `plugins/plugin-local-ai`) with scripts to manage workspace wiring.

Docs/entry points to review:
- `packages/typescript/src/runtime-composition.ts` (introduced in [#6702](https://github.com/elizaos/eliza/pull/6702))

Example: loading a character from disk (host-side)
```ts
import { loadCharacters, createRuntimes } from "@elizaos/core/runtime-composition";

const characters = await loadCharacters(["./characters/alice.json"], { cwd: process.cwd() });

const { runtimes } = await createRuntimes({
  characters,
  // new in this cycle: host can override should-respond logic
  checkShouldRespond: async (ctx) => {
    // e.g. hard block certain rooms or message sources
    return ctx.roomId !== "blocked-room";
  },
});
```

---

## 2) New Features (with technical detail + examples)

### Observability + runtime hardening (logging, timeouts, safer state composition)
Merged: **“feat: Bring Odi logging, Memory lock down, banner, other core enh”** ([elizaos/eliza#6562](https://github.com/elizaos/eliza/pull/6562))

Highlights that affect production operators and plugin authors:

- **Per-provider timeouts** in `composeState` (30s cap per provider) with timing profiling; failures degrade to empty provider results rather than blocking the whole turn.
- **State recomposition optimization** for action chains via `onlyInclude` (refresh only `RECENT_MESSAGES` / `ACTION_STATE` while keeping other provider caches).
- **Opt-in file logging** gated via `LOG_FILE` (writes `output.log`, `prompts.log`, `chat.log`; includes ANSI stripping + prompt/response correlation).
- Prompt parsing hardening:
  - JSON5-tolerant extraction helper for LLM output (`packages/typescript/src/utils/json-llm.ts`).
- Bootstrap: startup banner and init hook patterns for plugins.

Enable correlated prompt/response logs
```bash
export LOG_FILE="./logs/eliza.log"
# runtime will emit:
# ./logs/output.log
# ./logs/prompts.log
# ./logs/chat.log
bun run dev
```

### Cross-chain wallet plugin (agent financial operations)
Released: **Agent wallet plugin** ([elizaos/eliza#6552](https://github.com/elizaos/eliza)) (noted in weekly repo summary)

Capabilities introduced (high-level API surface; see PR for implementation details):
- Balance checks
- Token swaps
- Cross-chain asset movement between **EVM and Solana**
- Positioned as a building block for the project’s “secure economic layer” direction.

### Registry expansion (ecosystem growth)
Merged in plugin registry (from weekly summary window):
- `@madeonsol/plugin-madeonsol` ([elizaos-plugins/registry#334](https://github.com/elizaos-plugins/registry/pull/334))
- `plugin-signalfuse` ([elizaos-plugins/registry#333](https://github.com/elizaos-plugins/registry/pull/333))
- `@razzgames/elizaos-plugin` ([elizaos-plugins/registry#335](https://github.com/elizaos-plugins/registry/pull/335))

---

## 3) Bug Fixes (critical fixes + context)

### TOON connectors: action params now reliably extracted + async task spam fixed
PR: **“Fix/toon action params”** ([elizaos/eliza#6709](https://github.com/elizaos/eliza/pull/6709)) *(in review/open in provided snapshot)*

Two important runtime-level correctness fixes in `DefaultMessageService`:

1) **TOON schema now includes `params`**
   - Previously, TOON-encapsulated connectors (e.g. Discord connectors using TOON) did not *ask* the LLM for structured params, so actions with required params (e.g. `RUN_IN_TERMINAL.command`) frequently executed with missing inputs.
   - Fix: schema includes `params` so the LLM produces:
     ```json
     {
       "actions": ["RUN_IN_TERMINAL"],
       "params": { "RUN_IN_TERMINAL": { "command": "..." } }
     }
     ```

2) **Async “terminal” actions stop triggering continuation loops**
   - Actions that hand off work to PTY/background sessions (e.g. `CREATE_TASK`, `SPAWN_AGENT`) were not treated as terminal, causing the continuation loop to re-fire and spam filler responses while the real task was still running.
   - Fix: extend `shouldContinueAfterActions` terminal-action set to include async orchestration actions.

If you build connectors:
- Validate your connector’s `preferredEncapsulation` and schema usage with TOON after this lands.
- Verify long-running actions don’t cause follow-up message spam.

### Streaming callback consolidation (TTS garbling prevention)
Merged item: **“consolidate StreamChunkCallback, remove dual-extractor CAUSING TTS garbling”** ([elizaos/eliza#6690](https://github.com/elizaos/eliza/pull/6690))

What changed:
- Multiple inline `onStreamChunk` definitions were unified into a single canonical `StreamChunkCallback` type in `types/components.ts`.
- This reduces inconsistent chunk handling across runtime/model/message-service boundaries, which was contributing to TTS chunk duplication/garbling.

Docs updated (per completed items list):
- `packages/docs/guides/streaming-responses.mdx`
- `packages/docs/runtime/messaging.mdx`
- `packages/docs/runtime/types-reference.mdx`

---

## 4) API Changes (developer-facing modifications)

### `HandlerCallback` extended to include `actionName` (optional)
Merged via [#6562](https://github.com/elizaos/eliza/pull/6562)

- Type change: `HandlerCallback` now accepts an optional `actionName`.
- Impact: callback implementers can attribute a response to the producing action without parsing text.

Before (conceptually):
```ts
type HandlerCallback = (content) => Promise<void>;
```

After:
```ts
type HandlerCallback = (content, meta?: { actionName?: string }) => Promise<void>;
```

**Compatibility note:** It’s optional, so existing callbacks should continue to work, but if you implement a strict signature in a non-TS environment, update accordingly.

### `shouldRespond` options shape + group reply metadata threading (in flight)
PR: **Group addressee routing** ([elizaos/eliza#6712](https://github.com/elizaos/eliza/pull/6712)) *(open)*

- Introduces `ShouldRespondOptions` (including `parentMessageAuthorEntityId`) and threads it through `IMessageService.shouldRespond`.
- Updates `basic-capabilities` to match the new options shape so hosts and plugins stay consistent.

If you override or wrap `shouldRespond`:
- Expect an expanded signature and ensure your adapter passes reply-thread metadata when available.

---

## 5) Social Media Integrations (Twitter / Telegram / Discord / Farcaster)

### Discord + multi-party routing: deterministic addressee resolution (in flight)
PR: [#6712](https://github.com/elizaos/eliza/pull/6712)

- Adds **non-LLM** routing layer for group channels:
  - `NameVariationRegistry`
  - `evaluateGroupAddresseeOverride`
- Uses participant names + adapter metadata (`replyToEntityId`, `inReplyTo`, parent author lookup) to prevent agents from replying in threads not addressed to them and to reduce bot-to-bot “ping-pong” loops.

Known risk flagged in automated review:
- Potential ambiguity bug around `aliasEntity` when `agentId !== entityId`, which can break token→entity resolution and neuter the feature. Track the PR discussion before relying on this in production.

### Telegram example updates
Merged in [#6562](https://github.com/elizaos/eliza/pull/6562):
- Telegram example adjusted (notably around model selection and updated prompt/template behaviors). If you maintain Telegram deployments, re-check example parity against your runtime config.

No Farcaster-specific plugin activity was present in the provided data snapshot.

---

## 6) Model Provider Updates (OpenAI / Anthropic / DeepSeek / OpenRouter / Local)

### OpenRouter plugin: Windows checkout friction
In progress from weekly summary window:
- Windows-specific filesystem/git checkout blocking fix in **plugin-openrouter** ([elizaos-plugins/plugin-openrouter#25](https://github.com/elizaos-plugins/plugin-openrouter/pull/25))

If you develop on Windows and consume provider plugins:
- Prefer pulling the latest plugin-openrouter once [#25](https://github.com/elizaos-plugins/plugin-openrouter/pull/25) lands; it targets smoother onboarding and fewer path/FS conflicts.

### Local provider submodules (dev workflow)
Merged in [#6702](https://github.com/elizaos/eliza/pull/6702):
- `plugin-ollama` and `plugin-local-ai` submodules added to support local model iteration in a workspace-driven dev loop.

---

## 7) Breaking Changes / V1 → V2 Migration Warnings

### 1) Runtime host surface expanded (may break strict wrappers)
From [#6702](https://github.com/elizaos/eliza/pull/6702) and [#6562](https://github.com/elizaos/eliza/pull/6562):

- Hosts relying on older `loadCharacters` behavior must handle **file-path inputs** and potential `cwd` resolution differences.
- If you provide your own message loop / callback wiring, confirm your callback type can accept the new optional `actionName`.

### 2) Memory persistence controls can change evaluator behavior
From [#6562](https://github.com/elizaos/eliza/pull/6562):

New env controls:
- `DISABLE_MEMORY_CREATION`
- `ALLOW_MEMORY_SOURCE_IDS` allowlisting

These can cause:
- **Evaluators to be skipped** when memory creation is disabled (intentional safety behavior).
- Different persistence behavior across connectors depending on `sourceId` assignment.

Recommended migration check:
```bash
# If you depend on evaluators/memory:
unset DISABLE_MEMORY_CREATION
unset ALLOW_MEMORY_SOURCE_IDS

# If you are hardening a production agent:
export DISABLE_MEMORY_CREATION=true
export ALLOW_MEMORY_SOURCE_IDS="user_message,system_event"
```

### 3) Multi-party reply behavior may shift once group routing lands
If you run multiple agents in the same Discord/Telegram rooms:
- Track [#6712](https://github.com/elizaos/eliza/pull/6712); it alters when the agent speaks vs ignores based on deterministic addressee detection + tightened prompts. This is desirable for reducing loops, but it can be a behavioral breaking change for bots previously responding “too eagerly.”

---

## Links (PRs / Issues / Docs referenced)

**Core PRs**
- Runtime hardening + logging + memory controls: [elizaos/eliza#6562](https://github.com/elizaos/eliza/pull/6562)
- Dev harness + runtime composition: [elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702)
- TOON params + async continuation fix (in review): [elizaos/eliza#6709](https://github.com/elizaos/eliza/pull/6709)
- Group addressee routing (in review): [elizaos/eliza#6712](https://github.com/elizaos/eliza/pull/6712)
- Stream chunk callback consolidation: [elizaos/eliza#6690](https://github.com/elizaos/eliza/pull/6690)

**Key issues / proposals**
- Agent marketplace plugin proposal (MAXIA): [elizaos/eliza#6700](https://github.com/elizaos/eliza/issues/6700)
- Capability-token enforcement proposal (SINT): [elizaos/eliza#6707](https://github.com/elizaos/eliza/issues/6707)
- CLI create failure on macOS due to bun postinstall: [elizaos/eliza#6704](https://github.com/elizaos/eliza/issues/6704)
- Token safety plugin proposal (SafeAgent): [elizaos/eliza#6706](https://github.com/elizaos/eliza/issues/6706)
- AIGEN Protocol proposal: [elizaos/eliza#6708](https://github.com/elizaos/eliza/issues/6708)

**Docs updated (selected)**
- Streaming responses: `packages/docs/guides/streaming-responses.mdx`
- Runtime messaging/types references: `packages/docs/runtime/messaging.mdx`, `packages/docs/runtime/types-reference.mdx`

**Plugin ecosystem**
- Registry additions: [registry#333](https://github.com/elizaos-plugins/registry/pull/333), [registry#334](https://github.com/elizaos-plugins/registry/pull/334), [registry#335](https://github.com/elizaos-plugins/registry/pull/335)
- OpenRouter Windows fix: [plugin-openrouter#25](https://github.com/elizaos-plugins/plugin-openrouter/pull/25)