Skip to content

Commit 923d04f

Browse files
authored
Merge pull request #10 from undeemed/fix/codex-only-workflows
fix: Codex-only model names across workflows, refs, tools, tests
2 parents 9201514 + 7ba9b3f commit 923d04f

8 files changed

Lines changed: 141 additions & 93 deletions

File tree

get-shit-done/bin/gsd-tools.cjs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -126,17 +126,17 @@ const { execSync } = require('child_process');
126126
// ─── Model Profile Table ─────────────────────────────────────────────────────
127127

128128
const MODEL_PROFILES = {
129-
'gsd-planner': { quality: 'opus', balanced: 'opus', budget: 'sonnet' },
130-
'gsd-roadmapper': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet' },
131-
'gsd-executor': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet' },
132-
'gsd-phase-researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku' },
133-
'gsd-project-researcher': { quality: 'opus', balanced: 'sonnet', budget: 'haiku' },
134-
'gsd-research-synthesizer': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku' },
135-
'gsd-debugger': { quality: 'opus', balanced: 'sonnet', budget: 'sonnet' },
136-
'gsd-codebase-mapper': { quality: 'sonnet', balanced: 'haiku', budget: 'haiku' },
137-
'gsd-verifier': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku' },
138-
'gsd-plan-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku' },
139-
'gsd-integration-checker': { quality: 'sonnet', balanced: 'sonnet', budget: 'haiku' },
129+
'gsd-planner': { quality: 'o3', balanced: 'o3', budget: 'o4-mini' },
130+
'gsd-roadmapper': { quality: 'o3', balanced: 'o4-mini', budget: 'o4-mini' },
131+
'gsd-executor': { quality: 'o3', balanced: 'o4-mini', budget: 'o4-mini' },
132+
'gsd-phase-researcher': { quality: 'o3', balanced: 'o4-mini', budget: 'gpt-4.1-nano' },
133+
'gsd-project-researcher': { quality: 'o3', balanced: 'o4-mini', budget: 'gpt-4.1-nano' },
134+
'gsd-research-synthesizer': { quality: 'o4-mini', balanced: 'o4-mini', budget: 'gpt-4.1-nano' },
135+
'gsd-debugger': { quality: 'o3', balanced: 'o4-mini', budget: 'o4-mini' },
136+
'gsd-codebase-mapper': { quality: 'o4-mini', balanced: 'gpt-4.1-nano', budget: 'gpt-4.1-nano' },
137+
'gsd-verifier': { quality: 'o4-mini', balanced: 'o4-mini', budget: 'gpt-4.1-nano' },
138+
'gsd-plan-checker': { quality: 'o4-mini', balanced: 'o4-mini', budget: 'gpt-4.1-nano' },
139+
'gsd-integration-checker': { quality: 'o4-mini', balanced: 'o4-mini', budget: 'gpt-4.1-nano' },
140140
};
141141

142142
// ─── Helpers ──────────────────────────────────────────────────────────────────
@@ -1437,13 +1437,13 @@ function cmdResolveModel(cwd, agentType, raw) {
14371437

14381438
const agentModels = MODEL_PROFILES[agentType];
14391439
if (!agentModels) {
1440-
const result = { model: 'sonnet', profile, unknown_agent: true };
1441-
output(result, raw, 'sonnet');
1440+
const result = { model: 'o4-mini', profile, unknown_agent: true };
1441+
output(result, raw, 'o4-mini');
14421442
return;
14431443
}
14441444

1445-
const resolved = agentModels[profile] || agentModels['balanced'] || 'sonnet';
1446-
const model = resolved === 'opus' ? 'inherit' : resolved;
1445+
const resolved = agentModels[profile] || agentModels['balanced'] || 'o4-mini';
1446+
const model = resolved === 'o3' ? 'inherit' : resolved;
14471447
const result = { model, profile };
14481448
output(result, raw, model);
14491449
}
@@ -3973,15 +3973,15 @@ function resolveModelInternal(cwd, agentType) {
39733973
// Check per-agent override first
39743974
const override = config.model_overrides?.[agentType];
39753975
if (override) {
3976-
return override === 'opus' ? 'inherit' : override;
3976+
return override === 'o3' ? 'inherit' : override;
39773977
}
39783978

39793979
// Fall back to profile lookup
39803980
const profile = config.model_profile || 'balanced';
39813981
const agentModels = MODEL_PROFILES[agentType];
3982-
if (!agentModels) return 'sonnet';
3983-
const resolved = agentModels[profile] || agentModels['balanced'] || 'sonnet';
3984-
return resolved === 'opus' ? 'inherit' : resolved;
3982+
if (!agentModels) return 'o4-mini';
3983+
const resolved = agentModels[profile] || agentModels['balanced'] || 'o4-mini';
3984+
return resolved === 'o3' ? 'inherit' : resolved;
39853985
}
39863986

39873987
function getArchivedPhaseDirs(cwd) {

get-shit-done/references/model-profile-resolution.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ Look up the agent in the table for the resolved profile. Pass the model paramete
2020
Task(
2121
prompt="...",
2222
subagent_type="gsd-planner",
23-
model="{resolved_model}" # "inherit", "sonnet", or "haiku"
23+
model="{resolved_model}" # "inherit", "o4-mini", or "gpt-4.1-nano"
2424
)
2525
```
2626

27-
**Note:** Opus-tier agents resolve to `"inherit"` (not `"opus"`). This causes the agent to use the parent session's model, avoiding conflicts with organization policies that may block specific opus versions.
27+
**Note:** o3-tier agents resolve to `"inherit"` (not `"o3"`). This causes the agent to use the parent session's model, avoiding conflicts with organization policies that may block specific model versions.
2828

2929
## Usage
3030

3131
1. Resolve once at orchestration start
3232
2. Store the profile value
3333
3. Look up each agent's model from the table when spawning
34-
4. Pass model parameter to each Task call (values: `"inherit"`, `"sonnet"`, `"haiku"`)
34+
4. Pass model parameter to each Task call (values: `"inherit"`, `"o4-mini"`, `"gpt-4.1-nano"`)

get-shit-done/references/model-profiles.md

Lines changed: 35 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,39 @@ Model profiles control which Codex model each GSD agent uses. This allows balanc
44

55
## Profile Definitions
66

7-
| Agent | `quality` | `balanced` | `budget` |
8-
|-------|-----------|------------|----------|
9-
| gsd-planner | opus | opus | sonnet |
10-
| gsd-roadmapper | opus | sonnet | sonnet |
11-
| gsd-executor | opus | sonnet | sonnet |
12-
| gsd-phase-researcher | opus | sonnet | haiku |
13-
| gsd-project-researcher | opus | sonnet | haiku |
14-
| gsd-research-synthesizer | sonnet | sonnet | haiku |
15-
| gsd-debugger | opus | sonnet | sonnet |
16-
| gsd-codebase-mapper | sonnet | haiku | haiku |
17-
| gsd-verifier | sonnet | sonnet | haiku |
18-
| gsd-plan-checker | sonnet | sonnet | haiku |
19-
| gsd-integration-checker | sonnet | sonnet | haiku |
7+
| Agent | `quality` | `balanced` | `budget` |
8+
| ------------------------ | --------- | ------------ | ------------ |
9+
| gsd-planner | o3 | o3 | o4-mini |
10+
| gsd-roadmapper | o3 | o4-mini | o4-mini |
11+
| gsd-executor | o3 | o4-mini | o4-mini |
12+
| gsd-phase-researcher | o3 | o4-mini | gpt-4.1-nano |
13+
| gsd-project-researcher | o3 | o4-mini | gpt-4.1-nano |
14+
| gsd-research-synthesizer | o4-mini | o4-mini | gpt-4.1-nano |
15+
| gsd-debugger | o3 | o4-mini | o4-mini |
16+
| gsd-codebase-mapper | o4-mini | gpt-4.1-nano | gpt-4.1-nano |
17+
| gsd-verifier | o4-mini | o4-mini | gpt-4.1-nano |
18+
| gsd-plan-checker | o4-mini | o4-mini | gpt-4.1-nano |
19+
| gsd-integration-checker | o4-mini | o4-mini | gpt-4.1-nano |
2020

2121
## Profile Philosophy
2222

2323
**quality** - Maximum reasoning power
24-
- Opus for all decision-making agents
25-
- Sonnet for read-only verification
24+
25+
- o3 for all decision-making agents
26+
- o4-mini for read-only verification
2627
- Use when: quota available, critical architecture work
2728

2829
**balanced** (default) - Smart allocation
29-
- Opus only for planning (where architecture decisions happen)
30-
- Sonnet for execution and research (follows explicit instructions)
31-
- Sonnet for verification (needs reasoning, not just pattern matching)
30+
31+
- o3 only for planning (where architecture decisions happen)
32+
- o4-mini for execution and research (follows explicit instructions)
33+
- o4-mini for verification (needs reasoning, not just pattern matching)
3234
- Use when: normal development, good balance of quality and cost
3335

34-
**budget** - Minimal Opus usage
35-
- Sonnet for anything that writes code
36-
- Haiku for research and verification
36+
**budget** - Minimal o3 usage
37+
38+
- o4-mini for anything that writes code
39+
- gpt-4.1-nano for research and verification
3740
- Use when: conserving quota, high-volume work, less critical phases
3841

3942
## Resolution Logic
@@ -55,19 +58,20 @@ Override specific agents without changing the entire profile:
5558
{
5659
"model_profile": "balanced",
5760
"model_overrides": {
58-
"gsd-executor": "opus",
59-
"gsd-planner": "haiku"
61+
"gsd-executor": "o3",
62+
"gsd-planner": "gpt-4.1-nano"
6063
}
6164
}
6265
```
6366

64-
Overrides take precedence over the profile. Valid values: `opus`, `sonnet`, `haiku`.
67+
Overrides take precedence over the profile. Valid values: `o3`, `o4-mini`, `gpt-4.1-nano`.
6568

6669
## Switching Profiles
6770

6871
Runtime: `$gsd-set-profile <profile>`
6972

7073
Per-project default: Set in `.planning/config.json`:
74+
7175
```json
7276
{
7377
"model_profile": "balanced"
@@ -76,17 +80,17 @@ Per-project default: Set in `.planning/config.json`:
7680

7781
## Design Rationale
7882

79-
**Why Opus for gsd-planner?**
83+
**Why o3 for gsd-planner?**
8084
Planning involves architecture decisions, goal decomposition, and task design. This is where model quality has the highest impact.
8185

82-
**Why Sonnet for gsd-executor?**
86+
**Why o4-mini for gsd-executor?**
8387
Executors follow explicit PLAN.md instructions. The plan already contains the reasoning; execution is implementation.
8488

85-
**Why Sonnet (not Haiku) for verifiers in balanced?**
86-
Verification requires goal-backward reasoning - checking if code *delivers* what the phase promised, not just pattern matching. Sonnet handles this well; Haiku may miss subtle gaps.
89+
**Why o4-mini (not gpt-4.1-nano) for verifiers in balanced?**
90+
Verification requires goal-backward reasoning - checking if code _delivers_ what the phase promised, not just pattern matching. o4-mini handles this well; gpt-4.1-nano may miss subtle gaps.
8791

88-
**Why Haiku for gsd-codebase-mapper?**
92+
**Why gpt-4.1-nano for gsd-codebase-mapper?**
8993
Read-only exploration and pattern extraction. No reasoning required, just structured output from file contents.
9094

91-
**Why `inherit` instead of passing `opus` directly?**
92-
Codex CLI's `"opus"` alias maps to a specific model version. Organizations may block older opus versions while allowing newer ones. GSD returns `"inherit"` for opus-tier agents, causing them to use whatever opus version the user has configured in their session. This avoids version conflicts and silent fallbacks to Sonnet.
95+
**Why `inherit` instead of passing `o3` directly?**
96+
Codex CLI's `"o3"` alias maps to a specific model version. Organizations may block older versions while allowing newer ones. GSD returns `"inherit"` for o3-tier agents, causing them to use whatever model the user has configured in their session. This avoids version conflicts and silent fallbacks.

get-shit-done/workflows/help.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -309,9 +309,9 @@ Usage: `$gsd-settings`
309309
**`$gsd-set-profile <profile>`**
310310
Quick switch model profile for GSD agents.
311311

312-
- `quality`Opus everywhere except verification
313-
- `balanced`Opus for planning, Sonnet for execution (default)
314-
- `budget`Sonnet for writing, Haiku for research/verification
312+
- `quality`o3 everywhere except verification
313+
- `balanced`o3 for planning, o4-mini for execution (default)
314+
- `budget`o4-mini for writing, gpt-4.1-nano for research/verification
315315

316316
Usage: `$gsd-set-profile budget`
317317

0 commit comments

Comments
 (0)