Missing platform registrations causing KeyErrors

NousResearch/hermes-agent ยท cluster 3511 ยท gateway

Data as of

Nothing open on GitHub. Fix merged in #3583. Check it covers your case.

The short answer

0open issues
0open PRs
10items grouped
Known?
Yes. 10 related items grouped here, 3 issues already closed.
Fix event
A fix was merged to main in PR #3583. Check it covers your case. No release data is tracked.
Tracker
The maintainers' tracker marks this unresolved. That is separate from the fix event.
Still open
Nothing open on GitHub.

Multiple platforms (SMS/Twilio, webhook, Mattermost, Matrix, DingTalk) are absent from the PLATFORMS registry or toolset registration, causing KeyErrors and configuration failures at runtime. Members include both bug reports and proposed fixes for these missing registrations.

Open issues0

No open issues.

Open PRs0

No open pull requests.

Fixes on record

Merged to main. A stamp counts the issues a fix is linked to.

  • #3583 fix: add missing mattermost/matrix/dingtalk toolsets + platform consistency tests (salvage #3512)

    merged to main

    files: hermes_cli/skills_config.py, hermes_cli/tools_config.py, tests/hermes_cli/test_tools_config.py, toolsets.py

  • #4660 fix: webhook platform support โ€” skip home channel prompt, disable tool progress (salvage #4363)

    merged to main

    files: gateway/run.py, hermes_cli/skills_config.py, hermes_cli/tools_config.py, toolsets.py

    Show the diff
    • gateway/run.py
      @@ -2449,7 +2449,8 @@ async def _handle_message_with_agent(self, event, source, _quick_key: str):
                   )
               
               # One-time prompt if no home channel is set for this platform
      -        if not history and source.platform and source.platform != Platform.LOCAL:
      +        # Skip for webhooks - they deliver directly to configured targets (github_comment, etc.)
      +        if not history and source.platform and source.platform != Platform.LOCAL and source.platform != Platform.WEBHOOK:
                   platform_name = source.platform.value
                   env_key = f"{platform_name.upper()}_HOME_CHANNEL"
                   if not os.getenv(env_key):
      @@ -5356,7 +5357,10 @@ async def _run_agent(
                   or os.getenv("HERMES_TOOL_PROGRESS_MODE")
                   or "all"
               )
      -        tool_progress_enabled = progress_mode != "off"
      +        # Disable tool progress for webhooks - they don't support message editing,
      +        # so each progress line would be sent as a separate message.
      +        from gateway.config import Platform
      +        tool_progress_enabled = progress_mode != "off" and source.platform != Platform.WEBHOOK
               
               # Queue for progress messages (thread-safe)
               progress_queue = queue.Queue() if tool_progress_enabled else None
    • hermes_cli/skills_config.py
      @@ -30,6 +30,7 @@
           "dingtalk": "๐Ÿ’ฌ DingTalk",
           "feishu": "๐Ÿชฝ Feishu",
           "wecom": "๐Ÿ’ฌ WeCom",
      +    "webhook": "๐Ÿ”— Webhook",
       }
       
       # โ”€โ”€โ”€ Config Helpers โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
    • hermes_cli/tools_config.py
      @@ -150,6 +150,7 @@ def _get_plugin_toolset_keys() -> set:
           "wecom": {"label": "๐Ÿ’ฌ WeCom", "default_toolset": "hermes-wecom"},
           "api_server": {"label": "๐ŸŒ API Server", "default_toolset": "hermes-api-server"},
           "mattermost": {"label": "๐Ÿ’ฌ Mattermost", "default_toolset": "hermes-mattermost"},
      +    "webhook": {"label": "๐Ÿ”— Webhook", "default_toolset": "hermes-webhook"},
       }
       
       
    • toolsets.py
      @@ -369,10 +369,16 @@
               "includes": []
           },
       
      +    "hermes-webhook": {
      +        "description": "Webhook toolset - receive and process external webhook events",
      +        "tools": _HERMES_CORE_TOOLS,
      +        "includes": []
      +    },
      +
           "hermes-gateway": {
               "description": "Gateway toolset - union of all messaging platform tools",
               "tools": [],
      -        "includes": ["hermes-telegram", "hermes-discord", "hermes-whatsapp", "hermes-slack", "hermes-signal", "hermes-homeassistant", "hermes-email", "hermes-sms", "hermes-mattermost", "hermes-matrix", "hermes-dingtalk", "hermes-feishu", "hermes-wecom"]
      +        "includes": ["hermes-telegram", "hermes-discord", "hermes-whatsapp", "hermes-slack", "hermes-signal", "hermes-homeassistant", "hermes-email", "hermes-sms", "hermes-mattermost", "hermes-matrix", "hermes-dingtalk", "hermes-feishu", "hermes-wecom", "hermes-webhook"]
           }
       }
       

5 PRs closed without merging

From the close comments: done elsewhere 3 ยท merged via another change 1 ยท superseded by another PR 1

  • #3512 fix: mattermost configuration parsing bugs ยท merged via another change โ†’ #3583
  • #3775 fix(gateway): register webhook platform and toolset to fix KeyError on agent runs ยท done elsewhere โ†’ e0b2bdb, #4660, #4363
  • #9967 fix: add SMS to PLATFORMS registry to fix KeyError on inbound message (#9789) ยท done elsewhere โ†’ a696bce
  • #13833 fix(platforms): add missing SMS platform to PLATFORMS registry ยท superseded by another PR โ†’ a696bce
  • #14112 fix(cli): register sms platform toolset ยท done elsewhere โ†’ a696bce
Closed issues ยท 3
  • Closed#3511[Bug]: Mattermost configuration parsing fails
  • Closed#3773[Bug]: Webhook-triggered agent runs crash with KeyError: 'webhook' due to missing platform/toolset registration
  • Closed#9789KeyError: 'sms' when SMS gateway receives a message โ€” platform missing from PLATFORMS registry
How this cluster was grouped
  • Link evidence (partly structural links): 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.18: the share of item 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.

Pick up a Lab task

Check whether a fix covers the open issues here, with your own agent. Bring back evidence for maintainers.

Open the Lab

At a glance

Subsystem
gateway
Merged PRs
#3583, #4660
Closed issues
3
Attempts
5 PRs closed without merging
Fix link checked
2 Apr 2026. This confirmation is old and may be out of date (a revert or reopen would not have invalidated it here); re-verify.

For your agent

The same facts, typed.