Install
openclaw plugins install clawhub:otterkit-openclaw-pluginOtterKit plugin for OpenClaw
Give your Claw a public HTTPS presence, managed by the gateway lifecycle:
- Wake URL - a stable public endpoint (
https://<name>.otterkit.app) that captures external webhooks (CI, Stripe, GitHub, forms, sensors) and relays each one to the gateway's/hooks/wakeon loopback. The gateway port is never exposed, and the endpoint is server-answered: providers keep getting a 200 even while the machine is asleep, with buffered deliveries relayed on reconnect. - Managed tunnels - local ports exposed on stable public URLs while the gateway runs.
- Bundled skill - the
otterkit-tunnelskill ships with the plugin, so your agent can drive the full OtterKit CLI (inspect, replay, await, verify, forward) on its own.
Endpoints bill 1 credit ($0.01) per connected hour and never more than $3 per rolling 30 days each. Stopped endpoints bill nothing.
Setup
One-time, on the gateway machine:
npx otterkit login # or set OTTERKIT_TOKEN for headless machines
In openclaw.json:
{
plugins: {
entries: {
otterkit: {
enabled: true,
config: {
wake: { subdomain: 'my-claw-hooks' },
tunnels: [{ port: 3000, subdomain: 'myapp' }],
// stopWithGateway: false, // keep endpoints (and standby capture) up across restarts
},
},
},
},
hooks: { enabled: true, token: 'use-a-dedicated-hooks-token' },
}
Restart the gateway. The plugin logs the live URLs on start:
otterkit: wake URL live - point webhook providers at https://my-claw-hooks.otterkit.app (relays to /hooks/wake on loopback)
otterkit: tunnel live - https://myapp.otterkit.app -> port 3000
How the wake relay works
otterkit webhook --deliver-exec runs relay.mjs once per captured request:
the body arrives on stdin, OTTERKIT_* env carries method/path/signature-verdict
metadata, and the script POSTs a /hooks/wake payload to 127.0.0.1:<gateway-port>
using the hooks.token from your OpenClaw config. Every delivery also lands in the
local capture log (otterkit inspect my-claw-hooks) for debugging and replay.
Design notes
The plugin binds to exactly one OpenClaw plugin API: registerService (start/stop with
the gateway) plus plugin config. Everything OtterKit-side goes through the otterkit
CLI - so OpenClaw API churn has minimal surface to break, and every feature the CLI
gains is available to your agent through the bundled skill without a plugin update.
