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

## 1) Core Framework

### Runtime hardening, observability, and memory controls (merged)
PR: **“feat: Bring Odi logging, Memory lock down, banner, other core enh”** ([elizaos/eliza#6562](https://github.com/elizaos/eliza/pull/6562), merged 2026-04-08)

Key runtime-level changes developers will feel immediately:

- **Provider execution budget + resilience**
  - `composeState` now enforces **per-provider timeouts** (30s) and continues with partial/empty provider results on timeout/failure rather than failing the whole state composition.
  - Adds provider timing profiling hooks for better latency diagnosis.

- **Action-chain state recomposition optimization**
  - Action-chains recompose state using an `onlyInclude` mechanism to refresh only specific provider slices (notably `RECENT_MESSAGES` / `ACTION_STATE`) while preserving cached provider data.

- **Message pipeline memory gating**
  - New env controls:
    - `DISABLE_MEMORY_CREATION` (hard stop for persistence)
    - `ALLOW_MEMORY_SOURCE_IDS` (allowlist memory writes by `sourceId`)
  - Runtime `evaluate()` now respects memory-disable mode (skipping memory-dependent evaluators that were previously missed).

- **Logging**
  - Optional **file logging** gated by `LOG_FILE`, producing correlated:
    - `output.log`
    - `prompts.log`
    - `chat.log`

- **Bootstrap + runtime ergonomics**
  - New **plugin init hook** and a **bootstrap banner** (plus preview script).
  - `HandlerCallback` extended to include optional `actionName` for attribution.

Docs touched in this PR: `packages/typescript/README.md`, `CHANGELOG.md`, `ROADMAP.md`, `docs/DESIGN.md` and related runtime docs.

---

### New repo-local agent harness + runtime composition utilities (merged)
PR: **“feat: add agent/ like starter in develop”** ([elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702), merged 2026-04-09)

This introduces a first-party local development harness (`agent/`) intended to “boot the repo” and provide a minimal REPL around `@elizaos/core`.

Notable framework-facing changes:

- **Runtime composition API extensions**
  - `loadCharacters` can now accept **JSON file paths** (plus options like `cwd` for relative resolution).
  - `createRuntimes`/`AgentRuntime` add a `checkShouldRespond` hook to thread custom routing policy into the runtime host.

- **Local plugin submodule workflow**
  - Adds git submodules under `plugins/` (e.g., `plugin-sql`, `plugin-ollama`, `plugin-local-ai`) and scripts to link/unlink them for local development:
    - `scripts/dev.mjs`
    - `scripts/plugin-submodules-dev.mjs`
    - `plugin-submodules:restore`

If you maintain a custom host, review this PR for expectations around workspace layout and runtime composition entry points.

---

### In-flight: group addressee routing + anti-loop prompt guidance (open)
PR: **“feat(core): group addressee routing and anti-loop prompt guidance”** ([elizaos/eliza#6712](https://github.com/elizaos/eliza/pull/6712), open)

Adds a deterministic, non-LLM routing layer for group rooms:

- `NameVariationRegistry` + `evaluateGroupAddresseeOverride` to detect whether a message is addressed to **self** vs **other agent** vs **ambiguous**.
- Extends `shouldRespond` with `parentMessageAuthorEntityId` to correctly handle reply threads.
- Tightens `should_respond*` / `message_handler` / `post_action_decision` prompts to reduce ping-pong loops and improve multi-party behavior.

Developer note: automated review flagged a potential ambiguity bug around `aliasEntity` for agents where `entityId !== agentId`. Track progress in the PR discussion before relying on it in production group chat deployments.

---

## 2) New Features

### (A) File-based character loading + multi-runtime creation helpers
Shipped with [#6702](https://github.com/elizaos/eliza/pull/6702).

Example: loading a character via file path and starting the harness-like flow in your own host:

```ts
import { loadCharacters, createRuntimes } from "@elizaos/core/runtime-composition";

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

const runtimes = await createRuntimes({
  characters,
  checkShouldRespond: async (ctx) => {
    // host-defined policy gate (example)
    return ctx.room.isPrivate || ctx.message.includes("@myagent");
  },
});
```

---

### (B) Opt-in prompt/response logging to files
Shipped with [#6562](https://github.com/elizaos/eliza/pull/6562).

Set `LOG_FILE` to enable log emission:

```bash
export LOG_FILE=./logs/eliza.log
# runtime will write output.log, prompts.log, chat.log into ./logs/
```

This is particularly useful when debugging provider timeouts, tool calls, and connector formatting issues.

---

### (C) Safer, controlled memory persistence
Shipped with [#6562](https://github.com/elizaos/eliza/pull/6562).

Recommended patterns:

- Disable memory entirely in “stateless” deployments (e.g., compliance constraints):

```bash
export DISABLE_MEMORY_CREATION=true
```

- Allow only specific sources to persist (useful for connector-heavy setups where you only want curated memory sources):

```bash
export ALLOW_MEMORY_SOURCE_IDS=discord_message,telegram_message,agent_response
```

---

### (D) Socket.IO integration notes for ElizaOS v2 dashboards (community-discovered)
Discord thread: [#💬-coders](https://discord.com/channels/1253563208833433701/1300025221834739744) (2026-04-10)

A community integrator (shah0406) documented the working Socket.IO messaging pattern for an ElizaOS v2 custom dashboard:

- **Do not** rely on “direct emits” per message type
- Use a single `"message"` event with a numeric `type`:
  - `type: 1` → `ROOM_JOINING`
  - `type: 2` → `SEND_MESSAGE`
- Authentication requires `entityId` (UUID) in Socket.IO connection options
- Setup used:
  - `@elizaos/plugin-openai`
  - local **Qwen3.5** served via **Nosana GPU** on `:3001`
  - dashboard on `:8080`
  - Socket.IO with **HTTP polling fallback**

Illustrative client pattern:

```ts
import { io } from "socket.io-client";

const socket = io("http://localhost:8080", {
  transports: ["websocket", "polling"],
  auth: { entityId: "0d3b2d2c-....-...." }, // UUID required
});

socket.emit("message", {
  type: 1, // ROOM_JOINING
  payload: {
    roomId: "room-uuid-or-slug",
  },
});

socket.emit("message", {
  type: 2, // SEND_MESSAGE
  payload: {
    roomId: "room-uuid-or-slug",
    text: "hello from dashboard",
  },
});
```

Action item from Discord: canonical docs for the full message type enum, payload schemas, and programmatic DM channel creation are still missing; see **docs site**: https://docs.elizaos.ai (and consider codebase search as suggested by core devs).

---

## 3) Bug Fixes (with technical context)

### Streaming callback consolidation to prevent TTS garbling (merged)
PR: **“fix(core): consolidate StreamChunkCallback, remove dual-extractor CAUSING TTS garbling”** ([elizaos/eliza#6690](https://github.com/elizaos/eliza/pull/6690))

Fix summary:

- Multiple inline `onStreamChunk` typings across runtime/model/message-service were consolidated into one canonical `StreamChunkCallback`.
- This reduces mismatched chunk extraction behavior that could manifest as **garbled TTS** or inconsistent streaming payload handling across connectors.

Docs updated alongside this fix:
- `packages/docs/guides/streaming-responses.mdx`
- `packages/docs/runtime/messaging.mdx`
- `packages/docs/runtime/types-reference.mdx`

---

### TOON encapsulation: missing action params + async task continuation spam (open)
PR: **“Fix/toon action params”** ([elizaos/eliza#6709](https://github.com/elizaos/eliza/pull/6709), open)

Two high-impact connector/runtime issues were identified while testing Discord/Milady connectors:

1) **TOON schema didn’t request `params`**, so required action parameters (e.g., `RUN_IN_TERMINAL.command`) were not emitted by the LLM → actions failed or executed with empty args.
2) **Continuation loop spam**: async/PTY-backed actions (e.g., `CREATE_TASK`, `SPAWN_AGENT`) returned quickly, but the message service continued looping, generating filler messages until the real task finished.

If you use TOON or async orchestrator actions via Discord-like connectors, track and test this PR closely.

---

## 4) API Changes

### TypeScript runtime callback signature (merged)
From [#6562](https://github.com/elizaos/eliza/pull/6562):

- `HandlerCallback` now accepts an optional `actionName`. Existing callbacks remain compatible, but hosts/connectors can now attribute output to the producing action without parsing text.

Implication: if you wrap callbacks with strict arity checks or serialize callback metadata, validate compatibility.

---

### Runtime composition entry points (merged)
From [#6702](https://github.com/elizaos/eliza/pull/6702):

- `loadCharacters(...)` now supports file paths (not just in-memory objects).
- `createRuntimes(...)` can accept `checkShouldRespond`.

Implication: custom hosts that re-implement runtime composition should rebase onto these helpers or ensure feature parity.

---

### (Pending) `shouldRespond` options shape (open)
From [#6712](https://github.com/elizaos/eliza/pull/6712):

- Introduces a `ShouldRespondOptions` interface including parent author metadata for reply-thread disambiguation.
- Syncs options shape between message service and `basic-capabilities`.

If you override or wrap `shouldRespond`, expect signature changes if/when this merges.

---

## 5) Social Media Integrations

### Discord / group-room behavior
- Group routing improvements are being developed in [#6712](https://github.com/elizaos/eliza/pull/6712) to reduce bot-to-bot loops and avoid responding to messages addressed to other participants.
- Discord connector testing surfaced TOON parameter extraction gaps and async continuation spam; see [#6709](https://github.com/elizaos/eliza/pull/6709).

### Telegram example updates (merged)
- Telegram example code was updated as part of [#6562](https://github.com/elizaos/eliza/pull/6562) (notably around model selection/config). If you maintain a Telegram bot host, diff your setup against repository examples.

No new Twitter/Farcaster-specific plugin changes were recorded in this week’s aggregated data.

---

## 6) Model Provider Updates

### OpenRouter plugin: Windows checkout friction (in progress)
Repo: `elizaos-plugins/plugin-openrouter`  
PR: **Remove PGlite artifacts blocking Windows git operations** ([elizaos-plugins/plugin-openrouter#25](https://github.com/elizaos-plugins/plugin-openrouter/pull/25))

If you develop on Windows and encountered git checkout/path issues, this is the fix to watch.

### Anthropic plugin: temperature/output constraint fix (mentioned in contributor summary)
A contributor summary references an open PR in `elizaos-plugins/plugin-anthropic` (#15) addressing temperature/output constraints. Link not present in the aggregated dataset; check the plugin repo PR list directly if you rely on Anthropic.

### Local model hosting in the wild (Discord)
Community setup reported using **local Qwen3.5 via Nosana GPU**, with ElizaOS v2 and `@elizaos/plugin-openai` acting as the integration surface. This reinforces the need for clearer docs around connector transport protocols (Socket.IO) and message schemas.

---

## 7) Breaking Changes / V1 → V2 (and V2 → “v3” in develop) Migration Warnings

### Streaming typings and chunk processing
If you had custom streaming/TTS code:
- `StreamChunkCallback` was consolidated in [#6690](https://github.com/elizaos/eliza/pull/6690). Re-check any downstream type imports and chunk handling logic.

### Memory persistence behavior is now explicitly configurable
With [#6562](https://github.com/elizaos/eliza/pull/6562):
- Deployments that previously relied on implicit persistence may now accidentally disable or filter memory if env vars are set by infrastructure templates.
- Validate `DISABLE_MEMORY_CREATION` and `ALLOW_MEMORY_SOURCE_IDS` in your deployment environment.

### Provider timeouts can change latency profiles
Provider timeouts and total budget behavior were reworked in [#6562](https://github.com/elizaos/eliza/pull/6562). If you run many providers, expect different P95/P99 behavior and ensure your connector timeouts align.

### “v3” development is active on `develop`
Core devs indicated on Discord (2026-04-10) that focus is currently on “v3” work (noting “Eliza v3 (version 2.x)” is in testing and in the `develop` branch). If you’re building against stable, pin versions and avoid tracking `develop` unless you’re prepared for rapid interface changes.

---

## Links & References

- Docs: https://docs.elizaos.ai
- PRs:
  - Runtime hardening/logging/memory controls: [elizaos/eliza#6562](https://github.com/elizaos/eliza/pull/6562)
  - Local agent harness + runtime composition: [elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702)
  - StreamChunkCallback consolidation: [elizaos/eliza#6690](https://github.com/elizaos/eliza/pull/6690)
  - Group addressee routing (open): [elizaos/eliza#6712](https://github.com/elizaos/eliza/pull/6712)
  - TOON params + async continuation (open): [elizaos/eliza#6709](https://github.com/elizaos/eliza/pull/6709)
  - OpenRouter Windows fix (open): [elizaos-plugins/plugin-openrouter#25](https://github.com/elizaos-plugins/plugin-openrouter/pull/25)
- Discord (Socket.IO + v2 dashboard integration discussion):  
  https://discord.com/channels/1253563208833433701/1300025221834739744