# ElizaOS Developer Update (2026-04-16 → 2026-04-22)

This update summarizes core runtime, app, and ecosystem work from the past week, based on GitHub activity and developer Discord discussions.

---

## 1) Core Framework

### Unified output-shaping for non-Claude models (`PROMPT_OUTPUT_FORMAT`)
A new environment variable, `PROMPT_OUTPUT_FORMAT`, was added to control the default output encapsulation used by `dynamicPromptExecFromState`. This was introduced to improve reliability with models that don’t consistently emit TOON (notably **Gemini 2.5 Pro** and **Llama via Ollama**).  
- PR: **feat(core): PROMPT_OUTPUT_FORMAT env var for dynamicPromptExecFromState** ([#6978](https://github.com/elizaos/eliza/pull/6978))

**Why this matters:** if your agent uses `dynamicPromptExecFromState` (directly or via higher-level message handling), the runtime now has a supported, deploy-time knob to select an output format that better matches your provider/model behavior.

---

### Memory ordering consistency across adapters
The in-memory DB adapter now sorts memories **descending** to match the ordering semantics of `plugin-sql` (which sorts by `desc(createdAt), desc(id)`). This removes a subtle class of “it works in prod but not in tests/local” bugs when switching adapters or running the same agent in different environments.  
- PR: **fix(inmemory-adapter): sort getMemories desc to match plugin-sql** ([#7000](https://github.com/elizaos/eliza/pull/7000))

Related correctness fix: `updateMemories` now properly moves memories between room lists when `roomId` changes (previously it could leave stale references in the old room list).  
- PR: **fix: handle roomId changes in InMemoryDatabaseAdapter.updateMemories** ([#6965](https://github.com/elizaos/eliza/pull/6965))

---

### Agent reliability: scenario final-check handlers + swarm task heartbeat wiring
Scenario runner final checks were restored with tighter channel/action matching, and task heartbeat functionality was wired into swarm synthesis to improve long-running task observability and reduce “silent stall” failure modes.  
- PR: **Shaw/scenario final checks fix** ([#6972](https://github.com/elizaos/eliza/pull/6972))

---

## 2) New Features

### LifeOps expansion: calendar, travel booking, cross-platform gateway
Work this week continued to expand the LifeOps surface (calendar management, travel booking, and cross-platform gateway support) and align TypeScript typechecking across LifeOps + agent + app-core + shared packages.  
- PR: **fix: aligns TypeScript typecheck across lifeops, agent, app-core, and shared…** ([#6984](https://github.com/elizaos/eliza/pull/6984))

While much of this is app-level, several additions land as reusable actions/routes that other ElizaOS-based apps can copy patterns from (especially around scheduling and multi-channel operational workflows).

---

### Elisym marketplace integration plugin (community)
A new community plugin was released: `@elisym/plugin-elizaos` (naming being finalized as `plugin-elizaos-elisym`). It integrates **ElizaOS v1 agents** with the **Elisym decentralized AI-agent marketplace**, enabling paid job execution over Nostr with Solana payments:
- Publish capability cards over **NIP-89**
- Receive encrypted job requests via **NIP-90**
- Execute using the agent model and/or `SKILL.md` tool-use loop
- Collect **SOL** payments on Solana

Registry PR (currently blocked by CI config, see Bug Fixes):  
- elizaos-plugins/registry PR: [#346](https://github.com/elizaos-plugins/registry/pull/346)

**Implementation notes from Discord:** the plugin ships with extensive test coverage (reported ~110 tests) and uses GitHub Actions provenance signing.

---

### Example: configure output format for Gemini / Llama
Set `PROMPT_OUTPUT_FORMAT` in your runtime environment to match your model/provider’s preferred structure:

```bash
# Example: choose a JSON-oriented output format for models that struggle with TOON
export PROMPT_OUTPUT_FORMAT=json
bun run start
```

If you deploy via Docker/systemd, ensure the variable is set in that environment (not only your shell).

Docs references you’ll likely touch while validating output shaping and streaming behavior:
- Streaming responses guide: `packages/docs/guides/streaming-responses.mdx` (repo path)

---

## 3) Bug Fixes (Critical)

### Registry CI failure: `claude-code-action` can’t fetch OIDC token (config-level)
A blocking CI/CD issue was identified on the plugin registry PR adding the Elisym plugin. The workflow fails because GitHub Actions cannot mint an OIDC token—typically caused by missing workflow permissions (`id-token: write`) or misconfigured `github_token`. This is a **repository workflow configuration issue**, not a code issue in the PR itself.  
- Discord thread: <https://discord.com/channels/1253563208833433701/1300025221834739744>  
- Registry PR affected: <https://github.com/elizaos-plugins/registry/pull/346>

**Fix recommendation (for repo maintainers):** ensure the workflow explicitly grants OIDC token permissions:

```yaml
permissions:
  contents: read
  id-token: write
```

If the action uses GitHub API writes, add `pull-requests: write` / `issues: write` as needed.

---

### Discord routing fix in LifeOps
LifeOps Discord routing issues were addressed (plus submodule bumps), improving message delivery correctness in multi-channel deployments.  
- PR: **fix: lifeops discord routing + submodule bumps** ([#6971](https://github.com/elizaos/eliza/pull/6971))

---

## 4) API Changes

### New runtime environment variable: `PROMPT_OUTPUT_FORMAT`
- Added in: [#6978](https://github.com/elizaos/eliza/pull/6978)
- Affects: `dynamicPromptExecFromState` default output encapsulation behavior
- Action for developers: if you are seeing parse failures / inconsistent action selection with Gemini/Llama/Ollama, set `PROMPT_OUTPUT_FORMAT` explicitly in your deployment.

### Memory retrieval ordering changed in `InMemoryDatabaseAdapter.getMemories`
- Changed in: [#7000](https://github.com/elizaos/eliza/pull/7000)
- Behavioral change: results are now newest-first to match SQL adapter semantics.
- Action for developers: if your app implicitly assumed oldest-first ordering (e.g., “take first N as the oldest context”), update that logic to reflect newest-first or explicitly sort in your caller.

---

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

### Discord
- LifeOps routing improvements: [#6971](https://github.com/elizaos/eliza/pull/6971)
- Ongoing community discussion also raised the need for anti-scam automation; a “scammer plugin” concept is being explored in Discord (odilitime offered to share an in-progress plugin with stan0473).  
  - Discord context: <https://discord.com/channels/1253563208833433701/1253563209462448241>

### Telegram
No core plugin changes landed in the provided week’s artifacts, but LifeOps work mentions Telegram authentication and cross-platform gateway flows being expanded/refined at the app layer.

### Farcaster
No Farcaster plugin changes were surfaced in the provided weekly data.

---

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

### Provider compatibility improvements via output formatting
`PROMPT_OUTPUT_FORMAT` is specifically intended to reduce provider/model friction for:
- **Gemini 2.5 Pro**
- **Llama (Ollama)**

See: [#6978](https://github.com/elizaos/eliza/pull/6978)

### Dependency movement (provider SDKs)
The repo continues broad dependency modernization across TS/Rust toolchains (bun/vitest/tokio/reqwest, etc.). One relevant provider-facing bump in the month’s merged set includes:
- `@anthropic-ai/sdk` update (Renovate-driven; see merged items list)

If you maintain provider plugins, keep an eye on CI typecheck alignment changes introduced in [#6984](https://github.com/elizaos/eliza/pull/6984), as they tend to surface latent TS strictness issues.

---

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

### Memory ordering differences may surface during adapter swaps
If you are migrating a V1 agent or plugin that relied on in-memory adapter semantics for local dev, note that `InMemoryDatabaseAdapter.getMemories` now matches SQL ordering (newest-first). This can change:
- prompt assembly order
- summarization windows
- “recent messages” provider behavior if you reimplemented it outside core utilities

See: [#7000](https://github.com/elizaos/eliza/pull/7000)

### Output format expectations across models
If you’re migrating from a Claude-tuned setup (TOON-heavy) to mixed providers in V2, you should now treat output encapsulation as an explicit deployment parameter (`PROMPT_OUTPUT_FORMAT`) rather than an implicit runtime assumption.  
See: [#6978](https://github.com/elizaos/eliza/pull/6978)

### Ecosystem note: V3 “revenue generation” approaching
Discord indicated ElizaOS v3 is “nearly ready” and will enable agents to generate revenue (high-level announcement; no PR linked in this week’s dataset). Plan for upcoming migration guidance once v3 branches/releases land.

---

### Useful Links
- Examples (v2.0.0 tag): <https://github.com/elizaOS/eliza/tree/v2.0.0/examples>
- Registry PR with CI issue: <https://github.com/elizaos-plugins/registry/pull/346>
- Discord (CI discussion): <https://discord.com/channels/1253563208833433701/1300025221834739744>
- Discord (plugin/security discussion): <https://discord.com/channels/1253563208833433701/1253563209462448241>