# Developer Update (ElizaOS) — 2026-04-08 to 2026-04-15

## 1) Core Framework

### Runtime hardening + observability (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 architecture/runtime changes in `packages/typescript`:

- **Provider execution is now bounded and profiled**
  - `composeState` enforces a **per-provider timeout (30s)** and continues with partial provider output on failure.
  - Provider timing profiles are captured to help diagnose slow state composition.

- **Action-chain state recomposition is more incremental**
  - Action chains can recompose state using `onlyInclude` to refresh only volatile slices (notably `RECENT_MESSAGES` / `ACTION_STATE`) while preserving cached provider data.

- **Memory pipeline controls (security & determinism)**
  - New environment-based controls in the message service and runtime evaluation:
    - `DISABLE_MEMORY_CREATION`
    - `ALLOW_MEMORY_SOURCE_IDS` (allowlist)
  - Evaluators are skipped when memory creation is disabled (prevents memory-dependent evaluators from running when persistence is off).

- **File logging (opt-in)**
  - `LOG_FILE` enables writing structured logs to disk (prompt/response correlation supported; ANSI stripping applied).

- **HandlerCallback metadata**
  - `HandlerCallback` now supports an **optional `actionName`** field so hosts/connectors can attribute responses without parsing text.

Docs updated in the same PR: `packages/typescript/README.md`, `CHANGELOG.md`, `ROADMAP.md`, `docs/DESIGN.md`, and runtime docs around messaging/streaming.

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

Introduces a new top-level **`agent/` workspace** intended as a “boot the repo” REPL harness (stdin/stdout) around `@elizaos/core`.

Core framework implications:

- New **runtime composition helpers** in `packages/typescript/src/runtime-composition.ts`:
  - `loadCharacters(...)` now accepts **JSON file paths** + options (incl. `cwd` for relative resolution)
  - `createRuntimes(...)` now supports injecting a `checkShouldRespond` override
  - Helper utilities for settings merging (`mergeSettingsInto`, etc.)

- Dev workflow additions:
  - Scripts for optional plugin submodule local development (`scripts/dev.mjs`, `scripts/plugin-submodules-dev.mjs`, etc.)
  - Git submodules introduced under `plugins/` (e.g., `plugin-sql`, `plugin-ollama`, `plugin-local-ai`) for local iteration

> Note: Review feedback (Greptile) flagged repo/workspace consistency concerns around committing submodule workspace paths and lockfile resolution; if you consume the repo as a workspace, validate `bun install` behavior on a fresh clone.

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

- Multiple inline `onStreamChunk` type definitions were replaced with a single canonical `StreamChunkCallback` (in `types/components.ts`), reducing mismatched streaming callback signatures that caused downstream TTS chunk duplication/garbling in some hosts.

Relevant docs updated:
- `packages/docs/guides/streaming-responses.mdx`
- `packages/docs/runtime/messaging.mdx`
- `packages/docs/runtime/types-reference.mdx`

---

## 2) New Features

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

Enable file logging by setting `LOG_FILE` (path determines output directory). The runtime writes:
- `output.log`
- `prompts.log`
- `chat.log`

Example:

```bash
export LOG_FILE="./logs/eliza.log"
bun run dev
```

Operational notes:
- Logs are **gated** (opt-in) to avoid default side effects.
- Prompt/response correlation is preserved to support debugging tool-call chains and “why did the model do that?” investigations.

### Memory persistence lock-down controls
PR: [#6562](https://github.com/elizaos/eliza/pull/6562)

Two new knobs give hosts a fast “safe mode” for deployments where persistence must be disabled (regulatory, privacy, sandbox testing) while still running message handling:

```bash
# disable all memory writes
export DISABLE_MEMORY_CREATION=true

# optionally allowlist only certain sources (when DISABLE_MEMORY_CREATION is false)
export ALLOW_MEMORY_SOURCE_IDS="user_message,connector_event"
```

Intended use cases:
- Disabling memory during load tests or untrusted connector bring-up
- Restricting persisted memory to only audited sources in finance/ops agents

### `agent/` REPL harness for local runtime bring-up
PR: [#6702](https://github.com/elizaos/eliza/pull/6702)

The new `agent/` workspace provides a minimal host to:
- load a character file
- initialize storage (via `@elizaos/plugin-sql` adapter in the harness)
- route messages through `runtime.messageService`

Typical usage (repo-local):

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

---

## 3) Bug Fixes (critical / high-impact)

### TOON connectors: missing action params + async action continuation loop
PR: **“Fix/toon action params”** ([elizaos/eliza#6709](https://github.com/elizaos/eliza/pull/6709), status: open at time of this update)

Two fixes in `DefaultMessageService` primarily affecting non-streaming connectors using **TOON encapsulation** (e.g., Discord/Milady connector patterns):

1) **Action parameters were never requested in TOON schema**
- Symptom: Actions with required params (e.g. `RUN_IN_TERMINAL.command`) were invoked without arguments, failing silently or degenerating into repeated retries.
- Root cause: TOON schema did not include `params`, so the model was never asked to emit structured action parameters.

2) **Async terminal-style actions caused repeated continuation loops**
- Symptom: Actions that spawn long-running tasks (PTY sessions / orchestrator tasks) caused the continuation loop to keep firing, producing filler/noise responses while the real task ran.
- Fix: Treat `CREATE_TASK`, `START_CODING_TASK`, `CODE_TASK`, `SPAWN_AGENT`, `SPAWN_CODING_AGENT` as “terminal” in `shouldContinueAfterActions`.

If you maintain a connector relying on TOON formatting, track and test against [#6709](https://github.com/elizaos/eliza/pull/6709) closely.

### Streaming TTS garbling from dual extractor callback types
PR: [#6690](https://github.com/elizaos/eliza/pull/6690)

- Consolidating streaming callback types removes subtle mismatches that caused some hosts to process partial tokens twice (or in inconsistent order), producing garbled audio in TTS pipelines.

---

## 4) API Changes (developer-facing)

### `HandlerCallback` signature extended (backward-compatible)
PR: [#6562](https://github.com/elizaos/eliza/pull/6562)

- `HandlerCallback` now accepts an **optional** `actionName` parameter.
- Hosts/connectors can surface structured provenance for responses without content parsing.

Type-level change is additive, but if you implemented strict function type matching, recompile and ensure your callback type accepts the new optional field.

### Runtime composition helpers + character loading
PR: [#6702](https://github.com/elizaos/eliza/pull/6702)

- `loadCharacters` can now accept **file paths** (JSON) and options like `cwd`.
- `createRuntimes` threads a new `checkShouldRespond` option through composition.

If you had a custom host that previously loaded characters only from in-memory objects, you can keep doing so; but if you wrap composition utilities, re-check your imports and call signatures.

### `shouldRespond` options shape expansion (pending in open PR)
PR: **“feat(core): group addressee routing and anti-loop prompt guidance”** ([elizaos/eliza#6712](https://github.com/elizaos/eliza/pull/6712), status: open)

This PR (not merged yet) proposes:
- `ShouldRespondOptions` including `parentMessageAuthorEntityId`
- Router metadata merging from message content
- Syncing `basic-capabilities` shouldRespond call signature with the message service

If your connector sets reply-thread metadata, you’ll likely want to adopt these fields once merged.

---

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

### Discord / group-room behavior: addressee routing + anti-loop guidance (in review)
PR: [#6712](https://github.com/elizaos/eliza/pull/6712)

- Adds deterministic, non-LLM addressee resolution for group channels (reply threads + “addressed-to-other” handling).
- Tightens prompts to reduce ping-pong loops and improve multi-party etiquette.

**Known issue (must fix before merge):**
- Review notes flagged a potential ambiguity bug in `aliasEntity(...)` that can break address resolution when `entityId !== agentId`. Track discussion in [#6712](https://github.com/elizaos/eliza/pull/6712).

### Telegram example updates
PR: [#6562](https://github.com/elizaos/eliza/pull/6562)

- Example adjustments include model selection/bootstrapping updates (see `examples/telegram/typescript/telegram-agent.ts` in that PR).

### Messaging protocol strategy note (ecosystem direction)
From the prior weekly project summary (Apr 5–11): messaging protocols like XMTP were formally deprioritized in favor of **AgentID (cryptographic identity)** workstreams (see discussion references in [elizaos/eliza#6688](https://github.com/elizaos/eliza/issues/6688) and registry issue closure context).

---

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

### OpenRouter plugin: Windows git checkout friction
Repo: `elizaos-plugins/plugin-openrouter`  
PR: **Fix Windows-based git checkout blocks** ([elizaos-plugins/plugin-openrouter#25](https://github.com/elizaos-plugins/plugin-openrouter/pull/25))

- Addresses filesystem conflicts that prevented clean checkout / install on Windows environments.
- If you support Windows devs, validate your workspace and path-length assumptions against this fix.

### Bootstrap provider set changed: “ANXIETY” provider introduced, then removed in follow-on work
- Introduced (merged): [#6562](https://github.com/elizaos/eliza/pull/6562) adds an `ANXIETY` provider registered by default (verbosity guidance).
- Proposed removal (open): [#6712](https://github.com/elizaos/eliza/pull/6712) removes prior ANXIETY provider guidance while tightening decision prompts.

If you were relying on ANXIETY provider text in prompts for response shaping, watch [#6712](https://github.com/elizaos/eliza/pull/6712) and consider pinning templates until behavior stabilizes.

---

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

No explicit “V2 cutover” PR landed this week, but several changes can **function as breaking changes** depending on how you host ElizaOS:

### Prompt format migration (XML → TOON) can change downstream parsing expectations
PR: [#6709](https://github.com/elizaos/eliza/pull/6709) includes broad template migration work alongside the TOON param fix. If you:
- scrape model output assuming XML key/value blocks, or
- post-process action selection via regex,

…you should validate behavior against TOON outputs and the updated parsing path.

### Latency regression risk: provider total timeout default shift
PR: [#6562](https://github.com/elizaos/eliza/pull/6562) introduced provider timeout changes; review commentary flagged that `PROVIDERS_TOTAL_TIMEOUT_MS` default increased (noted in PR review). If you run latency-sensitive production agents, re-baseline:
- P95/P99 response latency
- provider timeouts and fallbacks (partial state composition behavior)

### Memory persistence semantics changed
PR: [#6562](https://github.com/elizaos/eliza/pull/6562)

- `DISABLE_MEMORY_CREATION` can now suppress evaluator execution and memory writes; if you have evaluators that must always run (even without persistence), you may need to refactor them to be persistence-independent.

### **Known/flagged correctness issues to watch (post-merge hardening needed)**
From review notes on [#6562](https://github.com/elizaos/eliza/pull/6562):
- **IGNORE-path persistence + allowlist edge case**: risk of silently dropping IGNORE memories when `ALLOW_MEMORY_SOURCE_IDS` is set (validate your configuration and desired behavior).
- **Embedding failure fallback**: risk of storing memories with a zero-vector embedding (can make entries unretrievable via similarity search).

These are not formal “V1→V2” breaks, but they can break production assumptions about memory recall and audit trails. Track follow-up fixes in the PR thread and subsequent issues/PRs.

---

### References
- Core PRs:
  - [#6562](https://github.com/elizaos/eliza/pull/6562) — runtime hardening, logging, memory controls
  - [#6702](https://github.com/elizaos/eliza/pull/6702) — `agent/` harness + runtime composition helpers
  - [#6690](https://github.com/elizaos/eliza/pull/6690) — streaming callback consolidation
  - [#6712](https://github.com/elizaos/eliza/pull/6712) — group addressee routing (open)
  - [#6709](https://github.com/elizaos/eliza/pull/6709) — TOON action params + async action loop fix (open)
- Issues worth tracking:
  - Agent identity / trust direction: [#6688](https://github.com/elizaos/eliza/issues/6688)
  - CLI bootstrap failure on macOS (bun postinstall): [#6704](https://github.com/elizaos/eliza/issues/6704)
- Plugin ecosystem:
  - OpenRouter Windows fix: [plugin-openrouter#25](https://github.com/elizaos-plugins/plugin-openrouter/pull/25)