CtrlK
BlogDocsLog inGet started
Tessl Logo

circleci-webhooks

Receive and verify CircleCI outbound webhooks. Use when setting up a CircleCI webhook handler, debugging `circleci-signature` verification, or handling the `workflow-completed` and `job-completed` events CircleCI sends when a workflow or job reaches a terminal state. CircleCI signs the raw body with HMAC-SHA256 and sends a hex digest in a comma-separated versioned list (`v1=<hex>`) — only the latest version (`v1`) should ever be checked. Not Circle (circle.com, USDC/Circle Mint, ECDSA `X-Circle-Signature`) — unrelated company. Not CircleCI custom webhooks, which are inbound pipeline triggers going the other direction.

72

Quality

91%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

SKILL.md
Quality
Evals
Security

Quality

Content

85%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

A dense, high-signal reference: executable verification code in two languages, test vectors, explicit fail-closed and replay/dedup guidance, and accurate provider quirks with no filler. The main defect is bundle integrity — the examples/ handler directories the body repeatedly points to are absent, and substantial content (test vectors, gotchas, ping payload) is duplicated between the body and the reference files.

Suggestions

Ship the examples/ bundle (examples/express/, examples/nextjs/, examples/fastapi/ with tests and extractVcsInfo()), or remove the 'For complete handlers with tests, see examples/...' and 'see extractVcsInfo() in the examples' pointers — in the current bundle they are dead links to the skill's most-promoted resource.

Deduplicate between SKILL.md and references: keep a one-line summary plus pointer for the test-vector table, the gotchas list, and the ping payload, letting references/verification.md and references/overview.md carry the full copies.

Trim the Related Skills section (drop per-item annotations or cut the list to the genuinely confusable ones like circle-webhooks) and state the Circle-vs-CircleCI disambiguation once instead of three times.

DimensionReasoningScore

Conciseness

Nearly every sentence carries a non-obvious, provider-specific fact ("signs the raw request body bytes only — no timestamp, no delivery id", "`job-completed`... no `error`", "GitLab and GitHub App pipelines carry `pipeline.trigger_parameters`... and have no `vcs`") with zero explanation of concepts Claude already knows. Not 5 because of trimmable redundancy: the Circle-vs-CircleCI disambiguation appears three times (description, opening blockquote, and again in Related Skills), and the 12-item Related Skills list with per-item annotations is padding relative to the anchor of every token earning its place.

4 / 5

Actionability

Two complete, copy-paste-ready verification implementations (Node and Python) with fail-closed guards, first-`=` parsing, and timing-safe comparison; four known-answer test vectors to validate an implementation; a concrete env var and a runnable local-test command ("npx hookdeck-cli listen 3000 circleci --path /webhooks/circleci"). This fully matches the anchor of executable, copy-paste-ready code covering the common cases; there is no vague or pseudocode guidance anywhere.

5 / 5

Workflow Clarity

The single core action is unambiguous and fully sequenced: the verification procedure is embodied in executable code with explicit fail-closed rules ("reject if there is no `v1` entry"), the handler order is stated directly ("Verify, enqueue, respond — do the work afterwards"), and validation checkpoints are explicit — known-answer test vectors, the end-to-end Local Development flow ending in the "Test Ping Event" button, and error-recovery guidance ("Guard the lengths first (or try/catch), otherwise a truncated signature becomes a 500"). Under the simple-skill exception this matches the top anchor; not 4 because no checkpoint is missing for the skill's scope.

5 / 5

Progressive Disclosure

The three real reference files are well signaled ("references/overview.md — Both event types, the full envelope..." etc.) and one level deep, but scored against the actual bundle the structure breaks down: "see [examples/express/](examples/express/), [examples/nextjs/](examples/nextjs/), [examples/fastapi/](examples/fastapi/)" and "see `extractVcsInfo()` in the examples" point at directories/files that do not exist in the bundle — dead links to the promoted complete handlers. Additionally, the test-vector table, the gotchas list, and the ping JSON payload are duplicated nearly verbatim between SKILL.md and references/verification.md / overview.md, i.e. content that belongs in the separate files is inlined. Not 4 because dead links to a load-bearing resource are more than a minor organization gap; not 2 because the body is well sectioned and the references that do exist are clearly signaled and easy to navigate.

3 / 5

Total

17

/

20

Passed

Description

95%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

An exemplary description: concrete what, explicit multi-scenario Use-when triggers, third-person voice, and proactive disambiguation against the two most confusable alternatives. The only minor limitation is that the capability verb list is short (receive/verify/debug/handle), with the rest of the text devoted to scheme mechanics and boundaries rather than additional actions.

DimensionReasoningScore

Specificity

"Receive and verify CircleCI outbound webhooks" plus the "Use when" verbs — "setting up a CircleCI webhook handler, debugging `circleci-signature` verification, or handling the `workflow-completed` and `job-completed` events" — name several concrete, distinct actions covering the domain's task space with concrete event names. It is not 5 because beyond receive/verify/debug/handle there are no further capability actions; the remainder of the description is signing-scheme detail ("HMAC-SHA256", "comma-separated versioned list (`v1=<hex>`)"), not additional capabilities. It is well above 3, which covers only 1-2 actions.

4 / 5

Completeness

The "what" is explicit and concrete ("Receive and verify CircleCI outbound webhooks", with the signing scheme specified), and the "when" is an explicit "Use when..." clause with three concrete trigger scenarios (setup, debugging verification, handling the two named events). This matches the anchor for clearly and explicitly answering both what and when with concrete trigger phrases; not 4, where the when would be less specific.

5 / 5

Trigger Term Quality

Natural user phrasings are comprehensively covered: "setting up a CircleCI webhook handler", "debugging `circleci-signature` verification", "workflow-completed and job-completed", plus the exact confusion term "Circle (circle.com, USDC/Circle Mint, ECDSA `X-Circle-Signature`)" that a user would type when they land on the wrong skill. The domain has no file extensions to cover, and no common synonym is missing.

5 / 5

Distinctiveness Conflict Risk

Clear niche (CircleCI outbound webhooks) with minimal conflict risk, and the description actively de-risks the two likeliest mis-triggers with explicit negation clauses: "Not Circle (circle.com...) — unrelated company" and "Not CircleCI custom webhooks, which are inbound pipeline triggers going the other direction". This exceeds the anchor for a clear niche with distinct triggers.

5 / 5

Total

19

/

20

Passed

Validation

93%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

relative_links

Relative link issues: 3 missing

Warning

Total

15

/

16

Passed

Repository
hookdeck/webhook-skills
Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.