[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EEK6RW54JDPG9QQ85HETFN":3,"skill-same:01M6EEK6RW54JDPG9QQ85HETFN":55},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":27,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":37,"ownerHtmlUrl":38,"ownerBlogUrl":6,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M6EEK6RW54JDPG9QQ85HETFN","checkly",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fcheckly\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":25,"taxonomyTypeDesc":26},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5],"2026-11-10 10:12:30",false,"# Checkly — Synthetic Monitoring and Testing\n\n\n## Overview\n\n\nCheckly, the synthetic monitoring platform that runs Playwright-based browser checks and API checks from locations worldwide. Helps developers implement monitoring-as-code (MaC) with the Checkly CLI, set up API and browser checks, configure alerting, and integrate monitoring into CI\u002FCD pipelines.\n\n\n## Instructions\n\n### Monitoring as Code\n\n```bash\n# Install Checkly CLI\nnpm install -g checkly\n\n# Initialize in your project\ncheckly init\n\n# Project structure\n# checkly.config.ts — Global configuration\n# __checks__\u002F\n#   api\u002F\n#     health.check.ts\n#     orders-api.check.ts\n#   browser\u002F\n#     login-flow.check.ts\n#     checkout.check.ts\n```\n\n```typescript\n\u002F\u002F checkly.config.ts — Global configuration\nimport { defineConfig } from \"checkly\";\nimport { EmailAlertChannel, SlackAlertChannel } from \"checkly\u002Fconstructs\";\n\nconst slackAlert = new SlackAlertChannel(\"slack-alerts\", {\n  webhookUrl: process.env.SLACK_WEBHOOK_URL!,\n  channel: \"#alerts\",\n  sendFailure: true,\n  sendRecovery: true,\n  sendDegraded: true,\n});\n\nconst emailAlert = new EmailAlertChannel(\"email-ops\", {\n  address: \"ops@example.com\",\n  sendFailure: true,\n  sendRecovery: true,\n});\n\nexport default defineConfig({\n  projectName: \"My SaaS\",\n  logicalId: \"my-saas-monitoring\",\n  repoUrl: \"https:\u002F\u002Fgithub.com\u002Fmyorg\u002Fmy-saas\",\n  checks: {\n    locations: [\"us-east-1\", \"eu-west-1\", \"ap-southeast-1\"],\n    frequency: 5,                        \u002F\u002F Check every 5 minutes\n    tags: [\"production\"],\n    runtimeId: \"2024.02\",\n    alertChannels: [slackAlert, emailAlert],\n    browserChecks: {\n      frequency: 10,                     \u002F\u002F Browser checks every 10 min\n      testMatch: \"**\u002F__checks__\u002Fbrowser\u002F**\u002F*.check.ts\",\n    },\n    apiChecks: {\n      frequency: 1,                      \u002F\u002F API checks every 1 min\n      testMatch: \"**\u002F__checks__\u002Fapi\u002F**\u002F*.check.ts\",\n    },\n  },\n});\n```\n\n### API Checks\n\n```typescript\n\u002F\u002F __checks__\u002Fapi\u002Forders-api.check.ts — API endpoint monitoring\nimport { ApiCheck, AssertionBuilder } from \"checkly\u002Fconstructs\";\n\nnew ApiCheck(\"orders-api-health\", {\n  name: \"Orders API — Health Check\",\n  request: {\n    method: \"GET\",\n    url: \"https:\u002F\u002Fapi.example.com\u002Fv1\u002Fhealth\",\n    headers: [{ key: \"Authorization\", value: `Bearer {{MONITORING_API_KEY}}` }],\n    assertions: [\n      AssertionBuilder.statusCode().equals(200),\n      AssertionBuilder.jsonBody(\"$.status\").equals(\"healthy\"),\n      AssertionBuilder.responseTime().lessThan(2000),   \u002F\u002F Under 2 seconds\n    ],\n  },\n  degradedResponseTime: 1000,          \u002F\u002F Mark as degraded if > 1s\n  maxResponseTime: 3000,               \u002F\u002F Mark as failed if > 3s\n});\n\nnew ApiCheck(\"orders-create\", {\n  name: \"Orders API — Create Order Flow\",\n  request: {\n    method: \"POST\",\n    url: \"https:\u002F\u002Fapi.example.com\u002Fv1\u002Forders\",\n    headers: [\n      { key: \"Authorization\", value: \"Bearer {{MONITORING_API_KEY}}\" },\n      { key: \"Content-Type\", value: \"application\u002Fjson\" },\n    ],\n    body: JSON.stringify({\n      items: [{ productId: \"test-product\", quantity: 1 }],\n      test: true,                       \u002F\u002F Flag so backend doesn't charge\n    }),\n    assertions: [\n      AssertionBuilder.statusCode().equals(201),\n      AssertionBuilder.jsonBody(\"$.id\").isNotEmpty(),\n      AssertionBuilder.jsonBody(\"$.status\").equals(\"pending\"),\n    ],\n  },\n  setupScript: {\n    \u002F\u002F Run before the request — generate dynamic data\n    content: `\n      const crypto = require('crypto');\n      request.headers['X-Idempotency-Key'] = crypto.randomUUID();\n    `,\n  },\n  teardownScript: {\n    \u002F\u002F Run after the request — clean up test data\n    content: `\n      if (response.statusCode === 201) {\n        const orderId = JSON.parse(response.body).id;\n        \u002F\u002F Delete the test order\n        await fetch(\\`https:\u002F\u002Fapi.example.com\u002Fv1\u002Forders\u002F\\${orderId}\\`, {\n          method: 'DELETE',\n          headers: { 'Authorization': 'Bearer ' + process.env.MONITORING_API_KEY },\n        });\n      }\n    `,\n  },\n});\n```\n\n### Browser Checks (Playwright)\n\n```typescript\n\u002F\u002F __checks__\u002Fbrowser\u002Fcheckout-flow.check.ts — E2E user flow monitoring\n\u002F\u002F Runs a real Playwright browser in Checkly's cloud every 10 minutes.\nimport { test, expect } from \"@playwright\u002Ftest\";\n\ntest(\"Complete checkout flow\", async ({ page }) => {\n  \u002F\u002F Step 1: Navigate to product page\n  await page.goto(\"https:\u002F\u002Fexample.com\u002Fproducts\u002Fstarter-plan\");\n  await expect(page.getByRole(\"heading\", { name: \"Starter Plan\" })).toBeVisible();\n\n  \u002F\u002F Step 2: Add to cart\n  await page.getByRole(\"button\", { name: \"Start Free Trial\" }).click();\n  await expect(page.getByText(\"Added to cart\")).toBeVisible();\n\n  \u002F\u002F Step 3: Go to checkout\n  await page.getByRole(\"link\", { name: \"Checkout\" }).click();\n  await expect(page).toHaveURL(\u002F.*checkout\u002F);\n\n  \u002F\u002F Step 4: Fill payment form (test card)\n  await page.getByLabel(\"Email\").fill(\"monitoring@example.com\");\n  await page.getByLabel(\"Card number\").fill(\"4242424242424242\");\n  await page.getByLabel(\"Expiry\").fill(\"12\u002F28\");\n  await page.getByLabel(\"CVC\").fill(\"123\");\n\n  \u002F\u002F Step 5: Submit\n  await page.getByRole(\"button\", { name: \"Subscribe\" }).click();\n\n  \u002F\u002F Step 6: Verify success\n  await expect(page.getByText(\"Welcome to Starter Plan\")).toBeVisible({ timeout: 10000 });\n});\n\ntest(\"Login flow works\", async ({ page }) => {\n  await page.goto(\"https:\u002F\u002Fexample.com\u002Flogin\");\n\n  await page.getByLabel(\"Email\").fill(process.env.TEST_USER_EMAIL!);\n  await page.getByLabel(\"Password\").fill(process.env.TEST_USER_PASSWORD!);\n  await page.getByRole(\"button\", { name: \"Sign in\" }).click();\n\n  \u002F\u002F Verify dashboard loads\n  await expect(page.getByRole(\"heading\", { name: \"Dashboard\" })).toBeVisible();\n  await expect(page.getByText(\"Welcome back\")).toBeVisible();\n});\n```\n\n### CI\u002FCD Integration\n\n```yaml\n# .github\u002Fworkflows\u002Fdeploy.yml — Run checks after deployment\n- name: Deploy to production\n  run: npm run deploy\n\n- name: Run Checkly checks\n  uses: checkly\u002Fcheckly-github-action@v1\n  with:\n    apiKey: ${{ secrets.CHECKLY_API_KEY }}\n    accountId: ${{ secrets.CHECKLY_ACCOUNT_ID }}\n    # Run all checks and fail the pipeline if any fail\n    command: \"checkly test --record\"\n```\n\n```bash\n# Deploy checks to Checkly (like deploying infrastructure)\ncheckly deploy\n\n# Test locally before deploying\ncheckly test\n\n# Dry run — show what would change\ncheckly deploy --preview\n```\n\n## Installation\n\n```bash\nnpm install -g checkly\ncheckly login\ncheckly init\n```\n\n\n## Examples\n\n\n### Example 1: Setting up Checkly for a microservices project\n\n**User request:**\n\n```\nI have a Node.js API and a React frontend running in Docker. Set up Checkly for monitoring\u002Fdeployment.\n```\n\nThe agent creates the necessary configuration files based on patterns like `# Install Checkly CLI`, sets up the integration with the existing Docker setup, configures appropriate defaults for a Node.js + React stack, and provides verification commands to confirm everything is working.\n\n### Example 2: Troubleshooting api checks issues\n\n**User request:**\n\n```\nCheckly is showing errors in our api checks. Here are the logs: [error output]\n```\n\nThe agent analyzes the error output, identifies the root cause by cross-referencing with common Checkly issues, applies the fix (updating configuration, adjusting resource limits, or correcting syntax), and verifies the resolution with appropriate health checks.\n\n\n## Guidelines\n\n1. **Monitoring as code** — Define checks in your repo alongside application code; version, review, and deploy together\n2. **API + browser checks** — API checks catch backend issues fast (every 1 min); browser checks validate user flows (every 10 min)\n3. **Multi-region** — Run checks from 3+ regions; catch regional outages and CDN issues\n4. **Playwright for browser** — Checkly uses Playwright natively; reuse your E2E tests as production monitors\n5. **Degraded vs failed** — Set degraded thresholds (e.g., > 1s) separate from failure (> 3s); catch slowdowns before they become outages\n6. **Clean up test data** — Use teardown scripts to delete test orders\u002Fusers created by monitoring checks\n7. **CI\u002FCD integration** — Run checks after every deployment; automatically catch regressions before users do\n8. **Environment variables** — Store API keys and test credentials as Checkly environment variables, not in code\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fcheckly",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill checkly",{"tool":47,"command":48},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill checkly",{"tool":50,"command":51},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill checkly","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fcheckly\u002FSKILL.md",true,[],[56,68,78,87,93,100],{"skillNo":57,"name":58,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":64,"publishedAt":28},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[61],{"categoryNo":62,"categoryName":63,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[65,66,67],"model","model hierarchy","model hierarchy skill",{"skillNo":69,"name":70,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":71,"categories":72,"keywords":74,"publishedAt":28},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[73],{"categoryNo":62,"categoryName":63,"taxonomyType":20,"taxonomyTypeDesc":21},[75,76,77],"MCP","zoom","zoom mcp",{"skillNo":79,"name":80,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":28},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[84,85,86,76],"sdk","zoom apps sdk","apps",{"skillNo":88,"name":89,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":28},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[89],{"skillNo":94,"name":95,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":99,"publishedAt":28},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[98],{"categoryNo":62,"categoryName":63,"taxonomyType":20,"taxonomyTypeDesc":21},[95],{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":28},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[102]]