Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/soulcodex/agentic/webhook-developmentnpx skills add soulcodex/agentic --skill webhook-developmentgit clone --depth 1 https://github.com/soulcodex/agenticWhat it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5 | $0.00056 | $0.01053 |
| Opus 5 | $0.00028 | $0.00526 |
| Sonnet 5 | $0.00011 | $0.00211 |
| Haiku 4.5 | $0.00006 | $0.00105 |
Grade A, and why
webhook-development scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured yesterday.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 126 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Webhook Development Skill
Step 1 — Receiving Webhooks
Verify the signature first — before any processing:
// HMAC-SHA256 verification (Go)
func verifySignature(body []byte, signatureHeader, secret string) bool {
mac := hmac.New(sha256.New, []byte(secret))
mac.Write(body)
expected := "sha256=" + hex.EncodeToString(mac.Sum(nil))
return hmac.Equal([]byte(expected), []byte(signatureHeader))
}
// HMAC-SHA256 verification (TypeScript)
async function verifySignature(body: string, signature: string, secret: string): Promise<boolean> {
const key = await crypto.subtle.importKey('raw', new TextEncoder().encode(secret),
{ name: 'HMAC', hash: 'SHA-256' }, false, ['sign'])
const mac = await crypto.subtle.sign('HMAC', key, new TextEncoder().encode(body))
const expected = 'sha256=' + Array.from(new Uint8Array(mac)).map(b => b.toString(16).padStart(2, '0')).join('')
return expected === signature
}
Respond immediately — enqueue for async processing:
POST /webhooks/stripe
1. Read raw body (before any parsing)
2. Verify HMAC-SHA256 signature → 401 if invalid
3. Return HTTP 200 immediately
4. Enqueue event → message queue (SQS, RabbitMQ, etc.)
Never do database writes or downstream API calls inside the HTTP handler — the sender's retry logic will time out.
Step 2 — Processing Webhooks (Idempotent Consumer)
Worker loop:
1. Dequeue event
2. Check idempotency key (event_id) in processed_events table
→ if found: ack and skip
3. Begin transaction
4. Process business logic
5. Insert event_id into processed_events
6. Commit
7. Ack message
Idempotency key: use the sender's event ID (e.g., Stripe's evt_xxx, GitHub's
X-GitHub-Delivery header). If the sender does not provide one, derive it from
a hash of the payload.
Retry with exponential backoff:
Attempt 1: immediate
Attempt 2: +1 second
Attempt 3: +5 seconds
Attempt 4: +30 seconds
Attempt 5: → dead-letter queue
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- yesterday First seen · 126 lines · 56 tokens per session scan A 403636ceda45
webhook-development is a skill published in the GitHub repository soulcodex/agentic (10 stars, last pushed 2d ago), licensed MIT. It adds 56 tokens to every session and 1,053 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
Webhook Subscriptions
Guides webhook-driven integrations, event receivers, and trigger flows without inventing runtime support the current repo does not actually have.
research-repository
Build a repository that makes findings findable, reusable, and cumulative across teams. Use when the same research keeps getting redone. For synthesising one study, use affinity-diagram.
survey-design
Design unbiased survey instruments — question wording, scales, and sampling — to measure attitudes at scale. Use when you need quantitative breadth. For behavioural experiments, use a-b-test-design (prototyping-testing).
localization-design
Design for multiple languages, writing directions, and cultural contexts — text expansion, RTL mirroring, and locale formats. Use when shipping beyond one locale. For the words themselves, use ux-writing (designer-toolkit).
design-negotiation
Advocate for design quality, scope, and timeline with partners and leadership using evidence and shared goals. Use in the conversation itself. For the commercial vocabulary behind it, use business-design (ux-strategy).
design-debt-audit
Inventory and prioritise accumulated design inconsistencies across a product. Use when drift has built up over time. For token coverage specifically use design-token-audit (designer-toolkit); for WCAG gaps use accessibility-audit (design-systems).