Switch the model profile used by GSD agents. Controls which OpenCode model each agent uses, balancing quality vs token spend. read all files referenced by the invoking prompt's execution_context before starting. Validate argument: ``` if $ARGUMENTS.profile not in ["quality", "balanced", "budget"]: Error: Invalid profile "$ARGUMENTS.profile" Valid profiles: quality, balanced, budget EXIT ``` Ensure config exists and load current state: ```bash node "./.opencode/get-shit-done/bin/gsd-tools.cjs" config-ensure-section INIT=$(node "./.opencode/get-shit-done/bin/gsd-tools.cjs" state load) if [[ "$INIT" == @file:* ]]; then INIT=$(cat "${INIT#@file:}"); fi ``` This creates `.planning/config.json` with defaults if missing and loads current config. read current config from state load or directly: Update `model_profile` field: ```json { "model_profile": "$ARGUMENTS.profile" } ``` write updated config back to `.planning/config.json`. Display confirmation with model table for selected profile: ``` ✓ Model profile set to: $ARGUMENTS.profile Agents will now use: [Show table from MODEL_PROFILES in gsd-tools.cjs for selected profile] Example: | Agent | Model | |-------|-------| | gsd-planner | opus | | gsd-executor | sonnet | | gsd-verifier | haiku | | ... | ... | Next spawned agents will use the new profile. ``` Map profile names: - quality: use "quality" column from MODEL_PROFILES - balanced: use "balanced" column from MODEL_PROFILES - budget: use "budget" column from MODEL_PROFILES - [ ] Argument validated - [ ] Config file ensured - [ ] Config updated with new model_profile - [ ] Confirmation displayed with model table