# ElizaOS Developer Update (2026-02-03 → 2026-02-09)

This update summarizes core framework changes, plugin/runtime updates, notable bug fixes, and V1→V2 migration notes based on GitHub activity and developer Discord discussions.

---

## 1) Core Framework

### Per-request / per-entity settings via `RequestContext` (multi-tenant primitive)
ElizaOS core gained a first-class request-scoped context mechanism using AsyncLocalStorage, enabling per-entity overrides for settings like model/provider keys, OAuth tokens, and other secrets—without threading extra parameters through every call site.

- PR: **`feat(core): add request context for per-user entity settings`** ([elizaos/eliza#6457](https://github.com/elizaos/eliza/pull/6457))

**What changed architecturally**
- New `RequestContext` module that can wrap execution with an “entity context”
- `runtime.getSetting()` now checks request context first, then falls back to agent/global settings

**Why it matters**
- Enables true multi-tenant deployments where multiple users share the same runtime instance while keeping credentials isolated (aligns with earlier MCP per-user connections work in the ecosystem).

**Usage sketch**
```ts
import { RequestContext } from "@elizaos/core";

// Example: run a message handling path with entity-specific overrides
await RequestContext.withEntitySettings(
  {
    entityId: "user:123",
    settings: {
      OPENAI_API_KEY: process.env.USER_123_OPENAI_KEY,
      MODEL_TEXT_LARGE: "gpt-4.1-mini"
    }
  },
  async () => {
    // Any runtime.getSetting() calls inside this scope see per-entity settings first
    const model = runtime.getSetting("MODEL_TEXT_LARGE");
    const reply = await runtime.useModel("TEXT_LARGE", { /* ... */ });
  }
);
```

---

### Prompt bloat reduction: `ActionFilterService` (vector search + BM25 reranking)
To address large action catalogs (200+ tools/actions/providers) causing context inflation, ElizaOS added a relevance filter layer that selects a smaller set of actions to present to the model per turn.

- PR: **`feat: ActionFilterService — vector search + BM25 reranking for action/provider filtering`** ([elizaos/eliza#6475](https://github.com/elizaos/eliza/pull/6475))

**Technical approach**
- Two-stage ranking:
  1. Embedding cosine similarity shortlist
  2. BM25 rerank for lexical matching robustness
- Intended effect: shrink action prompt surface area to ~10–20 highly relevant actions.

**Developer implication**
- If you depend on “always-visible” tools, ensure your action descriptions/keywords are discriminative, and validate they remain discoverable under filtering.

---

### Bootstrap/plugin robustness & performance work
Several stability/performance improvements landed in bootstrap providers (null safety, caching, initialization UX).

- PR: **`feat(plugin-bootstrap): comprehensive optimization and robustness improvements`** ([elizaos/eliza#6476](https://github.com/elizaos/eliza/pull/6476))
- PR: **`fix(plugin-bootstrap): add null check for runtime.providers`** ([elizaos/eliza#6473](https://github.com/elizaos/eliza/pull/6473))
- PR: **`fix: add null checks to Object.entries calls in settings utilities`** ([elizaos/eliza#6471](https://github.com/elizaos/eliza/pull/6471))

**Context from field reports**
- Developer Discord reports showed fresh installs crashing on unexpected null/shape mismatches in provider data paths. The merged null-guard work reduces hard crashes and improves “first run” reliability.

---

## 2) New Features

### JWT authentication & user management (server + client + db schema)
JWT auth and user management shipped behind a feature flag for data isolation mode:

- PR: **`feat(auth): implement JWT authentication and user management`** ([elizaos/eliza#6200](https://github.com/elizaos/eliza/pull/6200))

**Key technical points**
- Requires `ENABLE_DATA_ISOLATION=true` to activate JWT auth mode (per PR notes)
- Adds server middleware, socket auth, credential endpoints, and SQL schema changes for users
- Significant test coverage added (Cypress + unit/integration tests)

---

### Documentation: core guides + API/environment reference
Core docs were expanded, including architecture/concepts and an API reference, plus a dedicated environment variables document.

- PR: **Core docs bundle** ([elizaos/eliza#6356](https://github.com/elizaos/eliza/pull/6356))
  - `docs/ARCHITECTURE.md`, `docs/CORE_CONCEPTS.md`, `docs/PLUGIN_DEVELOPMENT.md`, `docs/API_REFERENCE.md`, etc.
- PR: **Environment variables documentation** ([elizaos/eliza#6377](https://github.com/elizaos/eliza/pull/6377))

**Practical tip**
If you’re deploying a secured server, start by reading:
- `docs/environment-variables.md` (added in [#6377](https://github.com/elizaos/eliza/pull/6377))

---

### CLI reliability improvements for created projects + auth
- PR: **Always use `latest` for `@elizaos/*` deps in `elizaos create`** ([elizaos/eliza#6362](https://github.com/elizaos/eliza/pull/6362))
- PR: **Load `.env` files in agent commands for auth** ([elizaos/eliza#6376](https://github.com/elizaos/eliza/pull/6376))
- PR: **Validate directory path in `ensureDir` to avoid ENOENT** ([elizaos/eliza#6379](https://github.com/elizaos/eliza/pull/6379))

**Example: remote agent commands with server auth**
```bash
# .env
ELIZA_SERVER_AUTH_TOKEN="your-server-token"
ELIZA_SERVER_URL="https://your-eliza-server.example"

# Now CLI will load .env in agent commands (per #6376)
elizaos agent list
```

---

## 3) Bug Fixes (critical + technical context)

### MESSAGE_SENT event emission restored for central bus submissions
A long-standing issue where MESSAGE_SENT wasn’t emitted when submitting to `/api/messaging/submit` has been fixed.

- Issue: **EVENT MESSAGE SENT not working** ([elizaos/eliza#5216](https://github.com/elizaos/eliza/issues/5216)) (closed)
- PR: **Emit `MESSAGE_SENT` after sending to central server** ([elizaos/eliza#6378](https://github.com/elizaos/eliza/pull/6378))

**Why it’s critical**
Plugins relying on `EventType.MESSAGE_SENT` (analytics, downstream automations, delivery confirmations) previously never triggered on that pathway.

---

### Provider null/shape crashers
Several runtime crashes were traced to null/undefined values entering providers and settings utilities; fixes added defensive checks.

- `Object.entries()` crash guards in core settings: ([#6471](https://github.com/elizaos/eliza/pull/6471))
- `runtime.providers` null guard in bootstrap: ([#6473](https://github.com/elizaos/eliza/pull/6473))

**Symptom**
Agents could crash or degrade into “IGNORE”/no-context behavior when provider formatting encountered unexpected nulls.

---

### Known issues discovered (not fixed yet)
The following surfaced in Discord and/or GitHub and should be on your radar:

- **Milaidy fresh install crash**: `skill.description.toLowerCase is not a function` in `agent_skill_instructions` provider (Discord: 💬-coders, 2026-02-09). This appears to be a type/shape assumption in `@elizaos/plugin-agent-skills` where `description` is not always a string.  
  - Action: file/track in the plugin repo (not present in provided GitHub issues list).
- **Webapp duplicate LLM calls when message contains a URL** (open issue): processed as both text and attachment → double streaming + cost.
  - Issue: ([elizaos/eliza#6486](https://github.com/elizaos/eliza/issues/6486))

---

## 4) API Changes (developer-facing)

### `runtime.getSetting()` resolution order now includes request context
If you introduced custom settings resolution assumptions, note that `getSetting()` may now return entity-specific values when executed inside a `RequestContext` scope.

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

**Implication**
- Good: per-user API keys become straightforward in shared runtimes
- Watch-out: if you cache settings globally, you may accidentally defeat per-entity overrides

---

### Event lifecycle: MESSAGE_SENT now emitted after central submission
If you wrote plugins that expected no MESSAGE_SENT on central submissions (workarounds), remove the workaround and rely on the event.

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

---

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

### Twitter plugin limitation: quote repost behavior
Discord reports indicate quote reposts are not implemented as native quote tweets—posting quoted text plus a link instead.

- Report context: Discord (💬-coders / 2026-02-08)
- Action: please open an issue/PR against the Twitter plugin to add native quote-tweet support.

### Discord/Telegram cloud connectivity context
Recent weekly work (see project weekly summary) emphasized messaging platform connectivity (Telegram/Discord/SMS). For architectural context, review:
- Core docs: ([elizaos/eliza#6356](https://github.com/elizaos/eliza/pull/6356))

*(No specific PRs for Twitter/Telegram/Discord plugins were included in the provided GitHub activity for this week; above items reflect developer-reported behavior and integration direction.)*

---

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

### Anthropic: Claude Opus 4.6 integration reported in weekly roundup
Community weekly roundup (“Cron Job S1E2”) notes **Claude Opus 4.6 integration** completed. Validate your provider config and model routing if you’re pinning model IDs.

**Known friction points from Discord**
- Some users reported agents selecting an unexpected model (e.g., `claude-haiku-3.5`) despite configuration. This suggests a config precedence or defaulting issue—cross-check with:
  - request-scoped overrides ([#6457](https://github.com/elizaos/eliza/pull/6457))
  - bootstrap/provider logic changes ([#6476](https://github.com/elizaos/eliza/pull/6476))

---

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

### V2 “next generation” branches are disruptive (monorepo structure + runtime philosophy)
Large PRs exist for V2 restructuring and multi-language core support, and they **remove** assumptions that V1 developers may rely on (default app/client/server presence, CLI coupling, etc.).

- PR: **V2.0.0 working branch** ([elizaos/eliza#6351](https://github.com/elizaos/eliza/pull/6351))
- PR: **`next`** ([elizaos/eliza#6474](https://github.com/elizaos/eliza/pull/6474))
- PR: **Multi-language Eliza (Rust/Python/TS)** ([elizaos/eliza#6485](https://github.com/elizaos/eliza/pull/6485))
- PR: **Dynamic execution engine path (V2)** ([elizaos/eliza#6384](https://github.com/elizaos/eliza/pull/6384))

**Breaking-change highlights (as described in PR bodies)**
- Removes default application/client/server infrastructure in favor of runtime + critical plugins
- Adds Rust + Python core packages alongside TypeScript
- Bootstrapping integrated into core (capabilities on by default; extension via “extended capabilities”)
- Runtime behavior changes:
  - Agents can respond without `roomId`/`worldId` (impacts assumptions in message routing/state)
  - `planningMode` can be disabled to skip planning and call a single action (game/simple-agent optimization)
  - Actions can accept arguments and be invoked more “tool-like” (affects action schema expectations)

**Migration guidance**
- If you maintain V1 plugins, avoid depending on:
  - implicit server/app wiring
  - global settings resolution (prefer RequestContext-safe patterns)
  - “all actions always visible” behavior (ActionFilterService changes relevance selection)
- Track V2 PRs above and validate your plugin against both execution paths before upgrading.

---

## References / Pointers
- Core docs (architecture, plugin dev, deployment, API reference):  
  [elizaos/eliza#6356](https://github.com/elizaos/eliza/pull/6356)
- Environment variables:  
  [elizaos/eliza#6377](https://github.com/elizaos/eliza/pull/6377)
- Duplicate URL processing issue (open):  
  [elizaos/eliza#6486](https://github.com/elizaos/eliza/issues/6486)
- RequestContext (per-user settings):  
  [elizaos/eliza#6457](https://github.com/elizaos/eliza/pull/6457)
- Action filtering to reduce prompt bloat:  
  [elizaos/eliza#6475](https://github.com/elizaos/eliza/pull/6475)