CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

absorb-lms-webhooks

Receive and verify Absorb LMS webhooks. Use when setting up an Absorb LMS webhook endpoint, verifying the absorb-signature header (HMAC-SHA256 of the raw body), debugging signature failures on Test Webhook requests, or handling events like UserCreated, CertificateAwarded and EnrollmentCompletedbyAdmin.

Quality

92%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

SKILL.md
Quality
Evals
Security

Quality

Content

82%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 strong, dense body: executable verification code with genuine gotchas (silent hex truncation, timing-safe comparison, the Test Webhook random-signature trap), a useful event table, and clean one-level-deep references. The main deductions are a dangling examples/ reference that promises runnable handlers not present in the bundle, plus a nine-entry Related Skills list and attribution boilerplate that spend tokens without aiding the core task.

Suggestions

Remove or trim the dangling examples/ links (or actually include examples/express/, examples/nextjs/, examples/fastapi/ in the bundle) — the body and Resources section currently advertise runnable handlers with tests that do not exist in the skill directory.

Cut the nine-item Related Skills list (and possibly the Attribution boilerplate) to reclaim tokens; they are promotional navigation, not task guidance.

Add a short numbered end-to-end sequence in the body (create webhook → copy Secret Key into ABSORB_WEBHOOK_SECRET → deploy verification → test with a real sandbox event) so the workflow is self-contained without opening references/setup.md.

DimensionReasoningScore

Conciseness

Core sections are lean and dense — the verification section packs the signing spec, a complete function, status codes, and a Python gotcha into a few lines with no explanation of concepts Claude already knows. It is not a 5 because the "Related Skills" section lists nine sibling skills and the "Attribution" section adds boilerplate — navigational/promotional tokens that don't serve the core task. Not a 3: there is no unnecessary explanation or padded prose anywhere in the instructional content.

4 / 5

Actionability

Fully executable, copy-paste-ready guidance: the complete `verifyAbsorbSignature` function with a hex-length guard and `timingSafeEqual`, explicit status-code mapping ("Return 401 when this fails, 400 for a body that isn't a JSON object, and 200 once handled"), a concrete env var, the `npx hookdeck-cli listen 3000 absorb-lms --path /webhooks/absorb-lms` command, and an event dispatch table. Not a 4: the common cases (JS and Python verification, local testing, dispatch) are all covered with runnable specifics.

5 / 5

Workflow Clarity

The sections follow a coherent order (verify → respond → setup → test → dispatch) with a real validation checkpoint ("Return 401 when this fails") and an end-to-end test recipe that routes around the Test Webhook trap ("trigger a real event in a sandbox portal... to check your setup end to end"). Not a 5 because the setup sequence itself is deferred to references/setup.md and the body never consolidates a single numbered end-to-end sequence; not a 3 because the steps that are present include explicit failure handling and checkpoints.

4 / 5

Progressive Disclosure

The three reference files (overview.md, setup.md, verification.md) exist in the bundle, are one level deep (no further nesting), and are clearly signaled with descriptions in a Resources section; the body appropriately inlines only the core verification logic. It is not a 5 because the body links to examples/express/, examples/nextjs/, examples/fastapi/ and advertises "Runnable Express, Next.js and FastAPI handlers with tests" — paths that do not exist in the bundle. Not a 3: content split and navigation are otherwise well organized.

4 / 5

Total

17

/

20

Passed

Description

100%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.

A model description: third-person voice, concise, concrete about the algorithm (bare HMAC-SHA256 hex of the raw body), with an explicit 'Use when' clause covering setup, verification, debugging, and event handling. Every dimension lands on the top anchor with no padding or over-claims.

DimensionReasoningScore

Specificity

Multiple concrete, specific actions are named: "Receive and verify Absorb LMS webhooks", "verifying the absorb-signature header (HMAC-SHA256 of the raw body)", "debugging signature failures on Test Webhook requests", and "handling events like UserCreated, CertificateAwarded and EnrollmentCompletedbyAdmin" — including algorithm-level detail. It is not a 4 because there are no minor gaps: every capability (receive, set up, verify, debug, handle events) is stated concretely, matching the comprehensive anchor.

5 / 5

Completeness

Both questions are explicitly answered: what ("Receive and verify Absorb LMS webhooks") and when ("Use when setting up an Absorb LMS webhook endpoint, verifying the absorb-signature header...") with concrete trigger phrases. It is not a 4 because the 'when' clause is explicit and enumerates specific triggering scenarios rather than being merely present.

5 / 5

Trigger Term Quality

Natural terms a user would actually say are comprehensively covered: "Absorb LMS webhooks", "webhook endpoint", "absorb-signature header", "signature verification failing", "Test Webhook", plus concrete event names. It is not a 4 because no obvious natural synonym or variation for this domain is missing — the phrases mirror how a user would phrase the request.

5 / 5

Distinctiveness Conflict Risk

The description occupies a clear niche (Absorb LMS specifically) with distinct triggers — the provider-named `absorb-signature` header, Absorb-specific event names, and the Test Webhook failure mode — leaving minimal overlap risk even against sibling webhook skills. It is not a 4 because the provider and event names are unique enough that it would not trigger for any other webhook skill.

5 / 5

Total

20

/

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: 4 missing

Warning

Total

15

/

16

Passed

Repository

hookdeck/webhook-skills

Path

skills/absorb-lms-webhooks/SKILL.md

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.