brainstorming
brainstorming
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or planning anything new, in software or out of it (a talk, a business, a renovation).
ngrok-unofficial-webhook-skillStart an ngrok tunnel to receive incoming webhooks and process them via the LLM. Use when the user asks to listen for webhooks, set up a webhook endpoint, start ngrok, or when another skill (like Zoom RTMS Meeting Assistant) needs a public webhook URL. Receives webhook payloads and lets the LLM decide how to handle them.
Independent GitHub snapshot · Automated classification · Original documentation governs
Start a public webhook endpoint via ngrok. Incoming webhooks are auto-routed to matching skills or presented to the user for manual handling.
cd skills/ngrok-unofficial-webhook-skill
npm install
Set in the skill's .env file (copy from .env.example).
Required:
NGROK_AUTHTOKEN — ngrok auth token from https://dashboard.ngrok.comOptional:
NGROK_DOMAIN — stable ngrok domain for consistent URLsWEBHOOK_PORT — local port (default: 4040)WEBHOOK_PATH — webhook path (default: /webhook)OPENCLAW_BIN — path to openclaw binary (default: openclaw)OPENCLAW_NOTIFY_CHANNEL — notification channel (default: whatsapp)OPENCLAW_NOTIFY_TARGET — phone number / target for notificationsRun as a background process:
cd skills/ngrok-unofficial-webhook-skill
node scripts/webhook-server.js
The server prints its public URL to stderr:
NGROK_URL=https://xxxx.ngrok-free.app
Webhook endpoint: https://xxxx.ngrok-free.app/webhook
For long-running use, launch with nohup:
nohup node scripts/webhook-server.js >> /tmp/ngrok-webhook.log 2>&1 &
webhookEvents in their skill.jsonforwardPort → HTTP POST to the local servicewebhookCommands → runs the configured shell commandSkills opt into webhook handling by adding webhookEvents to their skill.json:
{
"openclaw": {
"webhookEvents": ["meeting.rtms_started", "meeting.rtms_stopped"],
"forwardPort": 4048,
"forwardPath": "/"
}
}
For command-based auto-handling (no running service required):
{
"openclaw": {
"webhookEvents": ["recording.completed"],
"webhookCommands": {
"recording.completed": {
"command": "python3 scripts/download.py {{meeting_id}}",
"description": "Download cloud recording",
"meetingIdPath": "payload.object.id"
}
}
}
}
command — shell command to run; {{meeting_id}} is replaced with the extracted valuemeetingIdPath — dot-separated path to extract the meeting ID from the webhook payloaddescription — human-readable description for notificationsThe ngrok skill scans all sibling skill folders for skill.json files with these fields.
The server also writes each webhook as a JSON line to stdout for process polling:
{
"id": "uuid",
"timestamp": "ISO-8601",
"method": "POST",
"path": "/webhook",
"query": {},
"body": {}
}
curl http://localhost:4040/health
Kill the background process when done.
Typical flow:
meeting.rtms_started → auto-forwarded to the RTMS Meeting Assistantmeeting.rtms_stopped → auto-forwarded, triggers cleanup