[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CPWHYV4WDFQD5BMEPX3DFZ":3,"skill-same:01M6CPWHYV4WDFQD5BMEPX3DFZ":93},{"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":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6CPWHYV4WDFQD5BMEPX3DFZ","sentry",null,"Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.","khalidsaidi\u002Fskillrunner","khalidsaidi","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F4368721?v=4","01M6CPK1G2TKAWA8BSNSANBNWJ","Khalid Saidi","01M6CPK1M7RGKV85142PWBEJ54",1,"MIT","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-sentry\u002Fupstream\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",[5,24,25,26,27,28,29,30,31,32,33,34,35,36],"summarize","auth","issues","pull","data","Production","api","health","read","user","use","only","queries","2026-11-10 10:12:30",false,"---\nname: \"sentry\"\ndescription: \"Use when the user asks to inspect Sentry issues or events, summarize recent production errors, or pull basic Sentry health data via the Sentry API; perform read-only queries with the bundled script and require `SENTRY_AUTH_TOKEN`.\"\n---\n\n\n# Sentry (Read-only Observability)\n\n## Quick start\n\n- If not already authenticated, ask the user to provide a valid `SENTRY_AUTH_TOKEN` (read-only scopes such as `project:read`, `event:read`) or to log in and create one before running commands.\n- Set `SENTRY_AUTH_TOKEN` as an env var.\n- Optional defaults: `SENTRY_ORG`, `SENTRY_PROJECT`, `SENTRY_BASE_URL`.\n- Defaults: org\u002Fproject `{your-org}`\u002F`{your-project}`, time range `24h`, environment `prod`, limit 20 (max 50).\n- Always call the Sentry API (no heuristics, no caching).\n\nIf the token is missing, give the user these steps:\n1. Create a Sentry auth token: https:\u002F\u002Fsentry.io\u002Fsettings\u002Faccount\u002Fapi\u002Fauth-tokens\u002F\n2. Create a token with read-only scopes such as `project:read`, `event:read`, and `org:read`.\n3. Set `SENTRY_AUTH_TOKEN` as an environment variable in their system.\n4. Offer to guide them through setting the environment variable for their OS\u002Fshell if needed.\n- Never ask the user to paste the full token in chat. Ask them to set it locally and confirm when ready.\n\n## Core tasks (use bundled script)\n\nUse `scripts\u002Fsentry_api.py` for deterministic API calls. It handles pagination and retries once on transient errors.\n\n## Skill path (set once)\n\n```bash\nexport CODEX_HOME=\"${CODEX_HOME:-$HOME\u002F.codex}\"\nexport SENTRY_API=\"$CODEX_HOME\u002Fskills\u002Fsentry\u002Fscripts\u002Fsentry_api.py\"\n```\n\nUser-scoped skills install under `$CODEX_HOME\u002Fskills` (default: `~\u002F.codex\u002Fskills`).\n\n### 1) List issues (ordered by most recent)\n\n```bash\npython3 \"$SENTRY_API\" \\\n  list-issues \\\n  --org {your-org} \\\n  --project {your-project} \\\n  --environment prod \\\n  --time-range 24h \\\n  --limit 20 \\\n  --query \"is:unresolved\"\n```\n\n### 2) Resolve an issue short ID to issue ID\n\n```bash\npython3 \"$SENTRY_API\" \\\n  list-issues \\\n  --org {your-org} \\\n  --project {your-project} \\\n  --query \"ABC-123\" \\\n  --limit 1\n```\n\nUse the returned `id` for issue detail or events.\n\n### 3) Issue detail\n\n```bash\npython3 \"$SENTRY_API\" \\\n  issue-detail \\\n  1234567890\n```\n\n### 4) Issue events\n\n```bash\npython3 \"$SENTRY_API\" \\\n  issue-events \\\n  1234567890 \\\n  --limit 20\n```\n\n### 5) Event detail (no stack traces by default)\n\n```bash\npython3 \"$SENTRY_API\" \\\n  event-detail \\\n  --org {your-org} \\\n  --project {your-project} \\\n  abcdef1234567890\n```\n\n## API requirements\n\nAlways use these endpoints (GET only):\n\n- List issues: `\u002Fapi\u002F0\u002Fprojects\u002F{org_slug}\u002F{project_slug}\u002Fissues\u002F`\n- Issue detail: `\u002Fapi\u002F0\u002Fissues\u002F{issue_id}\u002F`\n- Events for issue: `\u002Fapi\u002F0\u002Fissues\u002F{issue_id}\u002Fevents\u002F`\n- Event detail: `\u002Fapi\u002F0\u002Fprojects\u002F{org_slug}\u002F{project_slug}\u002Fevents\u002F{event_id}\u002F`\n\n## Inputs and defaults\n\n- `org_slug`, `project_slug`: default to `{your-org}`\u002F`{your-project}` (avoid non-prod orgs).\n- `time_range`: default `24h` (pass as `statsPeriod`).\n- `environment`: default `prod`.\n- `limit`: default 20, max 50 (paginate until limit reached).\n- `search_query`: optional `query` parameter.\n- `issue_short_id`: resolve via list-issues query first.\n\n## Output formatting rules\n\n- Issue list: show title, short_id, status, first_seen, last_seen, count, environments, top_tags; order by most recent.\n- Event detail: include culprit, timestamp, environment, release, url.\n- If no results, state explicitly.\n- Redact PII in output (emails, IPs). Do not print raw stack traces.\n- Never echo auth tokens.\n\n## Golden test inputs\n\n- Org: `{your-org}`\n- Project: `{your-project}`\n- Issue short ID: `{ABC-123}`\n\nExample prompt: “List the top 10 open issues for prod in the last 24h.”\nExpected: ordered list with titles, short IDs, counts, last seen.\n","# Sentry (Read-only Observability)\n\n## Quick start\n\n- If not already authenticated, ask the user to provide a valid `SENTRY_AUTH_TOKEN` (read-only scopes such as `project:read`, `event:read`) or to log in and create one before running commands.\n- Set `SENTRY_AUTH_TOKEN` as an env var.\n- Optional defaults: `SENTRY_ORG`, `SENTRY_PROJECT`, `SENTRY_BASE_URL`.\n- Defaults: org\u002Fproject `{your-org}`\u002F`{your-project}`, time range `24h`, environment `prod`, limit 20 (max 50).\n- Always call the Sentry API (no heuristics, no caching).\n\nIf the token is missing, give the user these steps:\n1. Create a Sentry auth token: https:\u002F\u002Fsentry.io\u002Fsettings\u002Faccount\u002Fapi\u002Fauth-tokens\u002F\n2. Create a token with read-only scopes such as `project:read`, `event:read`, and `org:read`.\n3. Set `SENTRY_AUTH_TOKEN` as an environment variable in their system.\n4. Offer to guide them through setting the environment variable for their OS\u002Fshell if needed.\n- Never ask the user to paste the full token in chat. Ask them to set it locally and confirm when ready.\n\n## Core tasks (use bundled script)\n\nUse `scripts\u002Fsentry_api.py` for deterministic API calls. It handles pagination and retries once on transient errors.\n\n## Skill path (set once)\n\n```bash\nexport CODEX_HOME=\"${CODEX_HOME:-$HOME\u002F.codex}\"\nexport SENTRY_API=\"$CODEX_HOME\u002Fskills\u002Fsentry\u002Fscripts\u002Fsentry_api.py\"\n```\n\nUser-scoped skills install under `$CODEX_HOME\u002Fskills` (default: `~\u002F.codex\u002Fskills`).\n\n### 1) List issues (ordered by most recent)\n\n```bash\npython3 \"$SENTRY_API\" \\\n  list-issues \\\n  --org {your-org} \\\n  --project {your-project} \\\n  --environment prod \\\n  --time-range 24h \\\n  --limit 20 \\\n  --query \"is:unresolved\"\n```\n\n### 2) Resolve an issue short ID to issue ID\n\n```bash\npython3 \"$SENTRY_API\" \\\n  list-issues \\\n  --org {your-org} \\\n  --project {your-project} \\\n  --query \"ABC-123\" \\\n  --limit 1\n```\n\nUse the returned `id` for issue detail or events.\n\n### 3) Issue detail\n\n```bash\npython3 \"$SENTRY_API\" \\\n  issue-detail \\\n  1234567890\n```\n\n### 4) Issue events\n\n```bash\npython3 \"$SENTRY_API\" \\\n  issue-events \\\n  1234567890 \\\n  --limit 20\n```\n\n### 5) Event detail (no stack traces by default)\n\n```bash\npython3 \"$SENTRY_API\" \\\n  event-detail \\\n  --org {your-org} \\\n  --project {your-project} \\\n  abcdef1234567890\n```\n\n## API requirements\n\nAlways use these endpoints (GET only):\n\n- List issues: `\u002Fapi\u002F0\u002Fprojects\u002F{org_slug}\u002F{project_slug}\u002Fissues\u002F`\n- Issue detail: `\u002Fapi\u002F0\u002Fissues\u002F{issue_id}\u002F`\n- Events for issue: `\u002Fapi\u002F0\u002Fissues\u002F{issue_id}\u002Fevents\u002F`\n- Event detail: `\u002Fapi\u002F0\u002Fprojects\u002F{org_slug}\u002F{project_slug}\u002Fevents\u002F{event_id}\u002F`\n\n## Inputs and defaults\n\n- `org_slug`, `project_slug`: default to `{your-org}`\u002F`{your-project}` (avoid non-prod orgs).\n- `time_range`: default `24h` (pass as `statsPeriod`).\n- `environment`: default `prod`.\n- `limit`: default 20, max 50 (paginate until limit reached).\n- `search_query`: optional `query` parameter.\n- `issue_short_id`: resolve via list-issues query first.\n\n## Output formatting rules\n\n- Issue list: show title, short_id, status, first_seen, last_seen, count, environments, top_tags; order by most recent.\n- Event detail: include culprit, timestamp, environment, release, url.\n- If no results, state explicitly.\n- Redact PII in output (emails, IPs). Do not print raw stack traces.\n- Never echo auth tokens.\n\n## Golden test inputs\n\n- Org: `{your-org}`\n- Project: `{your-project}`\n- Issue short ID: `{ABC-123}`\n\nExample prompt: “List the top 10 open issues for prod in the last 24h.”\nExpected: ordered list with titles, short IDs, counts, last seen.\n",{"name":5,"description":7},"main","c4da92076cba308457cd72bd1ab06c087e2cdf96","registry\u002Fskills\u002Fopenai-sentry\u002Fupstream",0,"https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi","https:\u002F\u002Fkhalidsaidi.com","Software engineer. Maintainer of SourceMint (SRCMNT), an open-source fixed-supply ERC-20 and Foundry tooling on Base.","2026-11-07 02:40:24",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add khalidsaidi\u002Fskillrunner --skill sentry",{"tool":57,"command":58},"bunx","bunx skills add khalidsaidi\u002Fskillrunner --skill sentry",{"tool":60,"command":61},"pnpm","pnpm dlx skills add khalidsaidi\u002Fskillrunner --skill sentry","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-sentry\u002Fupstream\u002FSKILL.md",true,[65,71,77,81,87],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"agents\u002Fopenai.yaml","REFERENCE","参考文档",316,"https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-sentry\u002Fupstream\u002Fagents\u002Fopenai.yaml",{"path":72,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":75,"sourceHtmlUrl":76},"assets\u002Fsentry-small.svg","ASSET","资产文件",661,"https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-sentry\u002Fupstream\u002Fassets\u002Fsentry-small.svg",{"path":78,"resourceType":73,"resourceTypeDesc":74,"sizeBytes":79,"sourceHtmlUrl":80},"assets\u002Fsentry.png",1998,"https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-sentry\u002Fupstream\u002Fassets\u002Fsentry.png",{"path":82,"resourceType":83,"resourceTypeDesc":84,"sizeBytes":85,"sourceHtmlUrl":86},"LICENSE.txt","LICENSE","许可证",10776,"https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-sentry\u002Fupstream\u002FLICENSE.txt",{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"scripts\u002Fsentry_api.py","SCRIPT","脚本",7289,"https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-sentry\u002Fupstream\u002Fscripts\u002Fsentry_api.py",[94,109,122,141,150,168],{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":37},"01M6CPY1N6W58XKWMN4356E8GF","yeet","Use only when the user explicitly asks to stage, commit, push, and open a GitHub pull request in one flow using the GitHub CLI (`gh`).","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-yeet\u002Fupstream\u002FSKILL.md",[],[96,35,101,34,33,102,103,104,105,27,106,107,108],"cli","gh","open","flow","push","pull request","commit","github",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":37},"01M6CPXZ5RN2ZB5A4Y65RE5Y5J","openai-yeet","Use only when the user explicitly asks to stage, commit, push, and open a GitHub pull request in one flow using the GitHub CLI (`gh`). (Imported from openai upstream skills)","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-yeet\u002FSKILL.md",[],[96,116,117,105,27,106,107,108,101,118,119,120,42,35,34,33,102,121,103,104],"openai","openai yeet","https","imported","upstream","knowledge",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":131,"publishedAt":37},"01M6CPXWGRW59XN1V109G172CV","vercel-deploy","Deploy applications and websites to Vercel. Use when the user requests deployment actions like \"deploy my app\", \"deploy and give me the link\", \"push this live\", or \"create a preview deployment\".","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-vercel-deploy\u002Fupstream\u002FSKILL.md",[128],{"categoryNo":129,"categoryName":130,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",[132,133,134,105,34,135,136,137,138,33,139,140],"vercel","vercel deploy","deploy","actions","applications","me","preview deployment","deployment","create",{"skillNo":142,"name":143,"nameZh":6,"description":144,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":145,"categories":146,"keywords":148,"publishedAt":37},"01M6CPXSZSZRPQ5TY73K5QWN1B","openai-vercel-deploy","Deploy applications and websites to Vercel. Use when the user requests deployment actions like \"deploy my app\", \"deploy and give me the link\", \"push this live\", or \"create a preview deployment\". (Imported from openai upstream skills)","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-vercel-deploy\u002FSKILL.md",[147],{"categoryNo":129,"categoryName":130,"taxonomyType":21,"taxonomyTypeDesc":22},[134,116,133,132,149,135,119,120,137,42,138,34,33,121,136,118,105,140,139,108],"openai vercel deploy",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":159,"publishedAt":37},"01M6CPXQ4SRTZZZ0VTD7WZP0RN","transcribe","Transcribe audio files to text with optional diarization and known-speaker hints. Use when a user asks to transcribe speech from audio\u002Fvideo, extract text from recordings, or label speakers in interviews or meetings.","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-transcribe\u002Fupstream\u002FSKILL.md",[156],{"categoryNo":157,"categoryName":158,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[152,33,160,161,162,163,164,165,166,34,167],"text","Audio","Video","speech","extract","files","recordings","meetings",{"skillNo":169,"name":170,"nameZh":6,"description":171,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":172,"categories":173,"keywords":175,"publishedAt":37},"01M6CPXMG2SCTAA04EB3PDRRXN","openai-transcribe","Transcribe audio files to text with optional diarization and known-speaker hints. Use when a user asks to transcribe speech from audio\u002Fvideo, extract text from recordings, or label speakers in interviews or meetings. (Imported from openai upstream skills)","https:\u002F\u002Fgithub.com\u002Fkhalidsaidi\u002Fskillrunner\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fopenai-transcribe\u002FSKILL.md",[174],{"categoryNo":157,"categoryName":158,"taxonomyType":21,"taxonomyTypeDesc":22},[116,176,152,108,34,119,120,42,165,166,167,164,33,160,121,161,162,118,163],"openai transcribe"]