Create, list, and delete webhook endpoints that route external HTTP events to SLICC scoops

Synopsis

webhook <command> [options]

Description

Manages webhook endpoints that allow external services (GitHub, Slack, etc.) to send HTTP events into SLICC. Each webhook is routed to a scoop, which receives the event as a message. Webhooks are part of SLICC's "licks" system — external events that trigger agent actions. Webhooks are only available in CLI mode (npm run dev:full), not in the Chrome extension runtime.

Commands

create --scoop <name> [--name <name>] [--filter <code>] Create a new webhook endpoint routed to the specified scoop.

list List all active webhooks showing ID, name, URL, target scoop, and filter status.

delete <id> Delete a webhook by its ID.

Options

-h, --help Show help message

--scoop <name> Route webhook events to this scoop (required for create)

--name <name> Human-readable name for the webhook (defaults to "default")

--filter <code> JavaScript filter function: (event) => false (drop), true (keep), or an object (transform). The event object has properties: type, webhookId, webhookName, timestamp, headers, body.

Examples

$ webhook create --scoop click-handler --name clicks

Create a webhook named "clicks" that sends events to the click-handler scoop.

$ webhook create --scoop pr-reviewer --name github --filter "(e) => e.body.action === 'opened'"

Create a webhook that only forwards GitHub events where the action is "opened".

$ webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"

Create a webhook with a transform filter that extracts only text and user from Slack events.

$ webhook list

List all active webhooks.

$ webhook delete abc123

Delete the webhook with ID abc123.

Notes

Webhooks require the SLICC CLI server — they are not available in the Chrome extension runtime. The webhook URL is provided by the server's /api/webhooks endpoint. Filters are JavaScript expressions evaluated server-side; returning false drops the event, true passes it through unchanged, and returning an object replaces the event payload with the returned value.

See Also

crontask, feed_scoop, scoop_scoop