You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Hermes v0.13 (#21306, #21331) — Google Chat ships as the 20th messaging platform. Alongside it, generic env_enablement_fn and cron_deliver_env_var platform-plugin hooks turn the gateway into a true plugin host (IRC and Teams migrated to use the new surface).
Existing channels (Telegram, Discord, etc.) refactored to register through this surface — behavior unchanged
Google Chat plugin: OAuth (service-account or user), incoming webhook handler, outbound message via chat.googleapis.com/v1/spaces
Threading: Google Chat supports threads — preserve thread_name across restarts (parity with #20160)
Card v2 support for tool-call result rendering
Acceptance criteria
Google Chat space configured → agent receives messages, replies in thread
Plugin registry enumerated by crowclaw channels list
Existing channels (Telegram, Discord, etc.) all work after refactor (no regression)
Third-party plugin example (packages/gateway/examples/example-platform/) demonstrates external registration
Effort
L — pluggable surface refactor + new channel impl. Could be split into "pluggable surface" + "Google Chat impl" if needed.
Effect
Lays the groundwork for downstream channels (Teams, Yuanbao — sibling issues) to land as plugins. Without this, every new channel is a channel-registry.ts merge conflict and a core-team review.
Background
Hermes v0.13 (#21306, #21331) — Google Chat ships as the 20th messaging platform. Alongside it, generic
env_enablement_fnandcron_deliver_env_varplatform-plugin hooks turn the gateway into a true plugin host (IRC and Teams migrated to use the new surface).Current state in CrowClaw
packages/gateway/src/channel-registry.tsships Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Mattermost — 7 channels.channel-registry.ts.Scope
packages/gateway/src/platform-plugin.ts—PlatformPluginABC withenv_enablement_fn,cron_deliver_env_var,send,receivepackages/gateway/src/channels/google-chat.ts— Google Chat impl via Chat API + webhookchannel-registry.ts— discover registered platforms via plugin registrytests/google-chat-channel.test.ts,tests/platform-plugin-registry.test.tsImplementation sketch
PlatformPlugin { name, displayName, enabledByEnv(env: Record<string,string>): boolean, cronDeliveryEnvVar: string, build(config) -> ChannelAdapter }chat.googleapis.com/v1/spacesthread_nameacross restarts (parity with #20160)Acceptance criteria
crowclaw channels listpackages/gateway/examples/example-platform/) demonstrates external registrationEffort
L — pluggable surface refactor + new channel impl. Could be split into "pluggable surface" + "Google Chat impl" if needed.
Effect
Lays the groundwork for downstream channels (Teams, Yuanbao — sibling issues) to land as plugins. Without this, every new channel is a
channel-registry.tsmerge conflict and a core-team review.Source
Hermes #21306, #21331 · CrowClaw current:
packages/gateway/src/channel-registry.ts