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

This week focused on hardening the **core runtime** (concurrency, streaming, messaging reliability), stabilizing **CI/release automation**, and continuing the shift toward a more **decentralized plugin ecosystem** (community-owned plugins in independent repos).

---

## 1) Core Framework

### Shared batch processing + bounded embedding workloads
Core added a shared `utils/batch-queue` subsystem to unify high-concurrency background work (embedding drains, prompt batching affinity tasks, action-filter index builds, and knowledge embeddings) behind a single set of concurrency primitives and retry/task storage patterns.

- PR: **Shared batch-queue** — https://github.com/elizaos/eliza/pull/6722  
- Docs: `Background tasks` + `Batch queue`  
  - https://github.com/elizaos/eliza/blob/develop/packages/docs/guides/background-tasks.mdx  
  - https://github.com/elizaos/eliza/blob/develop/packages/docs/runtime/batch-queue.mdx

**Why it matters:** previously, multiple subsystems implemented their own “drain” logic and concurrency controls. Standardizing on one queue/processor makes throughput and backpressure behavior predictable under load (especially for retrieval/embedding-heavy agents).

### Reflection evaluator pipeline accuracy improvements
The reflection evaluator pipeline was updated to incorporate task-completion assessment so reflection is grounded against “is the task done?” signals rather than only intermediate heuristics.

- PR: https://github.com/elizaos/eliza/pull/6721

### Repo organization / contribution model shift (project ops that affects dev workflow)
Discord discussions confirmed ElizaOS is **refocusing on the core framework** and returning to a more open community contribution model after dissolving the “Eliza Labs” experimental org. This does not change APIs directly, but does change **where** experimental work is expected to live (independent repos vs monorepo) and how plugin proposals are handled.

- Discussion context: https://discord.com/channels/1253563208833433701/1253563209462448241 (Apr 17)

---

## 2) New Features

### Batch queue primitives (new runtime capability for background work)
The new batch queue system includes reusable primitives (PriorityQueue, BatchProcessor, TaskDrain, Semaphore) that you can use when writing high-throughput plugins or core extensions that must avoid unbounded concurrency.

**Example: draining tasks with bounded concurrency**
```ts
import { BatchProcessor, Semaphore } from "@elizaos/core/utils/batch-queue";

const semaphore = new Semaphore({ permits: 8 }); // cap concurrent work
const processor = new BatchProcessor({
  maxBatchSize: 50,
  maxWaitMs: 25,
  async handle(batch) {
    // process up to 50 tasks at a time
    await Promise.all(batch.map(async (task) => {
      const release = await semaphore.acquire();
      try {
        await task.run();
      } finally {
        release();
      }
    }));
  },
});

// enqueue tasks from your plugin/service
processor.enqueue({ run: async () => {/* ... */} });
```

### New starter “agent/” workspace for repo bootstrapping (runtime composition surface changed)
A new `agent/` workspace was introduced to make it easier to boot and experiment with the repo end-to-end, including TypeScript/Python/Rust stubs. This PR also updates runtime composition behavior (notably around character loading).

- PR: https://github.com/elizaos/eliza/pull/6702

**Developer impact:** if you’re composing runtimes programmatically, review the updated `runtime-composition` tests and implementation:
- `packages/typescript/src/runtime-composition.ts`
- `packages/typescript/src/__tests__/runtime-composition.test.ts`

---

## 3) Bug Fixes (critical/impactful)

### Fix: TTS garbling / streaming chunk extraction issues
Multiple inline `onStreamChunk` definitions were consolidated into a canonical `StreamChunkCallback` type, removing a “dual extractor” pattern that was causing **TTS garbling** in streaming scenarios.

- PR: https://github.com/elizaos/eliza/pull/6690  
- Related docs updated:
  - `packages/docs/guides/streaming-responses.mdx`
  - `packages/docs/runtime/messaging.mdx`
  - `packages/docs/runtime/types-reference.mdx`

**Technical context:** inconsistent chunk typing/handling across runtime boundaries can cause chunk reprocessing or malformed concatenation. Centralizing the callback type reduces accidental mismatch across message service, runtime, and streaming context.

### Fix: remove machine-local symlink that broke tooling
A dangling symlink inside `packages/typescript` referenced a contributor-local path and could break tools that recursively traverse the directory (including some plugin loaders and build tooling).

- PR: https://github.com/elizaos/eliza/pull/6713

### Reliability: CI/release bottleneck elimination (serialized workflows + retry logic)
CI/CD was stabilized by serializing workflows and adding retry/diagnostics, resolving persistent build/release failures.

- PRs: https://github.com/elizaos/eliza/pull/6733, https://github.com/elizaos/eliza/pull/6743  
- Also noted across plugin repos in the weekly summary:
  - Registry workflow stabilization: https://github.com/elizaos-plugins/registry
  - Anthropic plugin release flow alignment: https://github.com/elizaos-plugins/plugin-anthropic

---

## 4) API Changes (developer-visible)

### Streaming API: canonical `StreamChunkCallback`
If you were typing or re-exporting streaming chunk callbacks, update to the canonical type alias:

- PR: https://github.com/elizaos/eliza/pull/6690  
- Type location: `packages/typescript/src/types/components.ts` (and Python equivalent updated in `packages/python/elizaos/types/components.py`)

**Action:** remove local/duplicated definitions and import the shared alias to avoid subtle runtime/type divergence.

### Runtime composition: character loading accepts file paths/options
The `agent/` workspace introduction included updates to runtime composition such that `loadCharacters` can accept file paths/options.

- PR: https://github.com/elizaos/eliza/pull/6702

**Action:** if your tooling passes preloaded character objects only, verify behavior against the updated runtime composition tests and adjust if you want to load from disk paths.

---

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

### Telegram: enforce “one poller per bot token”
Telegram plugin added a strict policy to prevent duplicate process instantiation (“one poller per bot token”), addressing inconsistent bot behavior caused by multiple pollers competing for updates.

- PR: https://github.com/elizaos-plugins/plugin-telegram/pull/27

**Operational note:** if you previously ran multiple instances with the same token (intentionally or accidentally), only one should now be the active poller. Ensure your deployment strategy uses distinct bot tokens or a single polling instance.

### Discord: DM allowlist gating + generation timeout fallbacks
Discord plugin added security gating for DMs and timeout fallback behavior to protect deployments from unbounded generation and reduce abuse surface.

- PR: https://github.com/elizaos-plugins/plugin-discord/pull/48

**Action:** review your DM behavior expectations; DM access may now require allowlisting, and long-running generations may return via fallback rather than stalling.

### Ecosystem note: Twitter/X “Limits of LLMs” discussion
A Twitter Space titled **“Limits of LLMs”** was circulated for technical discussion (prompting further optimization work around model limits and runtime behavior).

- Shared in Discord: https://discord.com/channels/1253563208833433701/1253563209462448241 (Apr 17)

---

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

### Anthropic plugin: OAuth + headless CLI auth
Anthropic integration gained OAuth support and headless CLI authentication flows, enabling non-interactive deployments (CI, servers) and more standardized enterprise auth patterns.

- PRs: https://github.com/elizaos-plugins/plugin-anthropic/pull/17, https://github.com/elizaos-plugins/plugin-anthropic/pull/18

### Anthropic plugin: TypeScript compatibility fixes
TypeScript compatibility errors were resolved to keep provider integration aligned with core updates.

- PR: https://github.com/elizaos-plugins/plugin-anthropic/pull/16

---

## 7) Breaking Changes / Migration Warnings (V1 → V2 and forward)

### V2 release automation is still high-impact—review before adopting
A large V2.0.0 release PR remains a major inflection point for CI/release automation and multi-language artifacts (TS/Python/Rust/WASM). Treat this as potentially disruptive to downstream forks and custom release workflows until finalized.

- PR (open): https://github.com/elizaos/eliza/pull/6530

**Migration guidance (practical):**
- If you maintain custom publishing steps or rely on older per-package workflows, expect to refactor around the consolidated CI/release pipelines once merged.
- Pin your toolchain (Node/Bun/Python/Rust) in CI to match ElizaOS once the release PR lands to avoid drift.

---

## Ecosystem / Plugin Registry Activity (pending review)

Three plugin/ecosystem PRs were reported open and awaiting review (Apr 17):

- **plugin-evm:** Add Radius Network support (`eip155:723487`)  
  (PR link referenced in daily activity feed; review needed in `elizaos-plugins/plugin-evm`)
- **registry:** add `@thecolony/elizaos-plugin` (pending)  
  https://github.com/elizaos-plugins/registry
- **registry:** add `megalaunch-elizaos-plugin` (pending)  
  https://github.com/elizaos-plugins/registry

---

## Additional Community Developer Tools (non-core, shared this week)

### TrustGate (community package): Express middleware trust scoring for x402 agents
A community release, `@oceanrun/trustgate`, provides an Express middleware for ERC-8004 trust scoring and request gating for x402 agents.

- Announcement context (Discord, Apr 15): https://discord.com/channels/1253563208833433701/1300025221834739744

**Example:**
```bash
npm i @oceanrun/trustgate
```

```ts
import express from "express";
import { trustGate } from "@oceanrun/trustgate";

const app = express();

app.use("/agent", trustGate({ minTrustLevel: 2 }));
app.post("/agent/action", (req, res) => res.json({ ok: true }));
```

### Orbis API: persistent agent memory service (external)
Orbis’ “AI Agent Memory API” was shared as a persistent key-value memory backend (4 endpoints; TTL supported). This is not an official ElizaOS module, but may be useful for teams wanting externalized memory across sessions.

- Shared context (Apr 17): https://discord.com/channels/1253563208833433701/1300025221834739744

---

## References

- Weekly summary (Apr 12–18): https://github.com/elizaos/elizaos/blob/main/knowledge/github_summaries_week_latest_2026-04-12.md  
- Core repo: https://github.com/elizaos/eliza  
- Plugin registry: https://github.com/elizaos-plugins/registry  
- Discord plugin: https://github.com/elizaos-plugins/plugin-discord  
- Telegram plugin: https://github.com/elizaos-plugins/plugin-telegram  
- Anthropic plugin: https://github.com/elizaos-plugins/plugin-anthropic