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 skills add lunw/shopline-ai-toolkit-dsh --skill shopline-webhookgit clone --depth 1 https://github.com/lunw/shopline-ai-toolkit-dshWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/lunw/shopline-ai-toolkit-dsh/shopline-webhook)<a href="https://agentmods.dev/skills/lunw/shopline-ai-toolkit-dsh/shopline-webhook"><img src="https://agentmods.dev/badge/skills/lunw/shopline-ai-toolkit-dsh/shopline-webhook/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/lunw/shopline-ai-toolkit-dsh/shopline-webhook"><img src="https://agentmods.dev/badge/skills/lunw/shopline-ai-toolkit-dsh/shopline-webhook.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What 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.1 | $0.00048 | $0.00778 |
| Opus 5 | $0.00024 | $0.00389 |
| Sonnet 5 | $0.00010 | $0.00156 |
| Haiku 4.5 | $0.00005 | $0.00078 |
Grade A, and why
shopline-webhook 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 11d 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.
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 — 61 lines — stays where its author put it; the contents beside it link to each section on GitHub.
SHOPLINE Webhooks
Webhooks keep your app in sync with store events (product created/updated, order events, customer events, ...). Subscribe in the Developer Center (Partner Portal) — the subscription is tied to the API version, so the version in the Developer Center must match the event definition your app consumes.
Delivery contract
- SHOPLINE POSTs the event to your HTTPS endpoint with
Content-Type: application/json. - Header
Shopline-Webhook-Idcarries the message ID. - Ack: return HTTP 200 to acknowledge. Anything else (timeout, non-2xx, no response within 5 s) counts as failure.
- Retry policy: if no successful response within 5 s, SHOPLINE retries 19 times within 48 hours on a schedule: 0 s, 5 s, 10 s, 30 s, 45 s, 1 min, 2 min, 5 min, 12 min, 38 min, 1 h, 2 h, then 4 h intervals. After 19 consecutive failures the platform deletes the subscription and emails you.
- Duplicates are possible — notifications are at-least-once. Your handler MUST be idempotent: dedupe by
Shopline-Webhook-Id(or a business key), and simply ack already-processed messages. - Don't rely on webhooks alone for correctness: proactively query the resource (e.g. order status) as a backup, especially for critical flows.
Signature verification
- Header:
X-Shopline-Hmac-Sha256 - Algorithm: lowercase-hex
HMAC-SHA256(rawRequestBody, appSecret) - Verify with constant-time comparison (
hmac.compare_digest/hmac.Equal) BEFORE processing the payload.
Python example:
import hmac, hashlib
def verify_webhook(app_secret: str, body: bytes, received: str) -> bool:
expected = hmac.new(app_secret.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, received)
Handler skeleton
POST /webhooks/{topic} # or one endpoint + topic in payload
1. read raw body (do not re-encode JSON — sign covers raw bytes)
2. verify X-Shopline-Hmac-Sha256 against appSecret
3. dedupe by Shopline-Webhook-Id (idempotent store)
4. process event (async ok)
5. return 200 as fast as possible; ack BEFORE heavy work if needed
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.
- 11d ago First seen · 61 lines · 48 tokens per session scan A f86f980d88b7
shopline-webhook is a skill published in the GitHub repository lunw/shopline-ai-toolkit-dsh (6 stars, last pushed 15d ago), licensed MIT. It adds 48 tokens to every session and 778 once invoked, about $0.0002 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
pipefy-introspection
Use this skill when you need to discover GraphQL type shapes, mutation signatures, enum values, or execute arbitrary GraphQL as a fallback. This is the first fallback tier (Tier 2) when dedicated MCP tools fail or don't exist for an operation. 7 MCP tools.
pipefy-api-fallback
Use this skill when an MCP tool fails AND the introspection skill could not resolve the problem. This is the last-resort fallback (Tier 3): call the Pipefy GraphQL API directly using curl or httpx, authenticating with the Service Account (OAuth2) or a Personal Access Token (PAT) available as env var. Follow the 3-tier…
yao-process
Yao process execution expert. ALWAYS invoke this skill when the user needs to call a Yao process, query data models, run scripts, or check process permissions. Do not call processes without checking this skill first.
daytona-cloud-server
Daytona cloud server, Den sandbox, desktop plus cloud e2e, marketplace server, worker proxy, cloud auth, org policies, connect Electron to Den. Use for server-side setup in validated flows.
stripe-billing-subscriptions
Analyze Stripe customers, subscriptions, prices, invoices, payment status, and lifecycle transitions with explicit environment and object scope.
kotlin-ktor-patterns
Ktor server patterns including routing DSL, plugins, authentication, Koin DI, kotlinx.serialization, WebSockets, and testApplication testing. Use when building a Ktor server — routing, plugins, auth, DI, serialization, or tests.