Use with OpenClaw
OpenClaw runs its gateway on loopback only (port 18789) - by design, nothing external can reach it. That's the right default, but it means the webhook endpoints that wake your Claw (/hooks/wake and /hooks/agent) have no public URL. OtterKit fixes that two ways: a capture-and-relay setup that never exposes the gateway, or a direct tunnel when a caller needs the gateway itself.
Install the skill
Teach your Claw to manage its own tunnels and webhook endpoints:
clawhub install otterkit-tunnelThe skill is published on ClawHub and includes the full command reference, the recipes below, and pricing, so the agent can set everything up autonomously after a one-time npx otterkit login.
Wake your Claw from public webhooks (recommended)
A capture-only OtterKit endpoint takes the public traffic; --deliver-exec relays each delivery to the gateway on loopback. The gateway port is never public:
npx otterkit webhook --subdomain my-claw-hooks --standby --daemon \
--deliver-exec 'curl -s -X POST http://127.0.0.1:18789/hooks/wake \
-H "Authorization: Bearer $OPENCLAW_HOOKS_TOKEN" \
-H "Content-Type: application/json" -d @-'Point Stripe, GitHub, your CI, or anything else at https://my-claw-hooks.otterkit.app. Each capture's body arrives on the command's stdin and is posted to /hooks/wake, so external events wake your Claw within seconds. With --standby, providers keep getting a 200 even while your laptop is asleep - deliveries are buffered and relayed when the machine comes back. Every event lands in capture history for inspect and replay.
Tunnel the gateway directly
When a caller needs the gateway itself (a provider that reads responses from /hooks/agent, or remote access), give it a stable public URL:
npx otterkit tunnel 18789 --subdomain my-claw --daemon --ttl 7dhooks.token required, use a dedicated hooks token rather than the gateway auth token, and stop the tunnel (otterkit stop my-claw) when public access isn't needed. Prefer the capture-and-relay setup whenever providers only deliver events.