Skip to main content

Webhooks

Push notifications to your own systems when things happen on an agent or in a session.

What you'll learn

  • Create a webhook
  • Available events
  • Delivery contract + signing

Create

vibecontrols webhooks create \
--name slack-notifier \
--url https://hooks.slack.com/services/... \
--events "session.started,session.terminated,agent.disconnected" \
--agent-ids <id1> --agent-ids <id2>

The Webhook model stores url, events[] (event types it subscribes to), encrypted secret (for HMAC signing), retryPolicy (JSON), and optional agentIds[] to scope delivery to specific agents.

Delivery

PropertyValue
MethodPOST
Content-Typeapplication/json
Signature headerX-Vibecontrols-Signature: t=<unix-ts>, v1=<hex-hmac-sha256>
RetriesPer retryPolicy JSON (exponential backoff by default)
TrackedWebhook.deliveryCount + failureCount + lastDelivery + lastError

Verify signatures in your receiver:

import {createHmac} from 'crypto';

function verifyVibecontrolsWebhook(rawBody: string, sigHeader: string, secret: string): boolean {
const parts = Object.fromEntries(sigHeader.split(',').map(p => p.trim().split('=')));
const expected = createHmac('sha256', secret).update(`${parts.t}.${rawBody}`).digest('hex');
return expected === parts.v1;
}

Manage

vibecontrols webhooks list
vibecontrols webhooks update <id> --is-active false
vibecontrols webhooks delete <id>
vibecontrols webhooks deliveries <id> # delivery history

Next steps

  • Webhooks (dev) — programmatic registration
  • VibeDecks — button action_type WEBHOOK fires a webhook from a click