# ElizaOS Developer Update (2026-04-13 → 2026-04-19)

This week prioritized **runtime orchestration correctness**, **memory consistency**, and continued the shift toward a **more modular plugin ecosystem** (alongside ongoing V2 stabilization work). Operationally, the team also responded to increased **phishing/scam activity** and reiterated **private security disclosure** expectations.

---

## 1) Core Framework

### Agent orchestration: more reliable subagent synthesis
Work landed / progressed to make “subagent synthesis” less misleading by improving how the runtime decides a subagent has actually finished:

- **End-to-end task synthesis wiring + hardened runtime plugin loading under Bun**: moved orchestrator loading toward true ESM behavior and fixed synthesis flow breakages ([elizaos/eliza#6770](https://github.com/elizaos/eliza/pull/6770)).
- **Subagent synthesis refinement**: implemented **`end_turn` reading** and removed the legacy **task-heartbeat** loop in the orchestration path (referenced in dev activity summary; see also follow-on orchestration changes noted in Discord dev summaries on 2026-04-19).

Why it matters: task-heartbeat-based “progress” could mask stuck/looping synthesis. `end_turn` is a stronger signal for completion and makes orchestration state transitions more deterministic.

### Memory consistency: roomId-sensitive updates
A correctness fix was initiated to ensure the in-memory adapter updates the right record when the conversation context changes:

- **InMemoryDatabaseAdapter** now handles accurate memory updates when `roomId` changes (PR opened: [elizaos/eliza#6965](https://github.com/elizaos/eliza/pull/6965)).

This closes a class of bugs where messages could be appended/updated against stale identifiers after routing changes (common in multi-room Discord/Telegram setups and orchestrated subagent threads).

### Shared concurrency primitives for batch work
Core introduced a unified queueing/concurrency toolkit used across embeddings, indexing, and prompt batching:

- **Shared `utils/batch-queue`** + bounded knowledge embeddings ([elizaos/eliza#6722](https://github.com/elizaos/eliza/pull/6722))  
  Docs added/updated in:
  - `packages/docs/runtime/batch-queue.mdx`
  - `packages/docs/guides/background-tasks.mdx`

This helps eliminate ad-hoc concurrency patterns that previously differed between embedding drains, action-filter indexing, and prompt batching.

---

## 2) New Features

### Pipeline hooks (prompt/runtime interception points)
A new hook surface was added to support tooling like prompt optimizers and typography/formatting middleware:

- **Pipeline hooks** ([elizaos/eliza#6733](https://github.com/elizaos/eliza/pull/6733))

While the PR spans multiple packages, the key developer-facing change is that you can now insert hook logic at defined points in the runtime pipeline (e.g., before prompt dispatch, after model response, before action execution) without forking core services.

Conceptual usage (illustrative):
```ts
import { createRuntime } from "@elizaos/core";
// names may vary by package/version; see PR for the exact hook registry types
import { registerPipelineHook } from "@elizaos/core/pipeline";

registerPipelineHook("beforeModelCall", async (ctx) => {
  // e.g. redact secrets, normalize formatting, add telemetry
  return {
    ...ctx,
    prompt: ctx.prompt.replaceAll(process.env.API_KEY ?? "", "[REDACTED]"),
  };
});

const runtime = createRuntime({ /* ... */ });
```

### New `agent/` starter workspace (monorepo bootstrapping)
A new starter “agent-like” workspace was added to make spinning up the repo easier and to demonstrate TS/Python/Rust agent entry points:

- **Starter workspace** ([elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702))

Developer impact:
- Adds `agent/typescript/` scaffolding and related scripts.
- Updates runtime composition utilities (see **API Changes** + **Breaking Changes** below).

### plugin-hiveexchange: agent-native prediction markets
A new plugin was introduced to support prediction-market-style interactions directly from agents:

- **plugin-hiveexchange** (PR: [elizaos/eliza#6963](https://github.com/elizaos/eliza/pull/6963))

At a high level, this plugin aims to expose actions/providers that let agents:
- fetch market listings/odds
- place trades
- track positions

Example action call pattern (illustrative; confirm exact action names in the plugin):
```ts
const result = await runtime.executeAction("HIVEEXCHANGE_PLACE_ORDER", {
  marketId: "btc-up-2026-04-26",
  side: "YES",
  amount: "10.00",
});
```

### Plugin ecosystem growth (registry + proposals)
- Pending registry additions mentioned in dev summary:
  - `@error403agent/elizaos-plugin-deepblue` (PR: [elizaos-plugins/registry#347](https://github.com/elizaos-plugins/registry/pull/347))
  - `@elisym/plugin-elizaos` (PR: [elizaos-plugins/registry#346](https://github.com/elizaos-plugins/registry/pull/346))

---

## 3) Bug Fixes (with technical context)

### Eliminated TTS garbling caused by dual stream chunk typing
A core streaming cleanup consolidated multiple `onStreamChunk` definitions into a single canonical callback type to prevent inconsistent extraction/stream handling:

- **Consolidate `StreamChunkCallback`** ([elizaos/eliza#6690](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`

Root cause: multiple subtly different `onStreamChunk` signatures encouraged divergent chunk parsing, leading to duplicate/partial token emission that downstream TTS pipelines interpreted as stutter/garble.

### Removed a machine-local symlink breaking tooling
A dangling symlink inside `packages/typescript/` pointed to a contributor’s local filesystem path, breaking recursive walkers (including plugin loaders and packaging):

- **Remove dangling typescript symlink** ([elizaos/eliza#6713](https://github.com/elizaos/eliza/pull/6713))

Symptoms you may have seen:
- unexplained “file not found” during build/package
- plugin discovery scans hanging or skipping files
- inconsistent CI behavior vs local

### Release/CI operational fix: stop auto-filing “Release Failed” issues
To reduce issue spam and keep triage meaningful:

- **Stop auto-filing Release Failed issues** ([elizaos/eliza#6800](https://github.com/elizaos/eliza/pull/6800))

### UI stability fixes (flicker + platform-neutral copy)
- Silence periodic thread polling flicker ([elizaos/eliza#6758](https://github.com/elizaos/eliza/pull/6758))
- Replace “on this Mac” with “on this device” across locales ([elizaos/eliza#6763](https://github.com/elizaos/eliza/pull/6763), [elizaos/eliza#6769](https://github.com/elizaos/eliza/pull/6769), [elizaos/eliza#6771](https://github.com/elizaos/eliza/pull/6771))

---

## 4) API Changes (developer-facing)

### Runtime composition: `loadCharacters` now supports file paths/options
The new `agent/` workspace came with adjustments to runtime composition:

- **Runtime composition updates** ([elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702))

If your code previously assumed `loadCharacters(characters: Character[])`, verify whether the function now accepts:
- file paths
- options objects
- mixed sources (paths + inline objects)

Migration sketch (illustrative):
```ts
// Before (conceptual)
await loadCharacters([myCharacter]);

// After (conceptual)
await loadCharacters({
  paths: ["./characters/default.character.json"],
  inline: [myCharacter],
});
```

### Streaming callback type is now canonical
If you implemented custom streaming middleware, update to the single exported type:

- [elizaos/eliza#6690](https://github.com/elizaos/eliza/pull/6690)

---

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

### Discord: security posture improvements + routing work
Previously landed hardening (still relevant this week as scams increased):
- DM allowlist gating + generation timeout fallbacks ([elizaos-plugins/plugin-discord#48](https://github.com/elizaos-plugins/plugin-discord/pull/48))

Ongoing internal routing changes:
- Discord routing + submodule dependency updates affecting orchestrator/cron components were noted in the 2026-04-19 dev summary (see also PR activity: [elizaos/eliza#6968](https://github.com/elizaos/eliza/pull/6968)).

Operational note from Discord (2026-04-18 → 2026-04-19):
- Multiple phishing incidents involved fake “airdrop” tags and impersonation. Moderators reiterated: **airdrop tags in Discord are always scams** and accounts were banned/removed.

### Telegram: duplicate process prevention (“one poller per token”)
- **One poller per bot token policy** ([elizaos-plugins/plugin-telegram#27](https://github.com/elizaos-plugins/plugin-telegram/pull/27))

This reduces message duplication and long-poll contention when multiple agent instances accidentally share the same token.

---

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

### Anthropic (Claude): OAuth + headless CLI auth
Two notable additions to the Anthropic plugin:
- OAuth support (Claude Max) ([elizaos-plugins/plugin-anthropic#17](https://github.com/elizaos-plugins/plugin-anthropic/pull/17))
- CLI authentication mode for headless environments ([elizaos-plugins/plugin-anthropic#18](https://github.com/elizaos-plugins/plugin-anthropic/pull/18))

These changes make it significantly easier to run Claude-backed agents in:
- CI
- servers without interactive browsers
- managed operator workflows

Also relevant:
- TypeScript compatibility fixes ([elizaos-plugins/plugin-anthropic#16](https://github.com/elizaos-plugins/plugin-anthropic/pull/16))

### “DeepBlue” ecosystem plugin pending (x402 usage)
Community plugin work is in-flight to add DeepBlue via the registry:
- [elizaos-plugins/registry#347](https://github.com/elizaos-plugins/registry/pull/347)

---

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

### V2 release line continues to evolve (watch CI + packaging + multi-language workflows)
The V2.0.0 release PR remains a major moving piece:
- **V2.0.0 release automation** ([elizaos/eliza#6530](https://github.com/elizaos/eliza/pull/6530))

If you maintain downstream tooling that depends on legacy CI workflow names or per-package publish jobs, expect breakage as the repo consolidates workflows and expands multi-language release coverage.

### Runtime composition signature changes (potentially breaking)
As noted above, `loadCharacters` behavior changes in:
- [elizaos/eliza#6702](https://github.com/elizaos/eliza/pull/6702)

Action item: pin versions or update your runtime bootstrap code if you programmatically load character manifests.

### Plugin repo strategy shift (ecosystem modularization)
From recent repo hygiene work (carrying into this week): the project is actively pushing third-party integrations toward **standalone repos** and registry entries rather than living in core/plugin repos indefinitely. If you depended on “misc plugin code living in core,” plan to migrate.

---

## Security & Ops Notes (from Discord discussions)

- **No bug bounty program currently exists** (confirmed by moderators).  
- **Security vulnerabilities should be disclosed privately**, not via public issues/PRs (ethical disclosure was handled via DM to maintainers on 2026-04-18).
- Phishing attempts increased; maintainers reiterated that **Discord airdrop tags are scams** and impersonators were removed.

Recommended developer action:
- Add/verify a `SECURITY.md` and documented disclosure channel(s) (discussion request surfaced on 2026-04-18 in Discord).

---

## References / Links
- Core repo: https://github.com/elizaos/eliza  
- Weekly summary context (Apr 12–18): https://github.com/elizaos/eliza (see spotlight PRs listed in the weekly summary document)
- PRs referenced above:  
  - Batch queue: [#6722](https://github.com/elizaos/eliza/pull/6722)  
  - Pipeline hooks: [#6733](https://github.com/elizaos/eliza/pull/6733)  
  - Task synthesis E2E: [#6770](https://github.com/elizaos/eliza/pull/6770)  
  - Streaming callback fix: [#6690](https://github.com/elizaos/eliza/pull/6690)  
  - Remove symlink: [#6713](https://github.com/elizaos/eliza/pull/6713)  
  - Starter workspace: [#6702](https://github.com/elizaos/eliza/pull/6702)  
  - Stop release-failed auto-issues: [#6800](https://github.com/elizaos/eliza/pull/6800)  
  - InMemory roomId fix (open): [#6965](https://github.com/elizaos/eliza/pull/6965)  
  - hiveexchange (open): [#6963](https://github.com/elizaos/eliza/pull/6963)  
- Plugin updates:  
  - Discord DM gating: https://github.com/elizaos-plugins/plugin-discord/pull/48  
  - Telegram single-poller: https://github.com/elizaos-plugins/plugin-telegram/pull/27  
  - Anthropic OAuth: https://github.com/elizaos-plugins/plugin-anthropic/pull/17  
  - Anthropic CLI auth: https://github.com/elizaos-plugins/plugin-anthropic/pull/18  
  - Registry additions pending: [registry#346](https://github.com/elizaos-plugins/registry/pull/346), [registry#347](https://github.com/elizaos-plugins/registry/pull/347)