# NousResearch/hermes-agent · Gateway media attachments not reaching AI agents

## Open now

- 2 issues, 1 PR open on GitHub.
- #18204: Inbound videos from all platforms (WeChat, etc.) are silently ignored — no transcription, no vision analysis
- #57928: BUG - file attachment broken
- PR #57946: fix(gateway): preserve media attachments in /steer and /goal kickoff events

Multiple issues and fixes concern image, video, and file attachments being dropped or silently ignored when routed through gateway slash commands and background/deferred agent tasks across Telegram, Discord, Slack, and other platforms. The work spans both bug reports and corresponding fixes for preserving and forwarding media payloads to agents.

## TL;DR

- 10 member(s): 2 open issue(s), 3 closed issue(s), 1 open PR(s), 1 merged PR(s), 3 PR(s) closed without merging.
- A fix was merged to main in PR #25782. Verify it addresses your case.
- **Recommended:** read PR #25782 (and any competing PRs below) before filing. Confirm the merged change covers your symptom.

## Maintainer resolution verdict

- Internal-tracker verdict over this cluster's issue members: `partially_resolved` · deciding PR(s): `pr-25782`. This is distinct from the fix status above. Weigh it yourself.

## How this cluster was grouped

- Link evidence (`STRUCTURAL_PARTIAL`): some members are connected by structural evidence (shared changed files, or a closing/superseded reference); the rest are joined by an automated relevance judgement over their text.
- Members outside that structural core may belong to a different underlying problem.
- Pairwise link density `0.14`: the share of member pairs that carry a link, counting a structural link in full and a relevance-only link at 0.36. `1.00` means every pair is linked.

## Open related issues

- #18204: Inbound videos from all platforms (WeChat, etc.) are silently ignored — no transcription, no vision analysis
- #57928: BUG - file attachment broken

## Closed / duplicate issues

- #25614: \[Bug\]: /btw and /background drop image attachments — background agent never sees them
- #41366: Telegram incoming video messages cached but never exposed to AI agent
- #67041: /queue slash command does not accept images in Discord gateway

## Prior & competing PRs

- **#25782: fix(gateway): forward image attachments to background agent tasks (#25603)**. merged to main · fix tier `verified`
  - maintainer direction: category `merged`; implication `superseded`
  - files: `gateway/run.py`
  - fix hunks:
  - `gateway/run.py`

    ```diff
    @@ -10355,6 +10355,10 @@ async def _handle_background_command(self, event: MessageEvent) -> str:
     
             event_message_id = self._reply_anchor_for_event(event)
     
    +        # Forward image/audio attachments so the background agent can see them.
    +        media_urls = list(event.media_urls) if event.media_urls else []
    +        media_types = list(event.media_types) if event.media_types else []
    +
             # Fire-and-forget the background task
             _task = asyncio.create_task(
                 self._run_background_task(
    ```

    ```diff
    @@ -10362,6 +10366,8 @@ async def _handle_background_command(self, event: MessageEvent) -> str:
                     source,
                     task_id,
                     event_message_id=event_message_id,
    +                media_urls=media_urls,
    +                media_types=media_types,
                 )
             )
             self._background_tasks.add(_task)
    ```

    ```diff
    @@ -10376,10 +10382,15 @@ async def _run_background_task(
             source: "SessionSource",
             task_id: str,
             event_message_id: Optional[str] = None,
    +        media_urls: Optional[List[str]] = None,
    +        media_types: Optional[List[str]] = None,
         ) -> None:
             """Execute a background agent task and deliver the result to the chat."""
             from run_agent import AIAgent
     
    +        media_urls = media_urls or []
    +        media_types = media_types or []
    +
             adapter = self.adapters.get(source.platform)
             if not adapter:
                 logger.warning("No adapter for platform %s in background task %s", source.platform, task_id)
    ```

    ```diff
    @@ -10415,6 +10426,23 @@ async def _run_background_task(
                 self._service_tier = self._load_service_tier()
                 turn_route = self._resolve_turn_agent_config(prompt, model, runtime_kwargs)
     
    +            # Enrich the prompt with image descriptions so the background
    +            # agent can see user-attached images (same as the main flow).
    +            enriched_prompt = prompt
    +            if media_urls:
    +                image_paths = []
    +                for i, path in enumerate(media_urls):
    +                    mtype = media_types[i] if i < len(media_types) else ""
    +                    if mtype.startswith("image/"):
    +                        image_paths.append(path)
    +                if image_paths:
    +                    try:
    +                        enriched_prompt = await self._enrich_message_with_vision(
    +                            prompt, image_paths,
    +                        )
    +                    except Exception as e:
    +                        logger.warning("Background task vision enrichment failed: %s", e)
    +
                 def run_sync():
                     agent = AIAgent(
                         model=turn_route["model"],
    ```

    ```diff
    @@ -10446,7 +10474,7 @@ def run_sync():
                     )
                     try:
                         return agent.run_conversation(
    -                        user_message=prompt,
    +                        user_message=enriched_prompt,
                             task_id=task_id,
                         )
                     finally:
    ```
- **#41408: fix(gateway): expose cached video file path to AI agent for Telegram video messages**. closed without merge · fix tier `suggested`
  - maintainer direction: category `implemented_elsewhere`; implication `superseded`; refs `2a5dc0ef3df433a36abed9ee544ea067d807c438`, `#41366`
  - _suggested-tier fix detail withheld; re-request with `?tier=all` to include it._
- **#18243: fix(gateway): process inbound video messages via ffmpeg extraction**. closed without merge
  - maintainer direction: category `stale_abandoned`; implication `active`
- **#25603: fix(gateway): forward image attachments to background agent tasks**. closed without merge
  - maintainer direction: category `merged_via`; implication `superseded`; refs `#25782`
- **#57946: fix(gateway): preserve media attachments in /steer and /goal kickoff events**. open
  - maintainer direction: category `silent_close`; implication `active`
  - files: `apps/desktop/src/store/session.test.ts`, `apps/desktop/src/store/session.ts`, `gateway/run.py`, `gateway/slash_commands.py`, `tests/gateway/test_goal_command_media_passthrough_57928.py`, `tests/gateway/test_steer_command.py`

## Fix status

- Merged to main in PR #25782 (cited above). No release data is tracked. Verify downstream.
- Fix last verified (merged) `2026-05-14`.
- Subsystem: `gateway`
