[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M754VT89QF94XX4GEN1HNPEM":3,"skill-same:01M754VT89QF94XX4GEN1HNPEM":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":29,"commitSha":30,"skillDirectory":5,"forksCount":14,"repositoryHtmlUrl":31,"repositoryHomepageUrl":6,"ownerHtmlUrl":32,"ownerBlogUrl":33,"ownerDescription":6,"updatedAt":34,"install":35,"resources":48},"01M754VT89QF94XX4GEN1HNPEM","openevidence-webhooks-events",null,"Configure OpenEvidence webhooks for async DeepConsult completion and events.\nUse when implementing webhook handlers, configuring async notifications,\nor setting up event-driven clinical AI workflows.\nTrigger with phrases like \"openevidence webhook\", \"openevidence events\",\n\"deepconsult callback\", \"openevidence notifications\".","SamuelChien\u002Fmega-skills-collection","SamuelChien","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4652114?v=4","01M74KK34WVHA0P5ZYSJRDDFMG","Samuel Chien","01M74KK35FQN1N9VZ9EPTH3P2S",0,"MIT","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fopenevidence-webhooks-events\u002FSKILL.md",[],[],"2026-11-12 13:55:43",false,"---\nname: openevidence-webhooks-events\ndescription: |\n  Configure OpenEvidence webhooks for async DeepConsult completion and events.\n  Use when implementing webhook handlers, configuring async notifications,\n  or setting up event-driven clinical AI workflows.\n  Trigger with phrases like \"openevidence webhook\", \"openevidence events\",\n  \"deepconsult callback\", \"openevidence notifications\".\nallowed-tools: Read, Write, Edit\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ncompatible-with: claude-code, codex, openclaw\n---\n# OpenEvidence Webhooks & Events\n\n## Table of Contents\n- [Overview](#overview)\n- [Prerequisites](#prerequisites)\n- [Instructions](#instructions)\n- [Output](#output)\n- [Error Handling](#error-handling)\n- [Examples](#examples)\n- [Resources](#resources)\n\n## Overview\nConfigure webhooks for asynchronous OpenEvidence operations. Covers DeepConsult lifecycle events, signature verification, event handlers, idempotency, and webhook testing.\n\n## Prerequisites\n- OpenEvidence Enterprise account with webhook access\n- HTTPS endpoint for receiving webhooks\n- Webhook secret for signature verification\n\n## Webhook Events\n\n| Event Type | Description | Key Payload |\n|------------|-------------|-------------|\n| `deepconsult.started` | Processing began | consultId, estimatedTime |\n| `deepconsult.progress` | Progress update | consultId, progress (0-100) |\n| `deepconsult.completed` | Finished successfully | consultId, report |\n| `deepconsult.failed` | Processing failed | consultId, error, retryable |\n| `rate_limit.warning` | Approaching rate limit | remaining, limit, resetAt |\n| `api_key.expiring` | Key expiration warning | keyId, expiresAt |\n\n## Instructions\n\n### Step 1: Create Webhook Endpoint\nSet up Express route at `\u002Fwebhooks\u002Fopenevidence` with signature verification middleware. Parse `t=timestamp,v1=signature` format from `x-openevidence-signature` header.\n\n### Step 2: Implement Signature Verification\nCompute HMAC-SHA256 of the concatenated timestamp and raw request body (joined by a period) with the webhook secret. Use timing-safe comparison. Reject timestamps older than 5 minutes (replay protection).\n\n### Step 3: Build Event Handlers\nCreate handlers for each event type: update database status for DeepConsult lifecycle, send push\u002Femail notifications on completion, alert ops on failures and rate limit warnings.\n\n### Step 4: Add Idempotency\nTrack processed webhook IDs in database with 24-hour TTL. Skip already-processed events to handle retries safely.\n\n### Step 5: Register Webhooks\nCall `client.webhooks.register()` on app startup with endpoint URL, event list, and secret.\n\n## Output\n- Secure webhook endpoint with HMAC-SHA256 verification\n- Event handlers for all OpenEvidence webhook events\n- Notification integration (push + email)\n- Idempotency protection against duplicate processing\n- Webhook registration on startup\n\n## Error Handling\n| Webhook Issue | Detection | Resolution |\n|---------------|-----------|------------|\n| Invalid signature | 401 response | Check webhook secret configuration |\n| Missing events | No handler called | Verify webhook registration |\n| Duplicate processing | Multiple notifications | Enable idempotency tracking |\n| Timeout | Webhook fails | Process async, return 200 immediately |\n\n## Examples\n\n### Signature Format\n```\nx-openevidence-signature: t=1234567890,v1=abc123def456...  # 1234567890 = configured value\n```\n\n### Quick Test\n```bash\nset -euo pipefail\n# Generate test signature and POST to local endpoint\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fwebhooks\u002Fopenevidence \\  # 3000: 3 seconds in ms\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"x-openevidence-signature: t=$(date +%s),v1=TEST\" \\\n  -d '{\"event\":\"deepconsult.completed\",\"data\":{\"consultId\":\"test\"}}'\n```\n\nSee [detailed implementation](${CLAUDE_SKILL_DIR}\u002Freferences\u002Fimplementation.md) for advanced patterns.\n\n## Resources\n- [OpenEvidence API Docs](https:\u002F\u002Fdocs.openevidence.com\u002F)\n- [Webhook Security Best Practices](https:\u002F\u002Fwebhooks.fyi\u002F)","# OpenEvidence Webhooks & Events\n\n## Table of Contents\n- [Overview](#overview)\n- [Prerequisites](#prerequisites)\n- [Instructions](#instructions)\n- [Output](#output)\n- [Error Handling](#error-handling)\n- [Examples](#examples)\n- [Resources](#resources)\n\n## Overview\nConfigure webhooks for asynchronous OpenEvidence operations. Covers DeepConsult lifecycle events, signature verification, event handlers, idempotency, and webhook testing.\n\n## Prerequisites\n- OpenEvidence Enterprise account with webhook access\n- HTTPS endpoint for receiving webhooks\n- Webhook secret for signature verification\n\n## Webhook Events\n\n| Event Type | Description | Key Payload |\n|------------|-------------|-------------|\n| `deepconsult.started` | Processing began | consultId, estimatedTime |\n| `deepconsult.progress` | Progress update | consultId, progress (0-100) |\n| `deepconsult.completed` | Finished successfully | consultId, report |\n| `deepconsult.failed` | Processing failed | consultId, error, retryable |\n| `rate_limit.warning` | Approaching rate limit | remaining, limit, resetAt |\n| `api_key.expiring` | Key expiration warning | keyId, expiresAt |\n\n## Instructions\n\n### Step 1: Create Webhook Endpoint\nSet up Express route at `\u002Fwebhooks\u002Fopenevidence` with signature verification middleware. Parse `t=timestamp,v1=signature` format from `x-openevidence-signature` header.\n\n### Step 2: Implement Signature Verification\nCompute HMAC-SHA256 of the concatenated timestamp and raw request body (joined by a period) with the webhook secret. Use timing-safe comparison. Reject timestamps older than 5 minutes (replay protection).\n\n### Step 3: Build Event Handlers\nCreate handlers for each event type: update database status for DeepConsult lifecycle, send push\u002Femail notifications on completion, alert ops on failures and rate limit warnings.\n\n### Step 4: Add Idempotency\nTrack processed webhook IDs in database with 24-hour TTL. Skip already-processed events to handle retries safely.\n\n### Step 5: Register Webhooks\nCall `client.webhooks.register()` on app startup with endpoint URL, event list, and secret.\n\n## Output\n- Secure webhook endpoint with HMAC-SHA256 verification\n- Event handlers for all OpenEvidence webhook events\n- Notification integration (push + email)\n- Idempotency protection against duplicate processing\n- Webhook registration on startup\n\n## Error Handling\n| Webhook Issue | Detection | Resolution |\n|---------------|-----------|------------|\n| Invalid signature | 401 response | Check webhook secret configuration |\n| Missing events | No handler called | Verify webhook registration |\n| Duplicate processing | Multiple notifications | Enable idempotency tracking |\n| Timeout | Webhook fails | Process async, return 200 immediately |\n\n## Examples\n\n### Signature Format\n```\nx-openevidence-signature: t=1234567890,v1=abc123def456...  # 1234567890 = configured value\n```\n\n### Quick Test\n```bash\nset -euo pipefail\n# Generate test signature and POST to local endpoint\ncurl -X POST http:\u002F\u002Flocalhost:3000\u002Fwebhooks\u002Fopenevidence \\  # 3000: 3 seconds in ms\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"x-openevidence-signature: t=$(date +%s),v1=TEST\" \\\n  -d '{\"event\":\"deepconsult.completed\",\"data\":{\"consultId\":\"test\"}}'\n```\n\nSee [detailed implementation](${CLAUDE_SKILL_DIR}\u002Freferences\u002Fimplementation.md) for advanced patterns.\n\n## Resources\n- [OpenEvidence API Docs](https:\u002F\u002Fdocs.openevidence.com\u002F)\n- [Webhook Security Best Practices](https:\u002F\u002Fwebhooks.fyi\u002F)",{"name":5,"author":24,"license":15,"version":25,"description":26,"allowed-tools":27,"compatible-with":28},"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Configure OpenEvidence webhooks for async DeepConsult completion and events.\nUse when implementing webhook handlers, configuring async notifications,\nor setting up event-driven clinical AI workflows.\nTrigger with phrases like \"openevidence webhook\", \"openevidence events\",\n\"deepconsult callback\", \"openevidence notifications\".\n","Read, Write, Edit","claude-code, codex, openclaw","main","c2b1fdccc779e99ac814e55fb69ca8d71215dd0f","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection","https:\u002F\u002Fgithub.com\u002FSamuelChien","http:\u002F\u002Fsamuelchien.com\u002F","2026-05-26 08:27:14",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add SamuelChien\u002Fmega-skills-collection --skill openevidence-webhooks-events",{"tool":41,"command":42},"bunx","bunx skills add SamuelChien\u002Fmega-skills-collection --skill openevidence-webhooks-events",{"tool":44,"command":45},"pnpm","pnpm dlx skills add SamuelChien\u002Fmega-skills-collection --skill openevidence-webhooks-events","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fopenevidence-webhooks-events\u002FSKILL.md",true,[49],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"references\u002Fimplementation.md","REFERENCE","参考文档",2130,"https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fopenevidence-webhooks-events\u002Freferences\u002Fimplementation.md",[56,63,70,77,84,92],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":62,"publishedAt":19},"01M76R4WZQZAXGGXMQCA0FZ716","zustand-store-ts","Create Zustand stores with TypeScript, subscribeWithSelector middleware, and proper state\u002Faction separation. Use when building React state management, creating global stores, or implementing reactive state patterns with Zustand.","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fzustand-store-ts\u002FSKILL.md",[],[],{"skillNo":64,"name":65,"nameZh":6,"description":66,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":67,"categories":68,"keywords":69,"publishedAt":19},"01M76R4T9KENDH7FENGZQHBW4G","zustand-store-creator","Zustand Store Creator - Auto-activating skill for Frontend Development.\nTriggers on: zustand store creator, zustand store creator\nPart of the Frontend Development skill category.","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fzustand-store-creator\u002FSKILL.md",[],[],{"skillNo":71,"name":72,"nameZh":6,"description":73,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M76R3YWN84B7SANJ52X799ZE","zero-trust-config-helper","Zero Trust Config Helper - Auto-activating skill for Security Advanced.\nTriggers on: zero trust config helper, zero trust config helper\nPart of the Security Advanced skill category.","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fzero-trust-config-helper\u002FSKILL.md",[],[],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":19},"01M76R3HNSV2AEYSKHM915GJ58","zapier-integration-helper","Zapier Integration Helper - Auto-activating skill for Business Automation.\nTriggers on: zapier integration helper, zapier integration helper\nPart of the Business Automation skill category.","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fzapier-integration-helper\u002FSKILL.md",[],[],{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":88,"licenseFileUrl":6,"sourceHtmlUrl":89,"categories":90,"keywords":91,"publishedAt":19},"01M76R3DJSKAT4FA7DV4BF3GCE","zai-cli","Execute z.AI CLI providing vision, search, reader, and GitHub exploration via CLI and MCP.\nUse when user needs image\u002Fvideo analysis, OCR, UI-to-code conversion, error diagnosis,\nreal-time web search, web page to markdown extraction, or GitHub code exploration.\nTrigger with phrases like \"analyze this image\", \"search the web for\", \"read this page\",\n\"explore this repo\", or \"use zai\". Requires Z_AI_API_KEY.","Apache-2.0","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fzai-cli\u002FSKILL.md",[],[],{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":19},"01M76R2KAM699XE9AJVAWE4H2E","yt-research","Research competitor YouTube channels, niches, and trending topics for your content strategy.\nUse this skill whenever the user says \"research channels\", \"analyze competitors\", \"find trending topics\",\n\"niche analysis\", \"competitive research\", \"what are other creators doing\", \"scrape YouTube channels\",\nor wants to understand the competitive landscape for a specific tool or topic area. Use when working with yt research. Trigger with 'yt', 'research'.","https:\u002F\u002Fgithub.com\u002FSamuelChien\u002Fmega-skills-collection\u002Fblob\u002Fmain\u002Fyt-research\u002FSKILL.md",[],[]]