[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6WZXF4N9PXD4HV1QRW55MP3":3,"skill-same:01M6WZXF4N9PXD4HV1QRW55MP3":58},{"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":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":34,"commitSha":35,"skillDirectory":36,"forksCount":37,"repositoryHtmlUrl":38,"repositoryHomepageUrl":39,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6WZXF4N9PXD4HV1QRW55MP3","squad-conventions",null,"Core conventions and patterns used in the Squad codebase","microsoft\u002Fwaza","microsoft","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F6154722?v=4","01M698VYDXZ6JW5WH3CRV650R8","Microsoft","01M6WZT4PAP160SPCF851532KH",1511,"MIT","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002F.squad-templates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"squad conventions","squad","conventions","core","project-conventions","patterns","project","manual","high","codebase","2026-11-10 10:12:30",false,"---\nname: \"squad-conventions\"\ndescription: \"Core conventions and patterns used in the Squad codebase\"\ndomain: \"project-conventions\"\nconfidence: \"high\"\nsource: \"manual\"\n---\n\n## Context\nThese conventions apply to all work on the Squad CLI tool (`create-squad`). Squad is a zero-dependency Node.js package that adds AI agent teams to any project. Understanding these patterns is essential before modifying any Squad source code.\n\n## Patterns\n\n### Zero Dependencies\nSquad has zero runtime dependencies. Everything uses Node.js built-ins (`fs`, `path`, `os`, `child_process`). Do not add packages to `dependencies` in `package.json`. This is a hard constraint, not a preference.\n\n### Node.js Built-in Test Runner\nTests use `node:test` and `node:assert\u002Fstrict` — no test frameworks. Run with `npm test`. Test files live in `test\u002F`. The test command is `node --test test\u002F`.\n\n### Error Handling — `fatal()` Pattern\nAll user-facing errors use the `fatal(msg)` function which prints a red `✗` prefix and exits with code 1. Never throw unhandled exceptions or print raw stack traces. The global `uncaughtException` handler calls `fatal()` as a safety net.\n\n### ANSI Color Constants\nColors are defined as constants at the top of `index.js`: `GREEN`, `RED`, `DIM`, `BOLD`, `RESET`. Use these constants — do not inline ANSI escape codes.\n\n### File Structure\n- `.squad\u002F` — Team state (user-owned, never overwritten by upgrades)\n- `.squad\u002Ftemplates\u002F` — Template files copied from `templates\u002F` (Squad-owned, overwritten on upgrade)\n- `.github\u002Fagents\u002Fsquad.agent.md` — Coordinator prompt (Squad-owned, overwritten on upgrade)\n- `templates\u002F` — Source templates shipped with the npm package\n- `.squad\u002Fskills\u002F` — Team skills in SKILL.md format (user-owned)\n- `.squad\u002Fdecisions\u002Finbox\u002F` — Drop-box for parallel decision writes\n\n### Windows Compatibility\nAlways use `path.join()` for file paths — never hardcode `\u002F` or `\\` separators. Squad must work on Windows, macOS, and Linux. All tests must pass on all platforms.\n\n### Init Idempotency\nThe init flow uses a skip-if-exists pattern: if a file or directory already exists, skip it and report \"already exists.\" Never overwrite user state during init. The upgrade flow overwrites only Squad-owned files.\n\n### Copy Pattern\n`copyRecursive(src, target)` handles both files and directories. It creates parent directories with `{ recursive: true }` and uses `fs.copyFileSync` for files.\n\n## Examples\n\n```javascript\n\u002F\u002F Error handling\nfunction fatal(msg) {\n  console.error(`${RED}✗${RESET} ${msg}`);\n  process.exit(1);\n}\n\n\u002F\u002F File path construction (Windows-safe)\nconst agentDest = path.join(dest, '.github', 'agents', 'squad.agent.md');\n\n\u002F\u002F Skip-if-exists pattern\nif (!fs.existsSync(ceremoniesDest)) {\n  fs.copyFileSync(ceremoniesSrc, ceremoniesDest);\n  console.log(`${GREEN}✓${RESET} .squad\u002Fceremonies.md`);\n} else {\n  console.log(`${DIM}ceremonies.md already exists — skipping${RESET}`);\n}\n```\n\n## Anti-Patterns\n- **Adding npm dependencies** — Squad is zero-dep. Use Node.js built-ins only.\n- **Hardcoded path separators** — Never use `\u002F` or `\\` directly. Always `path.join()`.\n- **Overwriting user state on init** — Init skips existing files. Only upgrade overwrites Squad-owned files.\n- **Raw stack traces** — All errors go through `fatal()`. Users see clean messages, not stack traces.\n- **Inline ANSI codes** — Use the color constants (`GREEN`, `RED`, `DIM`, `BOLD`, `RESET`).\n","## Context\nThese conventions apply to all work on the Squad CLI tool (`create-squad`). Squad is a zero-dependency Node.js package that adds AI agent teams to any project. Understanding these patterns is essential before modifying any Squad source code.\n\n## Patterns\n\n### Zero Dependencies\nSquad has zero runtime dependencies. Everything uses Node.js built-ins (`fs`, `path`, `os`, `child_process`). Do not add packages to `dependencies` in `package.json`. This is a hard constraint, not a preference.\n\n### Node.js Built-in Test Runner\nTests use `node:test` and `node:assert\u002Fstrict` — no test frameworks. Run with `npm test`. Test files live in `test\u002F`. The test command is `node --test test\u002F`.\n\n### Error Handling — `fatal()` Pattern\nAll user-facing errors use the `fatal(msg)` function which prints a red `✗` prefix and exits with code 1. Never throw unhandled exceptions or print raw stack traces. The global `uncaughtException` handler calls `fatal()` as a safety net.\n\n### ANSI Color Constants\nColors are defined as constants at the top of `index.js`: `GREEN`, `RED`, `DIM`, `BOLD`, `RESET`. Use these constants — do not inline ANSI escape codes.\n\n### File Structure\n- `.squad\u002F` — Team state (user-owned, never overwritten by upgrades)\n- `.squad\u002Ftemplates\u002F` — Template files copied from `templates\u002F` (Squad-owned, overwritten on upgrade)\n- `.github\u002Fagents\u002Fsquad.agent.md` — Coordinator prompt (Squad-owned, overwritten on upgrade)\n- `templates\u002F` — Source templates shipped with the npm package\n- `.squad\u002Fskills\u002F` — Team skills in SKILL.md format (user-owned)\n- `.squad\u002Fdecisions\u002Finbox\u002F` — Drop-box for parallel decision writes\n\n### Windows Compatibility\nAlways use `path.join()` for file paths — never hardcode `\u002F` or `\\` separators. Squad must work on Windows, macOS, and Linux. All tests must pass on all platforms.\n\n### Init Idempotency\nThe init flow uses a skip-if-exists pattern: if a file or directory already exists, skip it and report \"already exists.\" Never overwrite user state during init. The upgrade flow overwrites only Squad-owned files.\n\n### Copy Pattern\n`copyRecursive(src, target)` handles both files and directories. It creates parent directories with `{ recursive: true }` and uses `fs.copyFileSync` for files.\n\n## Examples\n\n```javascript\n\u002F\u002F Error handling\nfunction fatal(msg) {\n  console.error(`${RED}✗${RESET} ${msg}`);\n  process.exit(1);\n}\n\n\u002F\u002F File path construction (Windows-safe)\nconst agentDest = path.join(dest, '.github', 'agents', 'squad.agent.md');\n\n\u002F\u002F Skip-if-exists pattern\nif (!fs.existsSync(ceremoniesDest)) {\n  fs.copyFileSync(ceremoniesSrc, ceremoniesDest);\n  console.log(`${GREEN}✓${RESET} .squad\u002Fceremonies.md`);\n} else {\n  console.log(`${DIM}ceremonies.md already exists — skipping${RESET}`);\n}\n```\n\n## Anti-Patterns\n- **Adding npm dependencies** — Squad is zero-dep. Use Node.js built-ins only.\n- **Hardcoded path separators** — Never use `\u002F` or `\\` directly. Always `path.join()`.\n- **Overwriting user state on init** — Init skips existing files. Only upgrade overwrites Squad-owned files.\n- **Raw stack traces** — All errors go through `fatal()`. Users see clean messages, not stack traces.\n- **Inline ANSI codes** — Use the color constants (`GREEN`, `RED`, `DIM`, `BOLD`, `RESET`).\n",{"name":5,"domain":23,"source":26,"confidence":27,"description":7},"main","116214a33b5e07766539f64c0ea21521467829bf",".squad-templates\u002Fskills\u002Fsquad-conventions",101,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza","https:\u002F\u002Fmicrosoft.github.io\u002Fwaza\u002F","https:\u002F\u002Fgithub.com\u002Fmicrosoft","https:\u002F\u002Fopensource.microsoft.com","Open source projects and samples from Microsoft","2026-11-15 04:18:35",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add microsoft\u002Fwaza --skill squad-conventions",{"tool":50,"command":51},"bunx","bunx skills add microsoft\u002Fwaza --skill squad-conventions",{"tool":53,"command":54},"pnpm","pnpm dlx skills add microsoft\u002Fwaza --skill squad-conventions","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002F.squad-templates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",true,[],[59,95,121,150,170,183],{"skillNo":60,"name":61,"nameZh":6,"description":62,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":73,"publishedAt":29},"01M6X00A438VG96V20V1VMDHCM","waza-runner","Run evaluations on Agent Skills to measure their effectiveness. \nUSE FOR: \"run skill evals\", \"evaluate my skill\", \"test skill quality\", \n\"check skill triggers\", \"skill compliance check\", \"measure skill performance\",\n\"run evals on [skill-name]\", \"grade skill execution\".\nDO NOT USE FOR: writing skills (use skill-authoring), improving frontmatter \n(use sensei), or general testing unrelated to skills.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002Fwaza-runner\u002FSKILL.md",[65,70],{"categoryNo":66,"categoryName":67,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":71,"categoryName":72,"taxonomyType":68,"taxonomyTypeDesc":69},"01JBSEEDCAT000000000000023","Skill与智能体开发",[74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94],"waza runner","runner","waza","frontmatter","run","triggers","do","my","general","for","evals","unrelated","writing skills","my skill","sensei","Test Skill","run evals","performance","writing","testing","authoring",{"skillNo":96,"name":76,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":102,"publishedAt":29},"01M6X003ZZKY5WQ5SWPAQ3MJMS","**WORKFLOW SKILL** - Evaluate AI agent skills using structured benchmarks with YAML specs, fixture isolation, and pluggable validators. USE FOR: run waza, waza help, run eval, run benchmark, evaluate skill, test agent, generate eval suite, init eval, compare results, score agent, agent evaluation, skill testing, cross-model comparison. DO NOT USE FOR: improving skill frontmatter (use waza dev), creating new skills from scratch (use skill-creator), token counting or budget checks (use waza tokens). INVOKES: Copilot SDK executor, mock engine, code\u002Fregex validators. FOR SINGLE OPERATIONS: use waza run directly for a single benchmark.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002Fskills\u002Fwaza\u002FSKILL.md",[100,101],{"categoryNo":66,"categoryName":67,"taxonomyType":68,"taxonomyTypeDesc":69},{"categoryNo":71,"categoryName":72,"taxonomyType":68,"taxonomyTypeDesc":69},[76,78,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,93,118,119,120],"workflow skill","executor","fixture","eval","compare results","model","Evaluation","evaluate skill","code","eval suite","generate","copilot","init","workflow","ai agent","counting","new","skill-creator",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":136,"publishedAt":29},"01M6WZZZHCTPZ8YF9564J3QJVT","waza-interactive","Interactive workflow partner for creating, testing, and improving AI agent skills with waza. USE FOR: run my evals, check my skill, compare models, create eval suite, debug failing tests, is my skill ready, ship readiness, interpret results, improve score. DO NOT USE FOR: general coding, non-skill work, writing skill content (use skill-authoring), improving frontmatter only (use sensei).","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002Fskills\u002Fwaza-interactive\u002FSKILL.md",[127,128,133],{"categoryNo":71,"categoryName":72,"taxonomyType":68,"taxonomyTypeDesc":69},{"categoryNo":129,"categoryName":130,"taxonomyType":131,"taxonomyTypeDesc":132},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",{"categoryNo":134,"categoryName":135,"taxonomyType":131,"taxonomyTypeDesc":132},"01JBSEEDCAT000000000000036","内容创作者",[137,76,138,139,92,93,117,140,141,112,83,94,80,82,84,142,143,144,106,145,146,87,78,147,148,88,149,116],"waza interactive","interactive","tests","use","general coding","ready","only","failing","work","improve","create","debug","create eval",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":157,"publishedAt":29},"01M6WZZTQR955SVJ02J33DGQYK","code-explainer","Explains code snippets in plain English, breaking down what the code does step by step. Perfect for learning, code reviews, or documentation.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002Fskills\u002Fcode-explainer\u002FSKILL.md",[156],{"categoryNo":129,"categoryName":130,"taxonomyType":131,"taxonomyTypeDesc":132},[158,159,111,160,161,162,83,163,164,165,166,167,168,169],"code explainer","explainer","learning","plain","down","reviews","step by step","english","snippets","what the","plain english","documentation",{"skillNo":171,"name":172,"nameZh":6,"description":173,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":174,"categories":175,"keywords":176,"publishedAt":29},"01M6WZZR27J4RE4J10M38ECM26","compatibility-skill","Read fixture status and report whether it is ready.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002Finternal\u002Ftestdata\u002Fcompatibility\u002Fv1\u002FSKILL.md",[],[177,178,179,105,142,180,181,182],"compatibility skill","compatibility","it","read","report","status",{"skillNo":184,"name":185,"nameZh":6,"description":186,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":187,"categories":188,"keywords":189,"publishedAt":29},"01M6WZZMYWAKWE36WD4PHQK8V2","evidence-judge","Read a supplied report and summarize its recorded status and numeric items.","https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fwaza\u002Fblob\u002Fmain\u002Fexamples\u002Fevidence-judge\u002FSKILL.md",[],[190,191,192,180,181,182,193],"evidence","evidence judge","judge","summarize"]