## Developer Update (ElizaOS) — Week of 2026-04-07 to 2026-04-14

This week focused on **hardening the core runtime**, **improving multi-connector message/action reliability (especially TOON + async task actions)**, and **unblocking local development workflows** with a new `agent/` harness. Strategically, work continues to pivot the ecosystem toward **cryptographic identity + agent economics** (wallet tooling, “economic memory”, authorization proposals).

---

## 1) Core Framework

### Runtime observability + safer state composition (merged)
PR: **“feat: Bring Odi logging, Memory lock down, banner, other core enh”**  
https://github.com/elizaos/eliza/pull/6562 (merged 2026-04-08)

Key architecture/runtime changes (TypeScript runtime):

- **Provider execution hardening**
  - `composeState` now enforces **per-provider timeouts (30s)** and continues with empty results on failure.
  - Adds **provider timing profiling** (useful for diagnosing slow providers causing response latency spikes).
- **Action-chain state recomposition optimization**
  - Action chains recompose state using `onlyInclude` to refresh only high-churn slices like `RECENT_MESSAGES` / `ACTION_STATE`, while preserving cached provider data.
- **Context truncation made consistent**
  - Budget-based truncation for action history/results via a shared `sliceToFitBudget(...)`.

### Memory pipeline controls (merged)
Same PR: https://github.com/elizaos/eliza/pull/6562

Adds guardrails for persistence and evaluation:

- `DISABLE_MEMORY_CREATION` disables memory persistence in the message service and also prevents memory-dependent evaluators from running.
- `ALLOW_MEMORY_SOURCE_IDS` allowlists which “sources” are allowed to persist.

These controls matter for:
- privacy-sensitive deployments
- deterministic test harnesses
- connectors where you want responses but no long-term storage

### New dev harness workspace `agent/` (merged)
PR: **“feat: add agent/ like starter in develop”**  
https://github.com/elizaos/eliza/pull/6702 (merged 2026-04-09)

Adds an `agent/` workspace providing a **stdin/stdout REPL** around `@elizaos/core` to boot the repo locally with a character and SQL-backed runtime.

Notable core composition changes included in this PR:
- `loadCharacters` can now accept **JSON file paths** (+ options like `cwd` for relative resolution).
- `createRuntimes` threads a new option: `checkShouldRespond`.

This is a meaningful host-level composition evolution for anyone embedding ElizaOS in a custom runner.

---

## 2) New Features

### Opt-in prompt/response file logging (merged)
PR: https://github.com/elizaos/eliza/pull/6562

Adds **structured file logging** gated by `LOG_FILE`, writing:
- `output.log`
- `prompts.log`
- `chat.log`

This improves debugging across connectors and makes it easier to correlate prompts/responses without scraping stdout.

**Example (enable file logging):**
```bash
export LOG_FILE="./logs/eliza.log"
bun run dev
```

### JSON5-tolerant LLM output parsing (merged)
PR: https://github.com/elizaos/eliza/pull/6562

Adds a JSON5-based extraction helper (`utils/json-llm.ts`) to accept common “almost JSON” outputs (single quotes, trailing commas, code fences). If you have actions/providers that parse structured model output, you’ll see fewer parse failures.

### Consolidated streaming callback type to prevent TTS garbling (merged)
PR: **“fix(core): consolidate StreamChunkCallback, remove dual-extractor CAUSING TTS garbling”**  
(Completed item) https://github.com/elizaos/eliza/pull/6690

Unifies multiple inline `onStreamChunk` definitions into a single canonical `StreamChunkCallback` type alias. This reduces subtle callback-shape mismatches across runtime/model/message-service types that were contributing to **chunk handling bugs** (notably reported as TTS garbling).

Docs touched include:
- `packages/docs/guides/streaming-responses.mdx`
- `packages/docs/runtime/messaging.mdx`
- `packages/docs/runtime/types-reference.mdx`

---

## 3) Bug Fixes (with technical context)

### (Merged) Streaming chunk callback mismatch causing garbled output
PR: https://github.com/elizaos/eliza/pull/6690

**Root problem:** multiple, slightly different `onStreamChunk` callback definitions existed across runtime and model/message-service type layers. Some connectors/models were effectively “dual extracting” or passing incompatible chunk payloads, which produced corrupted downstream handling (commonly showing up as **TTS garbling** or duplicated chunk concatenation bugs).

**Fix:** a single `StreamChunkCallback` is now referenced across the relevant type surfaces, eliminating structural drift.

### (In review / high impact) TOON connectors missing required action params
PR: **“Fix/toon action params”**  
https://github.com/elizaos/eliza/pull/6709 (open at time of report)

Two issues identified while testing Discord/milady-style “TOON encapsulation” connectors:

1) **TOON schema did not request `params`**, so actions with required parameters (e.g., `RUN_IN_TERMINAL.command`) were never populated on connectors using TOON single-shot outputs.  
2) **Async task actions** (e.g., `CREATE_TASK`, `SPAWN_AGENT`) were not considered “terminal”, causing continuation loops to keep firing while the PTY/background task ran, producing noisy filler responses.

If you operate Discord/group connectors and rely on async orchestration actions, track this PR closely.

---

## 4) API Changes (Developer-facing)

### HandlerCallback signature extended (merged)
PR: https://github.com/elizaos/eliza/pull/6562

`HandlerCallback` now accepts an **optional** `actionName`. This is designed for better attribution of responses to producing actions without relying on brittle text parsing.

**Migration note:** This is backward compatible if your callback ignores extra args, but any strict type implementations should update.

**Example:**
```ts
import type { HandlerCallback } from "@elizaos/core";

const cb: HandlerCallback = (content, meta, actionName) => {
  if (actionName) {
    console.log("response came from action:", actionName);
  }
};
```

### Runtime composition utilities expanded (merged)
PR: https://github.com/elizaos/eliza/pull/6702

- `loadCharacters` accepts JSON file paths (and options like `cwd`).
- `createRuntimes` adds `checkShouldRespond`.

**Example (load character from file path):**
```ts
import { loadCharacters, createRuntimes } from "@elizaos/core/runtime-composition";

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

const runtimes = await createRuntimes(characters, {
  checkShouldRespond: true,
});
```

### IMessageService shouldRespond options shape (in flight)
PR: **“feat(core): group addressee routing and anti-loop prompt guidance”**  
https://github.com/elizaos/eliza/pull/6712 (open)

This PR extends `shouldRespond` to accept richer `ShouldRespondOptions` (including parent-message author disambiguation). Not merged yet, but it will be a behavior-shaping change for group chat adapters.

---

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

### Discord/group-room correctness is a primary theme this week
- **TOON params + async continuation suppression** (PR #6709): critical for Discord-style non-streaming connectors and orchestration workflows.
- **Group addressee routing + anti-loop prompt tightening** (PR #6712): aims to stop ping-pong loops and avoid responding to messages addressed to other participants in multi-agent rooms.

PR #6712 introduces:
- `NameVariationRegistry`
- `evaluateGroupAddresseeOverride`
- reply-thread logic using `parentMessageAuthorEntityId`

**Important:** automated review flagged a P1 logic issue in alias resolution for agents where `entityId !== agentId`. If you’re building multi-agent Discord rooms, you should wait for that fix before relying on the new routing layer.  
PR: https://github.com/elizaos/eliza/pull/6712

### Telegram example updated previously as part of core work
The runtime/bootstrap doc and example updates landed in PR #6562, including Telegram model selection notes:
https://github.com/elizaos/eliza/pull/6562

---

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

### OpenRouter plugin: Windows git checkout friction
Repo: `elizaos-plugins/plugin-openrouter`  
PR: https://github.com/elizaos-plugins/plugin-openrouter/pull/25

A Windows-specific fix was initiated to address checkout blocks / filesystem conflicts, improving onboarding for Windows devs using OpenRouter.

### Local model plugins via submodules (merged dev workflow)
PR: https://github.com/elizaos/eliza/pull/6702

Adds submodule-based local dev workflow for:
- `plugin-ollama`
- `plugin-local-ai`
- `plugin-sql`

This is primarily a developer experience move (local-first iteration), but it affects how you may test local model providers and persistence adapters in a monorepo checkout.

---

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

### Latency behavior changes due to provider timeout defaults (merged; verify in your env)
PR: https://github.com/elizaos/eliza/pull/6562

Automated review noted a default change:
- `PROVIDERS_TOTAL_TIMEOUT_MS` default increased **1,000ms → 5,000ms** (if you were relying on the old default for snappy failure, your P99 latency may increase).

**Action:** explicitly set `PROVIDERS_TOTAL_TIMEOUT_MS` in latency-sensitive deployments.

### Memory persistence behavior is now configurable (merged)
PR: https://github.com/elizaos/eliza/pull/6562

If you set:
- `DISABLE_MEMORY_CREATION=true`
- or `ALLOW_MEMORY_SOURCE_IDS=...`

…you can unintentionally change:
- what gets persisted
- whether evaluators run
- how replay/debugging works

**Recommendation:** treat these as environment-level “mode switches” and document them per deployment target (dev vs prod).

### Strategic breaking change (ecosystem direction): messaging deprioritized in favor of cryptographic identity
Issue: **AgentID framework** https://github.com/elizaos/eliza/issues/6688  
Registry issue closure (messaging deprioritized): https://github.com/elizaos-plugins/registry/issues/6418

If you’re migrating V1-style “messaging-first” agents, expect more emphasis in V2 on:
- agent identity proofs
- capability-based authorization proposals
- auditability for economic actions

---

## Additional Ecosystem Notes (Proposals & New Plugins)

### Economic layer + finance tooling proposals (open issues)
- **MAXIA marketplace plugin proposal**: https://github.com/elizaos/eliza/issues/6700  
- **SafeAgent token safety checks**: https://github.com/elizaos/eliza/issues/6706  
- **SINT capability token enforcement proposal**: https://github.com/elizaos/eliza/issues/6707  
- **AIGEN Protocol economy proposal**: https://github.com/elizaos/eliza/issues/6708  

### “Economic memory” plugin (in PR; not merged)
PR: **plugin-mnemopay** https://github.com/elizaos/eliza/pull/6701

This introduces an economic-memory plugin shape (Service + Actions + Provider + Evaluator), but automated review raised significant concerns (notably persistence, NaN corruption risk, null-safety in handlers, and unbounded growth). Track and review carefully before adopting.

### CLI install issue on macOS (open)
Issue: **“elizaos create fails with 'Bun's postinstall script was not run' on macOS”**  
https://github.com/elizaos/eliza/issues/6704

If you support new developers, this is currently a top onboarding footgun. Workarounds are in the issue; longer-term fix likely involves removing `bun` as a runtime dependency in CLI/bootstrap packages.

---

## References / Docs
- Streaming responses guide (updated with StreamChunkCallback consolidation):  
  `packages/docs/guides/streaming-responses.mdx` (repo)  
- Runtime messaging documentation:  
  `packages/docs/runtime/messaging.mdx` (repo)  
- Types reference:  
  `packages/docs/runtime/types-reference.mdx` (repo)

PRs and issues linked inline above.