Bladeren bron

update OpenAI defaults to GPT-5.5

Alvin Unreal 3 maanden geleden
bovenliggende
commit
f1bcf71fe0

+ 19 - 19
README.md

@@ -40,7 +40,7 @@ bunx oh-my-opencode-slim@latest install
 
 ### Getting Started
 
-The installer generates an OpenAI preset by default, using `openai/gpt-5.4` for the higher-judgment agents and `openai/gpt-5.4-mini` for the faster scoped agents.
+The installer generates an OpenAI preset by default, using `openai/gpt-5.5` for the higher-judgment agents and `openai/gpt-5.5-fast` for the faster scoped agents.
 
 Then:
 
@@ -72,12 +72,12 @@ The default generated configuration looks like this:
   },
   "presets": {
     "openai": {
-      "orchestrator": { "model": "openai/gpt-5.4", "variant": "high", "skills": ["*"], "mcps": ["*", "!context7"] },
-      "oracle": { "model": "openai/gpt-5.4", "variant": "high", "skills": ["simplify"], "mcps": [] },
-      "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "grep_app"] },
-      "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
-      "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": ["agent-browser"], "mcps": [] },
-      "fixer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] }
+      "orchestrator": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["*"], "mcps": ["*", "!context7"] },
+      "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
+      "librarian": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "grep_app"] },
+      "explorer": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [] },
+      "designer": { "model": "openai/gpt-5.5-fast", "variant": "medium", "skills": ["agent-browser"], "mcps": [] },
+      "fixer": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [] }
     }
   }
 }
@@ -148,12 +148,12 @@ If any agent fails to respond, check your provider authentication and config fil
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4</code>
+      <b>Default Model:</b> <code>openai/gpt-5.5</code>
     </td>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>openai/gpt-5.4</code> <code>anthropic/claude-opus-4.6</code>
+      <b>Recommended Models:</b> <code>openai/gpt-5.5</code> <code>anthropic/claude-opus-4.6</code>
     </td>
   </tr>
   <tr>
@@ -189,12 +189,12 @@ If any agent fails to respond, check your provider authentication and config fil
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.5-fast</code>
     </td>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
+      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.5-fast</code>
     </td>
   </tr>
   <tr>
@@ -230,12 +230,12 @@ If any agent fails to respond, check your provider authentication and config fil
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4 (high)</code>
+      <b>Default Model:</b> <code>openai/gpt-5.5 (high)</code>
     </td>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>openai/gpt-5.4 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
+      <b>Recommended Models:</b> <code>openai/gpt-5.5 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
     </td>
   </tr>
   <tr>
@@ -320,12 +320,12 @@ If any agent fails to respond, check your provider authentication and config fil
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.5-fast</code>
     </td>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
+      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.5-fast</code>
     </td>
   </tr>
   <tr>
@@ -361,7 +361,7 @@ If any agent fails to respond, check your provider authentication and config fil
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.5-fast</code>
     </td>
   </tr>
   <tr>
@@ -402,12 +402,12 @@ If any agent fails to respond, check your provider authentication and config fil
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.5-fast</code>
     </td>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
+      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.5-fast</code>
     </td>
   </tr>
   <tr>
@@ -449,7 +449,7 @@ If any agent fails to respond, check your provider authentication and config fil
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code> — <i>configure a vision-capable model to enable</i>
+      <b>Default Model:</b> <code>openai/gpt-5.5-fast</code> — <i>configure a vision-capable model to enable</i>
     </td>
   </tr>
   <tr>

+ 6 - 6
docs/authors-preset.md

@@ -10,13 +10,13 @@ This is the exact configuration the author runs day-to-day. It mixes three provi
 {
   "preset": "openai",
   "presets": {
-    "openai": { "orchestrator": { "model": "openai/gpt-5.4-fast", "skills": [ "*" ], "mcps": [ "*", "websearch"] },
-        "oracle": { "model": "openai/gpt-5.4-fast", "variant": "high", "skills": [], "mcps": [] },
-        "council": { "model": "openai/gpt-5.4" },
-        "librarian": { "model": "openai/gpt-5.3-codex-spark", "variant": "low", "skills": [], "mcps": [ "websearch", "context7", "grep_app" ] },
-        "explorer": { "model": "openai/gpt-5.3-codex-spark", "variant": "low", "skills": [], "mcps": [] },
+    "openai": { "orchestrator": { "model": "openai/gpt-5.5-fast", "skills": [ "*" ], "mcps": [ "*", "websearch"] },
+        "oracle": { "model": "openai/gpt-5.5-fast", "variant": "high", "skills": [], "mcps": [] },
+        "council": { "model": "openai/gpt-5.5" },
+        "librarian": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [ "websearch", "context7", "grep_app" ] },
+        "explorer": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [] },
         "designer": { "model": "github-copilot/gemini-3.1-pro-preview", "skills": [ "agent-browser" ], "mcps": [] },
-        "fixer": { "model": "openai/gpt-5.3-codex-spark", "variant": "low", "skills": [], "mcps": [] }
+        "fixer": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [] }
     }
   },
   "multiplexer": {

+ 2 - 2
docs/configuration.md

@@ -63,8 +63,8 @@ All config files support **JSONC** (JSON with Comments):
   /* Agent model mappings */
   "presets": {
     "openai": {
-      "oracle": { "model": "openai/gpt-5.4" },
-      "explorer": { "model": "openai/gpt-5.4-mini" },
+      "oracle": { "model": "openai/gpt-5.5" },
+      "explorer": { "model": "openai/gpt-5.5-fast" },
     },
   },
 

+ 15 - 15
docs/council.md

@@ -83,15 +83,15 @@ Add a council model and at least one council preset to your plugin config:
   "preset": "openai",
   "presets": {
     "openai": {
-      "council": { "model": "openai/gpt-5.4" }
+      "council": { "model": "openai/gpt-5.5" }
     }
   },
   "council": {
     "presets": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
+        "alpha": { "model": "openai/gpt-5.5-fast" },
         "beta": { "model": "google/gemini-3-pro" },
-        "gamma": { "model": "openai/gpt-5.3-codex" }
+        "gamma": { "model": "openai/gpt-5.5-fast" }
       }
     }
   }
@@ -119,7 +119,7 @@ Then use it directly:
     "councillor_retries": 3,
     "presets": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" }
+        "alpha": { "model": "openai/gpt-5.5-fast" }
       }
     }
   }
@@ -154,7 +154,7 @@ Configure it using the normal agent system:
 {
   "presets": {
     "openai": {
-      "council": { "model": "openai/gpt-5.4", "variant": "high" }
+      "council": { "model": "openai/gpt-5.5", "variant": "high" }
     }
   }
 }
@@ -206,13 +206,13 @@ Councillor models always come from:
 {
   "presets": {
     "openai": {
-      "council": { "model": "openai/gpt-5.4" }
+      "council": { "model": "openai/gpt-5.5" }
     }
   },
   "council": {
     "presets": {
       "second-opinion": {
-        "reviewer": { "model": "openai/gpt-5.4-mini" }
+        "reviewer": { "model": "openai/gpt-5.5-fast" }
       }
     }
   }
@@ -225,14 +225,14 @@ Councillor models always come from:
 {
   "presets": {
     "openai": {
-      "council": { "model": "openai/gpt-5.4" }
+      "council": { "model": "openai/gpt-5.5" }
     }
   },
   "council": {
     "default_preset": "balanced",
     "presets": {
       "balanced": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
+        "alpha": { "model": "openai/gpt-5.5-fast" },
         "beta": { "model": "google/gemini-3-pro" },
         "gamma": { "model": "anthropic/claude-opus-4-6" }
       }
@@ -249,8 +249,8 @@ Councillor models always come from:
     "councillor_execution_mode": "serial",
     "presets": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
-        "beta": { "model": "openai/gpt-5.4-mini" }
+        "alpha": { "model": "openai/gpt-5.5-fast" },
+        "beta": { "model": "openai/gpt-5.5-fast" }
       }
     }
   }
@@ -272,7 +272,7 @@ Each councillor can receive its own steering prompt:
     "presets": {
       "review-board": {
         "reviewer": {
-          "model": "openai/gpt-5.4-mini",
+          "model": "openai/gpt-5.5-fast",
           "prompt": "Focus on bugs, edge cases, and failure modes."
         },
         "architect": {
@@ -280,7 +280,7 @@ Each councillor can receive its own steering prompt:
           "prompt": "Focus on maintainability, boundaries, and long-term design."
         },
         "optimizer": {
-          "model": "openai/gpt-5.3-codex",
+          "model": "openai/gpt-5.5-fast",
           "prompt": "Focus on performance, latency, and resource usage."
         }
       }
@@ -319,7 +319,7 @@ Council responses include a footer like:
 
 ```text
 ---
-*Council: 2/3 councillors responded (alpha: gpt-5.4-mini, beta: gemini-3-pro)*
+*Council: 2/3 councillors responded (alpha: gpt-5.5-fast, beta: gemini-3-pro)*
 ```
 
 ---
@@ -377,7 +377,7 @@ Prefer this instead:
 {
   "presets": {
     "openai": {
-      "council": { "model": "openai/gpt-5.4" }
+      "council": { "model": "openai/gpt-5.5" }
     }
   }
 }

+ 1 - 1
docs/installation.md

@@ -56,7 +56,7 @@ bunx oh-my-opencode-slim@latest install --reset
 
 ### After Installation
 
-The installer generates an OpenAI configuration by default (using `gpt-5.4` and `gpt-5.4-mini` models). To switch providers or build a mixed setup, use **[Configuration Reference](configuration.md)** for the full option reference and the preset docs for copyable examples.
+The installer generates an OpenAI configuration by default (using `gpt-5.5` and `gpt-5.5-fast` models). To switch providers or build a mixed setup, use **[Configuration Reference](configuration.md)** for the full option reference and the preset docs for copyable examples.
 
 Then:
 

+ 5 - 5
docs/preset-switching.md

@@ -22,11 +22,11 @@ Switch agent model presets at runtime without restarting OpenCode using the `/pr
   "presets": {
     "cheap": {
       "orchestrator": { "model": "anthropic/claude-3.5-haiku" },
-      "explorer": { "model": "openai/gpt-5.4-mini" },
+      "explorer": { "model": "openai/gpt-5.5-fast" },
       "oracle": { "model": "anthropic/claude-sonnet-4-6" }
     },
     "powerful": {
-      "orchestrator": { "model": "openai/gpt-5.4" },
+      "orchestrator": { "model": "openai/gpt-5.5" },
       "oracle": { "model": "anthropic/claude-opus-4-6" },
       "librarian": { "model": "anthropic/claude-sonnet-4-6" }
     },
@@ -75,10 +75,10 @@ On restart, the plugin's `config()` hook re-applies the preset from the config f
 Available presets:
   cheap ← active
     orchestrator → anthropic/claude-3.5-haiku
-    explorer → openai/gpt-5.4-mini
+    explorer → openai/gpt-5.5-fast
     oracle → anthropic/claude-sonnet-4-6
   powerful
-    orchestrator → openai/gpt-5.4
+    orchestrator → openai/gpt-5.5
     oracle → anthropic/claude-opus-4-6
 
 Usage: /preset <name> to switch.
@@ -90,7 +90,7 @@ Usage: /preset <name> to switch.
 
 ```
 Switched to preset "powerful":
-orchestrator → model: openai/gpt-5.4
+orchestrator → model: openai/gpt-5.5
 oracle → model: anthropic/claude-opus-4-6
 ```
 

+ 7 - 7
docs/thirty-dollars-preset.md

@@ -12,13 +12,13 @@ It uses Codex Plus for the OpenAI models and GitHub Copilot for the premium coun
 {
     "preset": "thirtydollars",
     "presets": {
-      "thirtydollars": { "orchestrator": { "model": "openai/gpt-5.4", "skills": [ "*" ], "mcps": [ "*", "websearch"] },
-        "oracle": { "model": "openai/gpt-5.4", "variant": "high", "skills": [], "mcps": [] },
-        "council": { "model": "openai/gpt-5.4" },
-        "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [ "websearch", "context7", "grep_app" ] },
-        "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
+      "thirtydollars": { "orchestrator": { "model": "openai/gpt-5.5", "skills": [ "*" ], "mcps": [ "*", "websearch"] },
+        "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": [], "mcps": [] },
+        "council": { "model": "openai/gpt-5.5" },
+        "librarian": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [ "websearch", "context7", "grep_app" ] },
+        "explorer": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [] },
         "designer": { "model": "github-copilot/gemini-3.1-pro-preview", "skills": [ "agent-browser" ], "mcps": [] },
-        "fixer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] }
+        "fixer": { "model": "openai/gpt-5.5-fast", "variant": "low", "skills": [], "mcps": [] }
       }
     },
    "council": {
@@ -26,7 +26,7 @@ It uses Codex Plus for the OpenAI models and GitHub Copilot for the premium coun
         "default": {
           "alpha":  { "model": "github-copilot/claude-sonnet-4.6" },
           "beta": { "model": "github-copilot/gemini-3.1-pro-preview" },
-          "gamma": { "model": "openai/gpt-5.4" }
+          "gamma": { "model": "openai/gpt-5.5" }
         }
       }
     }

+ 8 - 8
src/agents/council.test.ts

@@ -15,7 +15,7 @@ describe('formatCouncillorResults', () => {
       },
       {
         name: 'beta',
-        model: 'openai/gpt-5.4',
+        model: 'openai/gpt-5.5',
         status: 'completed',
         result:
           'Consider Fastify for better performance and built-in type validation.',
@@ -30,7 +30,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain('**Original Prompt**:');
     expect(formatted).toContain(originalPrompt);
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
-    expect(formatted).toContain('**beta** (gpt-5.4):');
+    expect(formatted).toContain('**beta** (gpt-5.5):');
     expect(formatted).toContain(
       'Use Express.js with TypeScript interfaces for type safety.',
     );
@@ -54,7 +54,7 @@ describe('formatCouncillorResults', () => {
       },
       {
         name: 'beta',
-        model: 'openai/gpt-5.4',
+        model: 'openai/gpt-5.5',
         status: 'timed_out',
         error: 'Request timed out after 180000ms',
       },
@@ -83,7 +83,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain(
       '**gamma**: failed — Provider returned empty response',
     );
-    expect(formatted).not.toContain('**beta** (gpt-5.4):');
+    expect(formatted).not.toContain('**beta** (gpt-5.5):');
     expect(formatted).not.toContain('**gamma** (gemini-pro):');
   });
 
@@ -97,7 +97,7 @@ describe('formatCouncillorResults', () => {
       },
       {
         name: 'beta',
-        model: 'openai/gpt-5.4',
+        model: 'openai/gpt-5.5',
         status: 'error',
         error: 'Provider error',
       },
@@ -113,7 +113,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain('**Councillor Responses**:');
     expect(formatted).toContain('All councillors failed to produce output:');
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
-    expect(formatted).toContain('**beta** (gpt-5.4):');
+    expect(formatted).toContain('**beta** (gpt-5.5):');
     expect(formatted).toContain('Request timed out');
     expect(formatted).toContain('Provider error');
   });
@@ -128,7 +128,7 @@ describe('formatCouncillorResults', () => {
       },
       {
         name: 'beta',
-        model: 'openai/gpt-5.4',
+        model: 'openai/gpt-5.5',
         status: 'completed',
         result: 'Another valid response',
       },
@@ -141,7 +141,7 @@ describe('formatCouncillorResults', () => {
 
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
     expect(formatted).toContain('Valid response');
-    expect(formatted).toContain('**beta** (gpt-5.4):');
+    expect(formatted).toContain('**beta** (gpt-5.5):');
     expect(formatted).toContain('Another valid response');
     expect(formatted).toContain(
       'Synthesize the optimal response based on the above.',

+ 7 - 7
src/agents/custom.test.ts

@@ -6,9 +6,9 @@ describe('custom-agent creation', () => {
   test('infers custom agents from unknown keys', () => {
     const config: PluginConfig = {
       agents: {
-        explorer: { model: 'openai/gpt-5.4-mini' },
+        explorer: { model: 'openai/gpt-5.5-fast' },
         reviewer: {
-          model: 'openai/gpt-5.4',
+          model: 'openai/gpt-5.5',
           prompt: 'You are the custom reviewer agent.',
         },
       },
@@ -21,7 +21,7 @@ describe('custom-agent creation', () => {
 
     const customAgent = agents.find((agent) => agent.name === 'reviewer');
     expect(customAgent).toBeDefined();
-    expect(customAgent?.config.model).toBe('openai/gpt-5.4');
+    expect(customAgent?.config.model).toBe('openai/gpt-5.5');
     expect(customAgent?.config.prompt).toBe(
       'You are the custom reviewer agent.',
     );
@@ -31,7 +31,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
       agents: {
         'test-auditor': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.5-fast',
           prompt: 'You are a custom subagent for auditing.',
           orchestratorPrompt:
             '@test-auditor\n- Role: Compliance audit specialist',
@@ -83,7 +83,7 @@ describe('custom-agent creation', () => {
       disabled_agents: ['test-auditor', 'designer'],
       agents: {
         'test-auditor': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.5-fast',
           prompt: 'You are a disabled custom agent.',
         },
       },
@@ -101,7 +101,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
       agents: {
         'unsafe/name': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.5-fast',
         },
       },
     };
@@ -113,7 +113,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
       agents: {
         janitor: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.5-fast',
           orchestratorPrompt: '@cleanup\n- Role: Cleanup specialist',
         },
       },

+ 23 - 23
src/agents/index.test.ts

@@ -395,12 +395,12 @@ describe('council agent model resolution', () => {
     // entry in the agent preset — the exact scenario from issue #369.
     const config: PluginConfig = {
       agents: {
-        oracle: { model: 'openai/gpt-5.4' },
+        oracle: { model: 'openai/gpt-5.5' },
       },
       council: {
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.5-fast' },
           },
         },
         _legacyMasterModel: 'anthropic/claude-opus-4-6',
@@ -420,7 +420,7 @@ describe('council agent model resolution', () => {
       council: {
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.5-fast' },
           },
         },
         _legacyMasterModel: 'anthropic/claude-opus-4-6',
@@ -437,7 +437,7 @@ describe('council agent model resolution', () => {
       council: {
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.5-fast' },
           },
         },
       },
@@ -455,7 +455,7 @@ describe('council agent model resolution', () => {
       master: { model: 'anthropic/claude-opus-4-6' },
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
         },
       },
     };
@@ -480,7 +480,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.4',
+          model: 'openai/gpt-5.5',
           options: { textVerbosity: 'low' },
         },
       },
@@ -512,7 +512,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.4',
+          model: 'openai/gpt-5.5',
           variant: 'high',
           temperature: 0.7,
           options: { textVerbosity: 'low', reasoningEffort: 'medium' },
@@ -521,7 +521,7 @@ describe('options passthrough', () => {
     };
     const agents = createAgents(config);
     const oracle = agents.find((a) => a.name === 'oracle');
-    expect(oracle?.config.model).toBe('openai/gpt-5.4');
+    expect(oracle?.config.model).toBe('openai/gpt-5.5');
     expect(oracle?.config.variant).toBe('high');
     expect(oracle?.config.temperature).toBe(0.7);
     expect(oracle?.config.options).toEqual({
@@ -533,7 +533,7 @@ describe('options passthrough', () => {
   test('options are absent when not configured', () => {
     const config: PluginConfig = {
       agents: {
-        oracle: { model: 'openai/gpt-5.4' },
+        oracle: { model: 'openai/gpt-5.5' },
       },
     };
     const agents = createAgents(config);
@@ -545,7 +545,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.4',
+          model: 'openai/gpt-5.5',
           options: { textVerbosity: 'low' },
         },
       },
@@ -559,7 +559,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.4',
+          model: 'openai/gpt-5.5',
           options: { reasoningEffort: 'medium' },
         },
       },
@@ -595,7 +595,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('accepts options alongside other fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.4',
+      model: 'openai/gpt-5.5',
       variant: 'high',
       temperature: 0.7,
       options: { textVerbosity: 'low' },
@@ -608,7 +608,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('config without options is valid', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.4',
+      model: 'openai/gpt-5.5',
     });
     expect(result.success).toBe(true);
     if (result.success) {
@@ -632,7 +632,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('accepts prompt and orchestratorPrompt override fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.4',
+      model: 'openai/gpt-5.5',
       prompt: 'You are a specialized reviewer.',
       orchestratorPrompt: '@reviewer\n- Role: Specialized reviewer',
     });
@@ -647,7 +647,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('rejects empty prompt fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.4',
+      model: 'openai/gpt-5.5',
       prompt: '',
     });
     expect(result.success).toBe(false);
@@ -655,7 +655,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('rejects empty orchestratorPrompt fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.4',
+      model: 'openai/gpt-5.5',
       orchestratorPrompt: '',
     });
     expect(result.success).toBe(false);
@@ -663,7 +663,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('rejects description field on overrides', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.4',
+      model: 'openai/gpt-5.5',
       description: 'not supported for custom agents',
     } as Record<string, unknown>);
     expect(result.success).toBe(false);
@@ -675,7 +675,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
       agents: {
         oracle: {
-          model: 'openai/gpt-5.4',
+          model: 'openai/gpt-5.5',
           prompt: 'ignored built-in prompt override',
         },
       },
@@ -688,7 +688,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
       agents: {
         explorer: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.5-fast',
           orchestratorPrompt: '@explorer\n- Role: should be invalid here',
         },
       },
@@ -702,7 +702,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
       presets: {
         openai: {
           oracle: {
-            model: 'openai/gpt-5.4',
+            model: 'openai/gpt-5.5',
             prompt: 'ignored preset built-in prompt override',
           },
         },
@@ -716,7 +716,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
       agents: {
         janitor: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.5-fast',
           prompt: 'You are Janitor.',
           orchestratorPrompt: '@janitor\n- Role: Cleanup specialist',
         },
@@ -809,8 +809,8 @@ describe('disabled_agents', () => {
     const config: PluginConfig = {
       disabled_agents: ['janitor'],
       agents: {
-        janitor: { model: 'openai/gpt-5.4-mini' },
-        reviewer: { model: 'openai/gpt-5.4-mini' },
+        janitor: { model: 'openai/gpt-5.5-fast' },
+        reviewer: { model: 'openai/gpt-5.5-fast' },
       },
     };
 

+ 1 - 1
src/cli/install.ts

@@ -239,7 +239,7 @@ async function runInstall(config: InstallConfig): Promise<number> {
   console.log();
 
   const modelsInfo =
-    'Default configuration uses OpenAI models (gpt-5.4 / gpt-5.4-mini).';
+    'Default configuration uses OpenAI models (gpt-5.5 / gpt-5.5-fast).';
   console.log(`${modelsInfo}`);
   const altProviders = 'For the full configuration reference, see:';
   console.log(altProviders);

+ 6 - 6
src/cli/providers.test.ts

@@ -23,9 +23,9 @@ describe('providers', () => {
     expect(config.preset).toBe('openai');
     const agents = (config.presets as any).openai;
     expect(agents).toBeDefined();
-    expect(agents.orchestrator.model).toBe('openai/gpt-5.4');
+    expect(agents.orchestrator.model).toBe('openai/gpt-5.5');
     expect(agents.orchestrator.variant).toBeUndefined();
-    expect(agents.fixer.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.fixer.model).toBe('openai/gpt-5.5-fast');
     expect(agents.fixer.variant).toBe('low');
   });
 
@@ -41,13 +41,13 @@ describe('providers', () => {
     expect(agents.orchestrator.model).toBe(
       MODEL_MAPPINGS.openai.orchestrator.model,
     );
-    expect(agents.oracle.model).toBe('openai/gpt-5.4');
+    expect(agents.oracle.model).toBe('openai/gpt-5.5');
     expect(agents.oracle.variant).toBe('high');
-    expect(agents.librarian.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.librarian.model).toBe('openai/gpt-5.5-fast');
     expect(agents.librarian.variant).toBe('low');
-    expect(agents.explorer.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.explorer.model).toBe('openai/gpt-5.5-fast');
     expect(agents.explorer.variant).toBe('low');
-    expect(agents.designer.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.designer.model).toBe('openai/gpt-5.5-fast');
     expect(agents.designer.variant).toBe('medium');
   });
 

+ 6 - 6
src/cli/providers.ts

@@ -9,12 +9,12 @@ const SCHEMA_URL =
 // Model mappings by provider - only 4 supported providers
 export const MODEL_MAPPINGS = {
   openai: {
-    orchestrator: { model: 'openai/gpt-5.4' },
-    oracle: { model: 'openai/gpt-5.4', variant: 'high' },
-    librarian: { model: 'openai/gpt-5.4-mini', variant: 'low' },
-    explorer: { model: 'openai/gpt-5.4-mini', variant: 'low' },
-    designer: { model: 'openai/gpt-5.4-mini', variant: 'medium' },
-    fixer: { model: 'openai/gpt-5.4-mini', variant: 'low' },
+    orchestrator: { model: 'openai/gpt-5.5' },
+    oracle: { model: 'openai/gpt-5.5', variant: 'high' },
+    librarian: { model: 'openai/gpt-5.5-fast', variant: 'low' },
+    explorer: { model: 'openai/gpt-5.5-fast', variant: 'low' },
+    designer: { model: 'openai/gpt-5.5-fast', variant: 'medium' },
+    fixer: { model: 'openai/gpt-5.5-fast', variant: 'low' },
   },
   kimi: {
     orchestrator: { model: 'kimi-for-coding/k2p5' },

+ 8 - 8
src/config/constants.ts

@@ -69,14 +69,14 @@ export const SUBAGENT_DELEGATION_RULES: Record<AgentName, readonly string[]> = {
 // orchestrator is undefined so its model is fully resolved at runtime via priority fallback
 export const DEFAULT_MODELS: Record<AgentName, string | undefined> = {
   orchestrator: undefined,
-  oracle: 'openai/gpt-5.4',
-  librarian: 'openai/gpt-5.4-mini',
-  explorer: 'openai/gpt-5.4-mini',
-  designer: 'openai/gpt-5.4-mini',
-  fixer: 'openai/gpt-5.4-mini',
-  observer: 'openai/gpt-5.4-mini',
-  council: 'openai/gpt-5.4-mini',
-  councillor: 'openai/gpt-5.4-mini',
+  oracle: 'openai/gpt-5.5',
+  librarian: 'openai/gpt-5.5-fast',
+  explorer: 'openai/gpt-5.5-fast',
+  designer: 'openai/gpt-5.5-fast',
+  fixer: 'openai/gpt-5.5-fast',
+  observer: 'openai/gpt-5.5-fast',
+  council: 'openai/gpt-5.5-fast',
+  councillor: 'openai/gpt-5.5-fast',
 };
 
 // Polling configuration

+ 26 - 26
src/config/council-schema.test.ts

@@ -9,7 +9,7 @@ import {
 describe('CouncillorConfigSchema', () => {
   test('validates config with model and optional variant', () => {
     const goodConfig: CouncillorConfig = {
-      model: 'openai/gpt-5.4-mini',
+      model: 'openai/gpt-5.5-fast',
       variant: 'low',
     };
 
@@ -24,10 +24,10 @@ describe('CouncillorConfigSchema', () => {
     const config = {
       master: { model: 'anthropic/claude-opus-4-6' },
       master_timeout: 300000,
-      master_fallback: ['openai/gpt-5.4'],
+      master_fallback: ['openai/gpt-5.5'],
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
         },
       },
     };
@@ -54,7 +54,7 @@ describe('CouncillorConfigSchema', () => {
     const config = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
         },
       },
     };
@@ -92,8 +92,8 @@ test('unwraps legacy nested "councillors" key in preset', () => {
     presets: {
       default: {
         councillors: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
-          beta: { model: 'openai/gpt-5.3-codex' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
+          beta: { model: 'openai/gpt-5.5-fast' },
         },
       },
     },
@@ -105,8 +105,8 @@ test('unwraps legacy nested "councillors" key in preset', () => {
   if (result.success) {
     const preset = result.data.presets.default;
     expect(Object.keys(preset)).toEqual(['alpha', 'beta']);
-    expect(preset.alpha.model).toBe('openai/gpt-5.4-mini');
-    expect(preset.beta.model).toBe('openai/gpt-5.3-codex');
+    expect(preset.alpha.model).toBe('openai/gpt-5.5-fast');
+    expect(preset.beta.model).toBe('openai/gpt-5.5-fast');
   }
 });
 
@@ -115,7 +115,7 @@ test('mixed legacy "councillors" and flat keys in same preset', () => {
     presets: {
       mixed: {
         councillors: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
         },
         beta: { model: 'google/gemini-3-pro' },
       },
@@ -138,7 +138,7 @@ test('deprecated master with non-standard model ID still parses', () => {
     master_fallback: 'all', // not an array
     presets: {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
+        alpha: { model: 'openai/gpt-5.5-fast' },
       },
     },
   };
@@ -162,7 +162,7 @@ test('legacyMasterModel undefined when master.model is not a string', () => {
     master: { model: 42 }, // not a string
     presets: {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
+        alpha: { model: 'openai/gpt-5.5-fast' },
       },
     },
   };
@@ -180,7 +180,7 @@ test('legacyMasterModel undefined when master is not an object', () => {
     master: 'oops', // not an object
     presets: {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
+        alpha: { model: 'openai/gpt-5.5-fast' },
       },
     },
   };
@@ -204,7 +204,7 @@ test('rejects empty model string', () => {
 
 test('accepts optional prompt field', () => {
   const config: CouncillorConfig = {
-    model: 'openai/gpt-5.4-mini',
+    model: 'openai/gpt-5.5-fast',
     prompt: 'Focus on security implications and edge cases.',
   };
 
@@ -219,7 +219,7 @@ test('accepts optional prompt field', () => {
 
 test('prompt is optional and defaults to undefined', () => {
   const config: CouncillorConfig = {
-    model: 'openai/gpt-5.4-mini',
+    model: 'openai/gpt-5.5-fast',
   };
 
   const result = CouncillorConfigSchema.safeParse(config);
@@ -233,10 +233,10 @@ describe('CouncilPresetSchema', () => {
   test('validates a named preset with multiple councillors', () => {
     const raw = {
       alpha: {
-        model: 'openai/gpt-5.4-mini',
+        model: 'openai/gpt-5.5-fast',
       },
       beta: {
-        model: 'openai/gpt-5.3-codex',
+        model: 'openai/gpt-5.5-fast',
         variant: 'low',
       },
       gamma: {
@@ -254,7 +254,7 @@ describe('CouncilPresetSchema', () => {
   test('accepts preset with single councillor', () => {
     const raw = {
       solo: {
-        model: 'openai/gpt-5.4-mini',
+        model: 'openai/gpt-5.5-fast',
       },
     };
 
@@ -281,8 +281,8 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
-          beta: { model: 'openai/gpt-5.3-codex' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
+          beta: { model: 'openai/gpt-5.5-fast' },
           gamma: { model: 'google/gemini-3-pro' },
         },
       },
@@ -302,7 +302,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         custom: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
         },
       },
       default_preset: 'custom',
@@ -328,7 +328,7 @@ describe('CouncilConfigSchema', () => {
     const badConfig = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
         },
       },
       timeout: -1000,
@@ -342,7 +342,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
         },
       },
       timeout: 0,
@@ -371,18 +371,18 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
-          beta: { model: 'openai/gpt-5.3-codex' },
+          alpha: { model: 'openai/gpt-5.5-fast' },
+          beta: { model: 'openai/gpt-5.5-fast' },
         },
         fast: {
-          quick: { model: 'openai/gpt-5.4-mini', variant: 'low' },
+          quick: { model: 'openai/gpt-5.5-fast', variant: 'low' },
         },
         thorough: {
           detailed1: {
             model: 'anthropic/claude-opus-4-6',
             prompt: 'Provide detailed analysis with citations.',
           },
-          detailed2: { model: 'openai/gpt-5.4' },
+          detailed2: { model: 'openai/gpt-5.5' },
         },
       },
     };

+ 6 - 6
src/config/council-schema.ts

@@ -8,7 +8,7 @@ const ModelIdSchema = z
   .string()
   .regex(
     /^[^/\s]+\/[^\s]+$/,
-    'Expected provider/model format (e.g. "openai/gpt-5.4-mini")',
+    'Expected provider/model format (e.g. "openai/gpt-5.5-fast")',
   );
 
 /**
@@ -21,7 +21,7 @@ const ModelIdSchema = z
  */
 export const CouncillorConfigSchema = z.object({
   model: ModelIdSchema.describe(
-    'Model ID in provider/model format (e.g. "openai/gpt-5.4-mini")',
+    'Model ID in provider/model format (e.g. "openai/gpt-5.5-fast")',
   ),
   variant: z.string().optional(),
   prompt: z
@@ -110,8 +110,8 @@ export const CouncillorExecutionModeSchema = z
  *   "council": {
  *     "presets": {
  *       "default": {
- *         "alpha": { "model": "openai/gpt-5.4-mini" },
- *         "beta":  { "model": "openai/gpt-5.3-codex" },
+ *         "alpha": { "model": "openai/gpt-5.5-fast" },
+ *         "beta":  { "model": "openai/gpt-5.5-fast" },
  *         "gamma": { "model": "google/gemini-3-pro" }
  *       }
  *     },
@@ -203,8 +203,8 @@ export type CouncillorExecutionMode = z.infer<
 export const DEFAULT_COUNCIL_CONFIG: z.input<typeof CouncilConfigSchema> = {
   presets: {
     default: {
-      alpha: { model: 'openai/gpt-5.4-mini' },
-      beta: { model: 'openai/gpt-5.3-codex' },
+      alpha: { model: 'openai/gpt-5.5-fast' },
+      beta: { model: 'openai/gpt-5.5-fast' },
       gamma: { model: 'google/gemini-3-pro' },
     },
   },

+ 15 - 15
src/config/loader.test.ts

@@ -119,37 +119,37 @@ describe('loadPluginConfig', () => {
       JSON.stringify({
         manualPlan: {
           orchestrator: {
-            primary: 'openai/gpt-5.4',
+            primary: 'openai/gpt-5.5',
             fallback1: 'anthropic/claude-opus-4-6',
             fallback2: 'chutes/kimi-k2.5',
             fallback3: 'opencode/gpt-5-nano',
           },
           oracle: {
-            primary: 'openai/gpt-5.4',
+            primary: 'openai/gpt-5.5',
             fallback1: 'anthropic/claude-opus-4-6',
             fallback2: 'chutes/Qwen/Qwen3-Coder-480B-A35B-Instruct-FP8-TEE',
             fallback3: 'opencode/gpt-5-nano',
           },
           designer: {
-            primary: 'openai/gpt-5.4',
+            primary: 'openai/gpt-5.5',
             fallback1: 'anthropic/claude-opus-4-6',
             fallback2: 'chutes/kimi-k2.5',
             fallback3: 'opencode/gpt-5-nano',
           },
           explorer: {
-            primary: 'openai/gpt-5.4',
+            primary: 'openai/gpt-5.5',
             fallback1: 'anthropic/claude-opus-4-6',
             fallback2: 'chutes/kimi-k2.5',
             fallback3: 'opencode/gpt-5-nano',
           },
           librarian: {
-            primary: 'openai/gpt-5.4',
+            primary: 'openai/gpt-5.5',
             fallback1: 'anthropic/claude-opus-4-6',
             fallback2: 'chutes/kimi-k2.5',
             fallback3: 'opencode/gpt-5-nano',
           },
           fixer: {
-            primary: 'openai/gpt-5.4',
+            primary: 'openai/gpt-5.5',
             fallback1: 'anthropic/claude-opus-4-6',
             fallback2: 'chutes/kimi-k2.5',
             fallback3: 'opencode/gpt-5-nano',
@@ -194,7 +194,7 @@ describe('loadPluginConfig', () => {
       JSON.stringify({
         agents: {
           oracle: {
-            model: 'openai/gpt-5.4',
+            model: 'openai/gpt-5.5',
             prompt: 'This should be rejected for built-in agents.',
           },
         },
@@ -451,7 +451,7 @@ describe('deepMerge behavior', () => {
         fallback: {
           timeoutMs: 15000,
           chains: {
-            oracle: ['openai/gpt-5.4', 'opencode/glm-4.7-free'],
+            oracle: ['openai/gpt-5.5', 'opencode/glm-4.7-free'],
           },
         },
       }),
@@ -474,7 +474,7 @@ describe('deepMerge behavior', () => {
     const config = loadPluginConfig(projectDir);
     expect(config.fallback?.timeoutMs).toBe(15000);
     expect(config.fallback?.chains.oracle).toEqual([
-      'openai/gpt-5.4',
+      'openai/gpt-5.5',
       'opencode/glm-4.7-free',
     ]);
     expect(config.fallback?.chains.explorer).toEqual([
@@ -491,14 +491,14 @@ describe('deepMerge behavior', () => {
       JSON.stringify({
         fallback: {
           chains: {
-            writing: ['openai/gpt-5.4'],
+            writing: ['openai/gpt-5.5'],
           },
         },
       }),
     );
 
     const config = loadPluginConfig(projectDir);
-    expect(config.fallback?.chains.writing).toEqual(['openai/gpt-5.4']);
+    expect(config.fallback?.chains.writing).toEqual(['openai/gpt-5.5']);
   });
 });
 
@@ -692,7 +692,7 @@ describe('preset resolution', () => {
         presets: {
           openai: {
             oracle: {
-              model: 'openai/gpt-5.4',
+              model: 'openai/gpt-5.5',
               options: { textVerbosity: 'low' },
             },
           },
@@ -706,7 +706,7 @@ describe('preset resolution', () => {
     );
 
     const config = loadPluginConfig(projectDir);
-    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.4');
+    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.5');
     // deepMerge should combine both option keys
     expect(config.agents?.oracle?.options).toEqual({
       textVerbosity: 'low',
@@ -753,7 +753,7 @@ describe('preset resolution', () => {
         presets: {
           concise: {
             oracle: {
-              model: 'openai/gpt-5.4',
+              model: 'openai/gpt-5.5',
               options: { textVerbosity: 'low' },
             },
           },
@@ -767,7 +767,7 @@ describe('preset resolution', () => {
     );
 
     const config = loadPluginConfig(projectDir);
-    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.4');
+    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.5');
     // root wins over preset for same key
     expect(config.agents?.oracle?.options).toEqual({
       textVerbosity: 'high',

+ 10 - 10
src/config/utils.test.ts

@@ -6,33 +6,33 @@ describe('getAgentOverride', () => {
   test('reads override by explicit custom agent key', () => {
     const config = {
       agents: {
-        'custom-reviewer': { model: 'openai/gpt-5.4-mini' },
+        'custom-reviewer': { model: 'openai/gpt-5.5-fast' },
       },
     } as PluginConfig;
 
     const override = getAgentOverride(config, 'custom-reviewer');
 
     expect(override).toBeDefined();
-    expect(override?.model).toBe('openai/gpt-5.4-mini');
+    expect(override?.model).toBe('openai/gpt-5.5-fast');
   });
 
   test('reads override from legacy alias when mapped', () => {
     const config = {
       agents: {
-        explore: { model: 'openai/gpt-5.4-mini' },
+        explore: { model: 'openai/gpt-5.5-fast' },
       },
     } as PluginConfig;
 
     const override = getAgentOverride(config, 'explorer');
 
     expect(override).toBeDefined();
-    expect(override?.model).toBe('openai/gpt-5.4-mini');
+    expect(override?.model).toBe('openai/gpt-5.5-fast');
   });
 
   test('returns undefined when no override exists', () => {
     const config = {
       agents: {
-        explorer: { model: 'openai/gpt-5.4-mini' },
+        explorer: { model: 'openai/gpt-5.5-fast' },
       },
     } as PluginConfig;
 
@@ -44,9 +44,9 @@ describe('getCustomAgentNames', () => {
   test('returns only unknown non-alias agent keys', () => {
     const config = {
       agents: {
-        explorer: { model: 'openai/gpt-5.4-mini' },
-        explore: { model: 'openai/gpt-5.4-mini' },
-        janitor: { model: 'openai/gpt-5.4-mini' },
+        explorer: { model: 'openai/gpt-5.5-fast' },
+        explore: { model: 'openai/gpt-5.5-fast' },
+        janitor: { model: 'openai/gpt-5.5-fast' },
       },
     } as PluginConfig;
 
@@ -56,8 +56,8 @@ describe('getCustomAgentNames', () => {
   test('returns an empty list when no custom agents exist', () => {
     const config = {
       agents: {
-        explorer: { model: 'openai/gpt-5.4-mini' },
-        oracle: { model: 'openai/gpt-5.4' },
+        explorer: { model: 'openai/gpt-5.5-fast' },
+        oracle: { model: 'openai/gpt-5.5' },
       },
     } as PluginConfig;
 

+ 27 - 27
src/council/council-manager.test.ts

@@ -58,8 +58,8 @@ function createTestCouncilConfig(overrides?: {
   const councilConfig = CouncilConfigSchema.parse({
     presets: overrides?.presets ?? {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
-        beta: { model: 'openai/gpt-5.3-codex' },
+        alpha: { model: 'openai/gpt-5.5-fast' },
+        beta: { model: 'openai/gpt-5.5-fast' },
       },
     },
     default_preset: overrides?.default_preset,
@@ -142,10 +142,10 @@ describe('CouncilManager', () => {
       const config = createTestCouncilConfig({
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.5-fast' },
           },
           custom: {
-            beta: { model: 'openai/gpt-5.3-codex' },
+            beta: { model: 'openai/gpt-5.5-fast' },
           },
         },
         default_preset: 'custom',
@@ -190,8 +190,8 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              councillor1: { model: 'openai/gpt-5.4-mini' },
-              councillor2: { model: 'openai/gpt-5.3-codex' },
+              councillor1: { model: 'openai/gpt-5.5-fast' },
+              councillor2: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -234,10 +234,10 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
             custom: {
-              beta: { model: 'openai/gpt-5.3-codex' },
+              beta: { model: 'openai/gpt-5.5-fast' },
             },
           },
           default_preset: 'custom',
@@ -283,8 +283,8 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              timeout: { model: 'openai/gpt-5.4-mini' },
-              success: { model: 'openai/gpt-5.3-codex' },
+              timeout: { model: 'openai/gpt-5.5-fast' },
+              success: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -327,7 +327,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini', variant: 'low' },
+              alpha: { model: 'openai/gpt-5.5-fast', variant: 'low' },
             },
           },
         },
@@ -362,8 +362,8 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
-              beta: { model: 'openai/gpt-5.3-codex' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
+              beta: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -422,7 +422,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -458,10 +458,10 @@ describe('CouncilManager', () => {
       const defaultConfig = createTestCouncilConfig({
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.5-fast' },
           },
           fast: {
-            beta: { model: 'openai/gpt-5.3-codex' },
+            beta: { model: 'openai/gpt-5.5-fast' },
           },
         },
       });
@@ -506,10 +506,10 @@ describe('CouncilManager', () => {
       const config = createTestCouncilConfig({
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.5-fast' },
           },
           roled: {
-            beta: { model: 'openai/gpt-5.3-codex' },
+            beta: { model: 'openai/gpt-5.5-fast' },
           },
         },
       });
@@ -592,7 +592,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -604,9 +604,9 @@ describe('CouncilManager', () => {
       const createCalls = ctx.client.session.create.mock.calls as Array<
         [{ body?: { title?: string } }]
       >;
-      // Councillor title: "Council alpha (gpt-5.4-mini)"
+      // Councillor title: "Council alpha (gpt-5.5-fast)"
       expect(createCalls[0][0].body?.title).toBe(
-        'Council alpha (gpt-5.4-mini)',
+        'Council alpha (gpt-5.5-fast)',
       );
     });
 
@@ -626,7 +626,7 @@ describe('CouncilManager', () => {
           presets: {
             default: {
               alpha: {
-                model: 'openai/gpt-5.4-mini',
+                model: 'openai/gpt-5.5-fast',
                 prompt: 'You are a meticulous reviewer focused on edge cases.',
               },
             },
@@ -673,7 +673,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -746,7 +746,7 @@ describe('CouncilManager', () => {
           councillor_retries: 1,
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -794,7 +794,7 @@ describe('CouncilManager', () => {
           councillor_retries: 2,
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -825,7 +825,7 @@ describe('CouncilManager', () => {
           councillor_retries: 1,
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },
@@ -867,7 +867,7 @@ describe('CouncilManager', () => {
           councillor_retries: 1,
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.5-fast' },
             },
           },
         },

+ 1 - 1
src/tools/council.test.ts

@@ -147,7 +147,7 @@ describe('council_session tool', () => {
         councillorResults: [
           {
             name: 'alpha',
-            model: 'openai/gpt-5.4-mini',
+            model: 'openai/gpt-5.5-fast',
             status: 'completed',
             result: 'Alpha says yes',
           },

+ 1 - 1
src/tools/council.ts

@@ -10,7 +10,7 @@ const z = tool.schema;
 
 /**
  * Formats the model composition string for the council footer.
- * Shows short model labels per councillor: "α: gpt-5.4-mini, β: gemini-3-pro"
+ * Shows short model labels per councillor: "α: gpt-5.5-fast, β: gemini-3-pro"
  */
 function formatModelComposition(
   councillorResults: Array<{ name: string; model: string }>,

+ 6 - 6
src/tools/preset-manager.test.ts

@@ -50,7 +50,7 @@ describe('createPresetManager', () => {
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
           },
           powerful: {
-            orchestrator: { model: 'openai/gpt-5.4' },
+            orchestrator: { model: 'openai/gpt-5.5' },
           },
         },
       };
@@ -74,7 +74,7 @@ describe('createPresetManager', () => {
         preset: 'cheap',
         presets: {
           cheap: { orchestrator: { model: 'anthropic/claude-3.5-haiku' } },
-          powerful: { orchestrator: { model: 'openai/gpt-5.4' } },
+          powerful: { orchestrator: { model: 'openai/gpt-5.5' } },
         },
       };
       const manager = createPresetManager(ctx, config);
@@ -110,7 +110,7 @@ describe('createPresetManager', () => {
         presets: {
           cheap: {
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
-            explorer: { model: 'openai/gpt-5.4-mini' },
+            explorer: { model: 'openai/gpt-5.5-fast' },
           },
         },
       };
@@ -132,7 +132,7 @@ describe('createPresetManager', () => {
         body: {
           agent: {
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
-            explorer: { model: 'openai/gpt-5.4-mini' },
+            explorer: { model: 'openai/gpt-5.5-fast' },
           },
         },
       });
@@ -413,7 +413,7 @@ describe('createPresetManager', () => {
         presets: {
           fallback: {
             orchestrator: {
-              model: ['anthropic/claude-3.5-haiku', 'openai/gpt-5.4'],
+              model: ['anthropic/claude-3.5-haiku', 'openai/gpt-5.5'],
             },
           },
         },
@@ -502,7 +502,7 @@ describe('createPresetManager', () => {
       const config: PluginConfig = {
         presets: {
           cheap: { orchestrator: { model: 'anthropic/claude-3.5-haiku' } },
-          powerful: { orchestrator: { model: 'openai/gpt-5.4' } },
+          powerful: { orchestrator: { model: 'openai/gpt-5.5' } },
         },
       };
       const manager = createPresetManager(ctx, config);

+ 1 - 1
src/utils/agent-variant.test.ts

@@ -211,7 +211,7 @@ describe('rewriteDisplayNameMentions', () => {
         'custom-reviewer': {
           displayName: 'reviewer',
           variant: 'high',
-          model: 'openai/gpt-5.4',
+          model: 'openai/gpt-5.5',
         },
       },
     } as PluginConfig;

+ 1 - 1
src/utils/session.ts

@@ -8,7 +8,7 @@ type OpencodeClient = PluginInput['client'];
 
 /**
  * Extract the short model label from a "provider/model" string.
- * E.g. "openai/gpt-5.4-mini" → "gpt-5.4-mini"
+ * E.g. "openai/gpt-5.5-fast" → "gpt-5.5-fast"
  */
 export function shortModelLabel(model: string): string {
   return model.split('/').pop() ?? model;