[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M718WDTY20GK94WVRDYBGERT":3,"skill-same:01M718WDTY20GK94WVRDYBGERT":75},{"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":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":44,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":6,"ownerHtmlUrl":49,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":50,"install":51,"resources":64},"01M718WDTY20GK94WVRDYBGERT","gh-session-inventory",null,"Discover session files for a repo across Claude Code, Codex, and Cursor, and extract session metadata (timestamps, branch, cwd, size, platform). Invoked by session-research agents — not intended for direct user queries.","wangrenzhu-ola\u002FGaleHarnessCodingCLI","wangrenzhu-ola","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F113888128?v=4","01M718T5C0YYVP4Z7F4SH1MCHM","王韧竹(Bamboo Wang\u002F雪落)","01M718T5CN5T80VWXEWPK25PDQ",2,"MIT","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-inventory\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"session","gh session inventory","gh","inventory","fork","session files","size","codex","research","queries","across","code","timestamps","false","files","repo","for","platform","discover","branch","2026-11-10 10:12:30",false,"---\nname: gh-session-inventory\ndescription: \"Discover session files for a repo across Claude Code, Codex, and Cursor, and extract session metadata (timestamps, branch, cwd, size, platform). Invoked by session-research agents — not intended for direct user queries.\"\nuser-invocable: false\ncontext: fork\n---\n\n# Session inventory\n\nAgent-facing primitive. Discover session files and emit session metadata as JSONL across Claude Code, Codex, and Cursor.\n\nThis skill exists so that agents researching session history do not need to know the layout of session stores on disk or the JSONL shapes of each platform. The scripts under `scripts\u002F` own that knowledge.\n\n## Arguments\n\nSpace-separated positional args:\n\n1. `\u003Crepo>` — repo folder name (e.g., `my-project`). Used for directory matching in Claude Code and Cursor, and as the CWD filter for Codex sessions.\n2. `\u003Cdays>` — scan window in days (e.g., `7`). Session files older than this are skipped.\n3. `\u003Cplatform>` *(optional)* — one of `claude`, `codex`, `cursor`. Omit to search all three.\n4. `--keyword K1[,K2,...]` *(optional)* — filter to sessions whose full file content matches at least one of the comma-separated keywords (case-insensitive substring). Each emitted session line gains `match_count` and `keyword_matches` ({K: N, ...}) fields, and the `_meta` line gains `files_matched`. Use this instead of rolling per-file `grep -l` calls when ranking many sessions by topical relevance.\n\n## Execution\n\nRun the discovery-plus-metadata pipeline from the skill's own `scripts\u002F` directory:\n\n```bash\nbash scripts\u002Fdiscover-sessions.sh \u003Crepo> \u003Cdays> [--platform \u003Cplatform>] \\\n  | tr '\\n' '\\0' \\\n  | xargs -0 python3 scripts\u002Fextract-metadata.py --cwd-filter \u003Crepo>\n```\n\nTo filter by keyword, append `--keyword K1[,K2,...]` to the `extract-metadata.py` invocation. Keyword scanning reads the full file (not just the head metadata window), so it costs more than a metadata-only run — use it when you need to rank candidates by topic across many sessions, not as a default.\n\nReturn the raw stdout verbatim — one JSON object per session, then a final `_meta` line. Callers parse the JSONL directly, so do not paraphrase, reformat, or summarize.\n\nIf discovery finds no files, the pipeline still emits a clean `_meta` line (`files_processed: 0`). Return that as-is.\n\n## Output format\n\nEach session line is a JSON object. Common fields across platforms:\n\n- `platform` — `claude`, `codex`, or `cursor`\n- `file` — absolute path to the session JSONL\n- `size` — file size in bytes\n- `ts` — session start timestamp (ISO 8601)\n- `session` — session identifier\n\nPlatform-specific fields:\n\n- Claude Code adds `branch` (git branch) and `last_ts` (last message timestamp).\n- Codex adds `cwd` (working directory), `source`, `cli_version`, `model`, `last_ts`.\n- Cursor has no in-file timestamps or metadata — `ts` is derived from file mtime and `session` from the containing directory name.\n\nThe final `_meta` line has `files_processed`, `parse_errors`, and optionally `filtered_by_cwd` (count of Codex sessions dropped by the CWD filter) and `files_matched` (count of sessions retained by the keyword filter, present only when `--keyword` was set).\n\nWhen `--keyword` is set, each session line additionally carries:\n\n- `match_count` — total occurrences across all keywords\n- `keyword_matches` — per-keyword counts, e.g., `{\"middleware\": 4, \"auth\": 12}`\n\nSessions with `match_count: 0` are excluded from output.\n\n## Error handling\n\nIf the discovery script errors (e.g., unreadable home directory, permission failure), let the error surface to the caller. Do not substitute git log, file listings, or other sources — this skill's contract is session metadata, nothing else.\n\nIf `_meta` reports `parse_errors > 0`, return the JSONL as-is. The caller decides how to handle partial data.\n","# Session inventory\n\nAgent-facing primitive. Discover session files and emit session metadata as JSONL across Claude Code, Codex, and Cursor.\n\nThis skill exists so that agents researching session history do not need to know the layout of session stores on disk or the JSONL shapes of each platform. The scripts under `scripts\u002F` own that knowledge.\n\n## Arguments\n\nSpace-separated positional args:\n\n1. `\u003Crepo>` — repo folder name (e.g., `my-project`). Used for directory matching in Claude Code and Cursor, and as the CWD filter for Codex sessions.\n2. `\u003Cdays>` — scan window in days (e.g., `7`). Session files older than this are skipped.\n3. `\u003Cplatform>` *(optional)* — one of `claude`, `codex`, `cursor`. Omit to search all three.\n4. `--keyword K1[,K2,...]` *(optional)* — filter to sessions whose full file content matches at least one of the comma-separated keywords (case-insensitive substring). Each emitted session line gains `match_count` and `keyword_matches` ({K: N, ...}) fields, and the `_meta` line gains `files_matched`. Use this instead of rolling per-file `grep -l` calls when ranking many sessions by topical relevance.\n\n## Execution\n\nRun the discovery-plus-metadata pipeline from the skill's own `scripts\u002F` directory:\n\n```bash\nbash scripts\u002Fdiscover-sessions.sh \u003Crepo> \u003Cdays> [--platform \u003Cplatform>] \\\n  | tr '\\n' '\\0' \\\n  | xargs -0 python3 scripts\u002Fextract-metadata.py --cwd-filter \u003Crepo>\n```\n\nTo filter by keyword, append `--keyword K1[,K2,...]` to the `extract-metadata.py` invocation. Keyword scanning reads the full file (not just the head metadata window), so it costs more than a metadata-only run — use it when you need to rank candidates by topic across many sessions, not as a default.\n\nReturn the raw stdout verbatim — one JSON object per session, then a final `_meta` line. Callers parse the JSONL directly, so do not paraphrase, reformat, or summarize.\n\nIf discovery finds no files, the pipeline still emits a clean `_meta` line (`files_processed: 0`). Return that as-is.\n\n## Output format\n\nEach session line is a JSON object. Common fields across platforms:\n\n- `platform` — `claude`, `codex`, or `cursor`\n- `file` — absolute path to the session JSONL\n- `size` — file size in bytes\n- `ts` — session start timestamp (ISO 8601)\n- `session` — session identifier\n\nPlatform-specific fields:\n\n- Claude Code adds `branch` (git branch) and `last_ts` (last message timestamp).\n- Codex adds `cwd` (working directory), `source`, `cli_version`, `model`, `last_ts`.\n- Cursor has no in-file timestamps or metadata — `ts` is derived from file mtime and `session` from the containing directory name.\n\nThe final `_meta` line has `files_processed`, `parse_errors`, and optionally `filtered_by_cwd` (count of Codex sessions dropped by the CWD filter) and `files_matched` (count of sessions retained by the keyword filter, present only when `--keyword` was set).\n\nWhen `--keyword` is set, each session line additionally carries:\n\n- `match_count` — total occurrences across all keywords\n- `keyword_matches` — per-keyword counts, e.g., `{\"middleware\": 4, \"auth\": 12}`\n\nSessions with `match_count: 0` are excluded from output.\n\n## Error handling\n\nIf the discovery script errors (e.g., unreadable home directory, permission failure), let the error surface to the caller. Do not substitute git log, file listings, or other sources — this skill's contract is session metadata, nothing else.\n\nIf `_meta` reports `parse_errors > 0`, return the JSONL as-is. The caller decides how to handle partial data.\n",{"name":5,"context":23,"description":7,"user-invocable":40},"main","adde77e5116dc3a65ca3385f7d19d086cd10a74c","plugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-inventory",1,"https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola","2026-06-13 09:21:37",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add wangrenzhu-ola\u002FGaleHarnessCodingCLI --skill gh-session-inventory",{"tool":57,"command":58},"bunx","bunx skills add wangrenzhu-ola\u002FGaleHarnessCodingCLI --skill gh-session-inventory",{"tool":60,"command":61},"pnpm","pnpm dlx skills add wangrenzhu-ola\u002FGaleHarnessCodingCLI --skill gh-session-inventory","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-inventory\u002FSKILL.md",true,[65,71],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"scripts\u002Fdiscover-sessions.sh","SCRIPT","脚本",2434,"https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-inventory\u002Fscripts\u002Fdiscover-sessions.sh",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"scripts\u002Fextract-metadata.py",12173,"https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-inventory\u002Fscripts\u002Fextract-metadata.py",[76,91,104,115,123,131],{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":87,"publishedAt":39},"01M718XZ8QAQPM8BS5K9M2YQTJ","skill-one","Sample skill","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fsample-plugin\u002Fskills\u002Fskill-one\u002FSKILL.md",[82],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[88,89,90],"skill one","sample skill","sample",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":98,"publishedAt":39},"01M718XYEEENP5G592XVQ6MGVR","disabled-skill","A skill with model invocation disabled","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fsample-plugin\u002Fskills\u002Fdisabled-skill\u002FSKILL.md",[97],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},[99,100,101,102,103],"disabled skill","with","with model","true","model",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":111,"publishedAt":39},"01M718XXNH8T61H0EJE0BHE593","claude-only-skill","A skill restricted to Claude Code only","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fsample-plugin\u002Fskills\u002Fclaude-only-skill\u002FSKILL.md",[110],{"categoryNo":83,"categoryName":84,"taxonomyType":85,"taxonomyTypeDesc":86},[112,113,114,30],"only","claude only skill","claude only",{"skillNo":116,"name":117,"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":118,"categories":119,"keywords":120,"publishedAt":39},"01M718XWMPEPBWHC05JNGKSEF0","default-skill","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcustom-paths\u002Fskills\u002Fdefault-skill\u002FSKILL.md",[],[121,122],"default skill","default",{"skillNo":124,"name":125,"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":126,"categories":127,"keywords":128,"publishedAt":39},"01M718XVZXW8CXYBNQZPJPNB6B","custom-skill","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcustom-paths\u002Fcustom-skills\u002Fcustom-skill\u002FSKILL.md",[],[129,130],"custom","custom skill",{"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":140,"publishedAt":39},"01M718XT6P96FVR69X0EEKK2N6","test-xcode","Build and test iOS apps on simulator using XcodeBuildMCP. Use after making iOS code changes, before creating a PR, or when verifying app behavior and checking for crashes on simulator.","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Ftest-xcode\u002FSKILL.md",[137],{"categoryNo":138,"categoryName":139,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000008","测试与质量",[141,142,143,144,145,146,147,35,122,102,148,149,150,151,30,152,153,154,155,156],"test","xcode","test xcode","apps","app","build and test","pr","xcodebuildmcp","use","scheme","when","changes","build","ios","name","behavior"]