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
| Property | Value |
|---|---|
| Method | POST |
| Content-Type | application/json |
| Signature header | X-Vibecontrols-Signature: t=<unix-ts>, v1=<hex-hmac-sha256> |
| Retries | Per retryPolicy JSON (exponential backoff by default) |
| Tracked | Webhook.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