[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M719GS6V8SSYESRPYJ4EVVXS":3,"skill-same:01M719GS6V8SSYESRPYJ4EVVXS":60},{"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":22,"publishedAt":32,"linkOnly":33,"markdownContent":34,"markdownBody":35,"frontMatter":36,"refName":39,"commitSha":40,"skillDirectory":41,"forksCount":42,"repositoryHtmlUrl":43,"repositoryHomepageUrl":6,"ownerHtmlUrl":44,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":45,"install":46,"resources":59},"01M719GS6V8SSYESRPYJ4EVVXS","model-selection",null,"Determines which LLM model to use for each agent spawn","DeDuva\u002Fsquad","DeDuva","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F8153108?v=4","01M719BQB25861D0TKS3RVHMN2","01M719BQBSWR380PSYDD5M9YD4",1,"MIT","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fmodel-selection\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31],"model","selection","model selection","which","for","agent spawn","use","orchestration","spawn","2026-11-10 10:12:30",false,"---\nname: \"model-selection\"\ndescription: \"Determines which LLM model to use for each agent spawn\"\ndomain: \"orchestration\"\nconfidence: \"medium\"\nsource: \"extracted\"\n---\n\n# Model Selection\n\n> Determines which LLM model to use for each agent spawn.\n\n## SCOPE\n\n✅ THIS SKILL PRODUCES:\n- A resolved `model` parameter for every `task` tool call\n- Persistent model preferences in `.squad\u002Fconfig.json`\n- Spawn acknowledgments that include the resolved model\n\n❌ THIS SKILL DOES NOT PRODUCE:\n- Code, tests, or documentation\n- Model performance benchmarks\n- Cost reports or billing artifacts\n\n## Context\n\nSquad supports 18+ models across three tiers (premium, standard, fast). The coordinator must select the right model for each agent spawn. Users can set persistent preferences that survive across sessions.\n\n## 5-Layer Model Resolution Hierarchy\n\nResolution is **first-match-wins** — the highest layer with a value wins.\n\n| Layer | Name | Source | Persistence |\n|-------|------|--------|-------------|\n| **0a** | Per-Agent Config | `.squad\u002Fconfig.json` → `agentModelOverrides.{name}` | Persistent (survives sessions) |\n| **0b** | Global Config | `.squad\u002Fconfig.json` → `defaultModel` | Persistent (survives sessions) |\n| **1** | Session Directive | User said \"use X\" in current session | Session-only |\n| **2** | Charter Preference | Agent's `charter.md` → `## Model` section | Persistent (in charter) |\n| **3** | Task-Aware Auto | Code → sonnet, docs → haiku, visual → opus | Computed per-spawn |\n| **4** | Default | `claude-haiku-4-5` | Hardcoded fallback |\n\n**Key principle:** Layer 0 (persistent config) beats everything. If the user said \"always use opus\" and it was saved to config.json, every agent gets opus regardless of role or task type. This is intentional — the user explicitly chose quality over cost.\n\n## AGENT WORKFLOW\n\n### On Session Start\n\n1. READ `.squad\u002Fconfig.json`\n2. CHECK for `defaultModel` field — if present, this is the Layer 0 override for all spawns\n3. CHECK for `agentModelOverrides` field — if present, these are per-agent Layer 0a overrides\n4. STORE both values in session context for the duration\n\n### On Every Agent Spawn\n\n1. CHECK Layer 0a: Is there an `agentModelOverrides.{agentName}` in config.json? → Use it.\n2. CHECK Layer 0b: Is there a `defaultModel` in config.json? → Use it.\n3. CHECK Layer 1: Did the user give a session directive? → Use it.\n4. CHECK Layer 2: Does the agent's charter have a `## Model` section? → Use it.\n5. CHECK Layer 3: Determine task type:\n   - Code (implementation, tests, refactoring, bug fixes) → `claude-sonnet-5`\n   - Prompts, agent designs → `claude-sonnet-5`\n   - Visual\u002Fdesign with image analysis → `claude-opus-5`\n   - Non-code (docs, planning, triage, changelogs) → `claude-haiku-4-5`\n6. FALLBACK Layer 4: `claude-haiku-4-5`\n7. INCLUDE model in spawn acknowledgment: `🔧 {Name} ({resolved_model}) — {task}`\n\n### When User Sets a Preference\n\n**Trigger phrases:** \"always use X\", \"use X for everything\", \"switch to X\", \"default to X\"\n\n1. VALIDATE the model ID against the catalog (18+ models)\n2. WRITE `defaultModel` to `.squad\u002Fconfig.json` (merge, don't overwrite)\n3. ACKNOWLEDGE: `✅ Model preference saved: {model} — all future sessions will use this until changed.`\n\n**Per-agent trigger:** \"use X for {agent}\"\n\n1. VALIDATE model ID\n2. WRITE to `agentModelOverrides.{agent}` in `.squad\u002Fconfig.json`\n3. ACKNOWLEDGE: `✅ {Agent} will always use {model} — saved to config.`\n\n### When User Clears a Preference\n\n**Trigger phrases:** \"switch back to automatic\", \"clear model preference\", \"use default models\"\n\n1. REMOVE `defaultModel` from `.squad\u002Fconfig.json`\n2. ACKNOWLEDGE: `✅ Model preference cleared — returning to automatic selection.`\n\n### STOP\n\nAfter resolving the model and including it in the spawn template, this skill is done. Do NOT:\n- Generate model comparison reports\n- Run benchmarks or speed tests\n- Create new config files (only modify existing `.squad\u002Fconfig.json`)\n- Change the model after spawn (fallback chains handle runtime failures)\n\n## Config Schema\n\n`.squad\u002Fconfig.json` model-related fields:\n\n```json\n{\n  \"version\": 1,\n  \"defaultModel\": \"claude-opus-5\",\n  \"agentModelOverrides\": {\n    \"fenster\": \"claude-sonnet-5\",\n    \"mcmanus\": \"claude-haiku-4-5\"\n  }\n}\n```\n\n- `defaultModel` — applies to ALL agents unless overridden by `agentModelOverrides`\n- `agentModelOverrides` — per-agent overrides that take priority over `defaultModel`\n- Both fields are optional. When absent, Layers 1-4 apply normally.\n\n## Fallback Chains\n\nIf a model is unavailable (rate limit, plan restriction), retry within the same tier:\n\n```\nPremium:  claude-opus-5 → claude-opus-5-fast → claude-opus-5 → claude-sonnet-5\nStandard: claude-sonnet-5 → gpt-5.4 → claude-sonnet-5 → gpt-5.3-codex → claude-sonnet-4\nFast:     claude-haiku-4-5 → gpt-5.1-codex-mini → gpt-4.1 → gpt-5-mini\n```\n\n**Never fall UP in tier.** A fast task won't land on a premium model via fallback.\n","# Model Selection\n\n> Determines which LLM model to use for each agent spawn.\n\n## SCOPE\n\n✅ THIS SKILL PRODUCES:\n- A resolved `model` parameter for every `task` tool call\n- Persistent model preferences in `.squad\u002Fconfig.json`\n- Spawn acknowledgments that include the resolved model\n\n❌ THIS SKILL DOES NOT PRODUCE:\n- Code, tests, or documentation\n- Model performance benchmarks\n- Cost reports or billing artifacts\n\n## Context\n\nSquad supports 18+ models across three tiers (premium, standard, fast). The coordinator must select the right model for each agent spawn. Users can set persistent preferences that survive across sessions.\n\n## 5-Layer Model Resolution Hierarchy\n\nResolution is **first-match-wins** — the highest layer with a value wins.\n\n| Layer | Name | Source | Persistence |\n|-------|------|--------|-------------|\n| **0a** | Per-Agent Config | `.squad\u002Fconfig.json` → `agentModelOverrides.{name}` | Persistent (survives sessions) |\n| **0b** | Global Config | `.squad\u002Fconfig.json` → `defaultModel` | Persistent (survives sessions) |\n| **1** | Session Directive | User said \"use X\" in current session | Session-only |\n| **2** | Charter Preference | Agent's `charter.md` → `## Model` section | Persistent (in charter) |\n| **3** | Task-Aware Auto | Code → sonnet, docs → haiku, visual → opus | Computed per-spawn |\n| **4** | Default | `claude-haiku-4-5` | Hardcoded fallback |\n\n**Key principle:** Layer 0 (persistent config) beats everything. If the user said \"always use opus\" and it was saved to config.json, every agent gets opus regardless of role or task type. This is intentional — the user explicitly chose quality over cost.\n\n## AGENT WORKFLOW\n\n### On Session Start\n\n1. READ `.squad\u002Fconfig.json`\n2. CHECK for `defaultModel` field — if present, this is the Layer 0 override for all spawns\n3. CHECK for `agentModelOverrides` field — if present, these are per-agent Layer 0a overrides\n4. STORE both values in session context for the duration\n\n### On Every Agent Spawn\n\n1. CHECK Layer 0a: Is there an `agentModelOverrides.{agentName}` in config.json? → Use it.\n2. CHECK Layer 0b: Is there a `defaultModel` in config.json? → Use it.\n3. CHECK Layer 1: Did the user give a session directive? → Use it.\n4. CHECK Layer 2: Does the agent's charter have a `## Model` section? → Use it.\n5. CHECK Layer 3: Determine task type:\n   - Code (implementation, tests, refactoring, bug fixes) → `claude-sonnet-5`\n   - Prompts, agent designs → `claude-sonnet-5`\n   - Visual\u002Fdesign with image analysis → `claude-opus-5`\n   - Non-code (docs, planning, triage, changelogs) → `claude-haiku-4-5`\n6. FALLBACK Layer 4: `claude-haiku-4-5`\n7. INCLUDE model in spawn acknowledgment: `🔧 {Name} ({resolved_model}) — {task}`\n\n### When User Sets a Preference\n\n**Trigger phrases:** \"always use X\", \"use X for everything\", \"switch to X\", \"default to X\"\n\n1. VALIDATE the model ID against the catalog (18+ models)\n2. WRITE `defaultModel` to `.squad\u002Fconfig.json` (merge, don't overwrite)\n3. ACKNOWLEDGE: `✅ Model preference saved: {model} — all future sessions will use this until changed.`\n\n**Per-agent trigger:** \"use X for {agent}\"\n\n1. VALIDATE model ID\n2. WRITE to `agentModelOverrides.{agent}` in `.squad\u002Fconfig.json`\n3. ACKNOWLEDGE: `✅ {Agent} will always use {model} — saved to config.`\n\n### When User Clears a Preference\n\n**Trigger phrases:** \"switch back to automatic\", \"clear model preference\", \"use default models\"\n\n1. REMOVE `defaultModel` from `.squad\u002Fconfig.json`\n2. ACKNOWLEDGE: `✅ Model preference cleared — returning to automatic selection.`\n\n### STOP\n\nAfter resolving the model and including it in the spawn template, this skill is done. Do NOT:\n- Generate model comparison reports\n- Run benchmarks or speed tests\n- Create new config files (only modify existing `.squad\u002Fconfig.json`)\n- Change the model after spawn (fallback chains handle runtime failures)\n\n## Config Schema\n\n`.squad\u002Fconfig.json` model-related fields:\n\n```json\n{\n  \"version\": 1,\n  \"defaultModel\": \"claude-opus-5\",\n  \"agentModelOverrides\": {\n    \"fenster\": \"claude-sonnet-5\",\n    \"mcmanus\": \"claude-haiku-4-5\"\n  }\n}\n```\n\n- `defaultModel` — applies to ALL agents unless overridden by `agentModelOverrides`\n- `agentModelOverrides` — per-agent overrides that take priority over `defaultModel`\n- Both fields are optional. When absent, Layers 1-4 apply normally.\n\n## Fallback Chains\n\nIf a model is unavailable (rate limit, plan restriction), retry within the same tier:\n\n```\nPremium:  claude-opus-5 → claude-opus-5-fast → claude-opus-5 → claude-sonnet-5\nStandard: claude-sonnet-5 → gpt-5.4 → claude-sonnet-5 → gpt-5.3-codex → claude-sonnet-4\nFast:     claude-haiku-4-5 → gpt-5.1-codex-mini → gpt-4.1 → gpt-5-mini\n```\n\n**Never fall UP in tier.** A fast task won't land on a premium model via fallback.\n",{"name":5,"domain":30,"source":37,"confidence":38,"description":7},"extracted","medium","dev","4ffda80d1bb1043d9169688cf161e53097345c72","packages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fmodel-selection",0,"https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad","https:\u002F\u002Fgithub.com\u002FDeDuva","2026-11-09 20:24:44",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add DeDuva\u002Fsquad --skill model-selection",{"tool":52,"command":53},"bunx","bunx skills add DeDuva\u002Fsquad --skill model-selection",{"tool":55,"command":56},"pnpm","pnpm dlx skills add DeDuva\u002Fsquad --skill model-selection","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Fpackages\u002Fsquad-cli\u002Ftemplates\u002Fskills\u002Fmodel-selection\u002FSKILL.md",true,[],[61,73,81,98,122,137],{"skillNo":62,"name":63,"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":64,"categories":65,"keywords":67,"publishedAt":32},"01M719NE6ZPZT80MKVWFDECJZ3","My Skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fmy-skill\u002FSKILL.md",[66],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[68,69,70,71,72],"my","my skill","testing","vitest","tester",{"skillNo":74,"name":75,"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":76,"categories":77,"keywords":78,"publishedAt":32},"01M719NDJAMEWM8D9H355SCNA8","bad-skill","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftest-fixtures\u002Fskills-test-abb30454\u002Fbad-skill\u002FSKILL.md",[],[79,80],"bad skill","bad",{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":32},"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",[],[88,89,90,91,92,93,94,95,96,97],"conventions","squad","squad conventions","project-conventions","core","project","manual","high","codebase","patterns",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":32},"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",[],[105,106,107,108,95,109,110,111,89,112,113,114,115,94,116,117,118,119,120,121],"rate","rework rate","health","analyze","review efficiency","quality","metric","metrics","efficiency","code quality","pr","prs","when","code","team","code-review","review",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":32},"01M719NA136PDC3SQ10R4R88TH","nap","Context hygiene — compress, prune, archive .squad\u002F state","https:\u002F\u002Fgithub.com\u002FDeDuva\u002Fsquad\u002Fblob\u002Fdev\u002Ftemplates\u002Fskills\u002Fnap\u002FSKILL.md",[],[124,129,130,131,132,133,134,135,89,136],"prune","state","maintenance","context hygiene","archive","hygiene","compress","context",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":147,"publishedAt":32},"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",[143,146],{"categoryNo":144,"categoryName":145,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},[70,148,149,150,151,152,153,94,154,95,155],"e2e template testing","e2e","template","end","coordinator","development","changes","validation"]