Install
openclaw skills install hookaidoWebhook infrastructure for receiving, queuing, and delivering webhooks. Operate Hookaido webhook ingress, durable webhook queue (SQLite/Postgres), webhook de...
openclaw skills install hookaidoImplement and troubleshoot Hookaido with a config-first workflow: edit Hookaidofile, validate, run, exercise ingress/pull/exec flows, then diagnose queue health and DLQ behavior.
Treat Hookaido v2.6.0's modular architecture as additive in this skill: keep the existing workflow intact by default, and opt into modules such as postgres, gRPC workers, subprocess delivery (deliver exec), or release verification only when they materially help the task.
Use conservative, reversible changes and validate before runtime operations.
sqlite, memory, or postgres).hookaido exists where tools execute.
metadata.openclaw.install.bash {baseDir}/scripts/install_hookaido.sh (pinned v2.6.0, SHA256-verified).github.com/nuetzliches/hookaido via go install github.com/nuetzliches/hookaido/cmd/hookaido@v2.6.0 when a source-based install is preferred.hookaido (preferred), or install inside sandbox via agents.defaults.sandbox.docker.setupCommand.metadata.openclaw.requires.bins.Hookaidofile minimally.hookaido config fmt --config ./Hookaidofilehookaido config validate --config ./Hookaidofilehookaido config validate --config ./Hookaidofile --strict-secrets when secret refs or Vault-backed config are involved.hookaido run --config ./Hookaidofile --db ./.data/hookaido.dbhookaido run --config ./Hookaidofile --postgres-dsn "$HOOKAIDO_POSTGRES_DSN" when queue postgres is selected.curl http://127.0.0.1:2019/healthz?details=1dequeue/ack/nack/extend path works (HTTP pull, batch ack/nack, plus gRPC pull when enabled)ack/nack when worker throughput matters.Prefer this baseline:
ingress {
listen :8080
}
pull_api {
listen :9443
grpc_listen :9943 # optional gRPC pull-worker listener
auth token env:HOOKAIDO_PULL_TOKEN
}
/webhooks/github {
auth hmac env:HOOKAIDO_INGRESS_SECRET
pull { path /pull/github }
}
/webhooks/stripe {
auth hmac env:STRIPE_SIGNING_SECRET
deliver "https://billing.internal/stripe" {
retry exponential max 8 base 2s cap 2m jitter 0.2
timeout 10s
}
}
deliver exec)HOOKAIDO_ROUTE, HOOKAIDO_EVENT_ID, HOOKAIDO_ATTEMPT, etc.).0 = ack, 1-125 = retry, 126/127 = immediate DLQ.sign directives are not supported with exec (compile error)./webhooks/github {
auth hmac {
provider github
secret env:GITHUB_WEBHOOK_SECRET
}
deliver exec "/opt/hooks/deploy.sh" {
timeout 30s
retry exponential max 3 base 1s cap 30s jitter 0.2
env DEPLOY_ENV production
env NOTIFY_URL {env.SLACK_WEBHOOK_URL}
}
}
provider github, provider gitea, provider stripe, or provider cituro for webhook providers with their own signature format.signature_header, timestamp_header, nonce_header, and tolerance are forbidden in provider mode (compile error)./webhooks/github {
auth hmac {
provider github
secret env:GITHUB_WEBHOOK_SECRET
}
pull { path /pull/github }
}
/webhooks/gitea {
auth hmac {
provider gitea
secret env:GITEA_WEBHOOK_SECRET
}
pull { path /pull/gitea }
}
/webhooks/stripe {
auth hmac {
provider stripe
secret env:STRIPE_SIGNING_SECRET
}
pull { path /pull/stripe }
}
/webhooks/cituro {
auth hmac {
provider cituro
secret env:CITURO_WEBHOOK_SECRET
}
pull { path /pull/cituro }
}
GET {pull.path}/stream instead of repeated POST .../dequeue.keepalive) and max connection duration (max_duration) in the route's pull block.# Connect SSE stream (persistent, server pushes events)
curl -sS -N "http://localhost:9443/pull/github/stream" \
-H "Authorization: Bearer $HOOKAIDO_PULL_TOKEN"
# ACK received event
curl -sS -X POST "http://localhost:9443/pull/github/ack" \
-H "Authorization: Bearer $HOOKAIDO_PULL_TOKEN" \
-H "Content-Type: application/json" \
-d '{"lease_id":"lease_xyz"}'
sqlite unless the task explicitly needs ephemeral dev mode or shared Postgres storage.memory and postgres as additive v2 modules, not replacements for existing sqlite workflows.postgres, document the DSN source and validate health plus backlog endpoints after startup.Prefer these patterns:
queue sqlite
queue memory
queue postgres
Use:
GET /healthz?details=1GET /backlog/trendsGET /dlqPOST /dlq/requeuePOST /dlq/delete--role read for diagnostics.--enable-mutations --role operate --principal <identity>--enable-runtime-control --role admin --pid-file <path>reason for mutation calls and keep it specific.Add to .claude/settings.json (or ~/.claude/settings.json for global use):
{
"mcpServers": {
"hookaido": {
"command": "hookaido",
"args": [
"mcp", "serve",
"--config", "./Hookaidofile",
"--db", "./.data/hookaido.db",
"--role", "read"
]
}
}
}
For operate role (queue mutations):
{
"mcpServers": {
"hookaido": {
"command": "hookaido",
"args": [
"mcp", "serve",
"--config", "./Hookaidofile",
"--db", "./.data/hookaido.db",
"--enable-mutations",
"--role", "operate",
"--principal", "claude"
]
}
}
}
The MCP server exposes structured tools directly — no shell output parsing. Claude Code discovers available tools at startup and uses them with typed parameters.
Use:
hookaido verify-release --checksums ./hookaido_v2.6.0_checksums.txt --require-provenancehookaido config validate returns success before runtime start/reload.hookaido config validate --strict-secrets is used when secret refs, Vault, or public-release rollout validation matters.dequeue, ack, nack, and extend with valid token (HTTP, SSE, and optional gRPC transport), including batch ack/nack when enabled.queue postgres, runtime is started with --postgres-dsn or HOOKAIDO_POSTGRES_DSN.env: or file: refs.references/operations.md for command snippets and API payload templates.