{
  "interval": {
    "intervalStart": "2026-04-10T00:00:00.000Z",
    "intervalEnd": "2026-04-11T00:00:00.000Z",
    "intervalType": "day"
  },
  "repository": "elizaos/eliza",
  "overview": "From 2026-04-10 to 2026-04-11, elizaos/eliza had 5 new PRs (2 merged), 0 new issues, and 6 active contributors.",
  "topIssues": [
    {
      "id": "I_kwDOMT5cIs7Ki-Bz",
      "title": "Advanced Output & Flows",
      "author": "borisudovicic",
      "number": 5924,
      "repository": "elizaos/eliza",
      "body": "* Add structured return types (text, metadata, actions).\n* Support streaming responses (for await (const chunk of agent.streamGenerate())).\n* Enable multi-turn sessions with built-in state handling.",
      "createdAt": "2025-09-09T12:15:01Z",
      "closedAt": "2026-04-10T21:25:05Z",
      "state": "CLOSED",
      "commentCount": 0
    },
    {
      "id": "I_kwDOMT5cIs7Ki9Gq",
      "title": "Simplified Agent Interaction",
      "author": "borisudovicic",
      "number": 5922,
      "repository": "elizaos/eliza",
      "body": "Expose simple APIs to interact with agents directly (no listeners required).",
      "createdAt": "2025-09-09T12:14:07Z",
      "closedAt": "2026-04-10T21:25:05Z",
      "state": "CLOSED",
      "commentCount": 0
    }
  ],
  "topPRs": [
    {
      "id": "PR_kwDOMT5cIs7RaYeB",
      "title": "Shaw/message service retry",
      "author": "lalalune",
      "number": 6717,
      "body": "maybe this is legit?\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Modifies core runtime/plugin initialization and message-processing flow, which can affect agent responsiveness and service availability across deployments. Adds new persistence side effects (entity metadata/components) in the relationship evaluator and changes prompt output formats, increasing behavior-change risk.\n> \n> **Overview**\n> **Adds native runtime feature plugins** via `native_features.py` and updates `AgentRuntime` to auto-register/toggle `knowledge`, `relationships`, and `trajectories`, including plugin component tracking for clean unregistration and service-type gating.\n> \n> **Replaces `RolodexService` with `RelationshipsService`** and updates all contact/follow-up actions and providers to use the new `relationships` service; updates related prompt/spec wording from *rolodex* to *relationships*.\n> \n> **Behavioral prompt/runtime updates**: `message_handler` prompt output is switched to an XML `<response>` format; new prompts are added for `message_classifier` and `update_role`; reflection extraction is tightened to only store durable facts.\n> \n> **Message/service reliability changes**: `compose_state` now times out/guards provider execution, `MessageService` adds a should-respond prefilter and response de-duping (drop stale responses unless configured), and runtime gains batch relationship adapter methods with fallbacks.\n> \n> **Expands `relationship_extraction` evaluator** to detect GitHub handles, disputes, sentiment/trust signals, privacy boundaries, and mentioned people, persisting results into entity metadata and new components (e.g., `privacy_marker`, `dispute_record`).\n> \n> Docs are updated to reference `knowledge` instead of `plugin-knowledge`.\n> \n> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 8985acd98da56b5ab74a4d5cc83e477d38c2a4b5. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-10T10:12:20Z",
      "mergedAt": "2026-04-10T11:34:47Z",
      "additions": 28216,
      "deletions": 2464
    },
    {
      "id": "PR_kwDOMT5cIs7RXwQK",
      "title": "feat(core): initial automatic prompt optimization poc + batch queue",
      "author": "odilitime",
      "number": 6716,
      "body": "Add DPE prompt optimization (traces, slot profiles, artifacts, A/B resolver, auto-optimizer, BootstrapFewShot; GEPA/ACE stubs for Phase 4). Wire plugin-neuro for scoring and RUN_ENDED finalization. Introduce batch-queue utilities and integrate runtime, embedding, message, and action paths.\r\n\r\nAlso batch queue abstraction that a lot of subsystem can be standardized on\r\n\r\nPostinstall patches for @elizaos/plugin-ollama: ai@6 rejects v1 embedding/chat providers, so call Ollama HTTP APIs directly; fix warning string interpolation. Required because root package.json postinstall already invokes these scripts.\r\n\r\nIgnore /opt/ for local OPTIMIZATION_DIR data. Agent harness registers neuro and uses optimization settings.\r\n\r\nMade-with: Cursor\r\n\r\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Medium risk because it introduces a new `@elizaos/plugin-promptopt` package that registers runtime hooks/finalizers and modifies the dev harness to auto-inject it based on env settings, plus changes dependency versions and postinstall patching for `@elizaos/plugin-ollama`. Main risk is behavior changes around runtime initialization, disk I/O for optimization traces, and install-time patch scripts.\n> \n> **Overview**\n> Adds a new workspace package, `@elizaos/plugin-promptopt`, which bundles disk-backed prompt-optimization runtime hooks (artifact merge/A-B selection + trace/registry writes) together with neuro-style quality signals and `RUN_ENDED` trace finalization.\n> \n> Updates the `agent` harness to load repo-root `.env` files, mirror `OLLAMA_*` and prompt-optimization env into character settings, auto-inject `promptOptPlugin` when `PROMPT_OPTIMIZATION_ENABLED` is truthy, and run `createRuntimes` with `provision: true` so SQL migrations run for fresh PGLite dirs.\n> \n> Bumps `@elizaos/plugin-ollama` to `^1.2.4`, adds postinstall patch scripts for Ollama behavior, and ignores local optimization artifacts via `/.eliza-optimization/` in `.gitignore`.\n> \n> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit e0c01fbc518a49e8299ea8db34316ee1844d9207. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Added a full prompt-optimization system (tracing, artifact merging, A/B analysis, auto-run pipeline) and plugin-neuro for quality signals and finalization.\n  * Introduced a composable batch-queue toolkit for higher-throughput batching and retryable processing.\n\n* **Improvements**\n  * Many DPE flows now use structured prompt execution for more reliable parameter repair, decisions, and entity resolution.\n  * Enhanced telemetry/trajectory capture, runtime trace enrichment, and embedding batching for robustness.\n\n* **Documentation**\n  * Extensive docs for optimization, adapters, LLM routing, and batch-queue usage.\n\n* **Chores**\n  * Added repository ignore for local optimization artifacts.\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR introduces a prompt optimization system (trace writing, A/B analysis, auto-optimization pipeline), a composable batch-queue toolkit (`PriorityQueue` / `BatchProcessor` / `TaskDrain` / `BatchQueue`), and a `plugin-neuro` finalizer that enriches traces on `RUN_ENDED`. The architecture is well-thought-out: sequential optimizer stages, write-lock serialization for JSONL I/O, and deterministic A/B variant selection. Prior review concerns (unbounded `runLocks`, dynamic `readFile` import, duplicate `simpleHash`, and O(n) TTL scan on the success path) are addressed in this revision.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge; all P0/P1 concerns from prior review rounds are addressed and remaining findings are style/housekeeping only.\n\nAll three previously flagged critical issues (unbounded runLocks, duplicate simpleHash, O(n) TTL scan on success path) are resolved in this revision. Remaining findings are P2 style items: a redundant dynamic import in a non-hot path, missing .finally() cleanup in write-lock helpers (bounded leak), and indentation in a catch block. None affect runtime correctness or reliability.\n\npackages/typescript/src/optimization/trace-writer.ts, packages/typescript/src/optimization/slot-profile.ts, packages/typescript/src/optimization/resolver.ts (write-lock cleanup consistency); packages/typescript/src/optimization/runner.ts (readFile import); packages/typescript/src/plugin-neuro/handlers/finalizer.ts (indentation)\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/optimization/auto-optimizer.ts | Background auto-optimization scheduler; `runLocks` cleanup and failure cooldown pruning are properly implemented. |\n| packages/typescript/src/optimization/trace-writer.ts | JSONL trace persistence with per-path write serialization; `writeLocks` map is never pruned (bounded by model/slot paths but inconsistent with ABAnalyzer's cleanup pattern). |\n| packages/typescript/src/plugin-neuro/handlers/finalizer.ts | RUN_ENDED finalizer persists enriched traces and schedules A/B analysis; catch block body has incorrect indentation making control flow visually ambiguous. |\n| packages/typescript/src/optimization/runner.ts | End-to-end optimization pipeline runner; `listPendingOptimizations` re-imports `readFile` inside the innermost loop on each profile file instead of hoisting it alongside `readdir`. |\n| packages/typescript/src/utils/batch-queue/batch-processor.ts | Stateless batch executor with semaphore concurrency cap and exponential backoff retries; implementation looks correct. |\n| packages/typescript/src/utils/batch-queue/index.ts | BatchQueue composes PriorityQueue + BatchProcessor + TaskDrain; dispose flush of high-priority items and re-entry guard look correct. |\n| packages/typescript/src/optimization/ab-analyzer.ts | Stateful A/B orchestrator; `withAnalyzeLock` properly cleans up its map entries via `.finally()`, unlike the write-lock helpers in other optimization classes. |\n| packages/typescript/src/optimization/pipeline.ts | Sequential optimizer pipeline (Bootstrap → GEPA → ACE); stage adoption guard and weight merging look correct. |\n| packages/typescript/src/optimization/slot-profile.ts | Incremental per-slot statistics with write-lock serialization; `writeLocks` map is never pruned, keyed by (model, slot, promptKey) triplet which can accumulate over time. |\n| packages/typescript/src/optimization/index.ts | Process-wide singletons for resolver, trace-writer, slot-profile, and AB-analyzer; rootDir change invalidates all singletons correctly. |\n\n</details>\n\n<h3>Sequence Diagram</h3>\n\n```mermaid\nsequenceDiagram\n    participant DPE as \"dynamicPromptExecFromState\"\n    participant TW as \"TraceWriter\"\n    participant RT as \"Runtime activeTraces\"\n    participant Neuro as \"plugin-neuro RUN_ENDED\"\n    participant SPM as \"SlotProfileManager\"\n    participant ABA as \"ABAnalyzer\"\n    participant AutoOpt as \"maybeRunAutoOptimization\"\n    participant Runner as \"OptimizationRunner\"\n\n    DPE->>TW: \"appendTrace (seq N, baseline)\"\n    DPE->>RT: \"activeTraces.set(traceId)\"\n    RT-->>Neuro: \"RUN_ENDED event\"\n    Neuro->>RT: \"getActiveTracesForRun(runId)\"\n    Neuro->>TW: \"appendTrace (seq N+1, enriched)\"\n    Neuro->>SPM: \"recordTrace\"\n    Neuro->>ABA: \"maybeAnalyze (fire-and-forget)\"\n    ABA->>TW: \"loadTracesForPrompt\"\n    ABA->>TW: \"appendABDecision\"\n    Neuro->>AutoOpt: \"maybeRunAutoPromptOptimization\"\n    AutoOpt->>SPM: \"shouldReoptimize?\"\n    AutoOpt->>Runner: \"run pipeline\"\n    Runner->>TW: \"loadTracesForPrompt (baseline only)\"\n    Runner->>SPM: \"markOptimized\"\n    Neuro->>RT: \"deleteActiveTrace(runId)\"\n```\n\n<sub>Reviews (2): Last reviewed commit: [\"docs: add review dismissal comments\"](https://github.com/elizaos/eliza/commit/4e6882e9a44254d54128aee955a6d41b7f799da7) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=27966843)</sub>\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-10T07:11:06Z",
      "mergedAt": null,
      "additions": 13189,
      "deletions": 875
    },
    {
      "id": "PR_kwDOMT5cIs7RXIoT",
      "title": "feat(core): dual-pressure shouldRespond, docs, and API surface",
      "author": "odilitime",
      "number": 6715,
      "body": "Implement speak_up/hold_back scoring with net-based clamp (REPLY/RESPOND to IGNORE when net <= -threshold), STOP exemption, and soft warn on high net + IGNORE. Add DUAL_PRESSURE_THRESHOLD env, MessageProcessingResult fields, and optional ResponseDecision pressure/classifierAction. Drop ANXIETY from initial composeState for the message pipeline; sync basic-capabilities shouldRespond return type and bypass env aliases.\r\n\r\nDocument behavior in SHOULD_RESPOND_DUAL_PRESSURE.md, DESIGN.md, ROADMAP.md, CHANGELOG, and READMEs; expand JSDoc and prompt template comments. Tests cover clamp, warn, result fields, and prompt ordering.\r\n\r\nMade-with: Cursor\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Changes the core message gating logic and prompt schema for ambiguous channels, which can materially affect when agents reply or stay silent. Risk is mitigated by a configurable threshold, STOP exemption, and added tests/docs, but behavioral regressions are still possible across deployments and custom templates.\n> \n> **Overview**\n> Introduces a **dual-pressure** LLM `shouldRespond` classifier for ambiguous channels that outputs `speak_up`/`hold_back` (0–100) plus `action`, computes `net`, and applies runtime consistency rules: **clamp** REPLY/RESPOND to IGNORE when `net <= -DUAL_PRESSURE_THRESHOLD`, **never** override STOP, and **warn** on high-net IGNORE.\n> \n> Extends the public API surface by adding `DualPressureScores`, exposing `dualPressure` and `shouldRespondClassifierAction` on `MessageProcessingResult`, and aligning `basic-capabilities` `shouldRespond` to return `ResponseDecision` with env alias fallbacks. Updates the default `shouldRespondTemplate`, removes `ANXIETY` from the initial `composeState` provider list for this pipeline, adds `DUAL_PRESSURE_THRESHOLD` to `.env.example`, and adds focused tests plus new documentation (`docs/SHOULD_RESPOND_DUAL_PRESSURE.md`, `ROADMAP.md`, DESIGN/README links).\n> \n> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit 096a60b162b08e362ecfe2f490219cc812d75f3b. Bugbot is set up for automated code reviews on this repo. Configure [here](https://www.cursor.com/dashboard/bugbot).</sup>\n<!-- /CURSOR_SUMMARY -->\n\n<!-- This is an auto-generated comment: release notes by coderabbit.ai -->\n## Summary by CodeRabbit\n\n* **New Features**\n  * Dual-pressure scoring (speak_up / hold_back) for should-respond decisions and a DUAL_PRESSURE_THRESHOLD setting to control clamping behavior\n  * Response metadata now surfaces dual-pressure scores and classifier action details\n\n* **Documentation**\n  * New dual-pressure design doc, updated READMEs, changelog, and roadmap entries describing behavior and configuration\n\n* **Tests**\n  * Added tests covering clamping, warning, and template/schema changes for the classifier\n\n* **Refactor**\n  * Updated response decision/type surfaces to include optional pressure/classifier fields\n<!-- end of auto-generated comment: release notes by coderabbit.ai -->\n\n<!-- greptile_comment -->\n\n<h3>Greptile Summary</h3>\n\nThis PR introduces a dual-pressure `shouldRespond` classifier that replaces the single-action LLM call with explicit `speak_up` / `hold_back` scores (0–100) plus an `action` field. A runtime clamp (\"gaslighting guard\") overrides REPLY/RESPOND to IGNORE when `net ≤ -DUAL_PRESSURE_THRESHOLD`, while STOP is always preserved. New fields on `MessageProcessingResult` expose classifier outcomes for tests and dashboards. Additional changes: `ANXIETY` dropped from initial `composeState`, env aliases for bypass lists, and updated JSDoc/docs.\n\nAll remaining findings are P2 (style/observability); no blocking correctness issues were found.\n\n<h3>Confidence Score: 5/5</h3>\n\nSafe to merge; all findings are P2 style/observability issues that do not affect correctness in the default configuration.\n\nThe core clamp/warn logic is correctly implemented and covered by new tests. Boundary conditions (STOP exemption, partial-score survival, empty-action fallback) are handled. The P2 items (T_hi mismatch when threshold is overridden, empty-string sentinel leaking into results, misleading STOP example) do not affect runtime behavior at the default DUAL_PRESSURE_THRESHOLD=20 and do not constitute data loss or silent misclassification in the expected operating range.\n\npackages/typescript/src/prompts.ts (T_hi hardcoding) and packages/typescript/src/services/message.ts (empty-string sentinel).\n\n<h3>Important Files Changed</h3>\n\n| Filename | Overview |\n|----------|----------|\n| packages/typescript/src/services/message.ts | Core logic: adds `applyDualPressureToClassifierAction` with clamp/warn and wires `dualPressure`/`shouldRespondClassifierAction` into the result; T_hi mismatch and empty-string sentinel are notable edge cases. |\n| packages/typescript/src/prompts.ts | Prompt rewritten to dual-pressure format with `speak_up`/`hold_back` fields; `T_hi = 20` is hardcoded and won't reflect operator overrides to `DUAL_PRESSURE_THRESHOLD`. |\n| packages/typescript/src/types/message-service.ts | Adds `DualPressureScores` interface and extends `MessageProcessingResult` / `ResponseDecision` with optional pressure fields; types are correct and well-documented. |\n| packages/typescript/src/basic-capabilities/index.ts | Return type aligned to `ResponseDecision`; env alias fallback via `||` for bypass list settings is straightforward and safe. |\n| packages/typescript/src/__tests__/message-service.test.ts | New tests cover clamp-to-IGNORE and high-net-IGNORE-warn paths; assertions on `dualPressure` object and `shouldRespondClassifierAction` are correct. |\n| packages/typescript/src/__tests__/prompts.test.ts | Updated to assert new `speak_up`/`hold_back` fields, `dual_pressure[2]`, `anti_gaming`, and ordering of `action_space` before `output`. |\n| .env.example | Documents `DUAL_PRESSURE_THRESHOLD` with correct default, range, and semantics. |\n\n</details>\n\n<h3>Flowchart</h3>\n\n```mermaid\n%%{init: {'theme': 'neutral'}}%%\nflowchart TD\n    A[Incoming Message] --> B{isAutonomous?}\n    B -- yes --> F[shouldRespondToMessage = true]\n    B -- no --> C{shouldRespond rule-based}\n    C -- DM/API/bypass skipEvaluation=true --> F\n    C -- ambiguous GROUP channel --> D[LLM Classifier\\ndynamicPromptExecFromState]\n    D --> E[applyDualPressureToClassifierAction]\n    E --> E1{scores parseable?}\n    E1 -- no / partial --> E2[pressure = null\\nfinalActionUpper = rawAction]\n    E1 -- yes --> E3{action = STOP?}\n    E3 -- yes --> E4[return STOP\\nnever clamped]\n    E3 -- no --> E5{net <= -threshold\\nAND isEngage?}\n    E5 -- yes --> E6[warn: clamping\\nfinalActionUpper = IGNORE]\n    E5 -- no --> E7{net >= threshold\\nAND action=IGNORE?}\n    E7 -- yes --> E8[warn: high net but IGNORE\\nallow model decision]\n    E7 -- no --> E9[pass through action]\n    E2 --> G\n    E4 --> G\n    E6 --> G\n    E8 --> G\n    E9 --> G\n    G{finalActionUpper\\nin nonResponseActions?} -- IGNORE / STOP / NONE --> H[shouldRespondToMessage = false]\n    G -- REPLY / RESPOND / other --> F\n    H --> I[Return result\\ndualPressure + shouldRespondClassifierAction]\n    F --> J[Run message pipeline]\n    J --> I\n```\n\n<sub>Reviews (1): Last reviewed commit: [\"feat(core): dual-pressure shouldRespond,...\"](https://github.com/elizaos/eliza/commit/484c7060b26442d5878ea62e8ec94885d538d1bb) | [Re-trigger Greptile](https://app.greptile.com/api/retrigger?id=27963751)</sub>\n\n> Greptile also left **3 inline comments** on this PR.\n\n<!-- /greptile_comment -->",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-10T06:23:41Z",
      "mergedAt": null,
      "additions": 610,
      "deletions": 33
    },
    {
      "id": "PR_kwDOMT5cIs7Rcpjq",
      "title": "feat(skills): add xquik skill for X/Twitter search via API",
      "author": "kriptoburak",
      "number": 6718,
      "body": "## Summary\n\nAdds **xquik** skill for X/Twitter search and research via the [Xquik](https://xquik.com) REST API. Uses `curl` + `jq` — no CLI install, no browser cookies, works in headless/server/Docker environments where the `bird` skill cannot authenticate.\n\n## The problem this solves\n\nThe existing `bird` skill requires **browser cookie extraction** (`auth_token` + `ct0`). This means:\n\n- Agents running on **servers** can't use it (no browser)\n- Agents in **Docker containers** can't use it (no browser)\n- Agents in **CI environments** can't use it (no browser)\n- Cookies **expire** and need manual rotation from a logged-in browser\n- GraphQL endpoints **break** when Twitter changes their frontend\n\nMost eliza agents run headless. They currently have **no way to search X/Twitter**.\n\n## What xquik adds\n\n- **Works everywhere**: just \\`curl\\` + \\`jq\\` + \\`XQUIK_API_KEY\\` env var\n- **Research workflow**: trends → top tweets → expert voices → synthesis\n- **Structured data extraction**: jq patterns for agent-friendly JSON\n- **Common search patterns**: sentiment analysis, product reactions, expert takes, link discovery\n- **Stable API**: REST, not GraphQL scraping — doesn't break on X frontend changes\n\n## When to use xquik vs bird\n\n| | xquik | bird |\n|---|---|---|\n| **Auth** | API key (env var) | Browser cookies (needs logged-in browser) |\n| **Server/Docker** | Works everywhere | Fails (no browser for cookies) |\n| **Search** | Stable REST API | GraphQL (breaks on X frontend changes) |\n| **Posting** | Not supported | Supported |\n\n**xquik** for search/research/reading on servers. **bird** for posting on local machines with a browser.\n\n## Changes\n\n| File | What |\n|------|------|\n| `packages/skills/skills/xquik/SKILL.md` | Full skill with search, user lookup, trends, research workflow, jq patterns |\n\n## Test plan\n\n- [x] SKILL.md follows the exact frontmatter format (name, description, homepage, metadata with otto)\n- [x] Requires only `curl` and `jq` (no binary install)\n- [x] Clear \"when to use\" section for agent decision-making\n- [x] Research workflow provides step-by-step agentic process\n- [x] jq extraction patterns give agents structured data\n\nBuilt with [Claude Code](https://claude.ai/code)",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-10T12:42:30Z",
      "mergedAt": null,
      "additions": 164,
      "deletions": 0
    },
    {
      "id": "PR_kwDOMT5cIs7RV1OG",
      "title": "fix: harden shouldRespond to reduce false positives in group channels",
      "author": "0xSolace",
      "number": 6714,
      "body": "## Problem\n\nAgents respond too aggressively in group channels. The `shouldRespond` LLM evaluation tends to be generous, causing the agent to respond to nearly everything — casual banter between users, messages already handled by other bots, and conversations where nobody asked for help.\n\n## Solution\n\n### 1. Self-message hard skip (TypeScript)\n\nAdded a pre-LLM guard that skips messages from the agent itself (`message.entityId === runtime.agentId`). This fires before any LLM call, saving API costs and preventing self-response loops.\n\n### 2. Stronger negative pressure in shouldRespond prompt\n\nAdded 4 new rules to the `shouldRespondTemplate` that push the LLM toward IGNORE in ambiguous group scenarios:\n\n- **\"do NOT respond to casual conversation between other users\"** — stops the agent from inserting itself into human-to-human chat\n- **\"if another bot or assistant already answered, stay quiet\"** — prevents pile-on when multiple agents are present\n- **\"if {{agentName}} responded to the last 2+ messages in a row, stop and let others talk\"** — anti-domination guard\n- **\"if nobody mentioned {{agentName}} or asked a direct question, IGNORE\"** — strongest filter for ambient messages\n\nThese complement the existing 6 rules without changing the response format or evaluation flow.\n\n## Changes\n\n| File | Change |\n|------|--------|\n| `packages/typescript/src/basic-capabilities/index.ts` | Self-message hard skip before LLM eval |\n| `packages/typescript/src/prompts.ts` | 4 new negative-pressure rules in shouldRespondTemplate |\n\n## What was removed from v1\n\nPer maintainer feedback: the `runOn` evaluator modes, `EvaluatorRunMode` type, and cross-language evaluator changes were removed. The event system already handles the \"always run\" case.",
      "repository": "elizaos/eliza",
      "createdAt": "2026-04-10T04:46:55Z",
      "mergedAt": null,
      "additions": 14,
      "deletions": 1
    }
  ],
  "codeChanges": {
    "additions": 2976,
    "deletions": 623,
    "files": 51,
    "commitCount": 65
  },
  "completedItems": [
    {
      "title": "Shaw/message service retry",
      "prNumber": 6717,
      "type": "other",
      "body": "maybe this is legit?\n\n<!-- CURSOR_SUMMARY -->\n---\n\n> [!NOTE]\n> **Medium Risk**\n> Modifies core runtime/plugin initialization and message-processing flow, which can affect agent responsiveness and service availability across deployments. Add",
      "files": [
        ".github/workflows/skill-review.yml",
        ".gitignore",
        "packages/docs/agents/personality-and-behavior.mdx",
        "packages/docs/guides/customize-an-agent.mdx",
        "packages/docs/what-you-can-build.mdx",
        "packages/elizaos/src/__tests__/create.test.ts",
        "packages/elizaos/src/commands/create.ts",
        "packages/prompts/prompts/add_contact.txt",
        "packages/prompts/prompts/message_classifier.txt",
        "packages/prompts/prompts/message_handler.txt",
        "packages/prompts/prompts/reflection_evaluator.txt",
        "packages/prompts/prompts/should_respond.txt",
        "packages/prompts/prompts/should_respond_with_context.txt",
        "packages/prompts/prompts/update_role.txt",
        "packages/prompts/specs/actions/core.json",
        "packages/prompts/specs/providers/core.json",
        "packages/python/elizaos/advanced_capabilities/__init__.py",
        "packages/python/elizaos/advanced_capabilities/actions/add_contact.py",
        "packages/python/elizaos/advanced_capabilities/actions/remove_contact.py",
        "packages/python/elizaos/advanced_capabilities/actions/roles.py",
        "packages/python/elizaos/advanced_capabilities/actions/schedule_follow_up.py",
        "packages/python/elizaos/advanced_capabilities/actions/search_contacts.py",
        "packages/python/elizaos/advanced_capabilities/actions/update_contact.py",
        "packages/python/elizaos/advanced_capabilities/evaluators/relationship_extraction.py",
        "packages/python/elizaos/advanced_capabilities/providers/contacts.py",
        "packages/python/elizaos/advanced_capabilities/services/__init__.py",
        "packages/python/elizaos/advanced_capabilities/services/follow_up.py",
        "packages/python/elizaos/advanced_capabilities/services/relationships.py",
        "packages/python/elizaos/advanced_capabilities/services/rolodex.py",
        "packages/python/elizaos/advanced_memory/prompts.py",
        "packages/python/elizaos/advanced_memory/types.py",
        "packages/python/elizaos/advanced_planning/actions/schedule_follow_up.py",
        "packages/python/elizaos/basic_capabilities/providers/contacts.py",
        "packages/python/elizaos/basic_capabilities/services/task.py",
        "packages/python/elizaos/basic_capabilities_compat.py",
        "packages/python/elizaos/generated/action_docs.py",
        "packages/python/elizaos/media/mime.py",
        "packages/python/elizaos/native_features.py",
        "packages/python/elizaos/prompts.py",
        "packages/python/elizaos/runtime.py",
        "packages/python/elizaos/services/__init__.py",
        "packages/python/elizaos/services/hook_service.py",
        "packages/python/elizaos/services/message_service.py",
        "packages/python/elizaos/services/trajectories.py",
        "packages/python/elizaos/types/generated/eliza/v1/agent_pb2.py",
        "packages/python/elizaos/types/generated/eliza/v1/agent_pb2.pyi",
        "packages/python/elizaos/types/generated/eliza/v1/message_service_pb2.py",
        "packages/python/elizaos/types/generated/eliza/v1/message_service_pb2.pyi",
        "packages/python/elizaos/types/generated/eliza/v1/model_pb2.py",
        "packages/python/elizaos/types/generated/eliza/v1/model_pb2.pyi"
      ]
    },
    {
      "title": "fix: remove dangling typescript symlink in packages/typescript",
      "prNumber": 6713,
      "type": "bugfix",
      "body": "## Summary\n- `packages/typescript/typescript` was a symlink → `/home/shaw/eliza/packages/typescript`, a path that only exists on one contributor's machine\n- Anything that recursively walks `packages/typescript` (e.g. plugin loaders that cop",
      "files": [
        "packages/typescript/typescript"
      ]
    }
  ],
  "topContributors": [
    {
      "username": "odilitime",
      "avatarUrl": "https://avatars.githubusercontent.com/u/16395496?u=c9bac48e632aae594a0d85aaf9e9c9c69b674d8b&v=4",
      "totalScore": 175.82026752709785,
      "prScore": 89.88226752709787,
      "issueScore": 0,
      "reviewScore": 85.5,
      "commentScore": 0.43799999999999994,
      "summary": "odilitime: Focused on advancing core functionality and system stability, opening two significant PRs in elizaos/eliza (#6715, #6716) while providing 19 detailed code reviews. Their work involved 48 commits across 224 files, with a primary emphasis on bugfix efforts and documentation updates."
    },
    {
      "username": "lalalune",
      "avatarUrl": "https://avatars.githubusercontent.com/u/18633264?u=e2e906c3712c2506ebfa98df01c2cfdc50050b30&v=4",
      "totalScore": 56.092773896576105,
      "prScore": 55.6547738965761,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.43799999999999994,
      "summary": "lalalune: Drove a significant infrastructure improvement by merging PR #6717 in elizaos/eliza, which implemented a message service retry mechanism through a substantial refactor of 357 files. This effort, supported by 16 PR comments, reflects a primary focus on complex system-level updates and bugfix work."
    },
    {
      "username": "kriptoburak",
      "avatarUrl": "https://avatars.githubusercontent.com/u/8755484?u=4230318f8449a95ec98e30fa2ffdf69ee2ade4f0&v=4",
      "totalScore": 18.19497273695029,
      "prScore": 18.19497273695029,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0,
      "summary": "kriptoburak: Focused on expanding platform capabilities by opening PR #6718 in elizaos/eliza to integrate X/Twitter search functionality via the new xquik skill. This work involved 3 commits and 300 lines of code changes, primarily centered on documentation updates to support this new feature."
    },
    {
      "username": "greptile-apps",
      "avatarUrl": "https://avatars.githubusercontent.com/in/867647?v=4",
      "totalScore": 18,
      "prScore": 0,
      "issueScore": 0,
      "reviewScore": 18,
      "commentScore": 0,
      "summary": "greptile-apps: No activity today."
    },
    {
      "username": "0xSolace",
      "avatarUrl": "https://avatars.githubusercontent.com/u/257989456?u=e0d4e0c6385403319241eb46ba647b49083d4a05&v=4",
      "totalScore": 12.21958872223978,
      "prScore": 12.019588722239781,
      "issueScore": 0,
      "reviewScore": 0,
      "commentScore": 0.2,
      "summary": "0xSolace: Focused on enhancing system reliability by opening PR #6714 in elizaos/eliza to harden the `shouldRespond` logic and reduce false positives. This effort, which involved 5 commits and 479 lines of code changes, reflects a primary focus on bugfix and feature work."
    }
  ],
  "newPRs": 5,
  "mergedPRs": 2,
  "newIssues": 0,
  "closedIssues": 2,
  "activeContributors": 6
}