contribution/compass
NousResearch/hermes-agent

Hermes Agent

411 signals · 364 observation events

Open repository ↗

The agent that grows with you

230.0K stars45.5K forksPythonMITaiai-agentai-agentsanthropicchatgptclaudeclaude-codecodexkeyword: Hermes Agent
PROJECT NEWS

Release, roadmap, and discussion

All news →
NousResearch/hermes-agent

Hermes Agent

Coding-Agent Infrastructure
Latest stable

Hermes Agent v0.20.0 (2026.8.3)

v2026.8.3
  • ✨ Highlights
  • Talk to Hermes — streaming, conversational voice with barge-in — Voice mode used to mean: speak, wait for the whole reply to generate, then listen to one long audio file. Now Hermes speaks clause-by-clause as the response streams, you can i
  • Wake words and hands-free control — Say your own open-vocabulary wake phrase ("hey Hermes", or anything you pick) and Hermes starts listening — detection runs on-device, so no audio leaves your machine while it waits. Multi-profile voice ro
  • Voice on every platform — Send a voice note to Hermes on WhatsApp, Feishu, DingTalk, LINE, QQ, Photon, or Weixin and it's transcribed and answered; auto-TTS replies are delivered platform-aware (opus where platforms want opus, captions atta
  • Research you can trust — grounded citations with fact-checking — The new grounded-citations skill makes Hermes produce research where every claim is backed by a verifiable source: quotes are matched against the actual page text (not halluci
Original release notes ↗

Publicly indicated next

  • No public prerelease or open milestone found.

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. changedupdatedAt, state
  2. discoveredinitial snapshot
  3. changedupdatedAt, metrics
  4. changedupdatedAt, state
  5. changedupdatedAt, metrics
  6. discoveredinitial snapshot
  7. changedupdatedAt, labels
  8. changedupdatedAt, labels, state
  9. changedupdatedAt, labels
  10. changedupdatedAt, labels
  11. changedupdatedAt, metrics
  12. changedupdatedAt, labels
  13. discoveredinitial snapshot
  14. discoveredinitial snapshot
  15. discoveredinitial snapshot
  16. discoveredinitial snapshot
  17. changedtext, updatedAt, metrics
  18. changedupdatedAt
  19. discoveredinitial snapshot
  20. discoveredinitial snapshot
  21. discoveredinitial snapshot
  22. discoveredinitial snapshot
  23. changedupdatedAt, metrics
  24. changedtext, updatedAt
  25. discoveredinitial snapshot
  26. discoveredinitial snapshot
  27. discoveredinitial snapshot
  28. discoveredinitial snapshot
  29. changedupdatedAt, metrics, labels
  30. discoveredinitial snapshot
50 shown
pull request

feat: add needs review tracking for skills and update status output

## Summary Adds recent outcome telemetry for skills and surfaces a `needs_review` signal in curator reporting. ## Why The curator's automatic transitions (active → stale → archived) are driven purely by recency. A skill that is invoked constantly and fails constantly looks identical to one that works fine. This PR adds an outcome dimension so unreliable skil

importance 1@Gabrielnklopentype/featurecomp/agentcomp/clitool/skillsP3Original evidence ↗
pull request

fix(desktop): downscale large images in composer preview to prevent UI freeze

## What does this PR do? Prevents the Desktop renderer from freezing when pasting large images (Retina screenshots >5MB / 6000×4000px) into the chat composer. ### Root cause The paste pipeline reads the full-resolution image into memory, writes it to disk unchanged, then reads it back as a base64 data URL and assigns it directly to an `<img>` element for the

importance 1@DavidMetcalfetype/bugP3sweeper:blast-moderatecomp/desktopOriginal evidence ↗
pull request

test(kanban): cover delegated CLI refusal exit status

## Current upstream state - Current published head: `15cec68ab8c83a866aedd61f4a773e7bac706e2e` - Base `main`: `6564f319a647b47de391cab2f608660323804a2b` - Server-side `update-branch --rebase`: already up-to-date - Current GitHub state: `MERGEABLE / BLOCKED`; no checks reported and no review is attached to this head. ## Follow-up update Rebased onto upstream

importance 1@vadelma-agenttype/bugcomp/cliP3sweeper:blast-containedOriginal evidence ↗
pull request

feat(tui): add exact code block copying

"Addition of CopyBlocks I got tired of manually formatting the code block commands Hermes writes. This feature preserves raw fenced content and gives exact-copy blocks in both TUI and CLI frontends. ## What it does ### TUI - Clickable copy controls on every fenced code block - Copies raw content between fences — no box-drawing, no decorations - /cc: single b

importance 1@B-A-M-Nopentype/featurecomp/clicomp/tuiP3sweeper:risk-compatibilityOriginal evidence ↗
pull request

feat(prompt): agent.skills_catalog_mode to compact the skills catalog on chat surfaces

## What does this PR do? The messaging/chat system prompt re-sends a large stable cache prefix on every turn, and the `<available_skills>` catalog block is its single largest compressible line item. The renderer already has a names-only demotion lever (`build_skills_system_prompt(compact_categories=...)`), but it is gated behind the coding posture and the in

importance 1@wernerhptype/featurecomp/agenttool/skillsarea/configP3Original evidence ↗
pull request

test(gateway): make unset model override explicit in background fixture

## Summary Make the `/background` gateway tests exercise the real **no model override** path instead of a truthy mock value that looks like a persisted override. ## Why this matters `GatewayRunner` rehydrates a session's model override before starting a background task. In production, `SessionStore.get_model_override()` returns `None` when the user has not s

importance 1@vadelma-agentopentype/testcomp/gatewayP3sweeper:risk-automationsweeper:blast-containedOriginal evidence ↗
pull request

feat(provider/deepseek): apply peak-hour rate multiplier (#72662)

## Summary Implements #72662: Apply DeepSeek peak-hour rate multiplier. DeepSeek announced peak-hour pricing on 2026-07-26 with 2x rate multiplier during: - **01:00 – 04:00 UTC** (daily) - **06:00 – 10:00 UTC** (daily) All other hours: standard rate. ## Changes ### `agent/usage_pricing.py` - Added `_deepseek_peak_hour_multiplier()` — returns `Decimal("2")` w

importance 1@webtecnicaclosedtype/featurecomp/agentprovider/deepseekP3sweeper:incoherentOriginal evidence ↗
pull request

fix(auxiliary): preserve raw base_url for anthropic_messages in anonymous custom branch

## Summary When `api_mode: anthropic_messages` is set and the custom provider's `base_url` ends in `/anthropic` (e.g. `https://ai.hatz.ai/v1/anthropic`), the anonymous custom provider branch in `resolve_provider_client()` unconditionally calls `_to_openai_base_url()` which strips the `/anthropic` suffix and appends `/v1`, producing a mangled URL like `https:

importance 1@0xr00tf3rr3tclosedtype/bugduplicatecomp/agentprovider/anthropicP2Original evidence ↗
pull request

fix(session): filter technical history from auto-title guard

## What does this PR do? Technical `role="user"` records are persisted for context compaction, background-process notifications, model changes, image attachments, and replayed history. The existing auto-title guard counted those records as user turns, so a session could remain untitled even though a real exchange had completed. This keeps the intentional fir

importance 1@Christopher-Schulzetype/bugcomp/agentP3needs-decisionsweeper:risk-session-stateOriginal evidence ↗
pull request

fix(langfuse): shutdown client on session finalize to avoid interpreter-teardown TypeError

## Problem Quitting a Hermes session with the `observability/langfuse` plugin enabled prints a noisy traceback: ``` Exception ignored in: <generator object Langfuse._create_span_with_parent_context at 0x...> Traceback (most recent call last): File ".../langfuse/_client/client.py", line 1297, in _create_span_with_parent_context File ".../opentelemetry/trace/_

importance 1@bgodlinclosedtype/bugduplicatecomp/pluginsP3Original evidence ↗
pull request

fix(gateway): route approval/denial replies before busy handler

## What does this PR do? Fixes the gateway busy handler so that approval/denial replies are routed to the canonical `/approve`/`/deny` handlers before the generic queue/steer/interrupt busy logic can consume them. The second (and subsequent) pending dangerous-command approval in the same agent run could be missed when the user's reply reached the busy handle

importance 1@Christopher-Schulzetype/bugcomp/gatewayP2Original evidence ↗
pull request

fix(desktop): keep-alive hidden panes can no longer paint through

## Problem Closes #79833 — with Inline Embeds set to "Always", an X/Twitter card that auto-loads in one session keeps painting over the whole UI after switching to another session, the Artifacts view, or Settings. It also survives a renderer reload (Ctrl+R). ## Root cause Keep-alive tabs stay **mounted** when inactive and are hidden with `visibility: hidden`

importance 1@DavidMetcalfeopentype/bugP3comp/desktopOriginal evidence ↗
pull request

fix: ignore glob-shaped skill support paths

## What does this PR do? Direct URL skill installation scans SKILL.md for referenced support files. Prose such as ``references/*.md`` currently matches the local-path parser, causing Hermes to request a literal file named `*.md` and reject otherwise valid skill bundles. This change ignores glob-shaped path candidates (`*`, `?`, `[` or `]`) while continuing t

importance 1@fifeliopentype/bugtool/skillsP2Original evidence ↗
pull request

feat(tools): compose deferred tools in execute_code

## Summary - let local `execute_code` programs search, inspect, and invoke deferred MCP and plugin tools through Hermes' existing Tool Search bridge - build the `execute_code` schema from the final per-session tool surface while preserving its established direct terminal, file, and web helper umbrella - preserve session identity and toolset scope through nes

importance 1@DomGriecotype/featureinnovationcomp/toolstool/mcptool/code-execOriginal evidence ↗
pull request

fix(langfuse): finalize open root spans at exit so short-lived processes export complete traces

## What Short-lived Hermes processes (kanban workers, `hermes chat -q` one-shots, cron jobs) export **anonymous traces** to Langfuse: no name, no `sessionId`, empty metadata — just a bag of orphaned observations. On a board running a few parallel workers this quickly becomes the majority of traces (33 of the most recent 50 on the instance where this was diag

importance 1@aldoeliacimclosedtype/bugcomp/pluginsP3telemetryOriginal evidence ↗
pull request

feat(kanban): expose privacy-safe lifecycle activity

## Summary Add a bounded read-only kanban activity projection for operator dashboards. The new command is: hermes kanban activity --json --limit 80 It returns only pseudonymous event/work references, lifecycle kind, timestamp, and event-time profile when available. It never returns raw task/event/run IDs, task title/body/result/comments, payloads, claim lock

importance 1@moonweavetype/featurecomp/cronP3sweeper:risk-session-statesweeper:risk-compatibilityOriginal evidence ↗
pull request

fix(cli): don't serve stale update-check results after fetch failure

## What does this PR do? When `_check_via_local_git`'s `git fetch origin main` fails (timeout, offline, DNS resolution failure), the code silently fell through to compare `HEAD` against the stale `origin/main` tracking ref. That stale ref hadn't been updated, so `git rev-list --count HEAD..origin/main` could report `0` (up to date) even when upstream had mov

importance 1@rkfshaktiopenOriginal evidence ↗
pull request

feat(plugins): add safe exact-session message delivery seam

## Summary Adds a small, generic host-owned delivery seam so standalone plugins can route conversational input to the correct live Hermes session without accessing private host queues or interrupting active tools. This is the Hermes core prerequisite for the standalone [Hermes Walkie Talkie](https://github.com/Sahil-SS9/hermes-walkie-talkie) plugin and for l

importance 1@Sahil-SS9type/featurecomp/clicomp/gatewaycomp/tuicomp/pluginsOriginal evidence ↗
pull request

fix(api): stamp approval.request events with session_id

## Problem `/v1/runs` SSE streams emit `approval.request` events **without `session_id`** — only `run_id`. Every other event in the same stream goes through `_event_payload()`, which injects `session_id`; `_approval_notify` pushes the raw dict straight onto the queue. The Desktop renderer routes gateway events through `resolveGatewayEventSessionId()` (`apps/

importance 1@yflmq001opentype/bugcomp/gatewayP2sweeper:risk-message-deliveryOriginal evidence ↗
pull request

fix(agent): strip empty tool_calls on the auxiliary client path

## What does this PR do? Strict OpenAI-compatible providers (DeepSeek v4, **Console Go / opencode.ai zen**) reject an assistant message carrying `tool_calls: []` with HTTP 400 `Invalid 'messages[N].tool_calls': empty array. Expected an array with minimum length 1, but got an empty array instead.` The main loop already strips these pre-send in `sanitize_api_m

importance 1@falling-streamletopentype/bugcomp/agentP2Original evidence ↗
pull request

fix(gateway): replay the transcript spool in drop order with full fidelity on restart (supersedes #78323)

`supersedes #78323` ## Credit @686f6c61's #78323 found both of these defects first, and diagnosed both correctly. Its `_next_spool_file_id()` docstring names the ordering bug exactly — *"Recovery walks `sorted(glob("*.json"))`. uuid4 names re-insert out of order after a burst of pending-cap spools"* — and its `append_kwargs` loop is a direct attempt at the f

importance 1@briandevanstype/bugcomp/gatewayP2needs-decisionsweeper:risk-session-stateOriginal evidence ↗
pull request

fix(gateway): honor per-platform session isolation overrides

## Summary - honor per-platform `group_sessions_per_user` and `thread_sessions_per_user` session-key overrides - preserve nested `<platform>.extra` values while loading config - keep authorization, persisted `/resume` scoping, Discord prospective-thread attribution, and sender attribution aligned with the same effective per-platform isolation policy ## Test

importance 1@Diaspar4uopentype/bugcomp/gatewayarea/configP2sweeper:risk-session-stateOriginal evidence ↗
pull request

feat(whatsapp): observe authorized group context before response

## Summary - optionally retain authorized unmentioned WhatsApp group traffic in the shared transcript - invoke the agent only when trusted native WhatsApp mention metadata targets the bot - keep observed chatter context-only on later addressed turns - canonicalize Baileys device-qualified IDs so native bot mentions match reliably - bypass plain-text heuristi

importance 1@Diaspar4uopentype/featurecomp/gatewaycomp/pluginsplatform/whatsappP3Original evidence ↗
pull request

fix(gateway): mark reply-to snippet truncation explicitly

Fixes #84920. ## The bug `gateway/run.py` cut the quoted reply text at 500 chars with no marker, so an agent receiving `[Replying to: "..."]` could not tell a genuinely short quote from a long one that had been clipped. The failure mode in the issue needs both halves to bite: a user replies to a long report *the agent itself delivered*, the agent sees its ow

importance 1@deepspace28type/bugduplicatecomp/gatewayP2sweeper:risk-message-deliveryOriginal evidence ↗
pull request

fix(gateway): pool-route voice RPCs so STT lazy install can't block WS sends

## Problem Desktop "send message" does nothing for minutes after a fresh launch, even though the backend boots fine (`Hermes backend is ready`). Sending a message (WS `prompt.submit`) never reaches the agent. ## Root cause `voice.toggle` (status action) → `check_voice_requirements()` → STT provider auto-detect → `_try_lazy_install_stt()` → `ensure("stt.faste

importance 1@hustwkrclosedtype/bugcomp/tuitool/ttsP1Original evidence ↗
pull request

fix: honor max turns in ACP sessions

ACP currently loads config.yaml but omits agent.max_turns when constructing AIAgent, leaving ACP/Buzz sessions capped at the constructor default of 90. This passes a validated positive agent.max_turns as max_iterations while preserving the constructor default for missing or invalid values. Verification: - python -m pytest tests/acp/test_session.py -o "addopt

importance 1@s-c-h-a-f-e-rtype/bugduplicatecomp/acparea/configP4Original evidence ↗
pull request

fix(guard): tolerate NUL bytes in referenced-script paths (os.open ValueError)

## Problem `_read_referenced_script()` calls `os.open(path)` and catches only `OSError`. A script path containing an embedded NUL byte (e.g. decoded binary contents tokenized as a path, or a crafted command line) makes `os.open` raise `ValueError: embedded null character in path` — which crashes the whole terminal-tool call with a traceback instead of allowi

importance 1@fontvutype/bugduplicatecomp/cronP3Original evidence ↗
pull request

fix(desktop): bound large composer image previews

## What does this PR do? Fixes #41169. Supersedes #68744 while preserving David Metcalfe's original authorship on its two commits, replayed onto current `main`. Follow-up commits harden the fix for the reproduced 72-image failure and the async races exposed during independent review. The Desktop composer previously retained full-resolution image data URLs an

importance 1@frizikkopentype/bugP3comp/desktopOriginal evidence ↗
pull request

fix(read_file): dedup key uses realpath to avoid cross-path false positives (#85333)

## Fix for #85333 ### Problem The dedup cache keyed on without canonicalizing through . When the same file content exists at two different paths (git worktrees, clones, symlinked directories), both paths could resolve to the same normalized string, causing a false-positive dedup stub on the second path — the tool returns with instead of the actual file conte

importance 1@andrexibizaopentype/bugtool/fileP2Original evidence ↗
pull request

fix(gateway): clear typing indicator when cancel_session_processing gives up

## Problem When an agent processing task gets stuck in blocking I/O (e.g. a hung `web_extract` call lasting 961s), the inactivity watchdog fires, `cancel_session_processing` cancels the task, waits 5s, then unblocks dispatch — but the `_keep_typing` refresh loop keeps running. The user sees an infinite "typing…" indicator in Telegram with no way to stop it s

importance 0@vincent-wen789type/bugcomp/gatewayP2sweeper:risk-session-statesweeper:risk-message-deliveryOriginal evidence ↗
pull request

Fix/tui focus redraw

## What does this PR do? <!-- Describe the change clearly. What problem does it solve? Why is this approach the right one? --> ## Related Issue <!-- Link the issue this PR addresses. If no issue exists, consider creating one first. --> Fixes # ## Type of Change <!-- Check the one that applies. --> - [ ] 🐛 Bug fix (non-breaking change that fixes an issue) - [

importance 0@PaytonBurbankclosedtype/bugcomp/clicomp/tuiP2sweeper:risk-message-deliveryOriginal evidence ↗
pull request

feat(memory): add sync_recall option for current-turn relevance

## Summary Closes #5820. Adds a `memory.sync_recall: true` config option that switches memory providers from background prefetch to synchronous recall at turn start. ## Problem The current model queues a background recall at turn end using that turn's query. The next turn consumes this result — which is based on the *previous* message. When topics change bet

importance 0@heathleyclosedtype/featurecomp/agentcomp/pluginstool/memoryP3Original evidence ↗
pull request

fix(agent): unify local OpenAI-compatible provider aliases to custom (#62213)

## What does this PR do? Local OpenAI-compatible provider aliases (`vllm`, `llamacpp`, `llama.cpp`, `llama-cpp`) were normalized **inconsistently** across the three provider-name tables Hermes uses, which is the "custom, local, custom:local" confusion reported in the issue and made it hard to configure a working local endpoint from `config.yaml`: | alias | `

importance 0@PRATHAMESH75opentype/bugcomp/cliarea/configP3sweeper:risk-compatibilityOriginal evidence ↗
pull request

fix(gateway): bound systemd planned-restart helper

## Summary - bound the transient systemd planned-restart helper to `restart_drain_timeout + 5s` - after that grace period, re-read the unit's `MainPID` and only force-kill when it still matches the original gateway PID - reset and restart the unit as before, using the resolved `systemctl` path - add focused coverage for user-unit scope, timeout derivation, P

importance 0@carljborgopentype/bugcomp/gatewayP2sweeper:risk-message-deliveryOriginal evidence ↗
pull request

fix(guardrails): loop-detect read-only shell commands in terminal

## Problem A single `terminal` call repeated **517 times** in one turn, ~46 minutes, each returning a byte-identical `[]` with `exit_code: 0`. Nothing stopped it until `max_iterations`. ``` terminal {"command":"cd ~/repo && gh api repos/o/r/pulls/N/reviews 2>&1","timeout":15} -> {"output": "[]", "exit_code": 0, "error": null} x517 ``` Both loop detectors in

importance 0@rodrigogstype/bugcomp/agentP3Original evidence ↗
pull request

fix(fallback): benched credentials must not disqualify a chain entry

## Problem A healthy provider silently vanished from the fallback chain, leaving a free-tier model as the last resort for 47 minutes. When DeepSeek returned `402 Insufficient Balance`, `credential_pool` benched the key for an hour (`EXHAUSTED_TTL_DEFAULT_SECONDS`; 402 is billing by definition, so it correctly keeps the full bench). `resolve_provider_client`

importance 0@rodrigogstype/bugcomp/agentprovider/deepseekarea/authP2Original evidence ↗
pull request

fix(web): a benched lazy-install must not disable an importable SDK

## Problem `_ensure_parallel_sdk_installed` in `plugins/web/parallel/provider.py` documented one contract and implemented the opposite. Its docstring promised to swallow a benign availability error from the lazy-deps helper and let the subsequent `from parallel import ...` be the real gate on whether the SDK is usable. The handlers were: ```python except Imp

importance 0@rodrigogstype/bugcomp/pluginstool/webarea/configP3Original evidence ↗
pull request

fix(update): preserve non-prefixed systemd gateway process

## Summary Fixes an updater safety gap for **non-prefixed systemd-managed Hermes gateways**. `hermes update` already excludes active `hermes-gateway*` service PIDs from its manual-process sweep. A valid gateway run owned by a custom system unit (for example `gaiasignal-agent-hermes.service`) was not in that set, then was rediscovered as a manual process and

importance 0@pankajarmopentype/bugcomp/cliP2sweeper:risk-compatibilityarea/install-updateOriginal evidence ↗
pull request

fix(tests): live module must not import the developer's .env at collection

## Symptom Two tests passed in isolation and failed in a wide run: ``` tests/tools/test_web_tools_config.py::TestBackendSelection::test_fallback_no_keys_defaults_to_firecrawl AssertionError: assert 'searxng' == 'firecrawl' - firecrawl + searxng tests/tools/test_web_tools_config.py::TestCheckWebApiKey::test_null_backend_value_does_not_crash AssertionError: as

importance 0@rodrigogstype/testcomp/agentP3Original evidence ↗
pull request

feat(api): surface agent context-window occupancy to thin clients

## What does this PR do? Surface the agent's live context-window occupancy as persisted session fields, so thin clients can display meaningful context usage without computing it from token sums or probing `model_config`. Currently the API server's session response exposes cumulative lifetime counters (`input_tokens` through `reasoning_tokens`) but nothing th

importance 0@mr-septemberopentype/featurecomp/agentcomp/gatewayP3sweeper:risk-session-stateOriginal evidence ↗
pull request

fix(memory): entry-point + project-dir discovery parity for out-of-tree providers (salvage of #18842, #40644, #76567)

Closes #40101. ## Problem `plugins/memory/` is closed to new providers, so every new memory backend now ships out of tree. But the out-of-tree path is measurably weaker than the in-tree one, and the docs already promise otherwise. `plugins/memory/__init__.py:_iter_provider_dirs()` walks **directories only** — bundled and `$HERMES_HOME/plugins/`. The general

importance 0@gigabyte22opentype/bugcomp/clicomp/pluginstool/memorytool/skillsOriginal evidence ↗
pull request

feat(gateway): add webhook completion scripts

## What does this PR do? Adds an optional route-level `completion_script` for static, agent-backed webhook routes. Webhook requests continue to return `202 Accepted` immediately. After the asynchronous agent run reaches a terminal `success` or `failure`, Hermes invokes the configured script with a versioned JSON envelope on stdin. This gives external orchest

importance 0@chenwei791129opentype/featurecomp/gatewayplatform/webhookP3sweeper:risk-message-deliveryOriginal evidence ↗
pull request

perf(desktop): keep built-in theme fonts local

## Summary Keep the built-in Nous and Midnight theme font stacks fully local. - Midnight now uses the JetBrains Mono WOFF2 faces already shipped in the Desktop bundle instead of requesting the same family from Google Fonts. - The default Nous stack uses native monospace faces first and bundled JetBrains Mono as its cross-platform fallback, removing an unused

importance 0@alexdev03opentype/perfP3comp/desktopOriginal evidence ↗
pull request

feat(desktop): add tab close controls with focus recovery

## Summary - Add accessible direct close controls to closeable desktop pane and session tabs while preserving middle-click, modifier-click, and context-menu behavior. - Route pointer, keyboard, menu, global, terminal, confirmation, visibility, and bulk-close paths through a shared focus-recovery lifecycle. - Keep close targeting aligned with the tab the rend

importance 0@nicolasdmolinaopentype/featureP3comp/desktopOriginal evidence ↗
pull request

feat(compaction): trust explicit Responses proxy origins

## Problem Hermes supports native OpenAI Responses compaction only for hard-coded first-party routes. A user can explicitly configure a compatible Responses proxy, but Hermes still disables native compaction solely because the origin is not `api.openai.com`. ## Approach Add an empty-by-default `compression.codex_responses_native_trusted_base_urls` allowlist.

importance 0@aneymtype/featurecomp/agentprovider/openaiarea/configP3Original evidence ↗
pull request

feat(skills): add configurable skill index injection

## Summary - add `skills.inject_index` (default `true`) to control `<available_skills>` injection - add `--no-skills-index` for classic CLI, TUI, and `-z` one-shot runs - keep skill tools available when the prompt index is omitted ## Why Large skill catalogues can consume substantial prompt space even when a caller provides another discovery surface. This fo

importance 0@Vocllumopentype/featurecomp/agentcomp/clicomp/tuitool/skillsOriginal evidence ↗
pull request

fix(skills): emit lifecycle events for removals

## Summary - emit `deleted` after a successful hard delete through `skill_manage` - emit `uninstalled` after a successful Skills Hub uninstall - preserve provenance before removal and keep curator archives on their existing `archived` action - document the complete observer scope and its filesystem boundary ## Why The merged `on_skill_lifecycle` observer fro

importance 0@Vocllumopentype/bugtool/skillsP3Original evidence ↗
pull request

feat(langfuse): widen tracing to errors, sessions, subagents, and MoA fan-out

Widens the bundled Langfuse plugin from 6 hooks to 11 and fixes two attribution bugs. Also adopts the shutdown/atexit lifecycle fixes from #81054 and #82332 (original authorship preserved) with two interaction-fix follow-up commits. ## Model attribution `on_pre_llm_request` and `on_post_llm_call` read `model`, the agent's attribute at hook time. It goes stal

importance 0@erosikaclosedtype/featurecomp/agentcomp/pluginsP3telemetryOriginal evidence ↗
pull request

fix(desktop): drop stale inflight-journal folds that duplicate answers

## What does this PR do? A stale inflight-journal fold can re-emit answers already present in the transcript, duplicating messages. Skip folds whose journal state is stale relative to the transcript. ## Related Issue Fixes #85308 ## Type of Change - [x] 🐛 Bug fix (non-breaking change that fixes an issue) - [ ] ✨ New feature (non-breaking change that adds fun

importance 0@Nicolas-Formentonopentype/bugP3sweeper:risk-session-statecomp/desktopOriginal evidence ↗
pull request

fix(agent): title ladder descends on empty completions too

## What does this PR do? The title ladder descends on schema/format failures but returned unconditionally on empty 200 completions, leaving sessions untitled. It now descends to the next rung on empty completions too. ## Related Issue Fixes #85307 Related: #83186, #83725, #82890 — this PR is a superset of the ladder family (triage comment confirms); if one o

importance 0@Nicolas-Formentonopentype/bugcomp/agentprovider/deepseekprovider/kimiP3Original evidence ↗