Selaa lähdekoodia

Merge pull request #715 from alvinunreal/feat/openai-gpt-5.6-preset

feat(preset): move openai preset to GPT-5.6 model family
Alvin 1 kuukausi sitten
vanhempi
sitoutus
f291768482

+ 18 - 18
README.ja-JP.md

@@ -151,12 +151,12 @@ bun run build
   "preset": "openai",
   "preset": "openai",
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "orchestrator": { "model": "openai/gpt-5.5", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
-      "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
-      "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
-      "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
-      "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": [], "mcps": [] },
-      "fixer": { "model": "openai/gpt-5.5", "variant": "low", "skills": [], "mcps": [] }
+      "orchestrator": { "model": "openai/gpt-5.6-terra", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
+      "oracle": { "model": "openai/gpt-5.6-sol", "variant": "high", "skills": ["simplify"], "mcps": [] },
+      "librarian": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
+      "explorer": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [] },
+      "designer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] },
+      "fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
     },
     },
     "opencode-go": {
     "opencode-go": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -310,12 +310,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.5</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-terra</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Recommended Models:</b> <code>openai/gpt-5.5</code> <code>anthropic/claude-opus-4.6</code>
+      <b>Recommended Models:</b> <code>openai/gpt-5.6-terra</code> <code>anthropic/claude-opus-4.6</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -351,12 +351,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <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.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -392,12 +392,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.5 (high)</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-sol (high)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Recommended Models:</b> <code>openai/gpt-5.5 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
+      <b>Recommended Models:</b> <code>openai/gpt-5.6-sol (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -482,12 +482,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <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.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -523,7 +523,7 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -564,12 +564,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <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.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -611,7 +611,7 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code> - <i>有効化するにはビジョン対応モデルを設定してください</i>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code> - <i>有効化するにはビジョン対応モデルを設定してください</i>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>

+ 18 - 18
README.ko-KR.md

@@ -149,12 +149,12 @@ bun run build
   "preset": "openai",
   "preset": "openai",
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "orchestrator": { "model": "openai/gpt-5.5", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
-      "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
-      "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
-      "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
-      "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": [], "mcps": [] },
-      "fixer": { "model": "openai/gpt-5.5", "variant": "low", "skills": [], "mcps": [] }
+      "orchestrator": { "model": "openai/gpt-5.6-terra", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
+      "oracle": { "model": "openai/gpt-5.6-sol", "variant": "high", "skills": ["simplify"], "mcps": [] },
+      "librarian": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
+      "explorer": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [] },
+      "designer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] },
+      "fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
     },
     },
     "opencode-go": {
     "opencode-go": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -308,12 +308,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.5</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-terra</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>추천 모델:</b> <code>openai/gpt-5.5</code> <code>anthropic/claude-opus-4.6</code>
+      <b>추천 모델:</b> <code>openai/gpt-5.6-terra</code> <code>anthropic/claude-opus-4.6</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -349,12 +349,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>추천 모델:</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>추천 모델:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -390,12 +390,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.5 (high)</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-sol (high)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>추천 모델:</b> <code>openai/gpt-5.5 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
+      <b>추천 모델:</b> <code>openai/gpt-5.6-sol (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -480,12 +480,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>추천 모델:</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>추천 모델:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -521,7 +521,7 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -562,12 +562,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>추천 모델:</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>추천 모델:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -609,7 +609,7 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code> - <i>비전 지원 모델을 구성하여 활성화</i>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code> - <i>비전 지원 모델을 구성하여 활성화</i>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>

+ 16 - 16
README.md

@@ -147,12 +147,12 @@ The default generated configuration includes both `openai` and `opencode-go` pre
   "preset": "openai",
   "preset": "openai",
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "orchestrator": { "model": "openai/gpt-5.5", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
-      "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
-      "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
-      "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
-      "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": [], "mcps": [] },
-      "fixer": { "model": "openai/gpt-5.5", "variant": "low", "skills": [], "mcps": [] }
+      "orchestrator": { "model": "openai/gpt-5.6-terra", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
+      "oracle": { "model": "openai/gpt-5.6-sol", "variant": "high", "skills": ["simplify"], "mcps": [] },
+      "librarian": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
+      "explorer": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [] },
+      "designer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] },
+      "fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
     },
     },
     "opencode-go": {
     "opencode-go": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -343,12 +343,12 @@ rules.
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.5 (medium)</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-terra (medium)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Recommended Models:</b> <code>openai/gpt-5.5 (medium)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8</code>
+      <b>Recommended Models:</b> <code>openai/gpt-5.6-terra (medium)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -384,7 +384,7 @@ rules.
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -425,12 +425,12 @@ rules.
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.5 (high)</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-sol (high)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Recommended Models:</b> <code>openai/gpt-5.5 (xhigh)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8 (xhigh)</code>
+      <b>Recommended Models:</b> <code>openai/gpt-5.6-sol (xhigh)</code> <code>anthropic/claude-fable-5</code> <code>anthropic/claude-opus-4-8 (xhigh)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -515,7 +515,7 @@ rules.
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -556,7 +556,7 @@ rules.
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -597,12 +597,12 @@ rules.
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.5 (low)</code>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna (medium)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>Recommended Models:</b> <code>openai/gpt-5.5 (low)</code> <code>anthropic/claude-sonnet-4-6</code>
+      <b>Recommended Models:</b> <code>openai/gpt-5.6-luna (medium)</code> <code>anthropic/claude-sonnet-4-6</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -644,7 +644,7 @@ rules.
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <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.6-luna</code> - <i>configure a vision-capable model to enable</i>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>

+ 16 - 16
README.zh-CN.md

@@ -144,12 +144,12 @@ bun run build
   "preset": "openai",
   "preset": "openai",
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "orchestrator": { "model": "openai/gpt-5.5", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
-      "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": ["simplify"], "mcps": [] },
-      "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
-      "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
-      "designer": { "model": "openai/gpt-5.4-mini", "variant": "medium", "skills": [], "mcps": [] },
-      "fixer": { "model": "openai/gpt-5.5", "variant": "low", "skills": [], "mcps": [] }
+      "orchestrator": { "model": "openai/gpt-5.6-terra", "variant": "medium", "skills": ["*"], "mcps": ["*", "!context7"] },
+      "oracle": { "model": "openai/gpt-5.6-sol", "variant": "high", "skills": ["simplify"], "mcps": [] },
+      "librarian": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": ["websearch", "context7", "gh_grep"] },
+      "explorer": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [] },
+      "designer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] },
+      "fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
     },
     },
     "opencode-go": {
     "opencode-go": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -303,12 +303,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.5 (medium)</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-terra (medium)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>推荐模型:</b> <code>openai/gpt-5.5 (medium)</code> <code>anthropic/claude-opus-4.6</code>
+      <b>推荐模型:</b> <code>openai/gpt-5.6-terra (medium)</code> <code>anthropic/claude-opus-4.6</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -344,7 +344,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.4-mini</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -385,12 +385,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.5 (high)</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-sol (high)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>推荐模型:</b> <code>openai/gpt-5.5 (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
+      <b>推荐模型:</b> <code>openai/gpt-5.6-sol (high)</code> <code>google/gemini-3.1-pro-preview (high)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -475,7 +475,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.4-mini</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -516,7 +516,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.4-mini</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -557,12 +557,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.5 (low)</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna (medium)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>推荐模型:</b> <code>openai/gpt-5.5 (low)</code>
+      <b>推荐模型:</b> <code>openai/gpt-5.6-luna (medium)</code>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>
@@ -604,7 +604,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   </tr>
   <tr>
   <tr>
     <td colspan="2">
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.4-mini</code> - <i>需配置具有视觉能力的模型以启用</i>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna</code> - <i>需配置具有视觉能力的模型以启用</i>
     </td>
     </td>
   </tr>
   </tr>
   <tr>
   <tr>

+ 1 - 1
docs/acp-agents.md

@@ -33,7 +33,7 @@ project-local `.opencode/oh-my-opencode-slim.jsonc` file:
       "command": "claude-code-acp",
       "command": "claude-code-acp",
       "args": [],
       "args": [],
       "description": "Claude Code subscription agent for deep research",
       "description": "Claude Code subscription agent for deep research",
-      "wrapperModel": "openai/gpt-5.4-mini",
+      "wrapperModel": "openai/gpt-5.6-luna",
       "permissionMode": "ask",
       "permissionMode": "ask",
       "timeoutMs": 300000
       "timeoutMs": 300000
     },
     },

+ 2 - 2
docs/authors-preset.md

@@ -19,7 +19,7 @@ This is the exact configuration the author runs day-to-day.
   "presets": {
   "presets": {
     "openai": {
     "openai": {
       "orchestrator": {
       "orchestrator": {
-        "model": "openai/gpt-5.5-fast",
+        "model": "openai/gpt-5.6-fast",
         "skills": [
         "skills": [
           "*",
           "*",
           "!make-interfaces-feel-better"
           "!make-interfaces-feel-better"
@@ -32,7 +32,7 @@ This is the exact configuration the author runs day-to-day.
         ]
         ]
       },
       },
       "oracle": {
       "oracle": {
-        "model": "openai/gpt-5.5-fast",
+        "model": "openai/gpt-5.6-fast",
         "variant": "high",
         "variant": "high",
         "skills": [
         "skills": [
           "ce-brainstorm",
           "ce-brainstorm",

+ 4 - 4
docs/configuration.md

@@ -85,8 +85,8 @@ All config files support **JSONC** (JSON with Comments):
   /* Agent model mappings */
   /* Agent model mappings */
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "oracle": { "model": "openai/gpt-5.5" },
-      "explorer": { "model": "openai/gpt-5.4-mini" },
+      "oracle": { "model": "openai/gpt-5.6-sol" },
+      "explorer": { "model": "openai/gpt-5.6-luna" },
     },
     },
   },
   },
 
 
@@ -199,7 +199,7 @@ and troubleshooting.
       "command": "claude-code-acp",
       "command": "claude-code-acp",
       "args": [],
       "args": [],
       "description": "Claude Code subscription agent for deep research",
       "description": "Claude Code subscription agent for deep research",
-      "wrapperModel": "openai/gpt-5.4-mini",
+      "wrapperModel": "openai/gpt-5.6-luna",
       "permissionMode": "ask",
       "permissionMode": "ask",
       "timeoutMs": 300000
       "timeoutMs": 300000
     },
     },
@@ -296,7 +296,7 @@ teaches the orchestrator exactly when to delegate to it.
 {
 {
   "agents": {
   "agents": {
     "janitor": {
     "janitor": {
-      "model": "github-copilot/gpt-5.5",
+      "model": "github-copilot/gpt-5.6",
       "prompt": "You are Janitor. Audit codebase entropy, dead code, docs drift, naming inconsistencies, and unnecessary complexity. Prefer analysis and plans over direct edits.",
       "prompt": "You are Janitor. Audit codebase entropy, dead code, docs drift, naming inconsistencies, and unnecessary complexity. Prefer analysis and plans over direct edits.",
       "orchestratorPrompt": "@janitor\n- Role: Maintenance specialist for codebase cleanup and entropy reduction\n- **Delegate when:** after large refactors • cleanup/technical-debt review • dead code or docs drift is suspected\n- **Don't delegate when:** feature implementation • urgent debugging • UI/UX work"
       "orchestratorPrompt": "@janitor\n- Role: Maintenance specialist for codebase cleanup and entropy reduction\n- **Delegate when:** after large refactors • cleanup/technical-debt review • dead code or docs drift is suspected\n- **Don't delegate when:** feature implementation • urgent debugging • UI/UX work"
     }
     }

+ 14 - 14
docs/council.md

@@ -83,13 +83,13 @@ Add a council model and at least one council preset to your plugin config:
   "preset": "openai",
   "preset": "openai",
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5" }
+      "council": { "model": "openai/gpt-5.6" }
     }
     }
   },
   },
   "council": {
   "council": {
     "presets": {
     "presets": {
       "default": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
+        "alpha": { "model": "openai/gpt-5.6-luna" },
         "beta": { "model": "google/gemini-3-pro" },
         "beta": { "model": "google/gemini-3-pro" },
         "gamma": { "model": "openai/gpt-5.3-codex" }
         "gamma": { "model": "openai/gpt-5.3-codex" }
       }
       }
@@ -119,7 +119,7 @@ Then use it directly:
     "councillor_retries": 3,
     "councillor_retries": 3,
     "presets": {
     "presets": {
       "default": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" }
+        "alpha": { "model": "openai/gpt-5.6-luna" }
       }
       }
     }
     }
   }
   }
@@ -157,7 +157,7 @@ council. Entries are `provider/model` strings or `{ "id", "variant" }` objects:
       "review": {
       "review": {
         "reviewer": {
         "reviewer": {
           "model": [
           "model": [
-            "openai/gpt-5.5",
+            "openai/gpt-5.6",
             { "id": "google/gemini-3-pro", "variant": "high" },
             { "id": "google/gemini-3-pro", "variant": "high" },
             "anthropic/claude-opus-4-6"
             "anthropic/claude-opus-4-6"
           ],
           ],
@@ -182,7 +182,7 @@ Configure it using the normal agent system:
 {
 {
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5", "variant": "high" }
+      "council": { "model": "openai/gpt-5.6", "variant": "high" }
     }
     }
   }
   }
 }
 }
@@ -234,13 +234,13 @@ Councillor models always come from:
 {
 {
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5" }
+      "council": { "model": "openai/gpt-5.6" }
     }
     }
   },
   },
   "council": {
   "council": {
     "presets": {
     "presets": {
       "second-opinion": {
       "second-opinion": {
-        "reviewer": { "model": "openai/gpt-5.4-mini" }
+        "reviewer": { "model": "openai/gpt-5.6-luna" }
       }
       }
     }
     }
   }
   }
@@ -253,14 +253,14 @@ Councillor models always come from:
 {
 {
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5" }
+      "council": { "model": "openai/gpt-5.6" }
     }
     }
   },
   },
   "council": {
   "council": {
     "default_preset": "balanced",
     "default_preset": "balanced",
     "presets": {
     "presets": {
       "balanced": {
       "balanced": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
+        "alpha": { "model": "openai/gpt-5.6-luna" },
         "beta": { "model": "google/gemini-3-pro" },
         "beta": { "model": "google/gemini-3-pro" },
         "gamma": { "model": "anthropic/claude-opus-4-6" }
         "gamma": { "model": "anthropic/claude-opus-4-6" }
       }
       }
@@ -277,8 +277,8 @@ Councillor models always come from:
     "councillor_execution_mode": "serial",
     "councillor_execution_mode": "serial",
     "presets": {
     "presets": {
       "default": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
-        "beta": { "model": "openai/gpt-5.4-mini" }
+        "alpha": { "model": "openai/gpt-5.6-luna" },
+        "beta": { "model": "openai/gpt-5.6-luna" }
       }
       }
     }
     }
   }
   }
@@ -300,7 +300,7 @@ Each councillor can receive its own steering prompt:
     "presets": {
     "presets": {
       "review-board": {
       "review-board": {
         "reviewer": {
         "reviewer": {
-          "model": "openai/gpt-5.4-mini",
+          "model": "openai/gpt-5.6-luna",
           "prompt": "Focus on bugs, edge cases, and failure modes."
           "prompt": "Focus on bugs, edge cases, and failure modes."
         },
         },
         "architect": {
         "architect": {
@@ -358,7 +358,7 @@ Council responses include a footer like:
 
 
 ```text
 ```text
 ---
 ---
-*Council: 2/3 councillors responded (alpha: gpt-5.4-mini, beta: gemini-3-pro)*
+*Council: 2/3 councillors responded (alpha: gpt-5.6-luna, beta: gemini-3-pro)*
 ```
 ```
 
 
 ---
 ---
@@ -424,7 +424,7 @@ Prefer this instead:
 {
 {
   "presets": {
   "presets": {
     "openai": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5" }
+      "council": { "model": "openai/gpt-5.6" }
     }
     }
   }
   }
 }
 }

+ 1 - 1
docs/installation.md

@@ -97,7 +97,7 @@ bunx oh-my-opencode-slim@latest install --reset
 
 
 ### After Installation
 ### After Installation
 
 
-The installer generates both OpenAI and OpenCode Go presets, with OpenAI active by default (using variant-aware `gpt-5.5` and `gpt-5.4-mini` models, including `gpt-5.5 (medium)` for Orchestrator, `gpt-5.5 (high)` for Oracle, `gpt-5.5 (low)` for Fixer, and `gpt-5.4-mini` variants for other specialists). To make OpenCode Go active during install, run `bunx oh-my-opencode-slim@latest install --preset=opencode-go`. That preset uses GLM-5.1 for Orchestrator, so the installer also enables Observer with `opencode-go/kimi-k2.6` for visual analysis. To switch providers later 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 both OpenAI and OpenCode Go presets, with OpenAI active by default (using variant-aware GPT-5.6 models, including `gpt-5.6-terra (medium)` for Orchestrator, `gpt-5.6-sol (high)` for Oracle, `gpt-5.6-luna (medium)` for Fixer, and `gpt-5.6-luna` variants for other specialists). To make OpenCode Go active during install, run `bunx oh-my-opencode-slim@latest install --preset=opencode-go`. That preset uses GLM-5.1 for Orchestrator, so the installer also enables Observer with `opencode-go/kimi-k2.6` for visual analysis. To switch providers later or build a mixed setup, use **[Configuration Reference](configuration.md)** for the full option reference and the preset docs for copyable examples.
 
 
 The plugin safely reconciles bundled skills on startup and after successful
 The plugin safely reconciles bundled skills on startup and after successful
 auto-updates. Missing bundled skills are installed, and previously managed skills
 auto-updates. Missing bundled skills are installed, and previously managed skills

+ 13 - 13
docs/openai-preset.md

@@ -33,12 +33,12 @@ The generated `openai` preset assigns each specialist an OpenAI model:
 
 
 | Agent | Model |
 | Agent | Model |
 |-------|-------|
 |-------|-------|
-| Orchestrator | `openai/gpt-5.5` (`medium`) |
-| Oracle | `openai/gpt-5.5` (`high`) |
-| Librarian | `openai/gpt-5.4-mini` (`low`) |
-| Explorer | `openai/gpt-5.4-mini` (`low`) |
-| Designer | `openai/gpt-5.4-mini` (`medium`) |
-| Fixer | `openai/gpt-5.5` (`low`) |
+| Orchestrator | `openai/gpt-5.6-terra` (`medium`) |
+| Oracle | `openai/gpt-5.6-sol` (`high`) |
+| Librarian | `openai/gpt-5.6-luna` (`low`) |
+| Explorer | `openai/gpt-5.6-luna` (`low`) |
+| Designer | `openai/gpt-5.6-luna` (`medium`) |
+| Fixer | `openai/gpt-5.6-luna` (`medium`) |
 
 
 ## Generated Config Shape
 ## Generated Config Shape
 
 
@@ -51,38 +51,38 @@ setting the top-level `preset` field:
   "presets": {
   "presets": {
     "openai": {
     "openai": {
       "orchestrator": {
       "orchestrator": {
-        "model": "openai/gpt-5.5",
+        "model": "openai/gpt-5.6-terra",
         "variant": "medium",
         "variant": "medium",
         "skills": ["*"],
         "skills": ["*"],
         "mcps": ["*", "!context7"]
         "mcps": ["*", "!context7"]
       },
       },
       "oracle": {
       "oracle": {
-        "model": "openai/gpt-5.5",
+        "model": "openai/gpt-5.6-sol",
         "variant": "high",
         "variant": "high",
         "skills": ["simplify"],
         "skills": ["simplify"],
         "mcps": []
         "mcps": []
       },
       },
       "librarian": {
       "librarian": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "low",
         "variant": "low",
         "skills": [],
         "skills": [],
         "mcps": ["websearch", "context7", "gh_grep"]
         "mcps": ["websearch", "context7", "gh_grep"]
       },
       },
       "explorer": {
       "explorer": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "low",
         "variant": "low",
         "skills": [],
         "skills": [],
         "mcps": []
         "mcps": []
       },
       },
       "designer": {
       "designer": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "medium",
         "variant": "medium",
         "skills": [],
         "skills": [],
         "mcps": []
         "mcps": []
       },
       },
       "fixer": {
       "fixer": {
-        "model": "openai/gpt-5.5",
-        "variant": "low",
+        "model": "openai/gpt-5.6-luna",
+        "variant": "medium",
         "skills": [],
         "skills": [],
         "mcps": []
         "mcps": []
       }
       }

+ 5 - 5
docs/preset-switching.md

@@ -24,11 +24,11 @@ Switch agent model presets at runtime without restarting OpenCode using the `/pr
   "presets": {
   "presets": {
     "cheap": {
     "cheap": {
       "orchestrator": { "model": "anthropic/claude-3.5-haiku" },
       "orchestrator": { "model": "anthropic/claude-3.5-haiku" },
-      "explorer": { "model": "openai/gpt-5.4-mini" },
+      "explorer": { "model": "openai/gpt-5.6-luna" },
       "oracle": { "model": "anthropic/claude-sonnet-4-6" }
       "oracle": { "model": "anthropic/claude-sonnet-4-6" }
     },
     },
     "powerful": {
     "powerful": {
-      "orchestrator": { "model": "openai/gpt-5.5" },
+      "orchestrator": { "model": "openai/gpt-5.6" },
       "oracle": { "model": "anthropic/claude-opus-4-6" },
       "oracle": { "model": "anthropic/claude-opus-4-6" },
       "librarian": { "model": "anthropic/claude-sonnet-4-6" }
       "librarian": { "model": "anthropic/claude-sonnet-4-6" }
     },
     },
@@ -77,10 +77,10 @@ Runtime preset switches persist across plugin re-inits (triggered by config chan
 Available presets:
 Available presets:
   cheap ← active
   cheap ← active
     orchestrator → anthropic/claude-3.5-haiku
     orchestrator → anthropic/claude-3.5-haiku
-    explorer → openai/gpt-5.4-mini
+    explorer → openai/gpt-5.6-luna
     oracle → anthropic/claude-sonnet-4-6
     oracle → anthropic/claude-sonnet-4-6
   powerful
   powerful
-    orchestrator → openai/gpt-5.5
+    orchestrator → openai/gpt-5.6
     oracle → anthropic/claude-opus-4-6
     oracle → anthropic/claude-opus-4-6
 
 
 Usage: /preset <name> to switch.
 Usage: /preset <name> to switch.
@@ -92,7 +92,7 @@ Usage: /preset <name> to switch.
 
 
 ```
 ```
 Switched to preset "powerful":
 Switched to preset "powerful":
-orchestrator → model: openai/gpt-5.5
+orchestrator → model: openai/gpt-5.6
 oracle → model: anthropic/claude-opus-4-6
 oracle → model: anthropic/claude-opus-4-6
 Reset to baseline: explorer
 Reset to baseline: explorer
 ```
 ```

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

@@ -12,12 +12,12 @@ Codex Plus covers the OpenAI models and Copilot covers the design models, so you
 {
 {
     "preset": "thirtydollars",
     "preset": "thirtydollars",
     "presets": {
     "presets": {
-      "thirtydollars": { "orchestrator": { "model": "openai/gpt-5.5", "variant": "medium", "skills": [ "*" ], "mcps": [ "*", "websearch"] },
-        "oracle": { "model": "openai/gpt-5.5", "variant": "high", "skills": [], "mcps": [] },
-        "librarian": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [ "websearch", "context7", "gh_grep" ] },
-        "explorer": { "model": "openai/gpt-5.4-mini", "variant": "low", "skills": [], "mcps": [] },
+      "thirtydollars": { "orchestrator": { "model": "openai/gpt-5.6-terra", "variant": "medium", "skills": [ "*" ], "mcps": [ "*", "websearch"] },
+        "oracle": { "model": "openai/gpt-5.6-sol", "variant": "high", "skills": [], "mcps": [] },
+        "librarian": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [ "websearch", "context7", "gh_grep" ] },
+        "explorer": { "model": "openai/gpt-5.6-luna", "variant": "low", "skills": [], "mcps": [] },
         "designer": { "model": "github-copilot/gemini-3.5-flash", "skills": [], "mcps": [] },
         "designer": { "model": "github-copilot/gemini-3.5-flash", "skills": [], "mcps": [] },
-        "fixer": { "model": "openai/gpt-5.5", "variant": "low", "skills": [], "mcps": [] }
+        "fixer": { "model": "openai/gpt-5.6-luna", "variant": "medium", "skills": [], "mcps": [] }
       }
       }
     }
     }
   }
   }

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

@@ -15,7 +15,7 @@ describe('formatCouncillorResults', () => {
       },
       },
       {
       {
         name: 'beta',
         name: 'beta',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'completed',
         status: 'completed',
         result:
         result:
           'Consider Fastify for better performance and built-in type validation.',
           'Consider Fastify for better performance and built-in type validation.',
@@ -30,7 +30,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain('**Original Prompt**:');
     expect(formatted).toContain('**Original Prompt**:');
     expect(formatted).toContain(originalPrompt);
     expect(formatted).toContain(originalPrompt);
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
-    expect(formatted).toContain('**beta** (gpt-5.5):');
+    expect(formatted).toContain('**beta** (gpt-5.6):');
     expect(formatted).toContain(
     expect(formatted).toContain(
       'Use Express.js with TypeScript interfaces for type safety.',
       'Use Express.js with TypeScript interfaces for type safety.',
     );
     );
@@ -57,7 +57,7 @@ describe('formatCouncillorResults', () => {
       },
       },
       {
       {
         name: 'beta',
         name: 'beta',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'timed_out',
         status: 'timed_out',
         error: 'Request timed out after 180000ms',
         error: 'Request timed out after 180000ms',
       },
       },
@@ -86,7 +86,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain(
     expect(formatted).toContain(
       '**gamma**: failed - Provider returned empty response',
       '**gamma**: failed - Provider returned empty response',
     );
     );
-    expect(formatted).not.toContain('**beta** (gpt-5.5):');
+    expect(formatted).not.toContain('**beta** (gpt-5.6):');
     expect(formatted).not.toContain('**gamma** (gemini-pro):');
     expect(formatted).not.toContain('**gamma** (gemini-pro):');
   });
   });
 
 
@@ -100,7 +100,7 @@ describe('formatCouncillorResults', () => {
       },
       },
       {
       {
         name: 'beta',
         name: 'beta',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'error',
         status: 'error',
         error: 'Provider error',
         error: 'Provider error',
       },
       },
@@ -116,7 +116,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain('**Councillor Responses**:');
     expect(formatted).toContain('**Councillor Responses**:');
     expect(formatted).toContain('All councillors failed to produce output:');
     expect(formatted).toContain('All councillors failed to produce output:');
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
-    expect(formatted).toContain('**beta** (gpt-5.5):');
+    expect(formatted).toContain('**beta** (gpt-5.6):');
     expect(formatted).toContain('Request timed out');
     expect(formatted).toContain('Request timed out');
     expect(formatted).toContain('Provider error');
     expect(formatted).toContain('Provider error');
   });
   });
@@ -131,7 +131,7 @@ describe('formatCouncillorResults', () => {
       },
       },
       {
       {
         name: 'beta',
         name: 'beta',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'completed',
         status: 'completed',
         result: 'Another valid response',
         result: 'Another valid response',
       },
       },
@@ -144,7 +144,7 @@ describe('formatCouncillorResults', () => {
 
 
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
     expect(formatted).toContain('Valid response');
     expect(formatted).toContain('Valid response');
-    expect(formatted).toContain('**beta** (gpt-5.5):');
+    expect(formatted).toContain('**beta** (gpt-5.6):');
     expect(formatted).toContain('Another valid response');
     expect(formatted).toContain('Another valid response');
     expect(formatted).toContain('review each councillor response individually');
     expect(formatted).toContain('review each councillor response individually');
   });
   });

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

@@ -6,9 +6,9 @@ describe('custom-agent creation', () => {
   test('infers custom agents from unknown keys', () => {
   test('infers custom agents from unknown keys', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
-        explorer: { model: 'openai/gpt-5.4-mini' },
+        explorer: { model: 'openai/gpt-5.6-luna' },
         reviewer: {
         reviewer: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           prompt: 'You are the custom reviewer agent.',
           prompt: 'You are the custom reviewer agent.',
         },
         },
       },
       },
@@ -21,7 +21,7 @@ describe('custom-agent creation', () => {
 
 
     const customAgent = agents.find((agent) => agent.name === 'reviewer');
     const customAgent = agents.find((agent) => agent.name === 'reviewer');
     expect(customAgent).toBeDefined();
     expect(customAgent).toBeDefined();
-    expect(customAgent?.config.model).toBe('openai/gpt-5.5');
+    expect(customAgent?.config.model).toBe('openai/gpt-5.6');
     expect(customAgent?.config.prompt).toBe(
     expect(customAgent?.config.prompt).toBe(
       'You are the custom reviewer agent.',
       'You are the custom reviewer agent.',
     );
     );
@@ -31,7 +31,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         'test-auditor': {
         'test-auditor': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           prompt: 'You are a custom subagent for auditing.',
           prompt: 'You are a custom subagent for auditing.',
           orchestratorPrompt:
           orchestratorPrompt:
             '@test-auditor\n- Role: Compliance audit specialist',
             '@test-auditor\n- Role: Compliance audit specialist',
@@ -83,7 +83,7 @@ describe('custom-agent creation', () => {
       disabled_agents: ['test-auditor', 'designer'],
       disabled_agents: ['test-auditor', 'designer'],
       agents: {
       agents: {
         'test-auditor': {
         'test-auditor': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           prompt: 'You are a disabled custom agent.',
           prompt: 'You are a disabled custom agent.',
         },
         },
       },
       },
@@ -101,7 +101,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         'unsafe/name': {
         'unsafe/name': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
         },
         },
       },
       },
     };
     };
@@ -113,7 +113,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         janitor: {
         janitor: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           orchestratorPrompt: '@cleanup\n- Role: Cleanup specialist',
           orchestratorPrompt: '@cleanup\n- Role: Cleanup specialist',
         },
         },
       },
       },
@@ -136,7 +136,7 @@ describe('custom-agent creation', () => {
           timeoutMs: 0,
           timeoutMs: 0,
           permissionMode: 'ask',
           permissionMode: 'ask',
           description: 'Claude Code research via ACP',
           description: 'Claude Code research via ACP',
-          wrapperModel: 'openai/gpt-5.4-mini',
+          wrapperModel: 'openai/gpt-5.6-luna',
         },
         },
       },
       },
     };
     };
@@ -147,7 +147,7 @@ describe('custom-agent creation', () => {
 
 
     expect(wrapper).toBeDefined();
     expect(wrapper).toBeDefined();
     expect(wrapper?.description).toBe('Claude Code research via ACP');
     expect(wrapper?.description).toBe('Claude Code research via ACP');
-    expect(wrapper?.config.model).toBe('openai/gpt-5.4-mini');
+    expect(wrapper?.config.model).toBe('openai/gpt-5.6-luna');
     expect(wrapper?.config.prompt).toContain('acp_run');
     expect(wrapper?.config.prompt).toContain('acp_run');
     expect(orchestrator?.config.prompt).toContain('@claude-research');
     expect(orchestrator?.config.prompt).toContain('@claude-research');
   });
   });
@@ -217,7 +217,7 @@ describe('custom-agent creation', () => {
   test('rejects acpAgents that conflict with custom agents', () => {
   test('rejects acpAgents that conflict with custom agents', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
-        bridge: { model: 'openai/gpt-5.4-mini' },
+        bridge: { model: 'openai/gpt-5.6-luna' },
       },
       },
       acpAgents: {
       acpAgents: {
         bridge: {
         bridge: {
@@ -257,11 +257,11 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         explorer: {
         explorer: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           displayName: 'fancy-explorer',
           displayName: 'fancy-explorer',
         },
         },
         janitor: {
         janitor: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           orchestratorPrompt:
           orchestratorPrompt:
             'Please use @janitor to clean up after @explorer has completed.',
             'Please use @janitor to clean up after @explorer has completed.',
         },
         },
@@ -314,7 +314,7 @@ describe('custom-agent creation', () => {
     const configOnlyAcp: PluginConfig = {
     const configOnlyAcp: PluginConfig = {
       agents: {
       agents: {
         explorer: {
         explorer: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           displayName: 'fancy-explorer',
           displayName: 'fancy-explorer',
         },
         },
       },
       },

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

@@ -537,7 +537,7 @@ describe('council agent model resolution', () => {
     // entry in the agent preset - the exact scenario from issue #369.
     // entry in the agent preset - the exact scenario from issue #369.
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
-        oracle: { model: 'openai/gpt-5.5' },
+        oracle: { model: 'openai/gpt-5.6' },
       },
       },
       council: {
       council: {
         ...councilConfig(),
         ...councilConfig(),
@@ -583,7 +583,7 @@ describe('council agent model resolution', () => {
       master: { model: 'anthropic/claude-opus-4-6' },
       master: { model: 'anthropic/claude-opus-4-6' },
       presets: {
       presets: {
         default: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         },
       },
       },
     };
     };
@@ -608,7 +608,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         oracle: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           options: { textVerbosity: 'low' },
           options: { textVerbosity: 'low' },
         },
         },
       },
       },
@@ -640,7 +640,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         oracle: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           variant: 'high',
           variant: 'high',
           temperature: 0.7,
           temperature: 0.7,
           options: { textVerbosity: 'low', reasoningEffort: 'medium' },
           options: { textVerbosity: 'low', reasoningEffort: 'medium' },
@@ -649,7 +649,7 @@ describe('options passthrough', () => {
     };
     };
     const agents = createAgents(config);
     const agents = createAgents(config);
     const oracle = agents.find((a) => a.name === 'oracle');
     const oracle = agents.find((a) => a.name === 'oracle');
-    expect(oracle?.config.model).toBe('openai/gpt-5.5');
+    expect(oracle?.config.model).toBe('openai/gpt-5.6');
     expect(oracle?.config.variant).toBe('high');
     expect(oracle?.config.variant).toBe('high');
     expect(oracle?.config.temperature).toBe(0.7);
     expect(oracle?.config.temperature).toBe(0.7);
     expect(oracle?.config.options).toEqual({
     expect(oracle?.config.options).toEqual({
@@ -661,7 +661,7 @@ describe('options passthrough', () => {
   test('options are absent when not configured', () => {
   test('options are absent when not configured', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
-        oracle: { model: 'openai/gpt-5.5' },
+        oracle: { model: 'openai/gpt-5.6' },
       },
       },
     };
     };
     const agents = createAgents(config);
     const agents = createAgents(config);
@@ -673,7 +673,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         oracle: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           options: { textVerbosity: 'low' },
           options: { textVerbosity: 'low' },
         },
         },
       },
       },
@@ -687,7 +687,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       agents: {
       agents: {
         oracle: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           options: { reasoningEffort: 'medium' },
           options: { reasoningEffort: 'medium' },
         },
         },
       },
       },
@@ -723,7 +723,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
 
   test('accepts options alongside other fields', () => {
   test('accepts options alongside other fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       variant: 'high',
       variant: 'high',
       temperature: 0.7,
       temperature: 0.7,
       options: { textVerbosity: 'low' },
       options: { textVerbosity: 'low' },
@@ -736,7 +736,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
 
   test('config without options is valid', () => {
   test('config without options is valid', () => {
     const result = AgentOverrideConfigSchema.safeParse({
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
     });
     });
     expect(result.success).toBe(true);
     expect(result.success).toBe(true);
     if (result.success) {
     if (result.success) {
@@ -760,7 +760,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
 
   test('accepts prompt and orchestratorPrompt override fields', () => {
   test('accepts prompt and orchestratorPrompt override fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       prompt: 'You are a specialized reviewer.',
       prompt: 'You are a specialized reviewer.',
       orchestratorPrompt: '@reviewer\n- Role: Specialized reviewer',
       orchestratorPrompt: '@reviewer\n- Role: Specialized reviewer',
     });
     });
@@ -775,7 +775,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
 
   test('rejects empty prompt fields', () => {
   test('rejects empty prompt fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       prompt: '',
       prompt: '',
     });
     });
     expect(result.success).toBe(false);
     expect(result.success).toBe(false);
@@ -783,7 +783,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
 
   test('rejects empty orchestratorPrompt fields', () => {
   test('rejects empty orchestratorPrompt fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       orchestratorPrompt: '',
       orchestratorPrompt: '',
     });
     });
     expect(result.success).toBe(false);
     expect(result.success).toBe(false);
@@ -791,7 +791,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
 
   test('rejects description field on overrides', () => {
   test('rejects description field on overrides', () => {
     const result = AgentOverrideConfigSchema.safeParse({
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       description: 'not supported for custom agents',
       description: 'not supported for custom agents',
     } as Record<string, unknown>);
     } as Record<string, unknown>);
     expect(result.success).toBe(false);
     expect(result.success).toBe(false);
@@ -803,7 +803,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
     const result = PluginConfigSchema.safeParse({
       agents: {
       agents: {
         oracle: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           prompt: 'ignored built-in prompt override',
           prompt: 'ignored built-in prompt override',
         },
         },
       },
       },
@@ -816,7 +816,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
     const result = PluginConfigSchema.safeParse({
       agents: {
       agents: {
         explorer: {
         explorer: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           orchestratorPrompt: '@explorer\n- Role: should be invalid here',
           orchestratorPrompt: '@explorer\n- Role: should be invalid here',
         },
         },
       },
       },
@@ -830,7 +830,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
       presets: {
       presets: {
         openai: {
         openai: {
           oracle: {
           oracle: {
-            model: 'openai/gpt-5.5',
+            model: 'openai/gpt-5.6',
             prompt: 'ignored preset built-in prompt override',
             prompt: 'ignored preset built-in prompt override',
           },
           },
         },
         },
@@ -844,7 +844,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
     const result = PluginConfigSchema.safeParse({
       agents: {
       agents: {
         orchestrator: {
         orchestrator: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           orchestratorPrompt: '@orchestrator\n- Role: should be invalid here',
           orchestratorPrompt: '@orchestrator\n- Role: should be invalid here',
         },
         },
       },
       },
@@ -857,7 +857,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
     const result = PluginConfigSchema.safeParse({
       agents: {
       agents: {
         janitor: {
         janitor: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           prompt: 'You are Janitor.',
           prompt: 'You are Janitor.',
           orchestratorPrompt: '@janitor\n- Role: Cleanup specialist',
           orchestratorPrompt: '@janitor\n- Role: Cleanup specialist',
         },
         },
@@ -992,8 +992,8 @@ describe('disabled_agents', () => {
     const config: PluginConfig = {
     const config: PluginConfig = {
       disabled_agents: ['janitor'],
       disabled_agents: ['janitor'],
       agents: {
       agents: {
-        janitor: { model: 'openai/gpt-5.4-mini' },
-        reviewer: { model: 'openai/gpt-5.4-mini' },
+        janitor: { model: 'openai/gpt-5.6-luna' },
+        reviewer: { model: 'openai/gpt-5.6-luna' },
       },
       },
     };
     };
 
 

+ 1 - 1
src/cli/config-io.test.ts

@@ -597,7 +597,7 @@ describe('config-io', () => {
           dev: {
           dev: {
             orchestrator: {
             orchestrator: {
               model: [
               model: [
-                'openai/gpt-5.4-mini',
+                'openai/gpt-5.6-luna',
                 { id: 'anthropic/claude-opus-4-6' },
                 { id: 'anthropic/claude-opus-4-6' },
               ],
               ],
             },
             },

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

@@ -34,10 +34,10 @@ describe('providers', () => {
     );
     );
     const agents = (config.presets as any).openai;
     const agents = (config.presets as any).openai;
     expect(agents).toBeDefined();
     expect(agents).toBeDefined();
-    expect(agents.orchestrator.model).toBe('openai/gpt-5.5');
+    expect(agents.orchestrator.model).toBe('openai/gpt-5.6-terra');
     expect(agents.orchestrator.variant).toBe('medium');
     expect(agents.orchestrator.variant).toBe('medium');
-    expect(agents.fixer.model).toBe('openai/gpt-5.5');
-    expect(agents.fixer.variant).toBe('low');
+    expect(agents.fixer.model).toBe('openai/gpt-5.6-luna');
+    expect(agents.fixer.variant).toBe('medium');
   });
   });
 
 
   test('generateLiteConfig uses correct OpenAI models', () => {
   test('generateLiteConfig uses correct OpenAI models', () => {
@@ -52,13 +52,13 @@ describe('providers', () => {
     expect(agents.orchestrator.model).toBe(
     expect(agents.orchestrator.model).toBe(
       MODEL_MAPPINGS.openai.orchestrator.model,
       MODEL_MAPPINGS.openai.orchestrator.model,
     );
     );
-    expect(agents.oracle.model).toBe('openai/gpt-5.5');
+    expect(agents.oracle.model).toBe('openai/gpt-5.6-sol');
     expect(agents.oracle.variant).toBe('high');
     expect(agents.oracle.variant).toBe('high');
-    expect(agents.librarian.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.librarian.model).toBe('openai/gpt-5.6-luna');
     expect(agents.librarian.variant).toBe('low');
     expect(agents.librarian.variant).toBe('low');
-    expect(agents.explorer.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.explorer.model).toBe('openai/gpt-5.6-luna');
     expect(agents.explorer.variant).toBe('low');
     expect(agents.explorer.variant).toBe('low');
-    expect(agents.designer.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.designer.model).toBe('openai/gpt-5.6-luna');
     expect(agents.designer.variant).toBe('medium');
     expect(agents.designer.variant).toBe('medium');
   });
   });
 
 

+ 6 - 6
src/cli/providers.ts

@@ -10,12 +10,12 @@ export const GENERATED_PRESETS = ['openai', 'opencode-go'] as const;
 // Model mappings by provider/preset.
 // Model mappings by provider/preset.
 export const MODEL_MAPPINGS = {
 export const MODEL_MAPPINGS = {
   openai: {
   openai: {
-    orchestrator: { model: 'openai/gpt-5.5', variant: 'medium' },
-    oracle: { model: 'openai/gpt-5.5', 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.5', variant: 'low' },
+    orchestrator: { model: 'openai/gpt-5.6-terra', variant: 'medium' },
+    oracle: { model: 'openai/gpt-5.6-sol', variant: 'high' },
+    librarian: { model: 'openai/gpt-5.6-luna', variant: 'low' },
+    explorer: { model: 'openai/gpt-5.6-luna', variant: 'low' },
+    designer: { model: 'openai/gpt-5.6-luna', variant: 'medium' },
+    fixer: { model: 'openai/gpt-5.6-luna', variant: 'medium' },
   },
   },
   kimi: {
   kimi: {
     orchestrator: { model: 'kimi-for-coding/k2p5' },
     orchestrator: { model: 'kimi-for-coding/k2p5' },

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

@@ -9,16 +9,16 @@ import {
 describe('CouncillorConfigSchema', () => {
 describe('CouncillorConfigSchema', () => {
   test('validates config with model and optional variant', () => {
   test('validates config with model and optional variant', () => {
     const result = CouncillorConfigSchema.safeParse({
     const result = CouncillorConfigSchema.safeParse({
-      model: 'openai/gpt-5.4-mini',
+      model: 'openai/gpt-5.6-luna',
       variant: 'low',
       variant: 'low',
     });
     });
     expect(result.success).toBe(true);
     expect(result.success).toBe(true);
     if (result.success) {
     if (result.success) {
-      expect(result.data.model).toBe('openai/gpt-5.4-mini');
+      expect(result.data.model).toBe('openai/gpt-5.6-luna');
       expect(result.data.variant).toBe('low');
       expect(result.data.variant).toBe('low');
       // A single-model config normalizes to a one-entry chain.
       // A single-model config normalizes to a one-entry chain.
       expect(result.data.models).toEqual([
       expect(result.data.models).toEqual([
-        { id: 'openai/gpt-5.4-mini', variant: 'low' },
+        { id: 'openai/gpt-5.6-luna', variant: 'low' },
       ]);
       ]);
     }
     }
   });
   });
@@ -26,16 +26,16 @@ describe('CouncillorConfigSchema', () => {
   test('accepts an ordered model fallback chain', () => {
   test('accepts an ordered model fallback chain', () => {
     const result = CouncillorConfigSchema.safeParse({
     const result = CouncillorConfigSchema.safeParse({
       model: [
       model: [
-        'openai/gpt-5.4-mini',
+        'openai/gpt-5.6-luna',
         { id: 'google/gemini-3-pro', variant: 'high' },
         { id: 'google/gemini-3-pro', variant: 'high' },
       ],
       ],
     });
     });
     expect(result.success).toBe(true);
     expect(result.success).toBe(true);
     if (result.success) {
     if (result.success) {
       // Primary model stays on `model` for backward compatibility.
       // Primary model stays on `model` for backward compatibility.
-      expect(result.data.model).toBe('openai/gpt-5.4-mini');
+      expect(result.data.model).toBe('openai/gpt-5.6-luna');
       expect(result.data.models).toEqual([
       expect(result.data.models).toEqual([
-        { id: 'openai/gpt-5.4-mini', variant: undefined },
+        { id: 'openai/gpt-5.6-luna', variant: undefined },
         { id: 'google/gemini-3-pro', variant: 'high' },
         { id: 'google/gemini-3-pro', variant: 'high' },
       ]);
       ]);
     }
     }
@@ -45,10 +45,10 @@ describe('CouncillorConfigSchema', () => {
     const config = {
     const config = {
       master: { model: 'anthropic/claude-opus-4-6' },
       master: { model: 'anthropic/claude-opus-4-6' },
       master_timeout: 300000,
       master_timeout: 300000,
-      master_fallback: ['openai/gpt-5.5'],
+      master_fallback: ['openai/gpt-5.6'],
       presets: {
       presets: {
         default: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         },
       },
       },
     };
     };
@@ -71,7 +71,7 @@ describe('CouncillorConfigSchema', () => {
     const config = {
     const config = {
       presets: {
       presets: {
         default: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         },
       },
       },
     };
     };
@@ -109,7 +109,7 @@ test('unwraps legacy nested "councillors" key in preset', () => {
     presets: {
     presets: {
       default: {
       default: {
         councillors: {
         councillors: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
           beta: { model: 'openai/gpt-5.3-codex' },
           beta: { model: 'openai/gpt-5.3-codex' },
         },
         },
       },
       },
@@ -122,7 +122,7 @@ test('unwraps legacy nested "councillors" key in preset', () => {
   if (result.success) {
   if (result.success) {
     const preset = result.data.presets.default;
     const preset = result.data.presets.default;
     expect(Object.keys(preset)).toEqual(['alpha', 'beta']);
     expect(Object.keys(preset)).toEqual(['alpha', 'beta']);
-    expect(preset.alpha.model).toBe('openai/gpt-5.4-mini');
+    expect(preset.alpha.model).toBe('openai/gpt-5.6-luna');
     expect(preset.beta.model).toBe('openai/gpt-5.3-codex');
     expect(preset.beta.model).toBe('openai/gpt-5.3-codex');
   }
   }
 });
 });
@@ -132,7 +132,7 @@ test('mixed legacy "councillors" and flat keys in same preset', () => {
     presets: {
     presets: {
       mixed: {
       mixed: {
         councillors: {
         councillors: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         },
         beta: { model: 'google/gemini-3-pro' },
         beta: { model: 'google/gemini-3-pro' },
       },
       },
@@ -155,7 +155,7 @@ test('deprecated master with non-standard model ID still parses', () => {
     master_fallback: 'all', // not an array
     master_fallback: 'all', // not an array
     presets: {
     presets: {
       default: {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
+        alpha: { model: 'openai/gpt-5.6-luna' },
       },
       },
     },
     },
   };
   };
@@ -175,7 +175,7 @@ test('legacyMasterModel undefined when master.model is not a string', () => {
     master: { model: 42 }, // not a string
     master: { model: 42 }, // not a string
     presets: {
     presets: {
       default: {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
+        alpha: { model: 'openai/gpt-5.6-luna' },
       },
       },
     },
     },
   };
   };
@@ -193,7 +193,7 @@ test('legacyMasterModel undefined when master is not an object', () => {
     master: 'oops', // not an object
     master: 'oops', // not an object
     presets: {
     presets: {
       default: {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
+        alpha: { model: 'openai/gpt-5.6-luna' },
       },
       },
     },
     },
   };
   };
@@ -217,7 +217,7 @@ test('rejects empty model string', () => {
 
 
 test('accepts optional prompt field', () => {
 test('accepts optional prompt field', () => {
   const config: CouncillorConfig = {
   const config: CouncillorConfig = {
-    model: 'openai/gpt-5.4-mini',
+    model: 'openai/gpt-5.6-luna',
     prompt: 'Focus on security implications and edge cases.',
     prompt: 'Focus on security implications and edge cases.',
   };
   };
 
 
@@ -232,7 +232,7 @@ test('accepts optional prompt field', () => {
 
 
 test('prompt is optional and defaults to undefined', () => {
 test('prompt is optional and defaults to undefined', () => {
   const config: CouncillorConfig = {
   const config: CouncillorConfig = {
-    model: 'openai/gpt-5.4-mini',
+    model: 'openai/gpt-5.6-luna',
   };
   };
 
 
   const result = CouncillorConfigSchema.safeParse(config);
   const result = CouncillorConfigSchema.safeParse(config);
@@ -246,7 +246,7 @@ describe('CouncilPresetSchema', () => {
   test('validates a named preset with multiple councillors', () => {
   test('validates a named preset with multiple councillors', () => {
     const raw = {
     const raw = {
       alpha: {
       alpha: {
-        model: 'openai/gpt-5.4-mini',
+        model: 'openai/gpt-5.6-luna',
       },
       },
       beta: {
       beta: {
         model: 'openai/gpt-5.3-codex',
         model: 'openai/gpt-5.3-codex',
@@ -267,7 +267,7 @@ describe('CouncilPresetSchema', () => {
   test('accepts preset with single councillor', () => {
   test('accepts preset with single councillor', () => {
     const raw = {
     const raw = {
       solo: {
       solo: {
-        model: 'openai/gpt-5.4-mini',
+        model: 'openai/gpt-5.6-luna',
       },
       },
     };
     };
 
 
@@ -294,7 +294,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
     const config = {
       presets: {
       presets: {
         default: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
           beta: { model: 'openai/gpt-5.3-codex' },
           beta: { model: 'openai/gpt-5.3-codex' },
           gamma: { model: 'google/gemini-3-pro' },
           gamma: { model: 'google/gemini-3-pro' },
         },
         },
@@ -315,7 +315,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
     const config = {
       presets: {
       presets: {
         custom: {
         custom: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         },
       },
       },
       default_preset: 'custom',
       default_preset: 'custom',
@@ -341,7 +341,7 @@ describe('CouncilConfigSchema', () => {
     const badConfig = {
     const badConfig = {
       presets: {
       presets: {
         default: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         },
       },
       },
       timeout: -1000,
       timeout: -1000,
@@ -355,7 +355,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
     const config = {
       presets: {
       presets: {
         default: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         },
       },
       },
       timeout: 0,
       timeout: 0,
@@ -384,18 +384,18 @@ describe('CouncilConfigSchema', () => {
     const config = {
     const config = {
       presets: {
       presets: {
         default: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
           beta: { model: 'openai/gpt-5.3-codex' },
           beta: { model: 'openai/gpt-5.3-codex' },
         },
         },
         fast: {
         fast: {
-          quick: { model: 'openai/gpt-5.4-mini', variant: 'low' },
+          quick: { model: 'openai/gpt-5.6-luna', variant: 'low' },
         },
         },
         thorough: {
         thorough: {
           detailed1: {
           detailed1: {
             model: 'anthropic/claude-opus-4-6',
             model: 'anthropic/claude-opus-4-6',
             prompt: 'Provide detailed analysis with citations.',
             prompt: 'Provide detailed analysis with citations.',
           },
           },
-          detailed2: { model: 'openai/gpt-5.5' },
+          detailed2: { model: 'openai/gpt-5.6' },
         },
         },
       },
       },
     };
     };

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

@@ -14,7 +14,7 @@ const ModelIdSchema = z
   .string()
   .string()
   .regex(
   .regex(
     /^[^/\s]+\/[^\s]+$/,
     /^[^/\s]+\/[^\s]+$/,
-    'Expected provider/model format (e.g. "openai/gpt-5.4-mini")',
+    'Expected provider/model format (e.g. "openai/gpt-5.6-luna")',
   );
   );
 
 
 const CouncillorModelEntrySchema = z.object({
 const CouncillorModelEntrySchema = z.object({
@@ -33,7 +33,7 @@ const CouncillorModelSchema = z
     z.array(z.union([ModelIdSchema, CouncillorModelEntrySchema])).min(1),
     z.array(z.union([ModelIdSchema, CouncillorModelEntrySchema])).min(1),
   ])
   ])
   .describe(
   .describe(
-    'Model ID in provider/model format (e.g. "openai/gpt-5.4-mini"), or an ' +
+    'Model ID in provider/model format (e.g. "openai/gpt-5.6-luna"), or an ' +
       'ordered fallback chain (array of model IDs or { id, variant } entries) ' +
       'ordered fallback chain (array of model IDs or { id, variant } entries) ' +
       'tried in order until one responds.',
       'tried in order until one responds.',
   );
   );
@@ -153,7 +153,7 @@ export const CouncillorExecutionModeSchema = z
  *   "council": {
  *   "council": {
  *     "presets": {
  *     "presets": {
  *       "default": {
  *       "default": {
- *         "alpha": { "model": "openai/gpt-5.4-mini" },
+ *         "alpha": { "model": "openai/gpt-5.6-luna" },
  *         "beta":  { "model": "openai/gpt-5.3-codex" },
  *         "beta":  { "model": "openai/gpt-5.3-codex" },
  *         "gamma": { "model": "google/gemini-3-pro" }
  *         "gamma": { "model": "google/gemini-3-pro" }
  *       }
  *       }

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

@@ -96,7 +96,7 @@ describe('loadPluginConfig', () => {
       JSON.stringify({
       JSON.stringify({
         agents: {
         agents: {
           oracle: {
           oracle: {
-            model: 'openai/gpt-5.5',
+            model: 'openai/gpt-5.6',
             prompt: 'This is now allowed for built-in agents.',
             prompt: 'This is now allowed for built-in agents.',
           },
           },
         },
         },
@@ -113,7 +113,7 @@ describe('loadPluginConfig', () => {
       JSON.stringify({
       JSON.stringify({
         agents: {
         agents: {
           orchestrator: {
           orchestrator: {
-            model: 'openai/gpt-5.5',
+            model: 'openai/gpt-5.6',
             orchestratorPrompt: 'This must be rejected.',
             orchestratorPrompt: 'This must be rejected.',
           },
           },
         },
         },
@@ -789,7 +789,7 @@ describe('preset resolution', () => {
         presets: {
         presets: {
           openai: {
           openai: {
             oracle: {
             oracle: {
-              model: 'openai/gpt-5.5',
+              model: 'openai/gpt-5.6',
               options: { textVerbosity: 'low' },
               options: { textVerbosity: 'low' },
             },
             },
           },
           },
@@ -803,7 +803,7 @@ describe('preset resolution', () => {
     );
     );
 
 
     const config = loadPluginConfig(projectDir);
     const config = loadPluginConfig(projectDir);
-    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.5');
+    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.6');
     // deepMerge should combine both option keys
     // deepMerge should combine both option keys
     expect(config.agents?.oracle?.options).toEqual({
     expect(config.agents?.oracle?.options).toEqual({
       textVerbosity: 'low',
       textVerbosity: 'low',
@@ -850,7 +850,7 @@ describe('preset resolution', () => {
         presets: {
         presets: {
           concise: {
           concise: {
             oracle: {
             oracle: {
-              model: 'openai/gpt-5.5',
+              model: 'openai/gpt-5.6',
               options: { textVerbosity: 'low' },
               options: { textVerbosity: 'low' },
             },
             },
           },
           },
@@ -864,7 +864,7 @@ describe('preset resolution', () => {
     );
     );
 
 
     const config = loadPluginConfig(projectDir);
     const config = loadPluginConfig(projectDir);
-    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.5');
+    expect(config.agents?.oracle?.model).toBe('openai/gpt-5.6');
     // root wins over preset for same key
     // root wins over preset for same key
     expect(config.agents?.oracle?.options).toEqual({
     expect(config.agents?.oracle?.options).toEqual({
       textVerbosity: 'high',
       textVerbosity: 'high',

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

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

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

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

+ 3 - 3
src/hooks/foreground-fallback/index.test.ts

@@ -907,7 +907,7 @@ describe('ForegroundFallbackManager resolveChain cross-agent isolation', () => {
     const { client, mocks } = createMockClient();
     const { client, mocks } = createMockClient();
     const mgr = new ForegroundFallbackManager(
     const mgr = new ForegroundFallbackManager(
       client,
       client,
-      { orchestrator: ['openai/gpt-5.4', 'new-api/glm-5.2'] },
+      { orchestrator: ['openai/gpt-5.6', 'new-api/glm-5.2'] },
       true,
       true,
     );
     );
 
 
@@ -918,13 +918,13 @@ describe('ForegroundFallbackManager resolveChain cross-agent isolation', () => {
           sessionID: 'compaction-sess',
           sessionID: 'compaction-sess',
           agent: 'compaction', // NOT a known omos built-in agent
           agent: 'compaction', // NOT a known omos built-in agent
           providerID: 'openai',
           providerID: 'openai',
-          modelID: 'gpt-5.4',
+          modelID: 'gpt-5.6',
           error: { message: 'rate limit exceeded' },
           error: { message: 'rate limit exceeded' },
         },
         },
       },
       },
     });
     });
 
 
-    // compaction's model (openai/gpt-5.4) matches orchestrator's chain
+    // compaction's model (openai/gpt-5.6) matches orchestrator's chain
     // → should fall back to the next untried model in that chain
     // → should fall back to the next untried model in that chain
     expect(mocks.promptAsync).toHaveBeenCalledTimes(1);
     expect(mocks.promptAsync).toHaveBeenCalledTimes(1);
     const call = mocks.promptAsync.mock.calls[0] as [
     const call = mocks.promptAsync.mock.calls[0] as [

+ 2 - 2
src/interview/interview.test.ts

@@ -844,7 +844,7 @@ describe('interview service', () => {
             info: {
             info: {
               sessionID,
               sessionID,
               providerID: 'openai',
               providerID: 'openai',
-              modelID: 'gpt-5.4-mini',
+              modelID: 'gpt-5.6-luna',
             },
             },
           },
           },
         },
         },
@@ -856,7 +856,7 @@ describe('interview service', () => {
       const call = ctx.client.session.promptAsync.mock.calls[0]?.[0];
       const call = ctx.client.session.promptAsync.mock.calls[0]?.[0];
       expect(call.body.model).toEqual({
       expect(call.body.model).toEqual({
         providerID: 'openai',
         providerID: 'openai',
-        modelID: 'gpt-5.4-mini',
+        modelID: 'gpt-5.6-luna',
       });
       });
 
 
       await fs.rm(tempDir, { recursive: true, force: true });
       await fs.rm(tempDir, { recursive: true, force: true });

+ 3 - 3
src/skills/oh-my-opencode-slim/SKILL.md

@@ -122,13 +122,13 @@ Edit the active preset under `presets.<preset>.<agent>`:
   "presets": {
   "presets": {
     "openai": {
     "openai": {
       "orchestrator": {
       "orchestrator": {
-        "model": "openai/gpt-5.5",
+        "model": "openai/gpt-5.6-terra",
         "variant": "high",
         "variant": "high",
         "skills": ["*"],
         "skills": ["*"],
         "mcps": ["*", "!context7"]
         "mcps": ["*", "!context7"]
       },
       },
       "librarian": {
       "librarian": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "low",
         "variant": "low",
         "skills": [],
         "skills": [],
         "mcps": ["websearch", "context7", "gh_grep"]
         "mcps": ["websearch", "context7", "gh_grep"]
@@ -233,7 +233,7 @@ Use this shape as a starting point:
 {
 {
   "agents": {
   "agents": {
     "api-reviewer": {
     "api-reviewer": {
-      "model": "openai/gpt-5.5",
+      "model": "openai/gpt-5.6",
       "variant": "high",
       "variant": "high",
       "prompt": "You review API design, compatibility, error semantics, and migration risk. Return concise findings with file references.",
       "prompt": "You review API design, compatibility, error semantics, and migration risk. Return concise findings with file references.",
       "orchestratorPrompt": "Delegate to @api-reviewer for API contract changes, public SDK changes, backwards-compatibility questions, or migration-risk review. Do not use it for routine implementation.",
       "orchestratorPrompt": "Delegate to @api-reviewer for API contract changes, public SDK changes, backwards-compatibility questions, or migration-risk review. Do not use it for routine implementation.",

+ 2 - 2
src/skills/release-smoke-test/SKILL.md

@@ -119,13 +119,13 @@ tarball install.
 mkdir -p "$SMOKE/config"
 mkdir -p "$SMOKE/config"
 cat > "$SMOKE/config/opencode.json" <<EOF
 cat > "$SMOKE/config/opencode.json" <<EOF
 {
 {
-  "model": "openai/gpt-5.5-fast",
+  "model": "openai/gpt-5.6-fast",
   "plugin": [
   "plugin": [
     "file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js"
     "file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js"
   ],
   ],
   "agent": {
   "agent": {
     "orchestrator": {
     "orchestrator": {
-      "model": "openai/gpt-5.5-fast"
+      "model": "openai/gpt-5.6-fast"
     }
     }
   }
   }
 }
 }

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

@@ -159,7 +159,7 @@ describe('council_session tool', () => {
         councillorResults: [
         councillorResults: [
           {
           {
             name: 'alpha',
             name: 'alpha',
-            model: 'openai/gpt-5.4-mini',
+            model: 'openai/gpt-5.6-luna',
             status: 'completed',
             status: 'completed',
             result: 'Alpha says yes',
             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.
  * 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.6-luna, β: gemini-3-pro"
  */
  */
 function formatModelComposition(
 function formatModelComposition(
   councillorResults: Array<{ name: string; model: string }>,
   councillorResults: Array<{ name: string; model: string }>,

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

@@ -101,7 +101,7 @@ describe('createPresetManager', () => {
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
           },
           },
           powerful: {
           powerful: {
-            orchestrator: { model: 'openai/gpt-5.5' },
+            orchestrator: { model: 'openai/gpt-5.6' },
           },
           },
         },
         },
       };
       };
@@ -125,7 +125,7 @@ describe('createPresetManager', () => {
         preset: 'cheap',
         preset: 'cheap',
         presets: {
         presets: {
           cheap: { orchestrator: { model: 'anthropic/claude-3.5-haiku' } },
           cheap: { orchestrator: { model: 'anthropic/claude-3.5-haiku' } },
-          powerful: { orchestrator: { model: 'openai/gpt-5.5' } },
+          powerful: { orchestrator: { model: 'openai/gpt-5.6' } },
         },
         },
       };
       };
       const manager = createPresetManager(ctx, config);
       const manager = createPresetManager(ctx, config);
@@ -161,7 +161,7 @@ describe('createPresetManager', () => {
         presets: {
         presets: {
           cheap: {
           cheap: {
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
-            explorer: { model: 'openai/gpt-5.4-mini' },
+            explorer: { model: 'openai/gpt-5.6-luna' },
           },
           },
         },
         },
       };
       };
@@ -187,8 +187,8 @@ describe('createPresetManager', () => {
     test('updates the TUI snapshot after a successful preset switch', async () => {
     test('updates the TUI snapshot after a successful preset switch', async () => {
       recordTuiAgentModels({
       recordTuiAgentModels({
         agentModels: {
         agentModels: {
-          explorer: 'openai/gpt-5.4-mini',
-          fixer: 'openai/gpt-5.4-mini',
+          explorer: 'openai/gpt-5.6-luna',
+          fixer: 'openai/gpt-5.6-luna',
         },
         },
       });
       });
 
 
@@ -197,7 +197,7 @@ describe('createPresetManager', () => {
         presets: {
         presets: {
           cheap: {
           cheap: {
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
             orchestrator: { model: 'anthropic/claude-3.5-haiku' },
-            explorer: { model: 'openai/gpt-5.5' },
+            explorer: { model: 'openai/gpt-5.6' },
           },
           },
         },
         },
       };
       };
@@ -210,8 +210,8 @@ describe('createPresetManager', () => {
       );
       );
 
 
       expect(readTuiSnapshot().agentModels).toEqual({
       expect(readTuiSnapshot().agentModels).toEqual({
-        explorer: 'openai/gpt-5.5',
-        fixer: 'openai/gpt-5.4-mini',
+        explorer: 'openai/gpt-5.6',
+        fixer: 'openai/gpt-5.6-luna',
         orchestrator: 'anthropic/claude-3.5-haiku',
         orchestrator: 'anthropic/claude-3.5-haiku',
       });
       });
     });
     });
@@ -356,7 +356,7 @@ describe('createPresetManager', () => {
       setActiveRuntimePreset('cheap');
       setActiveRuntimePreset('cheap');
       recordTuiAgentModels({
       recordTuiAgentModels({
         agentModels: {
         agentModels: {
-          explorer: 'openai/gpt-5.4-mini',
+          explorer: 'openai/gpt-5.6-luna',
         },
         },
       });
       });
 
 
@@ -527,7 +527,7 @@ describe('createPresetManager', () => {
         presets: {
         presets: {
           fallback: {
           fallback: {
             orchestrator: {
             orchestrator: {
-              model: ['anthropic/claude-3.5-haiku', 'openai/gpt-5.5'],
+              model: ['anthropic/claude-3.5-haiku', 'openai/gpt-5.6'],
             },
             },
           },
           },
         },
         },
@@ -609,7 +609,7 @@ describe('createPresetManager', () => {
       const config: PluginConfig = {
       const config: PluginConfig = {
         presets: {
         presets: {
           cheap: { orchestrator: { model: 'anthropic/claude-3.5-haiku' } },
           cheap: { orchestrator: { model: 'anthropic/claude-3.5-haiku' } },
-          powerful: { orchestrator: { model: 'openai/gpt-5.5' } },
+          powerful: { orchestrator: { model: 'openai/gpt-5.6' } },
         },
         },
       };
       };
       const manager = createPresetManager(ctx, config);
       const manager = createPresetManager(ctx, config);

+ 12 - 12
src/tui-state.test.ts

@@ -31,8 +31,8 @@ describe('tui-state persistence', () => {
   test('persists enabled agent models', () => {
   test('persists enabled agent models', () => {
     recordTuiAgentModels({
     recordTuiAgentModels({
       agentModels: {
       agentModels: {
-        explorer: 'openai/gpt-5.4-mini',
-        fixer: 'openai/gpt-5.4-mini',
+        explorer: 'openai/gpt-5.6-luna',
+        fixer: 'openai/gpt-5.6-luna',
       },
       },
       agentVariants: {
       agentVariants: {
         explorer: 'low',
         explorer: 'low',
@@ -43,8 +43,8 @@ describe('tui-state persistence', () => {
     const snapshot = readTuiSnapshot();
     const snapshot = readTuiSnapshot();
 
 
     expect(snapshot.agentModels).toEqual({
     expect(snapshot.agentModels).toEqual({
-      explorer: 'openai/gpt-5.4-mini',
-      fixer: 'openai/gpt-5.4-mini',
+      explorer: 'openai/gpt-5.6-luna',
+      fixer: 'openai/gpt-5.6-luna',
     });
     });
     expect(snapshot.agentVariants).toEqual({
     expect(snapshot.agentVariants).toEqual({
       explorer: 'low',
       explorer: 'low',
@@ -56,18 +56,18 @@ describe('tui-state persistence', () => {
     recordTuiAgentModels({
     recordTuiAgentModels({
       agentModels: {
       agentModels: {
         orchestrator: 'default',
         orchestrator: 'default',
-        explorer: 'openai/gpt-5.4-mini',
+        explorer: 'openai/gpt-5.6-luna',
       },
       },
     });
     });
 
 
     recordTuiAgentModel({
     recordTuiAgentModel({
       agentName: 'orchestrator',
       agentName: 'orchestrator',
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
     });
     });
 
 
     expect(readTuiSnapshot().agentModels).toEqual({
     expect(readTuiSnapshot().agentModels).toEqual({
-      orchestrator: 'openai/gpt-5.5',
-      explorer: 'openai/gpt-5.4-mini',
+      orchestrator: 'openai/gpt-5.6',
+      explorer: 'openai/gpt-5.6-luna',
     });
     });
   });
   });
 
 
@@ -75,7 +75,7 @@ describe('tui-state persistence', () => {
     recordTuiAgentModels({
     recordTuiAgentModels({
       agentModels: {
       agentModels: {
         orchestrator: 'default',
         orchestrator: 'default',
-        explorer: 'openai/gpt-5.4-mini',
+        explorer: 'openai/gpt-5.6-luna',
       },
       },
       agentVariants: {
       agentVariants: {
         explorer: 'low',
         explorer: 'low',
@@ -84,7 +84,7 @@ describe('tui-state persistence', () => {
 
 
     recordTuiAgentModel({
     recordTuiAgentModel({
       agentName: 'orchestrator',
       agentName: 'orchestrator',
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       variant: 'high',
       variant: 'high',
     });
     });
 
 
@@ -108,7 +108,7 @@ describe('tui-state persistence', () => {
       JSON.stringify({
       JSON.stringify({
         version: 1,
         version: 1,
         updatedAt: Date.now(),
         updatedAt: Date.now(),
-        agentModels: { explorer: 'openai/gpt-5.4-mini' },
+        agentModels: { explorer: 'openai/gpt-5.6-luna' },
         configInvalid: true,
         configInvalid: true,
         configInvalidByProject: { old: true },
         configInvalidByProject: { old: true },
       }),
       }),
@@ -116,7 +116,7 @@ describe('tui-state persistence', () => {
 
 
     const snapshot = readTuiSnapshot();
     const snapshot = readTuiSnapshot();
     expect(snapshot.agentModels).toEqual({
     expect(snapshot.agentModels).toEqual({
-      explorer: 'openai/gpt-5.4-mini',
+      explorer: 'openai/gpt-5.6-luna',
     });
     });
     expect(snapshot.agentVariants).toEqual({});
     expect(snapshot.agentVariants).toEqual({});
   });
   });

+ 4 - 4
src/tui.test.ts

@@ -26,8 +26,8 @@ describe('tui sidebar agents', () => {
     const agentNames = getSidebarAgentNames(
     const agentNames = getSidebarAgentNames(
       createSnapshot({
       createSnapshot({
         agentModels: {
         agentModels: {
-          explorer: 'openai/gpt-5.4-mini',
-          fixer: 'openai/gpt-5.4-mini',
+          explorer: 'openai/gpt-5.6-luna',
+          fixer: 'openai/gpt-5.6-luna',
         },
         },
       }),
       }),
     );
     );
@@ -50,9 +50,9 @@ describe('tui sidebar agents', () => {
 
 
 describe('splitSidebarModelId', () => {
 describe('splitSidebarModelId', () => {
   test('splits provider from model at the first slash', () => {
   test('splits provider from model at the first slash', () => {
-    expect(splitSidebarModelId('openai/gpt-5.5-fast')).toEqual({
+    expect(splitSidebarModelId('openai/gpt-5.6-fast')).toEqual({
       provider: 'openai',
       provider: 'openai',
-      model: 'gpt-5.5-fast',
+      model: 'gpt-5.6-fast',
     });
     });
     expect(
     expect(
       splitSidebarModelId(
       splitSidebarModelId(

+ 1 - 1
src/utils/session.ts

@@ -51,7 +51,7 @@ export async function abortSessionWithTimeout(
 
 
 /**
 /**
  * Extract the short model label from a "provider/model" string.
  * 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.6-luna" → "gpt-5.6-luna"
  */
  */
 export function shortModelLabel(model: string): string {
 export function shortModelLabel(model: string): string {
   return model.split('/').pop() ?? model;
   return model.split('/').pop() ?? model;