<purpose>
Switch the model profile used by GSD agents. Controls which Codex model each agent uses, balancing quality vs token spend.
</purpose>

<required_reading>
Read all files referenced by the invoking prompt's execution_context before starting.
</required_reading>

<process>

<step name="validate">
Validate argument:

```
if $ARGUMENTS.profile not in ["quality", "balanced", "budget"]:
  Error: Invalid profile "$ARGUMENTS.profile"
  Valid profiles: quality, balanced, budget
  EXIT
```

</step>

<step name="ensure_and_load_config">
Ensure config exists and load current state:

```bash
node ~/.codex/get-shit-done/bin/gsd-tools.cjs config-ensure-section
INIT=$(node ~/.codex/get-shit-done/bin/gsd-tools.cjs state load)
```

This creates `.planning/config.json` with defaults if missing and loads current config.
</step>

<step name="update_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`.
</step>

<step name="confirm">
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 | Thinking |
|-------|-------|----------|
| gsd-planner | gpt-5.3-codex | xhigh |
| gsd-executor | gpt-5.3-codex | high |
| gsd-verifier | gpt-5.3-codex | high |
| ... | ... | ... |

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
  </step>

</process>

<success_criteria>

- [ ] Argument validated
- [ ] Config file ensured
- [ ] Config updated with new model_profile
- [ ] Confirmation displayed with model table
      </success_criteria>
