CtrlK
BlogDocsLog inGet started
Tessl Logo

baselinker-webhooks

Receive BaseLinker (Base.com) webhooks. Use when building a BaseLinker order or warehouse callback receiver, because BaseLinker is not a normal webhook source: deliveries arrive as HTTP HEAD requests with NO body, the entire payload is in the query string (observed params: order_id, state), there is NO signature verification of any kind (no HMAC, no secret, no handshake), and your response must be a bare bodyless 200. Use when debugging an empty req.body, wiring app.head / an exported HEAD route handler / @app.head, or polling getJournalList for change tracking.

73

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 reference that front-loads exactly the provider knowledge Claude lacks — the HEAD/no-body/query-string/no-signature model is stated, justified, and translated into correct code for three frameworks. Its weaknesses are secondary: some trimmable enumerations, an implicit rather than explicit end-to-end handler sequence, and links to examples/ directories absent from the bundle.

Suggestions

Trim the token-cost sections that carry no actionable guidance: cut the ten-provider zero-property-auth cohort list to a one-sentence corroboration, reduce Related Skills to the 3-4 most relevant (e.g., trello-webhooks for the HEAD contrast, bigcommerce-webhooks for the fetch-back pattern), and drop or compress the Attribution block.

Add a short numbered end-to-end sequence (register app.head route → coerce query params → timing-safe token check → return bare 200 → fetch detail with getOrders → dedupe on order_id + state) so the handler workflow is explicit rather than assembled implicitly from per-topic sections.

Fix the dangling examples/express/, examples/nextjs/, and examples/fastapi/ links — either include those directories in the bundle or reword to point at the material that does exist (e.g., the wiring table and reference files).

DimensionReasoningScore

Conciseness

Nearly every token carries provider-specific knowledge Claude cannot know (HEAD transport, query-string params, bare 200, X-BLToken is outbound-only, RFC 9110 cite), so it is far from the verbose bad examples. But a few sections could be trimmed: the ten-provider 'zero-property auth schema' cohort list ('AWS SNS, Microsoft Graph, Microsoft SharePoint, Monday, Strava, Tikkie, Ethoca and Zift'), the eleven-entry Related Skills section, and the Attribution block add context-window cost without actionable value. Anchor 4 ('efficient; minor instances of over-explanation that could be trimmed') fits; it is clearly above anchor 3's 'some unnecessary explanation' and short of anchor 5's 'every token earns its place'.

4 / 5

Actionability

Copy-paste-ready throughout: a complete timing-safe token-check function, a working curl call to connector.php with --data-urlencode, per-framework response snippets ('res.sendStatus(200)', 'new Response(null, { status: 200 })', 'Response(status_code=200)'), a correct-vs-wrong framework wiring table, concrete env var declarations, and a runnable hookdeck-cli command. The common cases (Express/Next.js/FastAPI wiring, order fetch-back) are all covered with executable code — anchor 5.

5 / 5

Workflow Clarity

The sequence is discernible and well-ordered (wire HEAD route → read/coerce query params → optional token check → bare 200 → getOrders fetch-back → getJournalList polling for reliability), and the 'Correct vs Wrong' wiring table plus explicit 'do not mount a JSON body parser' guidance function as checkpoints. It falls short of anchor 5 because there is no explicit end-to-end numbered workflow with a validate/fix/retry loop — the steps must be assembled from separate sections, and the failure mode of each step (e.g., what to log when the token check fails) is only implied. No destructive or batch operations are involved, so the ≤3 cap does not apply.

4 / 5

Progressive Disclosure

The three real bundle files (references/overview.md, setup.md, verification.md) are all linked inline at the point of need and again in a 'Reference Materials' section with one-line scope descriptions — one level deep, well signaled. However, the body links to examples/express/, examples/nextjs/, and examples/fastapi/ ('For complete handlers with tests') which do not exist in this bundle (only references/ is present), leaving dangling navigation. That is exactly anchor 4's 'minor organization gaps' — above anchor 3's buried/inline-heavy content, below anchor 5's fully navigable structure.

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.

An exceptional description: it encodes the provider's three non-obvious quirks (HEAD transport, query-string payload, no verification) directly into the trigger text, so skill selection works even when the user doesn't know those quirks exist. Framework-specific tokens (req.body, app.head, getJournalList) make debugging-intent matches reliable. Its only flaw is verbosity — roughly 4x the exemplar length — though none of it is fluff.

DimensionReasoningScore

Specificity

The description names the domain and multiple concrete, non-obvious actions: 'deliveries arrive as HTTP HEAD requests with NO body', 'the entire payload is in the query string (observed params: order_id, state)', 'there is NO signature verification of any kind', 'your response must be a bare bodyless 200', 'polling getJournalList'. Every clause states a specific, verifiable behavior rather than generic capability — comprehensive coverage with no gaps.

5 / 5

Completeness

Both questions are answered explicitly: what — 'Receive BaseLinker (Base.com) webhooks'; when — two concrete 'Use when' clauses ('building a BaseLinker order or warehouse callback receiver', 'debugging an empty req.body, wiring app.head / an exported HEAD route handler / @app.head, or polling getJournalList'). This is a textbook match for anchor 5; anchor 4's weaker 'when could be more explicit' clearly understates it. The only criticism is length (~110 words vs ~25 in the exemplars), which dilutes rather than damages completeness.

5 / 5

Trigger Term Quality

Natural trigger phrases a user would actually say are all present: 'BaseLinker', 'Base.com' (rebrand synonym), 'callback receiver', 'debugging an empty req.body', 'app.head', 'an exported HEAD route handler', '@app.head', 'getJournalList'. These map directly onto real debugging utterances, including framework-specific tokens. Anchor 5 ('comprehensive coverage of natural terms including synonyms') is matched; anchor 4's 'a few natural terms missing' does not apply — nothing obvious is missing.

5 / 5

Distinctiveness Conflict Risk

The niche is unambiguous: provider name plus unique wire-format facts (bodyless HEAD delivery, query-string-only payload, zero verification) that no other webhook skill shares. It explicitly distinguishes itself from HMAC-verifying sources ('no HMAC, no secret, no handshake'), so risk of triggering the wrong skill is minimal.

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: 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.