# ElizaOS Developer Update (2026-04-06 → 2026-04-12)

This update summarizes core runtime and developer-experience work landing in `elizaos/eliza` during the week leading into 2026-04-13, plus key developer discussion from Discord.

---

## 1) Core Framework

### Runtime observability + safety hardening (merged)
PR **#6562** “Bring Odi logging, Memory lock down, banner, other core enh” introduced a broad hardening/observability pass across `packages/typescript`:
- **Per-provider timeouts in `composeState`**: providers are now time-boxed (30s) and failures degrade to empty provider results instead of stalling the whole request path.  
  Ref: https://github.com/elizaos/eliza/pull/6562
- **Action-chain state recomposition optimization**: action chains can refresh only specific state slices (`onlyInclude`) while preserving cached provider data, reducing repeated provider calls and prompt bloat.
- **Prompt/response logging gated by env**: opt-in file logging via `LOG_FILE` (writes `output.log`, `prompts.log`, `chat.log` alongside the configured path) to support correlation and debugging across connectors.
- **Memory pipeline controls**:
  - `DISABLE_MEMORY_CREATION` disables persistence in message pipeline and also guards `runtime.evaluate()` to avoid memory-dependent evaluators when persistence is disabled.
  - `ALLOW_MEMORY_SOURCE_IDS` allowlists specific sources when memory creation is enabled (useful for connectors where you only trust certain sources).
- **Bootstrap improvements**: init-hook banner, reply optimization, and reduced spam from “unnamed entities” warnings (per-runtime tracking).
- **New provider**: `ANXIETY` provider was added here (note: later work may modify provider guidance; see PR #6712 below).

> Note: automated review flagged two correctness hazards to watch if you rely heavily on memory + embeddings (zero-vector fallback on embedding failure; and potential allowlist interactions in IGNORE persistence paths). If you run with `ALLOW_MEMORY_SOURCE_IDS`, regression-test memory persistence thoroughly before rolling out broadly.  
> Ref: PR review notes in https://github.com/elizaos/eliza/pull/6562

### Local dev harness + runtime composition utilities (merged)
PR **#6702** adds an `agent/` workspace that acts as a **stdin/stdout REPL harness** for booting a runtime locally, plus new runtime-composition helpers:
- `loadCharacters(...)` now supports loading character definitions from **JSON file paths** (with optional `cwd`).
- `createRuntimes(...)` adds a `checkShouldRespond` option threaded into `AgentRuntime`.

Ref: https://github.com/elizaos/eliza/pull/6702

This is particularly useful for iterating on core runtime behavior without standing up a full connector stack (Discord/Telegram/etc.).

### Group-room addressee routing & anti-loop guidance (open)
PR **#6712** introduces deterministic, non-LLM routing in group rooms:
- Adds `NameVariationRegistry` + `evaluateGroupAddresseeOverride` to determine whether a message is addressed to the agent (or another participant) without invoking an LLM.
- Extends `shouldRespond` options to include `parentMessageAuthorEntityId` to properly handle reply threads.
- Tightens prompt templates (`should_respond*`, `message_handler`, `post_action_decision`) with closure/anti–ping-pong rules.

Ref: https://github.com/elizaos/eliza/pull/6712

> Action item for reviewers: automated review flagged a potential ambiguity bug in `aliasEntity(...)` for cases where `agentId !== entityId`, which could reduce name resolution effectiveness in group rooms. If you run multi-agent rooms with separate IDs, validate this PR in staging before merging.

---

## 2) New Features

### A) Opt-in file logging for prompt/response correlation (merged, #6562)

Enable file logging by setting `LOG_FILE` to a path; ElizaOS will emit structured logs into sibling files:

```bash
export LOG_FILE="./logs/eliza.log"
# produces ./logs/output.log, ./logs/prompts.log, ./logs/chat.log
```

Operationally, this is useful when diagnosing:
- connector message formatting differences
- prompt truncation/budget effects
- provider timeouts and partial composeState results

Ref: https://github.com/elizaos/eliza/pull/6562

### B) Memory persistence controls (merged, #6562)

To fully disable memory creation (e.g., for privacy-sensitive deployments or stateless evaluation environments):

```bash
export DISABLE_MEMORY_CREATION=true
```

To allow memory creation but restrict it to trusted sources:

```bash
export DISABLE_MEMORY_CREATION=false
export ALLOW_MEMORY_SOURCE_IDS="user_message,connector_message,agent_response"
```

(Exact `sourceId` values are connector-dependent; confirm by inspecting connector code or log metadata.)

Ref: https://github.com/elizaos/eliza/pull/6562

### C) `agent/` REPL harness for local runtime iteration (merged, #6702)

Run the local harness from the repo:

```bash
bun run dev
# or:
bun run --cwd agent dev --character ./path/to/character.json
```

The harness composes a runtime using `@elizaos/core` and (by default) wires SQL via `@elizaos/plugin-sql` adapter helpers.

Ref: https://github.com/elizaos/eliza/pull/6702

### D) TOON encapsulation: action params + async terminal actions (in review, #6709)

PR **#6709** fixes a high-friction issue for non-streaming connectors using TOON encapsulation:
- Adds a `params` field to the TOON response schema so the LLM reliably emits action parameters (e.g., `RUN_IN_TERMINAL.command`).
- Prevents noisy continuation loops for async task actions (`CREATE_TASK`, `START_CODING_TASK`, `CODE_TASK`, `SPAWN_AGENT`, `SPAWN_CODING_AGENT`) by treating them as terminal actions.

Ref: https://github.com/elizaos/eliza/pull/6709

---

## 3) Bug Fixes

### Streaming callback consolidation (merged, #6690)
A critical streaming-path bug causing **TTS garbling** was fixed by consolidating multiple `onStreamChunk` definitions into a single canonical callback type (`StreamChunkCallback`). This reduces mismatched streaming chunk handling across runtime/services/types.

Ref (completed item): PR **#6690**  
Docs touched:
- `packages/docs/guides/streaming-responses.mdx`
- `packages/docs/runtime/messaging.mdx`
- `packages/docs/runtime/types-reference.mdx`

### TOON action param loss (pending merge, #6709)
Before #6709, connectors that depended on TOON schema output could fail to invoke actions with required params because the schema never asked the model to return them, leading to silent action failures (e.g., `RUN_IN_TERMINAL` without `command`).

Ref: https://github.com/elizaos/eliza/pull/6709

### Async task continuation spam (pending merge, #6709)
Async task actions that hand off to PTY/background execution could trigger repeated “continuation” cycles, generating filler responses while the actual task ran. #6709 adds these to the terminal-actions set, reducing multi-message spam in connectors (notably Discord-based orchestrations).

Ref: https://github.com/elizaos/eliza/pull/6709

---

## 4) API Changes (Developer-facing)

### `HandlerCallback` extended (merged, #6562)
`HandlerCallback` now accepts an optional `actionName`, allowing connectors/hosts to attribute outputs to actions without content parsing.

Ref: https://github.com/elizaos/eliza/pull/6562

### Runtime composition API additions (merged, #6702)
- `loadCharacters` now supports file paths, not only in-memory objects.
- `createRuntimes` introduces `checkShouldRespond` option plumbing.

Ref: https://github.com/elizaos/eliza/pull/6702

### `shouldRespond` signature evolution (in review, #6712)
PR #6712 updates the message-service `shouldRespond` flow and introduces a `ShouldRespondOptions` type (including `parentMessageAuthorEntityId`). If you implement a custom message service or wrap `shouldRespond`, expect signature changes if/when #6712 merges.

Ref: https://github.com/elizaos/eliza/pull/6712

---

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

### Discord: v2 Socket.IO message protocol (Discord discussion, 2026-04-10)
Developers working with ElizaOS v2 dashboards over Socket.IO confirmed the working pattern:
- Use `socket.emit('message', { type: 1, payload: ... })` for **ROOM_JOINING**
- Use `socket.emit('message', { type: 2, payload: ... })` for **SEND_MESSAGE**
- Authentication requires `entityId: <UUID>` in socket connection options

Context (Discord, 2026-04-10): Shah0406 reported a working setup with:
- `@elizaos/plugin-openai`
- local Qwen3.5 via Nosana GPU (port 3001)
- custom dashboard (port 8080) using Socket.IO + HTTP polling fallback

Docs reference shared in-thread: https://docs.elizaos.ai  
(Team note: current focus is v3; v2 Socket.IO enum/payload docs were requested as an action item.)

### Telegram example touched (merged, #6562)
The Telegram example received updates as part of the larger runtime work (notably around model selection/config). If you maintain a Telegram agent, re-check your env/config alignment after upgrading.

Ref: https://github.com/elizaos/eliza/pull/6562

---

## 6) Model Provider Updates (OpenAI/Anthropic/DeepSeek/etc.)

### Provider timeouts + resilience (merged, #6562)
The runtime now enforces per-provider timeouts (30s) during state composition and continues with empty results on provider failure. This materially affects:
- custom providers that are slow or occasionally hang
- deployments that previously relied on “all providers must succeed” semantics

Ref: https://github.com/elizaos/eliza/pull/6562

### OpenRouter plugin repo: Windows checkout friction (external repo)
A Windows-specific fix was initiated in `elizaos-plugins/plugin-openrouter` to remove artifacts that blocked git checkouts.

Ref: https://github.com/elizaos-plugins/plugin-openrouter/pull/25

---

## 7) Breaking Changes / Migration Notes (V1 → V2)

### V1 → V2: message transport & identity expectations
The Discord discussion highlights a common migration pitfall: **v2 Socket.IO requires an `entityId` UUID for auth**, and message payloads are typed (e.g., join vs send). If you are migrating a custom dashboard/connector from v1-style ad-hoc messaging to v2:
- ensure you are emitting the correct `type` codes and payload shape
- ensure `entityId` is present and correct in socket connection options

Until canonical enums/payload docs are published, developers are currently advised to:
- consult https://docs.elizaos.ai
- inspect the codebase directly (Cursor/code search) for message type enums and payload definitions

### API-level changes you may feel during migration
- Optional `actionName` in callbacks (#6562) may require type updates in strict TS builds if you re-declare callback types.
- Runtime composition helpers and workspace changes (#6702) can affect monorepo-based setups (especially if you pin scripts/workspaces).

---

## Links / References

- PR #6562 (merged): https://github.com/elizaos/eliza/pull/6562  
- PR #6702 (merged): https://github.com/elizaos/eliza/pull/6702  
- PR #6709 (open): https://github.com/elizaos/eliza/pull/6709  
- PR #6712 (open): https://github.com/elizaos/eliza/pull/6712  
- Issue #6704 (“elizaos create fails … Bun postinstall”): https://github.com/elizaos/eliza/issues/6704  
- Issue #6700 (MAXIA marketplace plugin proposal): https://github.com/elizaos/eliza/issues/6700  
- Issue #6706 (SafeAgent token safety plugin proposal): https://github.com/elizaos/eliza/issues/6706  
- Issue #6707 (SINT capability enforcement plugin proposal): https://github.com/elizaos/eliza/issues/6707  
- Issue #6708 (AIGEN Protocol): https://github.com/elizaos/eliza/issues/6708  
- Issue #6710 (MCP server “A” security grade): https://github.com/elizaos/eliza/issues/6710  
- Issue #6711 (delegation chains / scoped authority proposal): https://github.com/elizaos/eliza/issues/6711  
- Docs: https://docs.elizaos.ai  
- OpenRouter Windows fix: https://github.com/elizaos-plugins/plugin-openrouter/pull/25