[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F7G83Z2EZ9B16XEF6CD2YC":3,"skill-same:01M6F7G83Z2EZ9B16XEF6CD2YC":78},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":62,"updatedAt":63,"install":64,"resources":77},"01M6F7G83Z2EZ9B16XEF6CD2YC","attio-common-errors",null,"Diagnose and fix the top Attio REST API errors by HTTP status code.\nReal error response formats, actual error codes, and proven fixes.\nTrigger: \"attio error\", \"fix attio\", \"attio not working\",\n\"attio 429\", \"attio 403\", \"attio 422\", \"debug attio\".","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\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fattio-common-errors\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"attio common errors","common","attio","fix","429","http status","codes","error","trigger","io","crm","status","read","Bash","api","saas","code","http","diagnose","debug","2026-11-10 10:12:30",false,"---\nname: attio-common-errors\ndescription: |\n  Diagnose and fix the top Attio REST API errors by HTTP status code.\n  Real error response formats, actual error codes, and proven fixes.\n  Trigger: \"attio error\", \"fix attio\", \"attio not working\",\n  \"attio 429\", \"attio 403\", \"attio 422\", \"debug attio\".\nallowed-tools: Read, Grep, Bash(curl:*)\nversion: 1.0.0\nlicense: MIT\nauthor: Jeremy Longshore \u003Cjeremy@intentsolutions.io>\ntags: [saas, crm, attio]\ncompatible-with: claude-code\n---\n\n# Attio Common Errors\n\n## Overview\n\nEvery Attio API error returns a consistent JSON body. This skill covers the real error codes, response format, and proven solutions for each.\n\n## Attio Error Response Format\n\nAll errors from `https:\u002F\u002Fapi.attio.com\u002Fv2` return this structure:\n\n```json\n{\n  \"status_code\": 429,\n  \"type\": \"rate_limit_error\",\n  \"code\": \"rate_limit_exceeded\",\n  \"message\": \"Rate limit exceeded, please try again later\"\n}\n```\n\nFields: `status_code` (HTTP status), `type` (error category), `code` (specific code), `message` (human-readable).\n\n## Error Reference\n\n### 400 Bad Request -- `invalid_request`\n\n```json\n{ \"status_code\": 400, \"type\": \"invalid_request_error\", \"code\": \"invalid_request\", \"message\": \"...\" }\n```\n\n**Common causes and fixes:**\n\n| Message pattern | Cause | Fix |\n|----------------|-------|-----|\n| `Invalid value for attribute` | Wrong type for attribute slug | Check attribute type with `GET \u002Fv2\u002Fobjects\u002F{obj}\u002Fattributes` |\n| `Cannot query historic values` | Used history param on unsupported type | Remove `show_historic` for that attribute |\n| `Missing required field` | Required attribute not provided | Check `is_required` on attribute definition |\n| `Invalid filter format` | Malformed filter object | Use shorthand `{ \"email\": \"x\" }` or verbose `{ \"$and\": [...] }` |\n\n**Diagnostic:**\n```bash\n# List attributes to verify types\ncurl -s https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects\u002Fpeople\u002Fattributes \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\" \\\n  | jq '.data[] | {slug: .api_slug, type: .type, required: .is_required}'\n```\n\n### 401 Unauthorized -- `authentication_error`\n\n```json\n{ \"status_code\": 401, \"type\": \"authentication_error\", \"code\": \"invalid_api_key\", \"message\": \"...\" }\n```\n\n| Cause | Fix |\n|-------|-----|\n| Missing `Authorization` header | Add `Authorization: Bearer sk_...` |\n| Token revoked or deleted | Generate new token in Attio dashboard |\n| Malformed header | Ensure format is `Bearer \u003Ctoken>` (one space, no quotes) |\n\n**Diagnostic:**\n```bash\n# Verify token works\ncurl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" \\\n  https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\"\n# Should return 200\n```\n\n### 403 Forbidden -- `insufficient_scopes`\n\n```json\n{ \"status_code\": 403, \"type\": \"authorization_error\", \"code\": \"insufficient_scopes\",\n  \"message\": \"Token requires 'record_permission:read-write' scope\" }\n```\n\n| Operation | Required scopes |\n|-----------|----------------|\n| List\u002Fget records | `object_configuration:read` + `record_permission:read` |\n| Create\u002Fupdate records | `object_configuration:read` + `record_permission:read-write` |\n| List entries | `object_configuration:read` + `record_permission:read` + `list_entry:read` |\n| Create\u002Fupdate entries | Above + `list_entry:read-write` |\n| Create notes | `note:read-write` + `object_configuration:read` + `record_permission:read` |\n| List tasks | `task:read` + `object_configuration:read` + `record_permission:read` + `user_management:read` |\n| Manage webhooks | `webhook:read-write` |\n\n**Fix:** Edit token in **Settings > Developers > Access tokens**, add missing scope, save. No need to regenerate.\n\n### 404 Not Found -- `not_found`\n\n```json\n{ \"status_code\": 404, \"type\": \"not_found_error\", \"code\": \"not_found\", \"message\": \"...\" }\n```\n\n| Cause | Fix |\n|-------|-----|\n| Wrong object slug | Verify with `GET \u002Fv2\u002Fobjects` -- use `api_slug` field |\n| Invalid record_id | Record may have been deleted or merged |\n| Wrong list slug | Verify with `GET \u002Fv2\u002Flists` |\n| Typo in endpoint path | Check path starts with `\u002Fv2\u002F` |\n\n### 409 Conflict -- `conflict`\n\nOccurs when creating a record with a value that conflicts with an existing unique attribute (e.g., duplicate email or domain).\n\n**Fix:** Use `PUT` (assert) instead of `POST` to upsert:\n```typescript\n\u002F\u002F Assert: create or update matching record\nawait client.put(\"\u002Fobjects\u002Fpeople\u002Frecords\", {\n  data: {\n    values: {\n      email_addresses: [\"existing@example.com\"],\n      name: [{ first_name: \"Updated\", last_name: \"Name\" }],\n    },\n  },\n});\n```\n\n### 422 Unprocessable Entity -- `validation_error`\n\n| Message pattern | Cause | Fix |\n|----------------|-------|-----|\n| `Invalid email address` | Malformed email string | Validate email format before sending |\n| `Invalid phone number` | Not E.164 format | Prefix with country code: `+14155551234` |\n| `Unknown attribute` | Attribute slug does not exist | List attributes first |\n| `Invalid record reference` | target_record_id doesn't exist | Verify record exists first |\n\n### 429 Too Many Requests -- `rate_limit_exceeded`\n\n```json\n{\n  \"status_code\": 429,\n  \"type\": \"rate_limit_error\",\n  \"code\": \"rate_limit_exceeded\",\n  \"message\": \"Rate limit exceeded, please try again later\"\n}\n```\n\nAttio uses a **sliding window algorithm** with a **10-second window**. The `Retry-After` response header contains a date (usually the next second).\n\n**Immediate fix:**\n```typescript\nif (res.status === 429) {\n  const retryAfter = res.headers.get(\"Retry-After\");\n  const waitMs = retryAfter\n    ? new Date(retryAfter).getTime() - Date.now()\n    : 1000;\n  await new Promise((r) => setTimeout(r, Math.max(waitMs, 100)));\n  \u002F\u002F Retry the request\n}\n```\n\nSee `attio-rate-limits` for full backoff and queue patterns.\n\n### 500+ Server Error\n\nRare, but Attio may reduce rate limits during incidents. Always implement retry for 5xx.\n\n**Check:** [status.attio.com](https:\u002F\u002Fstatus.attio.com)\n\n## Quick Diagnostic Script\n\n```bash\n#!\u002Fbin\u002Fbash\necho \"=== Attio Diagnostic ===\"\necho -n \"Auth: \"\ncurl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" \\\n  https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\"\necho \"\"\n\necho -n \"Status page: \"\ncurl -s https:\u002F\u002Fstatus.attio.com\u002Fapi\u002Fv2\u002Fstatus.json | jq -r '.status.description'\n\necho \"Objects:\"\ncurl -s https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\" \\\n  | jq -r '.data[].api_slug' 2>\u002Fdev\u002Fnull || echo \"FAILED\"\n```\n\n## Error Handling Pattern\n\n```typescript\nimport { AttioApiError } from \".\u002Fclient\";\n\nasync function handleAttioError(err: AttioApiError): Promise\u003Cvoid> {\n  switch (err.statusCode) {\n    case 401: throw new Error(\"Attio auth failed -- check ATTIO_API_KEY\");\n    case 403: throw new Error(`Missing scope: ${err.message}`);\n    case 404: console.warn(\"Resource not found, may have been deleted\");  break;\n    case 409: console.warn(\"Conflict -- use PUT to upsert instead\");     break;\n    case 429: \u002F* handled by retry wrapper *\u002F break;\n    default:  throw err;\n  }\n}\n```\n\n## Resources\n\n- [Attio REST API Overview](https:\u002F\u002Fdocs.attio.com\u002Frest-api\u002Foverview)\n- [Attio Rate Limiting Guide](https:\u002F\u002Fdocs.attio.com\u002Frest-api\u002Fguides\u002Frate-limiting)\n- [Attio Status Page](https:\u002F\u002Fstatus.attio.com)\n\n## Next Steps\n\nFor evidence collection, see `attio-debug-bundle`. For retry patterns, see `attio-rate-limits`.\n\n","# Attio Common Errors\n\n## Overview\n\nEvery Attio API error returns a consistent JSON body. This skill covers the real error codes, response format, and proven solutions for each.\n\n## Attio Error Response Format\n\nAll errors from `https:\u002F\u002Fapi.attio.com\u002Fv2` return this structure:\n\n```json\n{\n  \"status_code\": 429,\n  \"type\": \"rate_limit_error\",\n  \"code\": \"rate_limit_exceeded\",\n  \"message\": \"Rate limit exceeded, please try again later\"\n}\n```\n\nFields: `status_code` (HTTP status), `type` (error category), `code` (specific code), `message` (human-readable).\n\n## Error Reference\n\n### 400 Bad Request -- `invalid_request`\n\n```json\n{ \"status_code\": 400, \"type\": \"invalid_request_error\", \"code\": \"invalid_request\", \"message\": \"...\" }\n```\n\n**Common causes and fixes:**\n\n| Message pattern | Cause | Fix |\n|----------------|-------|-----|\n| `Invalid value for attribute` | Wrong type for attribute slug | Check attribute type with `GET \u002Fv2\u002Fobjects\u002F{obj}\u002Fattributes` |\n| `Cannot query historic values` | Used history param on unsupported type | Remove `show_historic` for that attribute |\n| `Missing required field` | Required attribute not provided | Check `is_required` on attribute definition |\n| `Invalid filter format` | Malformed filter object | Use shorthand `{ \"email\": \"x\" }` or verbose `{ \"$and\": [...] }` |\n\n**Diagnostic:**\n```bash\n# List attributes to verify types\ncurl -s https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects\u002Fpeople\u002Fattributes \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\" \\\n  | jq '.data[] | {slug: .api_slug, type: .type, required: .is_required}'\n```\n\n### 401 Unauthorized -- `authentication_error`\n\n```json\n{ \"status_code\": 401, \"type\": \"authentication_error\", \"code\": \"invalid_api_key\", \"message\": \"...\" }\n```\n\n| Cause | Fix |\n|-------|-----|\n| Missing `Authorization` header | Add `Authorization: Bearer sk_...` |\n| Token revoked or deleted | Generate new token in Attio dashboard |\n| Malformed header | Ensure format is `Bearer \u003Ctoken>` (one space, no quotes) |\n\n**Diagnostic:**\n```bash\n# Verify token works\ncurl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" \\\n  https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\"\n# Should return 200\n```\n\n### 403 Forbidden -- `insufficient_scopes`\n\n```json\n{ \"status_code\": 403, \"type\": \"authorization_error\", \"code\": \"insufficient_scopes\",\n  \"message\": \"Token requires 'record_permission:read-write' scope\" }\n```\n\n| Operation | Required scopes |\n|-----------|----------------|\n| List\u002Fget records | `object_configuration:read` + `record_permission:read` |\n| Create\u002Fupdate records | `object_configuration:read` + `record_permission:read-write` |\n| List entries | `object_configuration:read` + `record_permission:read` + `list_entry:read` |\n| Create\u002Fupdate entries | Above + `list_entry:read-write` |\n| Create notes | `note:read-write` + `object_configuration:read` + `record_permission:read` |\n| List tasks | `task:read` + `object_configuration:read` + `record_permission:read` + `user_management:read` |\n| Manage webhooks | `webhook:read-write` |\n\n**Fix:** Edit token in **Settings > Developers > Access tokens**, add missing scope, save. No need to regenerate.\n\n### 404 Not Found -- `not_found`\n\n```json\n{ \"status_code\": 404, \"type\": \"not_found_error\", \"code\": \"not_found\", \"message\": \"...\" }\n```\n\n| Cause | Fix |\n|-------|-----|\n| Wrong object slug | Verify with `GET \u002Fv2\u002Fobjects` -- use `api_slug` field |\n| Invalid record_id | Record may have been deleted or merged |\n| Wrong list slug | Verify with `GET \u002Fv2\u002Flists` |\n| Typo in endpoint path | Check path starts with `\u002Fv2\u002F` |\n\n### 409 Conflict -- `conflict`\n\nOccurs when creating a record with a value that conflicts with an existing unique attribute (e.g., duplicate email or domain).\n\n**Fix:** Use `PUT` (assert) instead of `POST` to upsert:\n```typescript\n\u002F\u002F Assert: create or update matching record\nawait client.put(\"\u002Fobjects\u002Fpeople\u002Frecords\", {\n  data: {\n    values: {\n      email_addresses: [\"existing@example.com\"],\n      name: [{ first_name: \"Updated\", last_name: \"Name\" }],\n    },\n  },\n});\n```\n\n### 422 Unprocessable Entity -- `validation_error`\n\n| Message pattern | Cause | Fix |\n|----------------|-------|-----|\n| `Invalid email address` | Malformed email string | Validate email format before sending |\n| `Invalid phone number` | Not E.164 format | Prefix with country code: `+14155551234` |\n| `Unknown attribute` | Attribute slug does not exist | List attributes first |\n| `Invalid record reference` | target_record_id doesn't exist | Verify record exists first |\n\n### 429 Too Many Requests -- `rate_limit_exceeded`\n\n```json\n{\n  \"status_code\": 429,\n  \"type\": \"rate_limit_error\",\n  \"code\": \"rate_limit_exceeded\",\n  \"message\": \"Rate limit exceeded, please try again later\"\n}\n```\n\nAttio uses a **sliding window algorithm** with a **10-second window**. The `Retry-After` response header contains a date (usually the next second).\n\n**Immediate fix:**\n```typescript\nif (res.status === 429) {\n  const retryAfter = res.headers.get(\"Retry-After\");\n  const waitMs = retryAfter\n    ? new Date(retryAfter).getTime() - Date.now()\n    : 1000;\n  await new Promise((r) => setTimeout(r, Math.max(waitMs, 100)));\n  \u002F\u002F Retry the request\n}\n```\n\nSee `attio-rate-limits` for full backoff and queue patterns.\n\n### 500+ Server Error\n\nRare, but Attio may reduce rate limits during incidents. Always implement retry for 5xx.\n\n**Check:** [status.attio.com](https:\u002F\u002Fstatus.attio.com)\n\n## Quick Diagnostic Script\n\n```bash\n#!\u002Fbin\u002Fbash\necho \"=== Attio Diagnostic ===\"\necho -n \"Auth: \"\ncurl -s -o \u002Fdev\u002Fnull -w \"%{http_code}\" \\\n  https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\"\necho \"\"\n\necho -n \"Status page: \"\ncurl -s https:\u002F\u002Fstatus.attio.com\u002Fapi\u002Fv2\u002Fstatus.json | jq -r '.status.description'\n\necho \"Objects:\"\ncurl -s https:\u002F\u002Fapi.attio.com\u002Fv2\u002Fobjects \\\n  -H \"Authorization: Bearer ${ATTIO_API_KEY}\" \\\n  | jq -r '.data[].api_slug' 2>\u002Fdev\u002Fnull || echo \"FAILED\"\n```\n\n## Error Handling Pattern\n\n```typescript\nimport { AttioApiError } from \".\u002Fclient\";\n\nasync function handleAttioError(err: AttioApiError): Promise\u003Cvoid> {\n  switch (err.statusCode) {\n    case 401: throw new Error(\"Attio auth failed -- check ATTIO_API_KEY\");\n    case 403: throw new Error(`Missing scope: ${err.message}`);\n    case 404: console.warn(\"Resource not found, may have been deleted\");  break;\n    case 409: console.warn(\"Conflict -- use PUT to upsert instead\");     break;\n    case 429: \u002F* handled by retry wrapper *\u002F break;\n    default:  throw err;\n  }\n}\n```\n\n## Resources\n\n- [Attio REST API Overview](https:\u002F\u002Fdocs.attio.com\u002Frest-api\u002Foverview)\n- [Attio Rate Limiting Guide](https:\u002F\u002Fdocs.attio.com\u002Frest-api\u002Fguides\u002Frate-limiting)\n- [Attio Status Page](https:\u002F\u002Fstatus.attio.com)\n\n## Next Steps\n\nFor evidence collection, see `attio-debug-bundle`. For retry patterns, see `attio-rate-limits`.\n\n",{"name":5,"tags":49,"author":50,"license":15,"version":51,"description":52,"allowed-tools":53,"compatible-with":54},[39,34,26],"Jeremy Longshore \u003Cjeremy@intentsolutions.io>","1.0.0","Diagnose and fix the top Attio REST API errors by HTTP status code.\nReal error response formats, actual error codes, and proven fixes.\nTrigger: \"attio error\", \"fix attio\", \"attio not working\",\n\"attio 429\", \"attio 403\", \"attio 422\", \"debug attio\".\n","Read, Grep, Bash(curl:*)","claude-code","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fattio-common-errors",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":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill attio-common-errors",{"tool":70,"command":71},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill attio-common-errors",{"tool":73,"command":74},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill attio-common-errors","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fjeremylongshore\u002Fclaude-code-plugins-plus-skills\u002Fattio-common-errors\u002FSKILL.md",true,[],[79,93,103,112,118,125],{"skillNo":80,"name":81,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":89,"publishedAt":44},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[84],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[90,91,92],"model","model hierarchy","model hierarchy skill",{"skillNo":94,"name":95,"nameZh":6,"description":6,"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":99,"publishedAt":44},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[98],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},[100,101,102],"MCP","zoom","zoom mcp",{"skillNo":104,"name":105,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":44},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[109,110,111,101],"sdk","zoom apps sdk","apps",{"skillNo":113,"name":114,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":115,"categories":116,"keywords":117,"publishedAt":44},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[114],{"skillNo":119,"name":120,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":124,"publishedAt":44},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[123],{"categoryNo":85,"categoryName":86,"taxonomyType":87,"taxonomyTypeDesc":88},[120],{"skillNo":126,"name":127,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":128,"categories":129,"keywords":130,"publishedAt":44},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[127]]