[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HJ84A90AC8V8808Y6DFTC3":3,"skill-same:01M6HJ84A90AC8V8808Y6DFTC3":65},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":43,"commitSha":44,"skillDirectory":45,"forksCount":46,"repositoryHtmlUrl":47,"repositoryHomepageUrl":6,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6HJ84A90AC8V8808Y6DFTC3","kernel-lore-search",null,"Search kernel mailing lists via lore git mirrors. Use when checking prior art before a report, verifying a quote, or finding a sent message.","laurigates\u002Fclaude-plugins","laurigates","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F13014001?v=4","01M6C59YHWS9C7KMXKSRX1YXNP","Lauri Gates","01M6C59YP2APG9YAM4DWYQYGFJ",59,"MIT","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkernel-plugin\u002Fskills\u002Fkernel-lore-search\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35],"search","lore","kernel lore search","kernel","use","2026","prior art","when","via","quote","message","Art","read","grep","Bash","git","report","2026-11-10 10:12:30",false,"---\nname: kernel-lore-search\ndescription: \"Search kernel mailing lists via lore git mirrors. Use when checking prior art before a report, verifying a quote, or finding a sent message.\"\nallowed-tools: Bash, Read, Grep, Glob\ncreated: 2026-11-02\nmodified: 2026-11-02\nreviewed: 2026-11-02\n---\n\n# Kernel Lore Search\n\nlore.kernel.org archives every kernel mailing list. Its web pages and search sit\nbehind a bot challenge, so an agent reads lore through the **public-inbox git\nmirrors** instead: each list is a git repository in which every commit is one\nmessage.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|---|---|\n| Checking whether a problem was reported or patched before | Reading the code itself at a tag: `\u002Fkernel:source-history` |\n| Verifying a quote before citing a maintainer | Searching GitHub issues of a userspace project: `github-actions-plugin:github-issue-search` |\n| Confirming your own message reached the archive | Writing or sending the report: `\u002Fkernel:list-report` |\n\n## 1. Use the Mirror, Not the Web Interface\n\nWebFetch on lore gets a 403 or a challenge page. Sending a fake user agent to\nget past the challenge is bot-check circumvention: Claude Code's auto-mode\nclassifier blocks it, and it should not be worked around. Cloning the mirror\nwith plain `git` is the documented way in.\n\n## 2. Find the Epochs and Clone\n\nLarge lists are split into numbered epochs, newest highest. Probe until one is\nmissing:\n\n```bash\nfor e in 0 1 2 3; do printf 'epoch %s: ' \"$e\"; git ls-remote \"https:\u002F\u002Flore.kernel.org\u002Flinux-btrfs\u002F$e\" HEAD 2>&1 | head -1 | cut -c1-12; done\ngit clone -q --mirror https:\u002F\u002Flore.kernel.org\u002Flinux-xfs\u002Fgit\u002F0.git linux-xfs-0.git\n```\n\n- Both `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003CN>` and\n  `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002Fgit\u002F\u003CN>.git` worked as clone URLs.\n- **Partial clone does not help:** `--filter=blob:none` printed\n  `filtering not recognized by server, ignoring` and fetched everything. The\n  full linux-xfs epoch 0 holds about 174,000 messages (2006–2026).\n- Update an existing clone with `git fetch origin`; it is fast.\n\n## 3. Search\n\nEach commit's subject is the message subject, its author the sender, and the\nraw RFC 822 message is the blob `m` in its tree.\n\n```bash\ncd linux-xfs-0.git\ngit log --all --format='%H %ad %s' --date=short --since=2021-01-23 --until=2021-01-26 | grep -i 'reflink\u002Fsubvol'\ngit show \u003Ccommit>:m | grep -i -m3 '^From:\\|^Date:\\|^Message-ID:'\ngit show \u003Ccommit>:m | grep -i -B1 -A1 'diagnostic we use'\n```\n\n- **Subject and date filters** run on `git log` and are fast.\n- **Body search** means reading `m` blobs: loop `git show \u003Cc>:m` over the\n  candidates from a subject or date filter, or script a full pass for prior-art\n  sweeps (the 2026-11 sweep regex-searched all 174k linux-xfs messages with a\n  Python script; that script is not part of this skill).\n- **Cross-list search** on lore's `\u002Fall\u002F` index is web-only. Clone the other\n  lists that matter (linux-fsdevel, linux-btrfs, linux-mm) instead.\n\n## 4. Control-Test Every Negative\n\n\"Nobody reported this\" gates a report, so prove the search can find things:\n\n- Run a query you know must hit (`reflink` returned 12,518 linux-xfs messages)\n  and report the count beside the empty ones.\n- Before concluding a recent message is absent, look at the newest commits:\n  `git log --all -3 --format='%ad %s' --date=iso`. In 2026-11 a\n  `--since`\u002F`--grep` filter returned nothing for a message sent minutes earlier\n  while `git log --all -3` showed it at the top; the filter, not the archive,\n  was wrong.\n\n## 5. Verify Quotes Before Citing Them\n\nA research agent's summary of a thread is a claim. Before a quote goes into a\nreport: find the message in the mirror, check the `From:` line, and grep the\nexact words in its body, excluding lines that start with `>` (quoted text from\nsomeone else). Cite the lore URL, which is the Message-ID without angle\nbrackets: `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003Cmessage-id>\u002F`.\n\n## 6. Confirm a Sent Message Was Archived\n\nAfter `git send-email` returns `Result: 250`, the archive is the proof that the\nlist received it:\n\n```bash\ngit -C linux-xfs-0.git fetch -q origin\nc=$(git -C linux-xfs-0.git log --all -1 --format=%H)\ngit -C linux-xfs-0.git show \"$c:m\" | grep -m4 -i '^Message-ID:\\|^From:\\|^To:\\|^Cc:'\n```\n\nIn 2026-11 it was in the mirror within six minutes of sending. Record the Message-ID and the\nlore URL where the investigation is tracked.\n\n## 7. Kernel Bugzilla\n\nbugzilla.kernel.org has a REST API, for example\n`https:\u002F\u002Fbugzilla.kernel.org\u002Frest\u002Fbug?product=File%20System&component=XFS&summary=fiemap`.\nMany subsystems, XFS among them, work on the mailing list rather than in\nbugzilla, so an empty result there is weak evidence. (A research agent used the\nAPI in 2026-11; the URL shape here is from its report, not re-run.)\n\n## Agentic Optimizations\n\n| Context | Command |\n|---|---|\n| Which epochs exist | `git ls-remote https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003CN> HEAD` |\n| Messages by subject in a window | `git log --all --format='%H %ad %s' --date=short --since=\u003Cd> --until=\u003Cd> \\| grep -i '\u003Cwords>'` |\n| Headers of one message | `git show \u003Cc>:m \\| grep -m4 -i '^From:\\|^Date:\\|^Message-ID:\\|^Subject:'` |\n| Newest messages (control) | `git log --all -3 --format='%ad %s' --date=iso` |\n| Permanent link | `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003Cmessage-id-without-brackets>\u002F` |\n","# Kernel Lore Search\n\nlore.kernel.org archives every kernel mailing list. Its web pages and search sit\nbehind a bot challenge, so an agent reads lore through the **public-inbox git\nmirrors** instead: each list is a git repository in which every commit is one\nmessage.\n\n## When to Use This Skill\n\n| Use this skill when... | Use something else when... |\n|---|---|\n| Checking whether a problem was reported or patched before | Reading the code itself at a tag: `\u002Fkernel:source-history` |\n| Verifying a quote before citing a maintainer | Searching GitHub issues of a userspace project: `github-actions-plugin:github-issue-search` |\n| Confirming your own message reached the archive | Writing or sending the report: `\u002Fkernel:list-report` |\n\n## 1. Use the Mirror, Not the Web Interface\n\nWebFetch on lore gets a 403 or a challenge page. Sending a fake user agent to\nget past the challenge is bot-check circumvention: Claude Code's auto-mode\nclassifier blocks it, and it should not be worked around. Cloning the mirror\nwith plain `git` is the documented way in.\n\n## 2. Find the Epochs and Clone\n\nLarge lists are split into numbered epochs, newest highest. Probe until one is\nmissing:\n\n```bash\nfor e in 0 1 2 3; do printf 'epoch %s: ' \"$e\"; git ls-remote \"https:\u002F\u002Flore.kernel.org\u002Flinux-btrfs\u002F$e\" HEAD 2>&1 | head -1 | cut -c1-12; done\ngit clone -q --mirror https:\u002F\u002Flore.kernel.org\u002Flinux-xfs\u002Fgit\u002F0.git linux-xfs-0.git\n```\n\n- Both `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003CN>` and\n  `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002Fgit\u002F\u003CN>.git` worked as clone URLs.\n- **Partial clone does not help:** `--filter=blob:none` printed\n  `filtering not recognized by server, ignoring` and fetched everything. The\n  full linux-xfs epoch 0 holds about 174,000 messages (2006–2026).\n- Update an existing clone with `git fetch origin`; it is fast.\n\n## 3. Search\n\nEach commit's subject is the message subject, its author the sender, and the\nraw RFC 822 message is the blob `m` in its tree.\n\n```bash\ncd linux-xfs-0.git\ngit log --all --format='%H %ad %s' --date=short --since=2021-01-23 --until=2021-01-26 | grep -i 'reflink\u002Fsubvol'\ngit show \u003Ccommit>:m | grep -i -m3 '^From:\\|^Date:\\|^Message-ID:'\ngit show \u003Ccommit>:m | grep -i -B1 -A1 'diagnostic we use'\n```\n\n- **Subject and date filters** run on `git log` and are fast.\n- **Body search** means reading `m` blobs: loop `git show \u003Cc>:m` over the\n  candidates from a subject or date filter, or script a full pass for prior-art\n  sweeps (the 2026-11 sweep regex-searched all 174k linux-xfs messages with a\n  Python script; that script is not part of this skill).\n- **Cross-list search** on lore's `\u002Fall\u002F` index is web-only. Clone the other\n  lists that matter (linux-fsdevel, linux-btrfs, linux-mm) instead.\n\n## 4. Control-Test Every Negative\n\n\"Nobody reported this\" gates a report, so prove the search can find things:\n\n- Run a query you know must hit (`reflink` returned 12,518 linux-xfs messages)\n  and report the count beside the empty ones.\n- Before concluding a recent message is absent, look at the newest commits:\n  `git log --all -3 --format='%ad %s' --date=iso`. In 2026-11 a\n  `--since`\u002F`--grep` filter returned nothing for a message sent minutes earlier\n  while `git log --all -3` showed it at the top; the filter, not the archive,\n  was wrong.\n\n## 5. Verify Quotes Before Citing Them\n\nA research agent's summary of a thread is a claim. Before a quote goes into a\nreport: find the message in the mirror, check the `From:` line, and grep the\nexact words in its body, excluding lines that start with `>` (quoted text from\nsomeone else). Cite the lore URL, which is the Message-ID without angle\nbrackets: `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003Cmessage-id>\u002F`.\n\n## 6. Confirm a Sent Message Was Archived\n\nAfter `git send-email` returns `Result: 250`, the archive is the proof that the\nlist received it:\n\n```bash\ngit -C linux-xfs-0.git fetch -q origin\nc=$(git -C linux-xfs-0.git log --all -1 --format=%H)\ngit -C linux-xfs-0.git show \"$c:m\" | grep -m4 -i '^Message-ID:\\|^From:\\|^To:\\|^Cc:'\n```\n\nIn 2026-11 it was in the mirror within six minutes of sending. Record the Message-ID and the\nlore URL where the investigation is tracked.\n\n## 7. Kernel Bugzilla\n\nbugzilla.kernel.org has a REST API, for example\n`https:\u002F\u002Fbugzilla.kernel.org\u002Frest\u002Fbug?product=File%20System&component=XFS&summary=fiemap`.\nMany subsystems, XFS among them, work on the mailing list rather than in\nbugzilla, so an empty result there is weak evidence. (A research agent used the\nAPI in 2026-11; the URL shape here is from its report, not re-run.)\n\n## Agentic Optimizations\n\n| Context | Command |\n|---|---|\n| Which epochs exist | `git ls-remote https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003CN> HEAD` |\n| Messages by subject in a window | `git log --all --format='%H %ad %s' --date=short --since=\u003Cd> --until=\u003Cd> \\| grep -i '\u003Cwords>'` |\n| Headers of one message | `git show \u003Cc>:m \\| grep -m4 -i '^From:\\|^Date:\\|^Message-ID:\\|^Subject:'` |\n| Newest messages (control) | `git log --all -3 --format='%ad %s' --date=iso` |\n| Permanent link | `https:\u002F\u002Flore.kernel.org\u002F\u003Clist>\u002F\u003Cmessage-id-without-brackets>\u002F` |\n",{"name":5,"created":41,"modified":41,"reviewed":41,"description":7,"allowed-tools":42},1793577600000,"Bash, Read, Grep, Glob","main","51e0f120e9cb48382ee27086b2e8be32eff0ac9a","kernel-plugin\u002Fskills\u002Fkernel-lore-search",6,"https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins","https:\u002F\u002Fgithub.com\u002Flaurigates","Linux enthusiast, cloud engineer, neovim addict, electronics hobbyist.","2026-11-13 03:22:01",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add laurigates\u002Fclaude-plugins --skill kernel-lore-search",{"tool":57,"command":58},"bunx","bunx skills add laurigates\u002Fclaude-plugins --skill kernel-lore-search",{"tool":60,"command":61},"pnpm","pnpm dlx skills add laurigates\u002Fclaude-plugins --skill kernel-lore-search","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkernel-plugin\u002Fskills\u002Fkernel-lore-search\u002FSKILL.md",true,[],[66,92,113,129,152,182],{"skillNo":67,"name":68,"nameZh":6,"description":69,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":77,"publishedAt":36},"01M70PFHMH9ADY0CRE6047Y4B2","kitty-show-image","Show the user an image with a note on what to judge, via a file send or a labelled kitty tab. Use when the user must see an image, or icat fails with no \u002Fdev\u002Ftty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-show-image\u002FSKILL.md",[72],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[78,79,80,81,82,83,84,85,86,87,23,26,33,88,89,90,91,27,24,31],"show","kitty show image","image","kitty","show image","ls","get","send","open","dev","file","text","with","xdg",{"skillNo":93,"name":94,"nameZh":6,"description":95,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":96,"categories":97,"keywords":98,"publishedAt":36},"01M70PFEN18HKQ4RCQ1VPGMPTB","kitty-session-persistence","Snapshot and restore kitty terminal sessions on macOS. Use when surviving WindowServer hangs without losing tabs, configuring snapshots, or restoring after a force-reboot.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-session-persistence\u002FSKILL.md",[],[81,99,100,101,102,103,26,33,104,105,106,24,31,107,108,109,110,111,112,23],"kitty session persistence","session","persistence","false","snapshots","uname","reboot","terminal","write","edit","snapshot","macos","sessions","restore",{"skillNo":114,"name":115,"nameZh":6,"description":116,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":36},"01M70PFC77XGXCVQ1543VGZHYR","kitty-remote-control","Safe kitty remote control from an agent — read panes with kitty @ ls\u002Fget-text, notify, and never mutate the live terminal unasked. Use when running inside kitty.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fkitty-plugin\u002Fskills\u002Fkitty-remote-control\u002FSKILL.md",[],[120,121,81,122,123,83,124,125,84,126,127,23,26,128,33,89,90,106,24,31],"kitty remote control","remote","control","remote control","running","never","panes","notify","query",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":36},"01M70P6WVMCT5JG4SACTM69AF9","docs-reference-check","Dangling doc-reference gate: flag markdown naming repo paths or relative links that no longer exist. Use when docs cite moved\u002Fdeleted files, or wiring a doc-drift lint.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fdocumentation-plugin\u002Fskills\u002Fdocs-reference-check\u002FSKILL.md",[],[136,137,138,139,140,141,142,143,144,145,23,26,33,146,88,147,148,149,150,151],"docs reference check","check","reference check","reference","docs","links","python3","repo","files","auto","drift","lint","wiring","chezmoi","references","cp",{"skillNo":153,"name":154,"nameZh":6,"description":155,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":156,"categories":157,"keywords":167,"publishedAt":36},"01M6C6NDE7DAQGNWSF22J5CJ0Z","youtube-upload","Upload a video to YouTube via the Data API v3 and edit its title, description, tags or thumbnail afterwards. Use when publishing or retitling a YouTube video.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-upload\u002FSKILL.md",[158,161,162],{"categoryNo":159,"categoryName":160,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},{"categoryNo":163,"categoryName":164,"taxonomyType":165,"taxonomyTypeDesc":166},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[168,169,170,171,142,172,31,173,108,174,175,176,23,33,88,177,178,26,179,180,181,27,24],"youtube upload","upload","youtube","Video","run","uv run","publishing","data","uv","api","v3","tags","id","title",{"skillNo":183,"name":184,"nameZh":6,"description":185,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":186,"categories":187,"keywords":191,"publishedAt":36},"01M6C6NABWW1X58KJJM4F6GQMQ","youtube-studio-share","Share a private YouTube video with a whole Google Workspace organization by scripting YouTube Studio in the browser. Use when a video must be org-only.","https:\u002F\u002Fgithub.com\u002Flaurigates\u002Fclaude-plugins\u002Fblob\u002Fmain\u002Fyoutube-plugin\u002Fskills\u002Fyoutube-studio-share\u002FSKILL.md",[188],{"categoryNo":189,"categoryName":190,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000023","Skill与智能体开发",[192,193,194,195,170,171,196,197,198,199,200,31,201,202,203,204,23,205,26,90,206,24],"youtube studio share","share","youtube studio","studio","browser","javascript","scripting","google workspace","workspace","tool","google","only","MCP","chrome","organization"]