[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M718WC4AXEEDPYH6ZTXZC4SS":3,"skill-same:01M718WC4AXEEDPYH6ZTXZC4SS":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},"01M718WC4AXEEDPYH6ZTXZC4SS","gh-session-extract",null,"Extract conversation skeleton or error signals from a single session file at a given path. Invoked by session-research agents after they have selected which sessions to deep-dive — 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-extract\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"session","gh","extract","gh session extract","direct","at","fork","signals","research","queries","file","false","single","sessions","skeleton","for","which","deep","conversation","error","2026-11-10 10:12:30",false,"---\nname: gh-session-extract\ndescription: \"Extract conversation skeleton or error signals from a single session file at a given path. Invoked by session-research agents after they have selected which sessions to deep-dive — not intended for direct user queries.\"\nuser-invocable: false\ncontext: fork\n---\n\n# Session extract\n\nAgent-facing primitive. Extract filtered content from a single Claude Code, Codex, or Cursor session file — either a conversation skeleton or error signals.\n\nThis skill exists so that agents do not read multi-megabyte session files into context. The scripts under `scripts\u002F` own the JSONL shape knowledge and emit a narrative-readable digest.\n\n## Arguments\n\nSpace-separated positional args:\n\n1. `\u003Cfile>` — absolute path to a session JSONL file (typically a `file` value returned by `gh-session-inventory`).\n2. `\u003Cmode>` — `skeleton` or `errors`.\n3. `\u003Climit>` *(optional)* — `head:N` or `tail:N` to cap output at N lines (e.g., `head:200`). Omit to return full extraction.\n\n## Execution\n\n**Skeleton mode** — narrative of user messages, assistant text, and collapsed tool-call summaries:\n\n```bash\ncat \u003Cfile> | python3 scripts\u002Fextract-skeleton.py\n```\n\n**Errors mode** — just error signals:\n\n```bash\ncat \u003Cfile> | python3 scripts\u002Fextract-errors.py\n```\n\nIf `\u003Climit>` is `head:N`, pipe through `head -n N`. If `tail:N`, pipe through `tail -n N`. Apply the limit after the Python script, never before — the `_meta` line is emitted last and a head cap may drop it; that is acceptable when the caller asks for a head cap.\n\nReturn the raw stdout verbatim. Do not paraphrase, annotate, or synthesize — the caller does synthesis across multiple sessions.\n\n## What each mode returns\n\n### Skeleton\n\nNarrative output with one logical event per block, separated by `---`:\n\n- User messages (text only, no tool results, framework wrapper tags stripped)\n- Assistant text (no thinking\u002Freasoning blocks — those are internal or encrypted)\n- Tool call summaries; 3+ consecutive same-name calls are collapsed (e.g., `[tools] 5x Read (file1, file2, +3 more) -> all ok`)\n\nEnds with a `_meta` line: `{\"_meta\": true, \"lines\": N, \"parse_errors\": N, \"user\": N, \"assistant\": N, \"tool\": N}`.\n\n### Errors\n\nOne line per error, separated by `---`:\n\n- Claude Code: tool results with `is_error: true`\n- Codex: `exec_command_end` events with non-zero exit or non-empty stderr\n- Cursor: always empty — Cursor agent transcripts do not log tool results\n\nEnds with a `_meta` line: `{\"_meta\": true, \"lines\": N, \"parse_errors\": N, \"errors_found\": N}`.\n\n## Error handling\n\nIf the file cannot be read, let the error surface to the caller. If `_meta` reports `parse_errors > 0`, return the output as-is — partial extraction is still useful and the caller decides whether to widen the search or deep-dive further.\n","# Session extract\n\nAgent-facing primitive. Extract filtered content from a single Claude Code, Codex, or Cursor session file — either a conversation skeleton or error signals.\n\nThis skill exists so that agents do not read multi-megabyte session files into context. The scripts under `scripts\u002F` own the JSONL shape knowledge and emit a narrative-readable digest.\n\n## Arguments\n\nSpace-separated positional args:\n\n1. `\u003Cfile>` — absolute path to a session JSONL file (typically a `file` value returned by `gh-session-inventory`).\n2. `\u003Cmode>` — `skeleton` or `errors`.\n3. `\u003Climit>` *(optional)* — `head:N` or `tail:N` to cap output at N lines (e.g., `head:200`). Omit to return full extraction.\n\n## Execution\n\n**Skeleton mode** — narrative of user messages, assistant text, and collapsed tool-call summaries:\n\n```bash\ncat \u003Cfile> | python3 scripts\u002Fextract-skeleton.py\n```\n\n**Errors mode** — just error signals:\n\n```bash\ncat \u003Cfile> | python3 scripts\u002Fextract-errors.py\n```\n\nIf `\u003Climit>` is `head:N`, pipe through `head -n N`. If `tail:N`, pipe through `tail -n N`. Apply the limit after the Python script, never before — the `_meta` line is emitted last and a head cap may drop it; that is acceptable when the caller asks for a head cap.\n\nReturn the raw stdout verbatim. Do not paraphrase, annotate, or synthesize — the caller does synthesis across multiple sessions.\n\n## What each mode returns\n\n### Skeleton\n\nNarrative output with one logical event per block, separated by `---`:\n\n- User messages (text only, no tool results, framework wrapper tags stripped)\n- Assistant text (no thinking\u002Freasoning blocks — those are internal or encrypted)\n- Tool call summaries; 3+ consecutive same-name calls are collapsed (e.g., `[tools] 5x Read (file1, file2, +3 more) -> all ok`)\n\nEnds with a `_meta` line: `{\"_meta\": true, \"lines\": N, \"parse_errors\": N, \"user\": N, \"assistant\": N, \"tool\": N}`.\n\n### Errors\n\nOne line per error, separated by `---`:\n\n- Claude Code: tool results with `is_error: true`\n- Codex: `exec_command_end` events with non-zero exit or non-empty stderr\n- Cursor: always empty — Cursor agent transcripts do not log tool results\n\nEnds with a `_meta` line: `{\"_meta\": true, \"lines\": N, \"parse_errors\": N, \"errors_found\": N}`.\n\n## Error handling\n\nIf the file cannot be read, let the error surface to the caller. If `_meta` reports `parse_errors > 0`, return the output as-is — partial extraction is still useful and the caller decides whether to widen the search or deep-dive further.\n",{"name":5,"context":25,"description":7,"user-invocable":40},"main","adde77e5116dc3a65ca3385f7d19d086cd10a74c","plugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-extract",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-extract",{"tool":57,"command":58},"bunx","bunx skills add wangrenzhu-ola\u002FGaleHarnessCodingCLI --skill gh-session-extract",{"tool":60,"command":61},"pnpm","pnpm dlx skills add wangrenzhu-ola\u002FGaleHarnessCodingCLI --skill gh-session-extract","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-extract\u002FSKILL.md",true,[65,71],{"path":66,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":69,"sourceHtmlUrl":70},"scripts\u002Fextract-errors.py","SCRIPT","脚本",3595,"https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-extract\u002Fscripts\u002Fextract-errors.py",{"path":72,"resourceType":67,"resourceTypeDesc":68,"sizeBytes":73,"sourceHtmlUrl":74},"scripts\u002Fextract-skeleton.py",11914,"https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Fplugins\u002Fgaleharness-cli\u002Fskills\u002Fgh-session-extract\u002Fscripts\u002Fextract-skeleton.py",[76,91,104,116,124,132],{"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,115],"only","claude only skill","claude only","code",{"skillNo":117,"name":118,"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":119,"categories":120,"keywords":121,"publishedAt":39},"01M718XWMPEPBWHC05JNGKSEF0","default-skill","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcustom-paths\u002Fskills\u002Fdefault-skill\u002FSKILL.md",[],[122,123],"default skill","default",{"skillNo":125,"name":126,"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":127,"categories":128,"keywords":129,"publishedAt":39},"01M718XVZXW8CXYBNQZPJPNB6B","custom-skill","https:\u002F\u002Fgithub.com\u002Fwangrenzhu-ola\u002FGaleHarnessCodingCLI\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcustom-paths\u002Fcustom-skills\u002Fcustom-skill\u002FSKILL.md",[],[130,131],"custom","custom skill",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":141,"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",[138],{"categoryNo":139,"categoryName":140,"taxonomyType":85,"taxonomyTypeDesc":86},"01JBSEEDCAT000000000000008","测试与质量",[142,143,144,145,146,147,148,34,123,102,149,150,151,152,115,153,154,155,156,157],"test","xcode","test xcode","apps","app","build and test","pr","xcodebuildmcp","use","scheme","when","changes","build","ios","name","behavior"]