
Webhooks
- 13 installs
- 610 repo stars
- Updated June 26, 2026
- alsk1992/cloddsbot
webhooks is a skill that registers and manages incoming webhook endpoints with optional HMAC-SHA256 signature verification.
About
webhooks registers and manages incoming webhook endpoints with optional HMAC-SHA256 signature verification. A developer uses it to add, enable, disable, and inspect webhook paths and to secure them with a shared secret. Each webhook tracks its path, status, and total trigger count.
- Register, enable, disable, and inspect incoming webhook endpoints
- Optional HMAC-SHA256 signature verification per webhook
- Tracks trigger counts and enabled state per endpoint
Webhooks by the numbers
- 13 all-time installs (skills.sh)
- Ranked #3,516 of 4,347 Backend & APIs skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
webhooks capabilities & compatibility
- Capabilities
- api development
- Use cases
- api development
What webhooks says it does
Register, manage, and inspect incoming webhook endpoints with optional HMAC-SHA256 signature verification.
Webhooks support HMAC-SHA256 payload verification. Pass `--secret <key>` when registering
npx skills add https://github.com/alsk1992/cloddsbot --skill webhooksAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 13 |
|---|---|
| repo stars | ★ 610 |
| Last updated | June 26, 2026 |
| Repository | alsk1992/cloddsbot ↗ |
What it does
Register and manage incoming webhook endpoints with optional HMAC-SHA256 signing.
Who is it for?
Developers wiring up and securing incoming webhook endpoints for an agent or service.
When should I use this skill?
You need to register, secure, or inspect an incoming webhook endpoint.
By the numbers
- HMAC-SHA256 payload verification
Files
Webhooks
Register, manage, and inspect incoming webhook endpoints with optional HMAC-SHA256 signature verification.
Commands
/webhooks list - List all registered webhooks
/webhooks register <id> <path> - Register a webhook endpoint
/webhooks register <id> <path> --secret <key> - Register with HMAC secret
/webhooks unregister <id> - Remove a webhook
/webhooks enable <id> - Enable a webhook
/webhooks disable <id> - Disable a webhook
/webhooks get <id> - View webhook detailsExamples
/webhooks list
/webhooks register trade-signals /hooks/trades
/webhooks register alerts /hooks/alerts --secret mysecretkey
/webhooks get trade-signals
/webhooks disable trade-signals
/webhooks enable trade-signals
/webhooks unregister trade-signalsWebhook Details
The /webhooks get <id> command shows:
- Path the webhook listens on
- Description (if set)
- Enabled/disabled status
- Whether an HMAC secret is configured
- Total trigger count
Security
Webhooks support HMAC-SHA256 payload verification. Pass --secret <key> when registering to enable signature validation on incoming requests.
/**
* Webhooks CLI Skill
*
* Commands:
* /webhooks list - List registered webhooks
* /webhooks register <id> <path> - Register webhook endpoint
* /webhooks unregister <id> - Remove webhook
* /webhooks enable <id> - Enable webhook
* /webhooks disable <id> - Disable webhook
*/
async function execute(args: string): Promise<string> {
const parts = args.trim().split(/\s+/);
const cmd = parts[0]?.toLowerCase() || 'help';
try {
const { createWebhookManager } = await import('../../../automation/webhooks');
const manager = createWebhookManager();
switch (cmd) {
case 'list': {
const hooks = manager.list();
if (!hooks.length) return 'No webhooks registered.';
let output = `**Registered Webhooks** (${hooks.length})\n\n`;
for (const h of hooks) {
output += `[${h.id}] ${h.path}\n`;
output += ` Description: ${h.description || '(none)'}\n`;
output += ` Enabled: ${h.enabled !== false ? 'yes' : 'no'}\n`;
output += ` Triggers: ${h.triggerCount}\n\n`;
}
return output;
}
case 'register':
case 'create': {
const id = parts[1];
const path = parts[2];
if (!id || !path) return 'Usage: /webhooks register <id> <path> [--secret <key>]';
const secretIdx = parts.indexOf('--secret');
const secret = secretIdx >= 0 ? parts[secretIdx + 1] : undefined;
manager.register(id, path, async () => {}, { secret });
return `Webhook registered: ${id} at ${path}`;
}
case 'unregister':
case 'remove':
case 'delete':
case 'del': {
if (!parts[1]) return 'Usage: /webhooks unregister <webhook-id>';
const removed = manager.unregister(parts[1]);
return removed ? `Webhook ${parts[1]} removed.` : `Webhook ${parts[1]} not found.`;
}
case 'enable': {
if (!parts[1]) return 'Usage: /webhooks enable <webhook-id>';
manager.setEnabled(parts[1], true);
return `Webhook ${parts[1]} enabled.`;
}
case 'disable': {
if (!parts[1]) return 'Usage: /webhooks disable <webhook-id>';
manager.setEnabled(parts[1], false);
return `Webhook ${parts[1]} disabled.`;
}
case 'get':
case 'info': {
if (!parts[1]) return 'Usage: /webhooks get <webhook-id>';
const hook = manager.get(parts[1]);
if (!hook) return `Webhook ${parts[1]} not found.`;
let output = `**Webhook: ${hook.id}**\n\n`;
output += `Path: ${hook.path}\n`;
output += `Description: ${hook.description || '(none)'}\n`;
output += `Enabled: ${hook.enabled !== false ? 'yes' : 'no'}\n`;
output += `HMAC secret: ${hook.secret ? 'configured' : 'none'}\n`;
output += `Triggers: ${hook.triggerCount}\n`;
return output;
}
default:
return helpText();
}
} catch (error) {
return `Error: ${error instanceof Error ? error.message : String(error)}`;
}
}
function helpText(): string {
return `**Webhooks Commands**
/webhooks list - List webhooks
/webhooks register <id> <path> - Register endpoint
/webhooks unregister <id> - Remove webhook
/webhooks enable <id> - Enable webhook
/webhooks disable <id> - Disable webhook
/webhooks get <id> - Webhook details
Webhooks use HMAC-SHA256 for payload verification.`;
}
export default {
name: 'webhooks',
description: 'Webhook management with HMAC signing and rate limiting',
commands: ['/webhooks', '/webhook'],
handle: execute,
};