[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M719CCARP577NCSC5N1ATZ56":3,"skill-same:01M719CCARP577NCSC5N1ATZ56":66},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":34,"linkOnly":35,"markdownContent":36,"markdownBody":37,"frontMatter":38,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":48,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M719CCARP577NCSC5N1ATZ56","init-mode",null,"Team initialization flow (Phase 1 proposal + Phase 2 creation)","DeDuva\u002Fsquad","DeDuva","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8153108?v=4","01M719BQB25861D0TKS3RVHMN2","01M719BQBSWR380PSYDD5M9YD4",1,"MIT","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002F.copilot\u002Fskills\u002Finit-mode\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33],"init mode","mode","init","with","proposal","initialization","high","creation","roster","flow","confirmation","orchestration","ask","team","user","phase","2026-11-10 10:12:30",false,"---\nname: \"init-mode\"\ndescription: \"Team initialization flow (Phase 1 proposal + Phase 2 creation)\"\ndomain: \"orchestration\"\nconfidence: \"high\"\nsource: \"extracted\"\ntools:\n  - name: \"ask_user\"\n    description: \"Confirm team roster with selectable menu\"\n    when: \"Phase 1 proposal — requires explicit user confirmation\"\n---\n\n## Context\n\nInit Mode activates when `.squad\u002Fteam.md` does not exist, or exists but has zero roster entries under `## Members`. The coordinator proposes a team (Phase 1), waits for user confirmation, then creates the team structure (Phase 2).\n\n## Patterns\n\n### Phase 1: Propose the Team\n\nNo team exists yet. Propose one — but **DO NOT create any files until the user confirms.**\n\n1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *\"Hey {user}, what are you building?\"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.**\n2. Ask: *\"What are you building? (language, stack, what it does)\"*\n3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section):\n   - Determine team size (typically 4–5 + Scribe).\n   - Determine assignment shape from the user's project description.\n   - Derive resonance signals from the session and repo context.\n   - Select a universe. If the universe is custom, allocate character names from that universe based on the related list found in the `.squad\u002Ftemplates\u002Fcasting\u002F` directory. Prefer custom universes when available.\n   - Scribe is always \"Scribe\" — exempt from casting.\n   - Ralph is always \"Ralph\" — exempt from casting.\n4. Propose the team with their cast names. Example (names will vary per cast):\n\n```\n🏗️  {CastName1}  — Lead          Scope, decisions, code review\n⚛️  {CastName2}  — Frontend Dev  React, UI, components\n🔧  {CastName3}  — Backend Dev   APIs, database, services\n🧪  {CastName4}  — Tester        Tests, quality, edge cases\n📋  Scribe       — (silent)      Memory, decisions, session logs\n🔄  Ralph        — (monitor)     Work queue, backlog, keep-alive\n```\n\n5. Use the `ask_user` tool to confirm the roster. Provide choices so the user sees a selectable menu:\n   - **question:** *\"Look right?\"*\n   - **choices:** `[\"Yes, cast this team\", \"Add someone\", \"Change a role\"]`\n\n**⚠️ STOP. Your response ENDS here. Do NOT proceed to Phase 2. Do NOT create any files or directories. Wait for the user's reply.**\n\n### Phase 2: Create the Team\n\n**Trigger:** The user replied to Phase 1 with confirmation (\"yes\", \"looks good\", or similar affirmative), OR the user's reply to Phase 1 is a task (treat as implicit \"yes\").\n\n> If the user said \"add someone\" or \"change a role,\" go back to Phase 1 step 3 and re-propose. Do NOT enter Phase 2 until the user confirms.\n\n6. Create the `.squad\u002F` directory structure (see `.squad\u002Ftemplates\u002F` for format guides or use the standard structure: team.md, routing.md, ceremonies.md, decisions.md, decisions\u002Finbox\u002F, casting\u002F, agents\u002F, orchestration-log\u002F, skills\u002F, log\u002F).\n\n**Casting state initialization:** Copy `.squad\u002Ftemplates\u002Fcasting-policy.json` to `.squad\u002Fcasting\u002Fpolicy.json` (or create from defaults). Create `registry.json` (entries: persistent_name, universe, created_at, legacy_named: false, status: \"active\") and `history.json` (first assignment snapshot with unique assignment_id).\n\n**Seeding:** Each agent's `history.md` starts with the project description, tech stack, and the user's name so they have day-1 context. Agent folder names are the cast name in lowercase (e.g., `.squad\u002Fagents\u002Fripley\u002F`). The Scribe's charter includes maintaining `decisions.md` and cross-agent context sharing.\n\n**Team.md structure:** `team.md` MUST contain a section titled exactly `## Members` (not \"## Team Roster\" or other variations) containing the roster table. This header is hard-coded in GitHub workflows (`squad-heartbeat.yml`, `squad-issue-assign.yml`, `squad-triage.yml`, `sync-squad-labels.yml`) for label automation. If the header is missing or titled differently, label routing breaks.\n\n**Merge driver for append-only files:** Create or update `.gitattributes` at the repo root to enable conflict-free merging of `.squad\u002F` state across branches:\n```\n.squad\u002Fdecisions.md merge=union\n.squad\u002Fagents\u002F*\u002Fhistory.md merge=union\n.squad\u002Flog\u002F** merge=union\n.squad\u002Forchestration-log\u002F** merge=union\n```\nThe `union` merge driver keeps all lines from both sides, which is correct for append-only files. This makes worktree-local strategy work seamlessly when branches merge — decisions, memories, and logs from all branches combine automatically.\n\n7. Say: *\"✅ Team cast. Try: '{FirstCastName}, set up the project structure'\"*\n\n8. **Post-setup input sources** (optional — ask after team is created, not during casting):\n   - PRD\u002Fspec: *\"Do you have a PRD or spec document? (file path, paste it, or skip)\"* → If provided, follow PRD Mode flow\n   - GitHub issues: *\"Is there a GitHub repo with issues I should pull from? (owner\u002Frepo, or skip)\"* → If provided, follow GitHub Issues Mode flow\n   - Human members: *\"Are any humans joining the team? (names and roles, or just AI for now)\"* → If provided, add per Human Team Members section\n   - Copilot agent: *\"Want to include @copilot? It can pick up issues autonomously. (yes\u002Fno)\"* → If yes, follow Copilot Coding Agent Member section and ask about auto-assignment\n   - These are additive. Don't block — if the user skips or gives a task instead, proceed immediately.\n\n## Examples\n\n**Example flow:**\n1. Coordinator detects no team.md → Init Mode\n2. Runs `git config user.name` → \"{user}\"\n3. Asks: *\"Hey {user}, what are you building?\"*\n4. User: *\"TypeScript CLI tool with GitHub API integration\"*\n5. Coordinator runs casting algorithm → selects \"The Usual Suspects\" universe\n6. Proposes: Keaton (Lead), Verbal (Prompt), Fenster (Backend), Hockney (Tester), Scribe, Ralph\n7. Uses `ask_user` with choices → user selects \"Yes, cast this team\"\n8. Coordinator creates `.squad\u002F` structure, initializes casting state, seeds agents\n9. Says: *\"✅ Team cast. Try: 'Keaton, set up the project structure'\"*\n\n## Anti-Patterns\n\n- ❌ Creating files before user confirms Phase 1\n- ❌ Mixing agents from different universes in the same cast\n- ❌ Skipping the `ask_user` tool and assuming confirmation\n- ❌ Proceeding to Phase 2 when user said \"add someone\" or \"change a role\"\n- ❌ Using `## Team Roster` instead of `## Members` as the header (breaks GitHub workflows)\n- ❌ Forgetting to initialize `.squad\u002Fcasting\u002F` state files\n- ❌ Reading or storing `git config user.email` (PII violation)\n","## Context\n\nInit Mode activates when `.squad\u002Fteam.md` does not exist, or exists but has zero roster entries under `## Members`. The coordinator proposes a team (Phase 1), waits for user confirmation, then creates the team structure (Phase 2).\n\n## Patterns\n\n### Phase 1: Propose the Team\n\nNo team exists yet. Propose one — but **DO NOT create any files until the user confirms.**\n\n1. **Identify the user.** Run `git config user.name` to learn who you're working with. Use their name in conversation (e.g., *\"Hey {user}, what are you building?\"*). Store their name (NOT email) in `team.md` under Project Context. **Never read or store `git config user.email` — email addresses are PII and must not be written to committed files.**\n2. Ask: *\"What are you building? (language, stack, what it does)\"*\n3. **Cast the team.** Before proposing names, run the Casting & Persistent Naming algorithm (see that section):\n   - Determine team size (typically 4–5 + Scribe).\n   - Determine assignment shape from the user's project description.\n   - Derive resonance signals from the session and repo context.\n   - Select a universe. If the universe is custom, allocate character names from that universe based on the related list found in the `.squad\u002Ftemplates\u002Fcasting\u002F` directory. Prefer custom universes when available.\n   - Scribe is always \"Scribe\" — exempt from casting.\n   - Ralph is always \"Ralph\" — exempt from casting.\n4. Propose the team with their cast names. Example (names will vary per cast):\n\n```\n🏗️  {CastName1}  — Lead          Scope, decisions, code review\n⚛️  {CastName2}  — Frontend Dev  React, UI, components\n🔧  {CastName3}  — Backend Dev   APIs, database, services\n🧪  {CastName4}  — Tester        Tests, quality, edge cases\n📋  Scribe       — (silent)      Memory, decisions, session logs\n🔄  Ralph        — (monitor)     Work queue, backlog, keep-alive\n```\n\n5. Use the `ask_user` tool to confirm the roster. Provide choices so the user sees a selectable menu:\n   - **question:** *\"Look right?\"*\n   - **choices:** `[\"Yes, cast this team\", \"Add someone\", \"Change a role\"]`\n\n**⚠️ STOP. Your response ENDS here. Do NOT proceed to Phase 2. Do NOT create any files or directories. Wait for the user's reply.**\n\n### Phase 2: Create the Team\n\n**Trigger:** The user replied to Phase 1 with confirmation (\"yes\", \"looks good\", or similar affirmative), OR the user's reply to Phase 1 is a task (treat as implicit \"yes\").\n\n> If the user said \"add someone\" or \"change a role,\" go back to Phase 1 step 3 and re-propose. Do NOT enter Phase 2 until the user confirms.\n\n6. Create the `.squad\u002F` directory structure (see `.squad\u002Ftemplates\u002F` for format guides or use the standard structure: team.md, routing.md, ceremonies.md, decisions.md, decisions\u002Finbox\u002F, casting\u002F, agents\u002F, orchestration-log\u002F, skills\u002F, log\u002F).\n\n**Casting state initialization:** Copy `.squad\u002Ftemplates\u002Fcasting-policy.json` to `.squad\u002Fcasting\u002Fpolicy.json` (or create from defaults). Create `registry.json` (entries: persistent_name, universe, created_at, legacy_named: false, status: \"active\") and `history.json` (first assignment snapshot with unique assignment_id).\n\n**Seeding:** Each agent's `history.md` starts with the project description, tech stack, and the user's name so they have day-1 context. Agent folder names are the cast name in lowercase (e.g., `.squad\u002Fagents\u002Fripley\u002F`). The Scribe's charter includes maintaining `decisions.md` and cross-agent context sharing.\n\n**Team.md structure:** `team.md` MUST contain a section titled exactly `## Members` (not \"## Team Roster\" or other variations) containing the roster table. This header is hard-coded in GitHub workflows (`squad-heartbeat.yml`, `squad-issue-assign.yml`, `squad-triage.yml`, `sync-squad-labels.yml`) for label automation. If the header is missing or titled differently, label routing breaks.\n\n**Merge driver for append-only files:** Create or update `.gitattributes` at the repo root to enable conflict-free merging of `.squad\u002F` state across branches:\n```\n.squad\u002Fdecisions.md merge=union\n.squad\u002Fagents\u002F*\u002Fhistory.md merge=union\n.squad\u002Flog\u002F** merge=union\n.squad\u002Forchestration-log\u002F** merge=union\n```\nThe `union` merge driver keeps all lines from both sides, which is correct for append-only files. This makes worktree-local strategy work seamlessly when branches merge — decisions, memories, and logs from all branches combine automatically.\n\n7. Say: *\"✅ Team cast. Try: '{FirstCastName}, set up the project structure'\"*\n\n8. **Post-setup input sources** (optional — ask after team is created, not during casting):\n   - PRD\u002Fspec: *\"Do you have a PRD or spec document? (file path, paste it, or skip)\"* → If provided, follow PRD Mode flow\n   - GitHub issues: *\"Is there a GitHub repo with issues I should pull from? (owner\u002Frepo, or skip)\"* → If provided, follow GitHub Issues Mode flow\n   - Human members: *\"Are any humans joining the team? (names and roles, or just AI for now)\"* → If provided, add per Human Team Members section\n   - Copilot agent: *\"Want to include @copilot? It can pick up issues autonomously. (yes\u002Fno)\"* → If yes, follow Copilot Coding Agent Member section and ask about auto-assignment\n   - These are additive. Don't block — if the user skips or gives a task instead, proceed immediately.\n\n## Examples\n\n**Example flow:**\n1. Coordinator detects no team.md → Init Mode\n2. Runs `git config user.name` → \"{user}\"\n3. Asks: *\"Hey {user}, what are you building?\"*\n4. User: *\"TypeScript CLI tool with GitHub API integration\"*\n5. Coordinator runs casting algorithm → selects \"The Usual Suspects\" universe\n6. Proposes: Keaton (Lead), Verbal (Prompt), Fenster (Backend), Hockney (Tester), Scribe, Ralph\n7. Uses `ask_user` with choices → user selects \"Yes, cast this team\"\n8. Coordinator creates `.squad\u002F` structure, initializes casting state, seeds agents\n9. Says: *\"✅ Team cast. Try: 'Keaton, set up the project structure'\"*\n\n## Anti-Patterns\n\n- ❌ Creating files before user confirms Phase 1\n- ❌ Mixing agents from different universes in the same cast\n- ❌ Skipping the `ask_user` tool and assuming confirmation\n- ❌ Proceeding to Phase 2 when user said \"add someone\" or \"change a role\"\n- ❌ Using `## Team Roster` instead of `## Members` as the header (breaks GitHub workflows)\n- ❌ Forgetting to initialize `.squad\u002Fcasting\u002F` state files\n- ❌ Reading or storing `git config user.email` (PII violation)\n",{"name":5,"tools":39,"domain":29,"source":44,"confidence":24,"description":7},[40],{"name":41,"when":42,"description":43},"ask_user","Phase 1 proposal — requires explicit user confirmation","Confirm team roster with selectable menu","extracted","dev","4ffda80d1bb1043d9169688cf161e53097345c72",".copilot\u002Fskills\u002Finit-mode",0,"https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad","https:\u002F\u002Fgithub.com\u002FDeDuva","2026-11-09 20:24:44",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add DeDuva\u002Fsquad --skill init-mode",{"tool":58,"command":59},"bunx","bunx skills add DeDuva\u002Fsquad --skill init-mode",{"tool":61,"command":62},"pnpm","pnpm dlx skills add DeDuva\u002Fsquad --skill init-mode","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002F.copilot\u002Fskills\u002Finit-mode\u002FSKILL.md",true,[],[67,83,91,107,130,145],{"skillNo":68,"name":69,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":70,"categories":71,"keywords":77,"publishedAt":34},"01M719NE6ZPZT80MKVWFDECJZ3","My Skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fmy-skill\u002FSKILL.md",[72],{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[78,79,80,81,82],"my","my skill","testing","vitest","tester",{"skillNo":84,"name":85,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":86,"categories":87,"keywords":88,"publishedAt":34},"01M719NDJAMEWM8D9H355SCNA8","bad-skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fbad-skill\u002FSKILL.md",[],[89,90],"bad skill","bad",{"skillNo":92,"name":93,"nameZh":6,"description":94,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":95,"categories":96,"keywords":97,"publishedAt":34},"01M719NCC1AZ02GHZ1V71YPEV7","squad-conventions","Core conventions and patterns used in the Squad codebase","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fsquad-conventions\u002FSKILL.md",[],[98,99,100,101,102,103,104,24,105,106],"conventions","squad","squad conventions","project-conventions","core","project","manual","codebase","patterns",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":34},"01M719NAYM17B7X8MGP681EHKQ","rework-rate","Measure and interpret PR rework rate — the emerging 5th DORA metric","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Frework-rate\u002FSKILL.md",[],[114,115,116,117,24,118,119,120,99,121,122,123,124,104,125,126,127,31,128,129],"rate","rework rate","health","analyze","review efficiency","quality","metric","metrics","efficiency","code quality","pr","prs","when","code","code-review","review",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":34},"01M719NA136PDC3SQ10R4R88TH","nap","Context hygiene — compress, prune, archive .squad\u002F state","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fnap\u002FSKILL.md",[],[132,137,138,139,140,141,142,143,99,144],"prune","state","maintenance","context hygiene","archive","hygiene","compress","context",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":155,"publishedAt":34},"01M719N7B4PBQPNXW78TEJY4HQ","e2e-template-testing","End-to-end validation of coordinator and agent template changes","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fe2e-template-testing\u002FSKILL.md",[151,154],{"categoryNo":152,"categoryName":153,"taxonomyType":75,"taxonomyTypeDesc":76},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":73,"categoryName":74,"taxonomyType":75,"taxonomyTypeDesc":76},[80,156,157,158,159,160,161,104,162,24,163],"e2e template testing","e2e","template","end","coordinator","development","changes","validation"]