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

This week focused on (1) hardening the core runtime + message pipeline, (2) improving local developer ergonomics (new `agent/` harness + runtime composition helpers), and (3) restoring provider/plugin compatibility (notably Anthropic Opus 4.x via ai-sdk v6 semantics). Discord discussions also surfaced deployment pathways (Hatcher.host) and open questions around agent safety + the emerging `elizabao_ai` effort.

---

## 1) Core Framework (architecture / plugin system / agent runtime)

### Runtime observability & message-pipeline hardening (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 core/runtime changes developers will notice:

- **Provider execution timeouts + profiling**
  - `composeState` now enforces a **per-provider ~30s timeout** and continues state composition with empty provider results on failure (reduces “one provider stalls the whole turn” incidents).
- **Action-chain state recomposition optimization**
  - Introduces `onlyInclude` recomposition to refresh just `RECENT_MESSAGES` / `ACTION_STATE` while preserving other cached provider data.
- **Memory persistence controls**
  - New env gates: `DISABLE_MEMORY_CREATION` + `ALLOW_MEMORY_SOURCE_IDS` allowlisting.
  - `runtime.evaluate()` now respects `DISABLE_MEMORY_CREATION` (previously missed in at least one path).
- **Logging: opt-in file logging**
  - `LOG_FILE` enables structured prompt/response/chat logs written alongside `LOG_FILE` (e.g. `output.log`, `prompts.log`, `chat.log`) with correlation and ANSI stripping.
- **Bootstrap enhancements**
  - Startup banner (plugin `init` hook + preview script).
  - New **`ANXIETY` provider** registered by default (verbosity guidance injection).

Docs touched in the same PR include runtime design notes and updated README sections (see repo docs in `packages/typescript/docs/DESIGN.md` and `packages/typescript/README.md` via the PR).

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

This adds a first-party REPL harness under `agent/` for booting a runtime quickly during core development:

- `agent/` workspace provides a stdin/stdout loop around `@elizaos/core`.
- Adds/extends **runtime composition APIs**:
  - `loadCharacters` now accepts **file paths** + options (e.g. `cwd`).
  - `createRuntimes` adds a new `checkShouldRespond` option threaded into `AgentRuntime` composition.

> Note: This PR also introduced a submodule-oriented local-dev workflow for `plugin-sql`, `plugin-ollama`, and `plugin-local-ai` under `plugins/`, plus helper scripts (see `scripts/dev.mjs`, `scripts/plugin-submodules-dev.mjs`). If you are a core contributor working from the monorepo, review the workflow before relying on workspace paths.

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

- Replaces multiple inline `onStreamChunk` shapes with a canonical `StreamChunkCallback` type alias.
- Addresses a real-world regression where mismatched chunk extractors caused **TTS garbling** in streaming connectors.
- Updates docs: `packages/docs/guides/streaming-responses.mdx`, `packages/docs/runtime/messaging.mdx`, and types references.

---

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

### A) File-based character loading in runtime composition
Shipped via **#6702**, `loadCharacters` can now take JSON file paths (useful for hosts that want “character packs” on disk rather than bundled JS objects).

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

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

const runtimes = await createRuntimes({
  characters,
  // new hook point for hosts that want to centralize shouldRespond logic
  checkShouldRespond: async (ctx) => {
    // ctx contains message + routing metadata (connector-dependent)
    return true;
  },
});
```

**Why it matters:** host apps (or deployment platforms like Hatcher.host) can mount character JSONs without rebuilding images/packages.

### B) Opt-in file logging for prompts/responses (core observability)
Shipped via **#6562**.

```bash
# Write logs into ./logs (and create output.log/prompts.log/chat.log there)
export LOG_FILE=./logs/output.log
```

This is particularly useful when debugging:
- provider latency spikes (paired with provider timing info),
- prompt regressions after template changes,
- action loops / “why did it respond?” behavior.

### C) Memory persistence allowlisting
Shipped via **#6562**.

```bash
# Disable memory creation globally (e.g., for high-risk deployments)
export DISABLE_MEMORY_CREATION=true

# Or allow only specific sources to persist (example IDs; choose your own)
export DISABLE_MEMORY_CREATION=false
export ALLOW_MEMORY_SOURCE_IDS=connector_message,tool_result,system_note
```

**Intended use cases:**
- reduce storage/PII footprint,
- enforce “stateless” agents in regulated environments,
- isolate memory to audited sources only.

### D) Local REPL harness for core development (`agent/`)
Shipped via **#6702**. For core contributors iterating inside the monorepo:

```bash
bun run dev
# then interact via stdin; configure with flags like --character and --log-level
```

(Exact flags and scripts are defined in `agent/package.json` and `scripts/dev.mjs` from the PR.)

---

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

### A) Streaming chunk callback mismatch (TTS garbling)
**PR:** [#6690](https://github.com/elizaos/eliza/pull/6690)

**Root cause:** multiple competing `onStreamChunk` signatures and “dual extractor” implementations across runtime/message/types led to inconsistent chunk parsing. In streaming connectors feeding TTS, this manifested as duplicated/malformed text segments.

**Fix:** consolidate around a single `StreamChunkCallback` type, update runtime + message service + docs accordingly.

### B) Connector action execution failures in TOON encapsulation (pending merge)
**PR:** “Fix/toon action params” ([elizaos/eliza#6709](https://github.com/elizaos/eliza/pull/6709), open)

Two high-impact connector-facing bugs are addressed (tested end-to-end with Discord via milady):

1. **Missing action params in TOON schema**
   - Non-streaming connectors using TOON weren’t prompting the LLM to emit required `params`, so actions like `RUN_IN_TERMINAL` never received required arguments.
2. **Continuation-loop spam for async task actions**
   - Async PTY-backed actions (e.g. `CREATE_TASK`, `SPAWN_AGENT`) were not treated as terminal, causing the continuation loop to fire repeatedly and generate filler responses while the task executed.

If you build Discord/milady-style connectors, track this PR closely.

### C) Reliability + latency controls in state composition (merged)
**PR:** [#6562](https://github.com/elizaos/eliza/pull/6562)

Provider-level timeouts and timer cleanup reduce tail latency and prevent “stuck turn” behavior when a single provider hangs.

> Known-risk callout (from automated review notes): some merged changes touch memory persistence edge-cases (e.g. IGNORE persistence interactions with allowlists) and embedding failure behavior. If you rely heavily on memory search quality and/or IGNORE persistence semantics, consider adding regression tests around your deployment’s exact env var configuration.

---

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

### A) `HandlerCallback` extended with `actionName` (backward compatible)
**PR:** [#6562](https://github.com/elizaos/eliza/pull/6562)

`HandlerCallback` now accepts an optional `actionName`, enabling connectors/hosts to attribute assistant output to the originating action without brittle content parsing.

```ts
const callback: HandlerCallback = (message, meta, actionName) => {
  if (actionName) {
    console.log("Produced by action:", actionName);
  }
};
```

### B) Runtime composition API extensions (`loadCharacters`, `createRuntimes`)
**PR:** [#6702](https://github.com/elizaos/eliza/pull/6702)

- `loadCharacters(...)` now supports file path inputs + options (e.g. `cwd`).
- `createRuntimes(...)` adds `checkShouldRespond` plumbing for hosts that want centralized response gating.

### C) Streaming API typing consolidation
**PR:** [#6690](https://github.com/elizaos/eliza/pull/6690)

- Canonical `StreamChunkCallback` replaces multiple ad-hoc shapes across TypeScript (and corresponding Python types updated).

---

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

### Discord
- **In progress:** Feature parity improvements for the Discord plugin (typing indicators, reactions, streaming, slash commands) were flagged in project summaries as active work. No merged PR was included in this week’s aggregated feed, but it’s an area to watch if you ship interactive Discord agents.

- **Connector reliability:** TOON action-param + async terminal action fixes are addressed in the open core PR [#6709](https://github.com/elizaos/eliza/pull/6709), discovered while testing a Discord connector.

### Telegram
- **In progress:** UI refinement to narrow chat display names for better layout (mentioned as WIP in daily project summary for 2026-04-09). If you maintain custom Telegram UIs, anticipate small layout changes.

### Twitter / Farcaster
- No specific merged updates were captured in this week’s feed.

### Deployment note (community)
- Developers are deploying agents via **Hatcher.host** (free beta), a no-code/serverless platform that supports integrations like **Groq** and provides live logs (Discord discussion 2026-04-07 to 2026-04-09).
  - Threads: [Discord discussion](https://discord.com/channels/1253563208833433701/1253563209462448241)

---

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

### Anthropic plugin: Opus 4.x compatibility + ai-sdk v6 parameter naming
Per the 2026-04-09 project summary, the Anthropic integration was updated to restore compatibility with **Opus 4.x** by aligning with **ai-sdk v6** conventions, notably:

- `maxTokens` → `maxOutputTokens`
- temperature adjustments to stabilize output

If you have custom provider wrappers or pass-through configs, ensure your model configuration uses the new parameter name where applicable.

### Reliability work (community)
- The **ai-news data regeneration** workstream is adding **fallback models** and monitoring for credit usage (Discord 2026-04-07).

---

## 7) Breaking Changes (V1 → V2 migration warnings)

Eliza “v3” (internally aligned with the **2.x** line) is actively under development and present in `develop` (Discord 2026-04-08). Expect migration friction in hosts and plugins that depend on stable runtime composition or message-service semantics.

**High-signal areas to review before upgrading V1 → V2 / v3 (2.x):**

- **Runtime composition changes**: `loadCharacters` file-path support and `createRuntimes.checkShouldRespond` (merged via [#6702](https://github.com/elizaos/eliza/pull/6702)) can affect host boot code if you previously assumed only object-based character inputs.
- **Streaming callback typing**: consolidated callback types (merged via [#6690](https://github.com/elizaos/eliza/pull/6690)) may break TypeScript builds in downstream connectors that declared their own chunk callback signatures.
- **Provider timeout semantics**: per-provider timeouts in state composition (merged via [#6562](https://github.com/elizaos/eliza/pull/6562)) can change “eventually consistent” provider behavior—slow providers may now return empty in the composed state for that turn.
- **Memory behavior is now explicitly configurable**: `DISABLE_MEMORY_CREATION` / `ALLOW_MEMORY_SOURCE_IDS` (merged via [#6562](https://github.com/elizaos/eliza/pull/6562)) can lead to “missing memories” if your deployment templates set these env vars unintentionally.

**Recommended migration practice**
- Pin and upgrade intentionally, then run an integration suite that covers:
  - streaming connectors (especially if you do TTS),
  - action execution with required params (TOON and non-TOON),
  - group/channel reply routing (see open [#6712](https://github.com/elizaos/eliza/pull/6712)).

**Active migration-related work**
- Group addressee routing + anti-loop prompt guidance is being implemented in **open PR** [elizaos/eliza#6712](https://github.com/elizaos/eliza/pull/6712). This touches `shouldRespond` and multi-party behavior and may change when agents speak in group rooms.

---

### References / Links
- Core hardening + logging + memory controls: [elizaos/eliza#6562](https://github.com/elizaos/eliza/pull/6562)
- New `agent/` harness + runtime composition APIs: [elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702)
- Streaming callback consolidation: [elizaos/eliza#6690](https://github.com/elizaos/eliza/pull/6690)
- TOON action params + async continuation loop fix (open): [elizaos/eliza#6709](https://github.com/elizaos/eliza/pull/6709)
- Group addressee routing / anti-loop prompts (open): [elizaos/eliza#6712](https://github.com/elizaos/eliza/pull/6712)
- macOS CLI create failure (open issue): [elizaos/eliza#6704](https://github.com/elizaos/eliza/issues/6704)
- Safety / authorization proposals:
  - Capability token enforcement plugin proposal: [elizaos/eliza#6707](https://github.com/elizaos/eliza/issues/6707)
  - Delegation chains / scoped authority: [elizaos/eliza#6711](https://github.com/elizaos/eliza/issues/6711)
- Discord deployment discussion (Hatcher.host): https://discord.com/channels/1253563208833433701/1253563209462448241