[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6ADC6ZXSA46N9XD6VNAP1MS":3,"skill-same:01M6ADC6ZXSA46N9XD6VNAP1MS":60},{"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":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":36,"commitSha":37,"skillDirectory":38,"forksCount":39,"repositoryHtmlUrl":40,"repositoryHomepageUrl":41,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M6ADC6ZXSA46N9XD6VNAP1MS","windows-compatibility",null,"Cross-platform path handling and command patterns","github\u002Fgh-aw","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD3VCZ4WKQSFSRTPN7N9DN",5636,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fwindows-compatibility\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29],"windows","windows compatibility","compatibility","git","command","patterns","cross-platform","platform","high","path","bugs","2026-11-10 10:12:30",false,"---\nname: \"windows-compatibility\"\ndescription: \"Cross-platform path handling and command patterns\"\ndomain: \"platform\"\nconfidence: \"high\"\nsource: \"earned (multiple Windows-specific bugs: colons in filenames, git -C failures, path separators)\"\n---\n\n## Context\n\nSquad runs on Windows, macOS, and Linux. Several bugs have been traced to platform-specific assumptions: ISO timestamps with colons (illegal on Windows), `git -C` with Windows paths (unreliable), forward-slash paths in Node.js on Windows.\n\n## Patterns\n\n### Filenames & Timestamps\n- **Never use colons in filenames:** ISO 8601 format `2026-03-15T05:30:00Z` is illegal on Windows\n- **Use `safeTimestamp()` utility:** Replaces colons with hyphens → `2026-03-15T05-30-00Z`\n- **Centralize formatting:** Don't inline `.toISOString().replace(\u002F:\u002Fg, '-')` — use the utility\n\n### Git Commands\n- **Never use `git -C {path}`:** Unreliable with Windows paths (backslashes, spaces, drive letters)\n- **Always `cd` first:** Change directory, then run git commands\n- **Check for changes before commit:** `git diff --cached --quiet` (exit 0 = no changes)\n\n### Commit Messages\n- **Never embed newlines in `-m` flag:** Backtick-n (`\\n`) fails silently in PowerShell\n- **Use temp file + `-F` flag:** Write message to file, commit with `git commit -F $msgFile`\n\n### Paths\n- **Never assume CWD is repo root:** Always use `TEAM ROOT` from spawn prompt or run `git rev-parse --show-toplevel`\n- **Use path.join() or path.resolve():** Don't manually concatenate with `\u002F` or `\\`\n\n### Path Comparison (Case Sensitivity)\n- **Never use case-sensitive `startsWith` or `===` for path comparison on Windows or macOS:** These filesystems are case-insensitive — `C:\\Users\\` and `c:\\users\\` refer to the same location\n- **Use platform-aware comparison:** Check `process.platform === 'win32' || process.platform === 'darwin'` and lowercase both sides before comparing\n- **Pattern:**\n  ```typescript\n  const CASE_INSENSITIVE = process.platform === 'win32' || process.platform === 'darwin';\n  \n  function pathStartsWith(fullPath: string, prefix: string): boolean {\n    if (CASE_INSENSITIVE) {\n      return fullPath.toLowerCase().startsWith(prefix.toLowerCase());\n    }\n    return fullPath.startsWith(prefix);\n  }\n  ```\n- **Where it matters:** Security checks (path traversal prevention), rootDir confinement, any path-contains-path validation\n- **Linux is case-sensitive:** Do NOT lowercase on Linux — `\u002FHome\u002F` and `\u002Fhome\u002F` are different directories\n\n## Examples\n\n✓ **Correct:**\n```javascript\n\u002F\u002F Timestamp utility\nconst safeTimestamp = () => new Date().toISOString().replace(\u002F:\u002Fg, '-').split('.')[0] + 'Z';\n\n\u002F\u002F Git workflow (PowerShell)\ncd $teamRoot\ngit add .squad\u002F\nif ($LASTEXITCODE -eq 0) {\n  $msg = @\"\ndocs(ai-team): session log\n\nChanges:\n- Added decisions\n\"@\n  $msgFile = [System.IO.Path]::GetTempFileName()\n  Set-Content -Path $msgFile -Value $msg -Encoding utf8\n  git commit -F $msgFile\n  Remove-Item $msgFile\n}\n```\n\n✗ **Incorrect:**\n```javascript\n\u002F\u002F Colon in filename\nconst logPath = `.squad\u002Flog\u002F${new Date().toISOString()}.md`; \u002F\u002F ILLEGAL on Windows\n\n\u002F\u002F git -C with Windows path\nexec('git -C C:\\\\src\\\\squad add .squad\u002F'); \u002F\u002F UNRELIABLE\n\n\u002F\u002F Inline newlines in commit message\nexec('git commit -m \"First line\\nSecond line\"'); \u002F\u002F FAILS silently in PowerShell\n```\n\n## Anti-Patterns\n\n- Testing only on one platform (bugs ship to other platforms)\n- Assuming Unix-style paths work everywhere\n- Using `git -C` because it \"looks cleaner\" (it doesn't work)\n- Skipping `git diff --cached --quiet` check (creates empty commits)\n- **Wrong — case-sensitive path check on Windows and macOS:**\n  ```typescript\n  if (!resolved.startsWith(rootDir + path.sep)) {\n    throw new Error('Path traversal blocked');\n  }\n  \u002F\u002F Fails: 'c:\\\\Users\\\\temp\\\\file'.startsWith('C:\\\\Users\\\\temp\\\\') → false\n  ```\n","## Context\n\nSquad runs on Windows, macOS, and Linux. Several bugs have been traced to platform-specific assumptions: ISO timestamps with colons (illegal on Windows), `git -C` with Windows paths (unreliable), forward-slash paths in Node.js on Windows.\n\n## Patterns\n\n### Filenames & Timestamps\n- **Never use colons in filenames:** ISO 8601 format `2026-03-15T05:30:00Z` is illegal on Windows\n- **Use `safeTimestamp()` utility:** Replaces colons with hyphens → `2026-03-15T05-30-00Z`\n- **Centralize formatting:** Don't inline `.toISOString().replace(\u002F:\u002Fg, '-')` — use the utility\n\n### Git Commands\n- **Never use `git -C {path}`:** Unreliable with Windows paths (backslashes, spaces, drive letters)\n- **Always `cd` first:** Change directory, then run git commands\n- **Check for changes before commit:** `git diff --cached --quiet` (exit 0 = no changes)\n\n### Commit Messages\n- **Never embed newlines in `-m` flag:** Backtick-n (`\\n`) fails silently in PowerShell\n- **Use temp file + `-F` flag:** Write message to file, commit with `git commit -F $msgFile`\n\n### Paths\n- **Never assume CWD is repo root:** Always use `TEAM ROOT` from spawn prompt or run `git rev-parse --show-toplevel`\n- **Use path.join() or path.resolve():** Don't manually concatenate with `\u002F` or `\\`\n\n### Path Comparison (Case Sensitivity)\n- **Never use case-sensitive `startsWith` or `===` for path comparison on Windows or macOS:** These filesystems are case-insensitive — `C:\\Users\\` and `c:\\users\\` refer to the same location\n- **Use platform-aware comparison:** Check `process.platform === 'win32' || process.platform === 'darwin'` and lowercase both sides before comparing\n- **Pattern:**\n  ```typescript\n  const CASE_INSENSITIVE = process.platform === 'win32' || process.platform === 'darwin';\n  \n  function pathStartsWith(fullPath: string, prefix: string): boolean {\n    if (CASE_INSENSITIVE) {\n      return fullPath.toLowerCase().startsWith(prefix.toLowerCase());\n    }\n    return fullPath.startsWith(prefix);\n  }\n  ```\n- **Where it matters:** Security checks (path traversal prevention), rootDir confinement, any path-contains-path validation\n- **Linux is case-sensitive:** Do NOT lowercase on Linux — `\u002FHome\u002F` and `\u002Fhome\u002F` are different directories\n\n## Examples\n\n✓ **Correct:**\n```javascript\n\u002F\u002F Timestamp utility\nconst safeTimestamp = () => new Date().toISOString().replace(\u002F:\u002Fg, '-').split('.')[0] + 'Z';\n\n\u002F\u002F Git workflow (PowerShell)\ncd $teamRoot\ngit add .squad\u002F\nif ($LASTEXITCODE -eq 0) {\n  $msg = @\"\ndocs(ai-team): session log\n\nChanges:\n- Added decisions\n\"@\n  $msgFile = [System.IO.Path]::GetTempFileName()\n  Set-Content -Path $msgFile -Value $msg -Encoding utf8\n  git commit -F $msgFile\n  Remove-Item $msgFile\n}\n```\n\n✗ **Incorrect:**\n```javascript\n\u002F\u002F Colon in filename\nconst logPath = `.squad\u002Flog\u002F${new Date().toISOString()}.md`; \u002F\u002F ILLEGAL on Windows\n\n\u002F\u002F git -C with Windows path\nexec('git -C C:\\\\src\\\\squad add .squad\u002F'); \u002F\u002F UNRELIABLE\n\n\u002F\u002F Inline newlines in commit message\nexec('git commit -m \"First line\\nSecond line\"'); \u002F\u002F FAILS silently in PowerShell\n```\n\n## Anti-Patterns\n\n- Testing only on one platform (bugs ship to other platforms)\n- Assuming Unix-style paths work everywhere\n- Using `git -C` because it \"looks cleaner\" (it doesn't work)\n- Skipping `git diff --cached --quiet` check (creates empty commits)\n- **Wrong — case-sensitive path check on Windows and macOS:**\n  ```typescript\n  if (!resolved.startsWith(rootDir + path.sep)) {\n    throw new Error('Path traversal blocked');\n  }\n  \u002F\u002F Fails: 'c:\\\\Users\\\\temp\\\\file'.startsWith('C:\\\\Users\\\\temp\\\\') → false\n  ```\n",{"name":5,"domain":26,"source":35,"confidence":27,"description":7},"earned (multiple Windows-specific bugs: colons in filenames, git -C failures, path separators)","main","8541229759617347888641eba917d3b0ad66a984",".squad\u002Ftemplates\u002Fskills\u002Fwindows-compatibility",626,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw","https:\u002F\u002Fgh.io\u002Fgh-aw","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-15 06:45:15",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add github\u002Fgh-aw --skill windows-compatibility",{"tool":52,"command":53},"bunx","bunx skills add github\u002Fgh-aw --skill windows-compatibility",{"tool":55,"command":56},"pnpm","pnpm dlx skills add github\u002Fgh-aw --skill windows-compatibility","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fwindows-compatibility\u002FSKILL.md",true,[],[61,90,115,141,159,184],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":75,"publishedAt":30},"01M6ADC942STTXHFV410J4DH0X","GitHub Agentic Workflows","GitHub Agentic Workflows (`gh-aw`) is a GitHub CLI extension for writing Agentic Workflows in markdown and compiling them to GitHub Actions.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002FSKILL.md",[67,72],{"categoryNo":68,"categoryName":69,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",{"categoryNo":73,"categoryName":74,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000023","Skill与智能体开发",[9,76,77,78,79,80,81,82,83,84,85,86,87,88,89],"agentic","workflows","agentic workflows","github agentic workflows","writing","cli","compiling","actions","github actions","markdown","gh","extension","github cli","for",{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":30},"01M6ADC44957SVQF96R5YY247P","versioning-policy","Semver versioning rules for Squad SDK and CLI — prevents prerelease version incidents","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fversioning-policy\u002FSKILL.md",[],[97,98,99,81,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,89],"policy","versioning policy","versioning","sdk","pr","squad","release","semver","npm","ci","workspace","Rules","version","implementation","gate","incident","resolution","incidents",{"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":125,"publishedAt":30},"01M6ADC1PHMEAEVR87F8PDR89X","tiered-memory","Three-tier agent memory model (hot\u002Fcold\u002Fwiki) for context reduction per spawn","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Ftiered-memory\u002FSKILL.md",[121,124],{"categoryNo":122,"categoryName":123,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":73,"categoryName":74,"taxonomyType":70,"taxonomyTypeDesc":71},[126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,89],"memory","tiered memory","design","performance","agent memory","wiki","model","context","management","spawn","three","runtime","proposal","cold","memory-management",{"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":150,"publishedAt":30},"01M6ADBZTDGFM0E25EWRQEMYEH","test-discipline","Update tests when changing APIs — no exceptions","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Ftest-discipline\u002FSKILL.md",[147],{"categoryNo":148,"categoryName":149,"taxonomyType":70,"taxonomyTypeDesc":71},"01JBSEEDCAT000000000000008","测试与质量",[151,152,153,154,155,156,112,157,27,158],"test","test discipline","discipline","sync","update","quality","tests","when",{"skillNo":160,"name":102,"nameZh":6,"description":161,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":162,"categories":163,"keywords":164,"publishedAt":30},"01M6ADBX5MJP4Z7CG4XTV8ZVT8","Squad's command catalog and interactive menu. Invoke via \u002Fsquad (slash command) or natural language (\"squad commands\", \"what can squad do\", \"show me squad options\"). Presents categorized operations (Install & Upgrade, Team Management, Issues & PRs, Plugins & Skills, Model & Cost, Sessions & State) as an interactive picker. Routes to the right squad CLI command or the Squad coordinator agent.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fsquad\u002FSKILL.md",[],[102,81,165,166,167,168,169,170,171,132,23,172,173,174,175,176,177,178,179,180,181,182,183],"sessions","squad commands","state","issues","plugins","show me","team","install","show","do","natural language","me","options","upgrade","commands","as","coordinator","invoke","interactive menu",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":190,"publishedAt":30},"01M6ADBTRD3ZCJ9A96P5JEGQD2","squad-version-check","Internals of how @bradygaster\u002Fsquad-cli stamps its version, how `squad upgrade` works (what it preserves vs overwrites), and how to probe the npm registry for the latest version from a coordinator prompt.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fgh-aw\u002Fblob\u002Fmain\u002F.squad\u002Ftemplates\u002Fskills\u002Fsquad-version-check\u002FSKILL.md",[],[191,102,192,109,81,9,193,105,194,195,196,197,178,198,199,200,181,201,89,202],"squad version check","check","registry","data","how","prompt","probe","how to","recon","it","latest","2026"]