gokapso/hermes-agent-plugin when a Hermes Agent gateway needs to receive Kapso webhooks, turn inbound WhatsApp messages into Hermes MessageEvents, and send replies through Kapso.
Use @kapso/whatsapp-cloud-api directly when you are building your own app and do not need Hermes platform routing.
Installation
Requires:KAPSO_API_KEY. Webhook secret, phone number, allowlist, and webhook creation happen in the setup command.
Hermes clones the plugin into ~/.hermes/plugins/kapso and loads it on the next session or gateway restart.
If your Hermes environment does not already include aiohttp:
Setup
Recommended setup:KAPSO_WEBHOOK_SECRET, and create the phone-number webhook in Kapso.
The created webhook points at:
Environment
The setup command writes these values to~/.hermes/.env. Manual env vars also work:
For unsigned local fixtures only:
Kapso webhook
The adapter listens on0.0.0.0:8648 and accepts POST /kapso/webhook by default.
With Tailscale Funnel:
Use a public HTTPS URL.
localhost and private network URLs cannot receive Kapso Cloud webhooks.
Health check:
Send and receive
Inbound Hermes sessions use encoded chat IDs:KAPSO_PHONE_NUMBER_ID is set:
label (url), and **bold** becomes WhatsApp *bold*.
Media
Inbound images are downloaded through Kapso, cached locally, and attached to HermesMessageEvent.media_urls for native vision processing.
Inbound audio and voice notes are downloaded through Kapso, cached locally as audio media, and attached to MessageEvent.media_urls for Hermes STT. WhatsApp voice notes are cached as .ogg.
For local, no-key transcription:
YAML config
Environment variables are the easiest path. YAML config also works:Troubleshooting
Source
GitHub repository
Source code, plugin metadata, and issue tracker for the Kapso Hermes Agent plugin.

