[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CD13NTAMJGBK49DWE5QMBP":3,"skill-same:01M6CD13NTAMJGBK49DWE5QMBP":99},{"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":38,"linkOnly":39,"markdownContent":40,"markdownBody":41,"frontMatter":42,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M6CD13NTAMJGBK49DWE5QMBP","github-url-intercept",null,"BLOCKING INTERCEPT: When ANY github.com URL appears in user input, STOP and use this skill. Never fetch GitHub HTML pages directly - they are 5-10MB and will exhaust your context window. This skill routes URLs to efficient API calls (1-50KB). Triggers on: pull\u002F, issues\u002F, blob\u002F, tree\u002F, commit\u002F, compare\u002F, discussions\u002F.","loriensleafs\u002Fbrain","loriensleafs","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F315385?v=4","01M6CCYZETMCJPTHNS258YRCBC","Peter Kloss","01M6CCYZK25T8516A39S9PCJT7",0,"MIT","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fgithub-url-intercept\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37],"github","github url intercept","commit","issues","pull","api","context","user","fetch","implementer","use","html","never","stop","2026-11-10 10:12:30",false,"---\nname: github-url-intercept\ndescription: \"BLOCKING INTERCEPT: When ANY github.com URL appears in user input, STOP and use this skill. Never fetch GitHub HTML pages directly - they are 5-10MB and will exhaust your context window. This skill routes URLs to efficient API calls (1-50KB). Triggers on: pull\u002F, issues\u002F, blob\u002F, tree\u002F, commit\u002F, compare\u002F, discussions\u002F.\"\nlicense: MIT\nagents: [analyst, implementer]\nmodel: claude-opus-4-5\nmetadata:\n  version: 2.1.0\n  type: interceptor\n  priority: critical\n---\n# GitHub URL Intercept\n\n> **CRITICAL**: This skill activates AUTOMATICALLY when you see ANY `github.com` URL.\n> Do NOT use `web_fetch`, `curl`, or any browser-based fetch on GitHub URLs.\n> Doing so wastes 1-2.5 MILLION tokens on HTML that provides no useful data.\n\n**MANDATORY BEHAVIOR**: Parse the URL → Route to API → Return structured JSON.\n\n---\n\n## Quick Reference (Copy-Paste Commands)\n\n**When you see a GitHub URL, use these commands immediately:**\n\n```bash\n# PR URL → Use this\nbun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr\u002Fget_pr_context.ts --pull-request {n} --owner {owner} --repo {repo}\n\n# Issue URL → Use this\nbun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fissue\u002Fget_issue_context.ts --issue {n} --owner {owner} --repo {repo}\n\n# File\u002Fblob URL → Use this\ngh api repos\u002F{owner}\u002F{repo}\u002Fcontents\u002F{path}?ref={ref}\n\n# Commit URL → Use this\ngh api repos\u002F{owner}\u002F{repo}\u002Fcommits\u002F{sha}\n\n# Comment fragment (#discussion_r{id}) → Use this\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002Fcomments\u002F{id}\n```\n\n---\n\n## Triggers\n\n| Phrase | Action |\n|--------|--------|\n| Any `github.com` URL in user input (even bare URL pasted alone) | Parse URL type and route to API |\n| `analyze` \u002F `research` \u002F `scan` + GitHub URL | Route based on URL type |\n| URL + question (e.g., \"...#r123 what's the tracking issue?\") | Extract fragment, call specific API |\n| Multiple GitHub URLs in one prompt | Process each URL, batch API calls |\n\n---\n\n## When to Use\n\nUse this skill when:\n\n- Any `github.com` URL appears in user input (automatic activation)\n- User pastes a PR, issue, commit, file, or actions URL\n- User asks to \"analyze\" or \"review\" a GitHub link\n\nUse [github](..\u002Fgithub\u002FSKILL.md) instead when:\n\n- Performing mutations (creating PRs, posting comments, adding labels)\n- Operating on the current repository without a URL\n\n## URL Patterns (Detailed Reference)\n\n| Pattern | Example | Why Intercept |\n|---------|---------|---------------|\n| `github.com\u002F...\u002Fpull\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123` | PR HTML is 5-10MB |\n| `github.com\u002F...\u002Fpull\u002F...\u002Fchecks` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123\u002Fchecks?check_run_id=...` | CI checks page bloat |\n| `github.com\u002F...\u002Fpull\u002F...\u002Ffiles` or `\u002Fchanges` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123\u002Ffiles#r123456` | Diff view with comment fragment |\n| `github.com\u002F...\u002Fissues\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fissues\u002F456` | Issue HTML is 2-5MB |\n| `github.com\u002F...\u002Factions\u002Fruns\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Factions\u002Fruns\u002F123\u002Fjob\u002F456` | Workflow run page bloat |\n| `github.com\u002F...\u002Fblob\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fblob\u002Fmain\u002Ffile.py` | File page has nav bloat |\n| `github.com\u002F...\u002Ftree\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Ftree\u002Fmain\u002Fsrc` | Directory listing bloat |\n| `github.com\u002F...\u002Fcommit\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fcommit\u002Fabc123` | Commit page overhead |\n| `github.com\u002F...\u002Fcompare\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fcompare\u002Fmain...feat` | Diff page overhead |\n| `github.com\u002F...\u002Fdiscussions\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fdiscussions\u002F789` | Discussion page bloat |\n| Fragment `#discussion_r{id}` | Review comment ID in `\u002Fchanges` or `\u002Ffiles` URL | Extract ID, call API directly |\n| Fragment `#issuecomment-{id}` | Issue comment ID | Extract ID, call API directly |\n| Fragment `#pullrequestreview-{id}` | Review ID | Extract ID, call API directly |\n| Fragment `#r{id}` (short form) | Review comment in `\u002Fchanges#r123` | Same as `#discussion_r{id}` |\n\n---\n\n## Decision Flow\n\n```text\nGitHub URL detected in user input\n│\n├─ Has fragment (#pullrequestreview-, #discussion_r, #issuecomment-)?\n│     Yes → Extract ID, use gh api for specific comment\u002Freview\n│\n├─ Is \u002Fpull\u002F{n}?\n│     Yes → get_pr_context.py --pull-request {n} --owner {o} --repo {r}\n│           (or get_pr_review_comments.py \u002F get_pr_review_threads.py for comments)\n│\n├─ Is \u002Fissues\u002F{n}?\n│     Yes → get_issue_context.py --issue {n} --owner {o} --repo {r}\n│\n├─ Is \u002Fblob\u002F{ref}\u002F{path} or \u002Ftree\u002F{ref}\u002F{path}?\n│     Yes → gh api repos\u002F{o}\u002F{r}\u002Fcontents\u002F{path}?ref={ref}\n│\n├─ Is \u002Fcommit\u002F{sha}?\n│     Yes → gh api repos\u002F{o}\u002F{r}\u002Fcommits\u002F{sha}\n│\n└─ Is \u002Fcompare\u002F{base}...{head}?\n      Yes → gh api repos\u002F{o}\u002F{r}\u002Fcompare\u002F{base}...{head}\n```\n\n---\n\n## Process\n\n### Phase 1: URL Detection and Parsing\n\n| Step | Action | Verification |\n|------|--------|--------------|\n| 1.1 | Detect github.com URL in user input | URL pattern matched |\n| 1.2 | Extract owner\u002Frepo from path | Both values non-empty |\n| 1.3 | Identify URL type (pull, issues, blob, tree, commit, compare) | Type classified |\n| 1.4 | Extract fragment ID if present | Fragment parsed or null |\n\n### Phase 2: Route Selection\n\n| Step | Action | Verification |\n|------|--------|--------------|\n| 2.1 | Check if github skill script exists for URL type | Script path resolved |\n| 2.2 | If script exists → use github skill (primary route) | Script invocation planned |\n| 2.3 | If no script → use gh api (fallback route) | API command constructed |\n| 2.4 | For fragments → always use gh api with specific endpoint | Endpoint includes ID |\n\n### Phase 3: Execution\n\n| Step | Action | Verification |\n|------|--------|--------------|\n| 3.1 | Execute selected command | Command runs without error |\n| 3.2 | Receive structured JSON response | `Success: true` for scripts |\n| 3.3 | Parse relevant fields for user query | Response processed |\n\n---\n\n## URL Routing Table\n\n### Primary: Use GitHub Skill Scripts\n\n| URL Pattern | Script | Parameters |\n|-------------|--------|------------|\n| `\u002Fpull\u002F{n}` | `get_pr_context.py` | `--pull-request {n} --owner {o} --repo {r}` |\n| `\u002Fpull\u002F{n}` (with diff) | `get_pr_context.py` | `--pull-request {n} --include-diff` |\n| `\u002Fpull\u002F{n}` (review comments) | `get_pr_review_comments.py` | `--pull-request {n}` |\n| `\u002Fpull\u002F{n}` (review threads) | `get_pr_review_threads.py` | `--pull-request {n}` |\n| `\u002Fpull\u002F{n}` (CI status) | `get_pr_checks.py` | `--pull-request {n}` |\n| `\u002Fissues\u002F{n}` | `get_issue_context.py` | `--issue {n} --owner {o} --repo {r}` |\n\n**Script location**: `.claude\u002Fskills\u002Fgithub\u002Fscripts\u002F`\n\n### Fallback: Raw gh Commands\n\nUse only when no script exists for the operation:\n\n| URL Pattern | API Call |\n|-------------|----------|\n| `\u002Fpull\u002F{n}#pullrequestreview-{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fpulls\u002F{n}\u002Freviews\u002F{id}` |\n| `\u002Fpull\u002F{n}#discussion_r{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fpulls\u002Fcomments\u002F{id}` |\n| `\u002Fpull\u002F{n}\u002Ffiles#r{id}` or `\u002Fchanges#r{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fpulls\u002Fcomments\u002F{id}` |\n| `\u002Fpull\u002F{n}#issuecomment-{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fissues\u002Fcomments\u002F{id}` |\n| `\u002Fpull\u002F{n}\u002Fchecks` | `gh api repos\u002F{o}\u002F{r}\u002Fcheck-runs?head_sha=...` or use `get_pr_checks.py` |\n| `\u002Fissues\u002F{n}#issuecomment-{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fissues\u002Fcomments\u002F{id}` |\n| `\u002Factions\u002Fruns\u002F{run_id}` | `gh api repos\u002F{o}\u002F{r}\u002Factions\u002Fruns\u002F{run_id}` |\n| `\u002Factions\u002Fruns\u002F{run_id}\u002Fjob\u002F{job_id}` | `gh api repos\u002F{o}\u002F{r}\u002Factions\u002Fjobs\u002F{job_id}` |\n| `\u002Fblob\u002F{ref}\u002F{path}` | `gh api repos\u002F{o}\u002F{r}\u002Fcontents\u002F{path}?ref={ref}` |\n| `\u002Ftree\u002F{ref}\u002F{path}` | `gh api repos\u002F{o}\u002F{r}\u002Fcontents\u002F{path}?ref={ref}` |\n| `\u002Fcommit\u002F{sha}` | `gh api repos\u002F{o}\u002F{r}\u002Fcommits\u002F{sha}` |\n| `\u002Fcompare\u002F{base}...{head}` | `gh api repos\u002F{o}\u002F{r}\u002Fcompare\u002F{base}...{head}` |\n\n---\n\n## URL Parsing Pattern\n\nExtract owner, repo, and resource from GitHub URLs:\n\n```text\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fpull\u002F{number}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fissues\u002F{number}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fblob\u002F{ref}\u002F{path}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Ftree\u002F{ref}\u002F{path}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fcommit\u002F{sha}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fcompare\u002F{base}...{head}\n```\n\n**Fragment extraction** (when present):\n\n- `#pullrequestreview-{id}` → Review ID\n- `#discussion_r{id}` → Discussion comment ID\n- `#issuecomment-{id}` → Issue comment ID\n\n---\n\n## Why This Matters (CRITICAL)\n\n**Fetching GitHub HTML is catastrophic for your context window:**\n\n| Method | Response Size | Token Cost | Time | Usability |\n|--------|---------------|------------|------|-----------|\n| ❌ HTML fetch | 5-10 MB | 1-2.5M tokens | 10-30s | **UNUSABLE** - HTML noise, no structured data |\n| ✅ API call | 1-50 KB | 250-12K tokens | 0.5-2s | Clean JSON with exactly what you need |\n| ✅ Script | 1-50 KB | 250-12K tokens | 0.5-2s | Structured output, error handling |\n\n**Impact**: 100-1000x reduction in token consumption.\n\n**If you fetch GitHub HTML directly, you will:**\n\n1. Consume your entire context window on ONE page\n2. Get no useful structured data (just HTML soup)\n3. Be unable to process subsequent user requests\n4. Need to start a new conversation\n\n**ALWAYS use this skill when you see a GitHub URL.**\n\n---\n\n## Examples\n\n### Bare URL Pasted (Most Common!)\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Frjmurillo\u002Fai-agents\u002Fpull\u002F735\u002Fchecks?check_run_id=59355308734\"\n\nAction:\n  1. Parse: owner=rjmurillo, repo=ai-agents, pr=735, type=checks\n  2. Route: bun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr\u002Fget_pr_checks.ts --pull-request 735 --owner rjmurillo --repo ai-agents\n```\n\n### URL with Question After It\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F715\u002Fchanges#r2656144507 are the graph refactoring items part of Issue 722?\"\n\nAction:\n  1. Extract fragment: r2656144507 (review comment ID)\n  2. Call: gh api \"repos\u002Fowner\u002Frepo\u002Fpulls\u002Fcomments\u002F2656144507\"\n  3. Answer user's question using the comment content\n```\n\n### Multiple URLs in One Prompt\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F715#discussion_r123 https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F715#discussion_r456\"\n\nAction:\n  1. Parse each URL\n  2. Batch: gh api \"repos\u002Fowner\u002Frepo\u002Fpulls\u002Fcomments\u002F123\"\n  3. Batch: gh api \"repos\u002Fowner\u002Frepo\u002Fpulls\u002Fcomments\u002F456\"\n```\n\n### Research\u002FAnalyze Pattern\n\n```text\nInput: \"analyze https:\u002F\u002Fgithub.com\u002Fmodu-ai\u002Fmoai-adk for insights\"\n\nAction:\n  1. Use deepwiki MCP or gh api to get repo info\n  2. Call: gh api \"repos\u002Fmodu-ai\u002Fmoai-adk\" (NOT web_fetch!)\n```\n\n### CI\u002FActions Run URL\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Factions\u002Fruns\u002F20675405338\u002Fjob\u002F59362398542?pr=740\"\n\nAction:\n  1. Extract: run_id=20675405338, job_id=59362398542\n  2. Call: gh api \"repos\u002Fowner\u002Frepo\u002Factions\u002Fjobs\u002F59362398542\"\n```\n\n### PR URL → Script\n\n```text\nInput: \"Review this: https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123\"\n\nAction:\n  bun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr\u002Fget_pr_context.ts --pull-request 123 --owner owner --repo repo\n```\n\n### File URL → API\n\n```text\nInput: \"would a hook like https:\u002F\u002Fgithub.com\u002Fruvnet\u002Fclaude-flow\u002Fblob\u002Fmain\u002F.claude\u002Fsettings.json help?\"\n\nAction:\n  gh api \"repos\u002Fruvnet\u002Fclaude-flow\u002Fcontents\u002F.claude\u002Fsettings.json?ref=main\"\n```\n\n---\n\n## Anti-Patterns (NEVER DO THESE)\n\n| ❌ NEVER | Why It's Catastrophic | ✅ Do This Instead |\n|----------|----------------------|-------------------|\n| `web_fetch(\"https:\u002F\u002Fgithub.com\u002F...\")` | 5-10 MB HTML, 1-2.5M tokens WASTED | Parse URL, use script or `gh api` |\n| `curl https:\u002F\u002Fgithub.com\u002F...` | Same catastrophic result | Use `gh` CLI for authentication + JSON |\n| `fetch` \u002F `requests.get` on GitHub URLs | Same catastrophic result | Route through this skill |\n| `gh pr view` without `--json` | Unstructured text output | Use `get_pr_context.py` for structured JSON |\n| Fetching full page to find one comment | Fetches 5MB to read 500 bytes | Extract fragment ID (`#discussion_r...`), call specific endpoint |\n| Ignoring GitHub URLs in user input | User expects you to understand the link | ALWAYS parse and route |\n| Hardcoding owner\u002Frepo in commands | Breaks when user shares fork\u002Fdifferent repo | Extract from URL path |\n\n**RED FLAG PHRASES** - If you're about to do any of these, STOP:\n\n- \"Let me fetch that page...\"\n- \"I'll retrieve the content from that URL...\"\n- \"Accessing the GitHub page...\"\n\n**These indicate you're about to waste millions of tokens. Use this skill instead.**\n\n---\n\n## Scripts\n\n### test_url_routing.py\n\nRoutes GitHub URLs to appropriate API access methods with CWE-78 command injection protection.\n\n```bash\nbun run .claude\u002Fskills\u002Fgithub-url-intercept\u002Fscripts\u002Ftest_url_routing.ts \u003Cgithub-url>\n```\n\n---\n\n## Related Skills\n\n| Skill | When to Use |\n|-------|-------------|\n| [github](..\u002Fgithub\u002FSKILL.md) | Full PR\u002Fissue operations (mutations, reactions, labels) |\n| [pr-comment-responder](..\u002Fpr-comment-responder\u002FSKILL.md) | Systematic PR review response |\n\n---\n\n## Verification Checklist\n\nBefore processing any GitHub URL:\n\n- [ ] Extracted owner\u002Frepo from URL path\n- [ ] Identified URL type (PR, issue, blob, commit, compare)\n- [ ] Extracted fragment ID if present (#discussion_r, #issuecomment-, #pullrequestreview-)\n- [ ] Selected appropriate github skill script (primary) or gh command (fallback)\n- [ ] Did NOT use web_fetch, curl, or browser-based fetch on the URL\n- [ ] Received structured JSON response with `Success: true` (for scripts)\n","# GitHub URL Intercept\n\n> **CRITICAL**: This skill activates AUTOMATICALLY when you see ANY `github.com` URL.\n> Do NOT use `web_fetch`, `curl`, or any browser-based fetch on GitHub URLs.\n> Doing so wastes 1-2.5 MILLION tokens on HTML that provides no useful data.\n\n**MANDATORY BEHAVIOR**: Parse the URL → Route to API → Return structured JSON.\n\n---\n\n## Quick Reference (Copy-Paste Commands)\n\n**When you see a GitHub URL, use these commands immediately:**\n\n```bash\n# PR URL → Use this\nbun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr\u002Fget_pr_context.ts --pull-request {n} --owner {owner} --repo {repo}\n\n# Issue URL → Use this\nbun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fissue\u002Fget_issue_context.ts --issue {n} --owner {owner} --repo {repo}\n\n# File\u002Fblob URL → Use this\ngh api repos\u002F{owner}\u002F{repo}\u002Fcontents\u002F{path}?ref={ref}\n\n# Commit URL → Use this\ngh api repos\u002F{owner}\u002F{repo}\u002Fcommits\u002F{sha}\n\n# Comment fragment (#discussion_r{id}) → Use this\ngh api repos\u002F{owner}\u002F{repo}\u002Fpulls\u002Fcomments\u002F{id}\n```\n\n---\n\n## Triggers\n\n| Phrase | Action |\n|--------|--------|\n| Any `github.com` URL in user input (even bare URL pasted alone) | Parse URL type and route to API |\n| `analyze` \u002F `research` \u002F `scan` + GitHub URL | Route based on URL type |\n| URL + question (e.g., \"...#r123 what's the tracking issue?\") | Extract fragment, call specific API |\n| Multiple GitHub URLs in one prompt | Process each URL, batch API calls |\n\n---\n\n## When to Use\n\nUse this skill when:\n\n- Any `github.com` URL appears in user input (automatic activation)\n- User pastes a PR, issue, commit, file, or actions URL\n- User asks to \"analyze\" or \"review\" a GitHub link\n\nUse [github](..\u002Fgithub\u002FSKILL.md) instead when:\n\n- Performing mutations (creating PRs, posting comments, adding labels)\n- Operating on the current repository without a URL\n\n## URL Patterns (Detailed Reference)\n\n| Pattern | Example | Why Intercept |\n|---------|---------|---------------|\n| `github.com\u002F...\u002Fpull\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123` | PR HTML is 5-10MB |\n| `github.com\u002F...\u002Fpull\u002F...\u002Fchecks` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123\u002Fchecks?check_run_id=...` | CI checks page bloat |\n| `github.com\u002F...\u002Fpull\u002F...\u002Ffiles` or `\u002Fchanges` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123\u002Ffiles#r123456` | Diff view with comment fragment |\n| `github.com\u002F...\u002Fissues\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fissues\u002F456` | Issue HTML is 2-5MB |\n| `github.com\u002F...\u002Factions\u002Fruns\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Factions\u002Fruns\u002F123\u002Fjob\u002F456` | Workflow run page bloat |\n| `github.com\u002F...\u002Fblob\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fblob\u002Fmain\u002Ffile.py` | File page has nav bloat |\n| `github.com\u002F...\u002Ftree\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Ftree\u002Fmain\u002Fsrc` | Directory listing bloat |\n| `github.com\u002F...\u002Fcommit\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fcommit\u002Fabc123` | Commit page overhead |\n| `github.com\u002F...\u002Fcompare\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fcompare\u002Fmain...feat` | Diff page overhead |\n| `github.com\u002F...\u002Fdiscussions\u002F` | `https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fdiscussions\u002F789` | Discussion page bloat |\n| Fragment `#discussion_r{id}` | Review comment ID in `\u002Fchanges` or `\u002Ffiles` URL | Extract ID, call API directly |\n| Fragment `#issuecomment-{id}` | Issue comment ID | Extract ID, call API directly |\n| Fragment `#pullrequestreview-{id}` | Review ID | Extract ID, call API directly |\n| Fragment `#r{id}` (short form) | Review comment in `\u002Fchanges#r123` | Same as `#discussion_r{id}` |\n\n---\n\n## Decision Flow\n\n```text\nGitHub URL detected in user input\n│\n├─ Has fragment (#pullrequestreview-, #discussion_r, #issuecomment-)?\n│     Yes → Extract ID, use gh api for specific comment\u002Freview\n│\n├─ Is \u002Fpull\u002F{n}?\n│     Yes → get_pr_context.py --pull-request {n} --owner {o} --repo {r}\n│           (or get_pr_review_comments.py \u002F get_pr_review_threads.py for comments)\n│\n├─ Is \u002Fissues\u002F{n}?\n│     Yes → get_issue_context.py --issue {n} --owner {o} --repo {r}\n│\n├─ Is \u002Fblob\u002F{ref}\u002F{path} or \u002Ftree\u002F{ref}\u002F{path}?\n│     Yes → gh api repos\u002F{o}\u002F{r}\u002Fcontents\u002F{path}?ref={ref}\n│\n├─ Is \u002Fcommit\u002F{sha}?\n│     Yes → gh api repos\u002F{o}\u002F{r}\u002Fcommits\u002F{sha}\n│\n└─ Is \u002Fcompare\u002F{base}...{head}?\n      Yes → gh api repos\u002F{o}\u002F{r}\u002Fcompare\u002F{base}...{head}\n```\n\n---\n\n## Process\n\n### Phase 1: URL Detection and Parsing\n\n| Step | Action | Verification |\n|------|--------|--------------|\n| 1.1 | Detect github.com URL in user input | URL pattern matched |\n| 1.2 | Extract owner\u002Frepo from path | Both values non-empty |\n| 1.3 | Identify URL type (pull, issues, blob, tree, commit, compare) | Type classified |\n| 1.4 | Extract fragment ID if present | Fragment parsed or null |\n\n### Phase 2: Route Selection\n\n| Step | Action | Verification |\n|------|--------|--------------|\n| 2.1 | Check if github skill script exists for URL type | Script path resolved |\n| 2.2 | If script exists → use github skill (primary route) | Script invocation planned |\n| 2.3 | If no script → use gh api (fallback route) | API command constructed |\n| 2.4 | For fragments → always use gh api with specific endpoint | Endpoint includes ID |\n\n### Phase 3: Execution\n\n| Step | Action | Verification |\n|------|--------|--------------|\n| 3.1 | Execute selected command | Command runs without error |\n| 3.2 | Receive structured JSON response | `Success: true` for scripts |\n| 3.3 | Parse relevant fields for user query | Response processed |\n\n---\n\n## URL Routing Table\n\n### Primary: Use GitHub Skill Scripts\n\n| URL Pattern | Script | Parameters |\n|-------------|--------|------------|\n| `\u002Fpull\u002F{n}` | `get_pr_context.py` | `--pull-request {n} --owner {o} --repo {r}` |\n| `\u002Fpull\u002F{n}` (with diff) | `get_pr_context.py` | `--pull-request {n} --include-diff` |\n| `\u002Fpull\u002F{n}` (review comments) | `get_pr_review_comments.py` | `--pull-request {n}` |\n| `\u002Fpull\u002F{n}` (review threads) | `get_pr_review_threads.py` | `--pull-request {n}` |\n| `\u002Fpull\u002F{n}` (CI status) | `get_pr_checks.py` | `--pull-request {n}` |\n| `\u002Fissues\u002F{n}` | `get_issue_context.py` | `--issue {n} --owner {o} --repo {r}` |\n\n**Script location**: `.claude\u002Fskills\u002Fgithub\u002Fscripts\u002F`\n\n### Fallback: Raw gh Commands\n\nUse only when no script exists for the operation:\n\n| URL Pattern | API Call |\n|-------------|----------|\n| `\u002Fpull\u002F{n}#pullrequestreview-{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fpulls\u002F{n}\u002Freviews\u002F{id}` |\n| `\u002Fpull\u002F{n}#discussion_r{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fpulls\u002Fcomments\u002F{id}` |\n| `\u002Fpull\u002F{n}\u002Ffiles#r{id}` or `\u002Fchanges#r{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fpulls\u002Fcomments\u002F{id}` |\n| `\u002Fpull\u002F{n}#issuecomment-{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fissues\u002Fcomments\u002F{id}` |\n| `\u002Fpull\u002F{n}\u002Fchecks` | `gh api repos\u002F{o}\u002F{r}\u002Fcheck-runs?head_sha=...` or use `get_pr_checks.py` |\n| `\u002Fissues\u002F{n}#issuecomment-{id}` | `gh api repos\u002F{o}\u002F{r}\u002Fissues\u002Fcomments\u002F{id}` |\n| `\u002Factions\u002Fruns\u002F{run_id}` | `gh api repos\u002F{o}\u002F{r}\u002Factions\u002Fruns\u002F{run_id}` |\n| `\u002Factions\u002Fruns\u002F{run_id}\u002Fjob\u002F{job_id}` | `gh api repos\u002F{o}\u002F{r}\u002Factions\u002Fjobs\u002F{job_id}` |\n| `\u002Fblob\u002F{ref}\u002F{path}` | `gh api repos\u002F{o}\u002F{r}\u002Fcontents\u002F{path}?ref={ref}` |\n| `\u002Ftree\u002F{ref}\u002F{path}` | `gh api repos\u002F{o}\u002F{r}\u002Fcontents\u002F{path}?ref={ref}` |\n| `\u002Fcommit\u002F{sha}` | `gh api repos\u002F{o}\u002F{r}\u002Fcommits\u002F{sha}` |\n| `\u002Fcompare\u002F{base}...{head}` | `gh api repos\u002F{o}\u002F{r}\u002Fcompare\u002F{base}...{head}` |\n\n---\n\n## URL Parsing Pattern\n\nExtract owner, repo, and resource from GitHub URLs:\n\n```text\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fpull\u002F{number}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fissues\u002F{number}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fblob\u002F{ref}\u002F{path}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Ftree\u002F{ref}\u002F{path}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fcommit\u002F{sha}\nhttps:\u002F\u002Fgithub.com\u002F{owner}\u002F{repo}\u002Fcompare\u002F{base}...{head}\n```\n\n**Fragment extraction** (when present):\n\n- `#pullrequestreview-{id}` → Review ID\n- `#discussion_r{id}` → Discussion comment ID\n- `#issuecomment-{id}` → Issue comment ID\n\n---\n\n## Why This Matters (CRITICAL)\n\n**Fetching GitHub HTML is catastrophic for your context window:**\n\n| Method | Response Size | Token Cost | Time | Usability |\n|--------|---------------|------------|------|-----------|\n| ❌ HTML fetch | 5-10 MB | 1-2.5M tokens | 10-30s | **UNUSABLE** - HTML noise, no structured data |\n| ✅ API call | 1-50 KB | 250-12K tokens | 0.5-2s | Clean JSON with exactly what you need |\n| ✅ Script | 1-50 KB | 250-12K tokens | 0.5-2s | Structured output, error handling |\n\n**Impact**: 100-1000x reduction in token consumption.\n\n**If you fetch GitHub HTML directly, you will:**\n\n1. Consume your entire context window on ONE page\n2. Get no useful structured data (just HTML soup)\n3. Be unable to process subsequent user requests\n4. Need to start a new conversation\n\n**ALWAYS use this skill when you see a GitHub URL.**\n\n---\n\n## Examples\n\n### Bare URL Pasted (Most Common!)\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Frjmurillo\u002Fai-agents\u002Fpull\u002F735\u002Fchecks?check_run_id=59355308734\"\n\nAction:\n  1. Parse: owner=rjmurillo, repo=ai-agents, pr=735, type=checks\n  2. Route: bun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr\u002Fget_pr_checks.ts --pull-request 735 --owner rjmurillo --repo ai-agents\n```\n\n### URL with Question After It\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F715\u002Fchanges#r2656144507 are the graph refactoring items part of Issue 722?\"\n\nAction:\n  1. Extract fragment: r2656144507 (review comment ID)\n  2. Call: gh api \"repos\u002Fowner\u002Frepo\u002Fpulls\u002Fcomments\u002F2656144507\"\n  3. Answer user's question using the comment content\n```\n\n### Multiple URLs in One Prompt\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F715#discussion_r123 https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F715#discussion_r456\"\n\nAction:\n  1. Parse each URL\n  2. Batch: gh api \"repos\u002Fowner\u002Frepo\u002Fpulls\u002Fcomments\u002F123\"\n  3. Batch: gh api \"repos\u002Fowner\u002Frepo\u002Fpulls\u002Fcomments\u002F456\"\n```\n\n### Research\u002FAnalyze Pattern\n\n```text\nInput: \"analyze https:\u002F\u002Fgithub.com\u002Fmodu-ai\u002Fmoai-adk for insights\"\n\nAction:\n  1. Use deepwiki MCP or gh api to get repo info\n  2. Call: gh api \"repos\u002Fmodu-ai\u002Fmoai-adk\" (NOT web_fetch!)\n```\n\n### CI\u002FActions Run URL\n\n```text\nInput: \"https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Factions\u002Fruns\u002F20675405338\u002Fjob\u002F59362398542?pr=740\"\n\nAction:\n  1. Extract: run_id=20675405338, job_id=59362398542\n  2. Call: gh api \"repos\u002Fowner\u002Frepo\u002Factions\u002Fjobs\u002F59362398542\"\n```\n\n### PR URL → Script\n\n```text\nInput: \"Review this: https:\u002F\u002Fgithub.com\u002Fowner\u002Frepo\u002Fpull\u002F123\"\n\nAction:\n  bun run .claude\u002Fskills\u002Fgithub\u002Fscripts\u002Fpr\u002Fget_pr_context.ts --pull-request 123 --owner owner --repo repo\n```\n\n### File URL → API\n\n```text\nInput: \"would a hook like https:\u002F\u002Fgithub.com\u002Fruvnet\u002Fclaude-flow\u002Fblob\u002Fmain\u002F.claude\u002Fsettings.json help?\"\n\nAction:\n  gh api \"repos\u002Fruvnet\u002Fclaude-flow\u002Fcontents\u002F.claude\u002Fsettings.json?ref=main\"\n```\n\n---\n\n## Anti-Patterns (NEVER DO THESE)\n\n| ❌ NEVER | Why It's Catastrophic | ✅ Do This Instead |\n|----------|----------------------|-------------------|\n| `web_fetch(\"https:\u002F\u002Fgithub.com\u002F...\")` | 5-10 MB HTML, 1-2.5M tokens WASTED | Parse URL, use script or `gh api` |\n| `curl https:\u002F\u002Fgithub.com\u002F...` | Same catastrophic result | Use `gh` CLI for authentication + JSON |\n| `fetch` \u002F `requests.get` on GitHub URLs | Same catastrophic result | Route through this skill |\n| `gh pr view` without `--json` | Unstructured text output | Use `get_pr_context.py` for structured JSON |\n| Fetching full page to find one comment | Fetches 5MB to read 500 bytes | Extract fragment ID (`#discussion_r...`), call specific endpoint |\n| Ignoring GitHub URLs in user input | User expects you to understand the link | ALWAYS parse and route |\n| Hardcoding owner\u002Frepo in commands | Breaks when user shares fork\u002Fdifferent repo | Extract from URL path |\n\n**RED FLAG PHRASES** - If you're about to do any of these, STOP:\n\n- \"Let me fetch that page...\"\n- \"I'll retrieve the content from that URL...\"\n- \"Accessing the GitHub page...\"\n\n**These indicate you're about to waste millions of tokens. Use this skill instead.**\n\n---\n\n## Scripts\n\n### test_url_routing.py\n\nRoutes GitHub URLs to appropriate API access methods with CWE-78 command injection protection.\n\n```bash\nbun run .claude\u002Fskills\u002Fgithub-url-intercept\u002Fscripts\u002Ftest_url_routing.ts \u003Cgithub-url>\n```\n\n---\n\n## Related Skills\n\n| Skill | When to Use |\n|-------|-------------|\n| [github](..\u002Fgithub\u002FSKILL.md) | Full PR\u002Fissue operations (mutations, reactions, labels) |\n| [pr-comment-responder](..\u002Fpr-comment-responder\u002FSKILL.md) | Systematic PR review response |\n\n---\n\n## Verification Checklist\n\nBefore processing any GitHub URL:\n\n- [ ] Extracted owner\u002Frepo from URL path\n- [ ] Identified URL type (PR, issue, blob, commit, compare)\n- [ ] Extracted fragment ID if present (#discussion_r, #issuecomment-, #pullrequestreview-)\n- [ ] Selected appropriate github skill script (primary) or gh command (fallback)\n- [ ] Did NOT use web_fetch, curl, or browser-based fetch on the URL\n- [ ] Received structured JSON response with `Success: true` (for scripts)\n",{"name":5,"model":43,"agents":44,"license":15,"metadata":46,"description":7},"claude-opus-4-5",[45,33],"analyst",{"type":47,"version":48,"priority":49},"interceptor","2.1.0","critical","main","2bd10cb7ca989f88dbf338b57957763718eda59b","templates\u002Fskills\u002Fgithub-url-intercept","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain","https:\u002F\u002Fgithub.com\u002Floriensleafs","2026-03-11 23:51:59",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add loriensleafs\u002Fbrain --skill github-url-intercept",{"tool":62,"command":63},"bunx","bunx skills add loriensleafs\u002Fbrain --skill github-url-intercept",{"tool":65,"command":66},"pnpm","pnpm dlx skills add loriensleafs\u002Fbrain --skill github-url-intercept","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fgithub-url-intercept\u002FSKILL.md",true,[70,75,81,85,91,95],{"path":71,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"LICENSE","许可证",1063,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-james-wynn-hyperliquid\u002FLICENSE",{"path":76,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":79,"sourceHtmlUrl":80},"references\u002Fpatterns.md","REFERENCE","参考文档",4726,"https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fgithub-url-intercept\u002Freferences\u002Fpatterns.md",{"path":82,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":83,"sourceHtmlUrl":84},"references\u002Fprofile.md",743,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-james-wynn-hyperliquid\u002Freferences\u002Fprofile.md",{"path":86,"resourceType":87,"resourceTypeDesc":88,"sizeBytes":89,"sourceHtmlUrl":90},"scripts\u002Ftest_url_routing.ts","SCRIPT","脚本",7177,"https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fgithub-url-intercept\u002Fscripts\u002Ftest_url_routing.ts",{"path":92,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":93,"sourceHtmlUrl":94},"SOURCE.md",355,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-james-wynn-hyperliquid\u002FSOURCE.md",{"path":96,"resourceType":77,"resourceTypeDesc":78,"sizeBytes":97,"sourceHtmlUrl":98},"TRUST.auto.yaml",2197,"https:\u002F\u002Fgithub.com\u002Fjiayaoqijia\u002Fcryptoskill\u002Fblob\u002Fmain\u002Fskills\u002Fdev-tools\u002F1sh1ro-james-wynn-hyperliquid\u002FTRUST.auto.yaml",[100,115,131,154,171,193],{"skillNo":101,"name":102,"nameZh":6,"description":103,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":104,"categories":105,"keywords":106,"publishedAt":38},"01M6CD3KHDHPR633RVP95G4XWN","validation-authority","Treat upstream validators as authoritative. Align local config to them. Use when validation fails unexpectedly, before modifying validator behavior, or when tempted to change upstream tool code.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fvalidation-authority\u002FSKILL.md",[],[107,108,109,34,33,110,111,112,113,114],"validation authority","validation","config","behavior","tool","architect","code","change",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":38},"01M6CD3H29Q8FWN9YETT8YVQTS","using-brain-memory","Guidance for using Brain semantic memory effectively. Applies Zettelkasten atomic note principles with observations and relations. Use when deciding whether to query or create notes, structuring note content, or understanding the semantic knowledge graph.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fusing-forgetful-memory\u002FSKILL.md",[],[122,123,124,125,126,127,128,34,30,129,130],"using brain memory","memory","content","create","notes","graph","guidance","knowledge","knowledge graph",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":137,"publishedAt":38},"01M6CD3E2KTTMNSWXRJAAZA7D1","threat-modeling","Structured security analysis using OWASP Four-Question Framework and STRIDE methodology. Generates threat matrices with risk ratings, mitigations, and prioritization. Use for attack surface analysis, security architecture review, or when asking what can go wrong.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fthreat-modeling\u002FSKILL.md",[],[138,139,140,34,141,112,142,143,144,145,146,147,148,149,150,151,152,153],"threat","threat modeling","prioritization","question","architecture review","stride","analysis","risk","owasp","methodology","framework","security analysis","architecture","security","go","review",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":161,"publishedAt":38},"01M6CD3BC6G0Q2MDNW6X51XHBQ","taste-lints","Custom lints with agent-readable remediation instructions. Enforces taste invariants (file size, naming conventions, structured logging, complexity) and surfaces errors that agents can act on directly. Use when writing or reviewing code to catch style violations early.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Ftaste-lints\u002FSKILL.md",[160],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[162,33,163,164,34,165,166,167,168,169,113,170],"taste lints","surfaces","complexity","instructions","remediation","file","logging","qa","writing",{"skillNo":172,"name":173,"nameZh":6,"description":174,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":175,"categories":176,"keywords":177,"publishedAt":38},"01M6CD37Z7VD22BH42TG0GM66V","style-enforcement","Validate code against style rules from .editorconfig, StyleCop.json, and Directory.Build.props. Detects line ending violations, naming convention issues, indentation problems, and charset mismatches across C#, Python, TypeScript, and JavaScript. Produces JSON reports for pre-commit hooks and CI pipelines.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fstyle-enforcement\u002FSKILL.md",[],[178,179,180,181,182,183,33,184,185,186,187,188,169,27,113,189,26,190,191,192],"style enforcement","enforcement","ci","pipelines","directory","hooks","Rules","json","pre-commit","editorconfig","reports","validate","javascript","python","typescript",{"skillNo":194,"name":195,"nameZh":6,"description":196,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":197,"categories":198,"keywords":199,"publishedAt":38},"01M6CD35JW73TPMCZBF9DTDEE8","steering-matcher","Match file paths against steering file glob patterns to determine applicable steering guidance. Use when orchestrator needs to inject context-aware guidance based on files being modified.","https:\u002F\u002Fgithub.com\u002Floriensleafs\u002Fbrain\u002Fblob\u002Fmain\u002Ftemplates\u002Fskills\u002Fsteering-matcher\u002FSKILL.md",[],[200,34,201,202,30,203,128,167],"steering matcher","files","haiku","orchestrator"]