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/hookdeck/webhook-skills/clio-webhooksnpx skills add hookdeck/webhook-skills --skill clio-webhooksgit clone --depth 1 https://github.com/hookdeck/webhook-skillsWhat 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.00064 | $0.02404 |
| Opus 5 | $0.00032 | $0.01202 |
| Sonnet 5 | $0.00013 | $0.00481 |
| Haiku 4.5 | $0.00006 | $0.00240 |
Grade A, and why
clio-webhooks scanned grade A with 1 finding 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 3d ago.
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.
Makes network callslowCapability
Not a fault in itself. Listed so you know the mod talks to something, and to what.
curl -X POST https://app.clio.com/api/v4/webhooks.json \ How it starts
The opening of the file, as written. The whole thing — 210 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Clio Webhooks
When to Use This Skill
- How do I receive Clio webhooks?
- How do I verify Clio webhook signatures (
X-Hook-Signature)? - How do I complete the Clio
X-Hook-Secrethandshake / activation? - How do I handle
created,updated,deleted, or matter lifecycle events? - Why is my Clio webhook signature verification failing?
- How do I keep a Clio webhook from expiring?
How Clio Webhooks Work
Clio Manage delivers webhooks in two distinct kinds of POST request to your URL:
- Handshake — Immediately after a webhook is created (or its URL changes),
Clio sends a POST containing an
X-Hook-Secretheader with a freshly generated shared secret. Your endpoint must confirm it (echo the same header back with200 OK). Clio's docs say the webhook is not enabled until the handshake succeeds — though in one observed EU test the webhook auto-enabled and began delivering without any handshake request arriving (see references/setup.md). Implement the echo regardless: it is how you obtain the secret, and it is the key for verifying every later event. - Events — Every subsequent delivery is signed. Clio computes
HMAC-SHA256(shared_secret, raw_request_body)and puts the digest in theX-Hook-Signatureheader. Verify it against the raw body.
Clio does not ask you to supply the secret when creating the webhook — Clio generates it and hands it to you during the handshake. Save it (e.g. keyed by
webhook_id) asCLIO_WEBHOOK_SECRET.
Verification (core)
X-Hook-Signature is the HMAC-SHA256 digest of the raw body, keyed with the
shared secret. Pass the raw body (never re-serialized JSON) and compare
timing-safe.
Clio's docs state only that it "will compute an HMAC-SHA256 signature based on the shared secret and the request body" — they never say whether the digest is hex or base64 encoded.
Verified against a live delivery: it is lowercase hex (64 characters). This
was confirmed by recomputing HMAC-SHA256 over the raw body with the webhook's
shared_secret and matching the header exactly. The handlers below still compute
the digest once and accept either encoding, so they keep working if Clio ever
differs by region or changes it — but hex is what you should expect.
What ships with it
19 files beside SKILL.md in the same directory: the scripts, references and assets a skill reads on demand. Not counted in the per-session cost; read them before you install if any of them is executable.
- examples/express/.env.example 237 B
- examples/express/package.json 364 B
- examples/express/README.md 1.5 KB
- examples/express/src/index.js 4.3 KB runs code
- examples/express/test/webhook.test.js 5.4 KB runs code
- examples/fastapi/.env.example 237 B
- examples/fastapi/main.py 3.5 KB runs code
- examples/fastapi/README.md 1.6 KB
- examples/fastapi/requirements.txt 82 B
- examples/fastapi/test_webhook.py 5.3 KB runs code
- examples/nextjs/.env.example 237 B
- examples/nextjs/app/webhooks/clio/route.ts 3.4 KB runs code
- examples/nextjs/package.json 476 B
- examples/nextjs/README.md 1.4 KB
- examples/nextjs/test/webhook.test.ts 3.8 KB runs code
- examples/nextjs/vitest.config.ts 140 B runs code
- references/overview.md 4.1 KB
- references/setup.md 5.1 KB
- references/verification.md 5.3 KB
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.
- 3d ago First seen · 210 lines · 64 tokens per session scan A 3f2f97a02ad4
clio-webhooks is a skill published in the GitHub repository hookdeck/webhook-skills (84 stars, last pushed 6d ago), licensed MIT. It adds 64 tokens to every session and 2,404 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 1 finding (makes network calls). No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-30.
Other skills, from other repositories
personal-data-protection
Personal-data-protection compliance reference for engineers building applications subject to Singapore PDPA, Indonesia UU PDP 27/2022, Thailand PDPA B.E. 2562 (2019), Malaysia PDPA 2010 (with the 2024 Amendments), or Philippines DPA (RA 10173). Use when reviewing or modifying code that touches personal data …
memstack-business-gdpr
Use this skill when the user says 'GDPR', 'data protection', 'privacy compliance', 'DPA', 'DSAR', 'data subject request', 'cookie consent', 'privacy audit', 'CCPA', or asks 'do I need GDPR for this repo'. Scans the repository to detect what personal data is collected, classifies sensitivity, determines whether GDPR…
memstack-business-licensing
Use this skill when the user says 'licensing', 'license audit', 'can I use this commercially', 'OSS license check', 'license compatibility', 'GPL', 'MIT', 'AGPL', 'copyleft'. Scans the repository for every dependency and asset license, then produces a per-package verdict table: ready for commercial use…
memstack-business-contract-template
Use this skill when the user says 'contract', 'agreement', 'service agreement', 'NDA', 'freelance contract', 'consulting agreement', or needs service agreements with IP ownership, payment terms, and termination clauses. Do NOT use for invoicing or client onboarding.
iso-24495-2
Sector-specific Plain Language standard for legal communication (ISO 24495-2:2025). Applied during contract drafting, license review, and legal/compliance writing.
ring:applying-licenses
Applying or switching a repository's license (Apache 2.0, Elastic License v2, or Proprietary): rewrites the LICENSE file, updates Go/TS source headers, sets SPDX identifiers, and validates consistency after user confirmation. Use when asked to set, apply, or switch a license, or when scaffolding a service with no…