Browse Source

feat(preset): move openai preset to GPT-5.6 model family

OpenAI's GPT-5.6 lineup replaces the retired 5.4/5.5 models
(opencode models --refresh):

- orchestrator: gpt-5.6-terra (medium) — mid-tier gpt-mini family
- oracle:       gpt-5.6-sol (high)    — flagship gpt family
- librarian:    gpt-5.6-luna (low)    — small gpt-nano family
- explorer:     gpt-5.6-luna (low)
- designer:     gpt-5.6-luna (medium)
- fixer:        gpt-5.6-luna (medium)

gpt-5.3-codex-spark is unaffected and stays where referenced.
All docs, READMEs (en/zh/ja/ko), and test fixtures migrated off the
legacy 5.4/5.5 ids; generic flagship examples now use gpt-5.6.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Alvin Unreal 3 weeks ago
parent
commit
e5f08229a1

+ 18 - 18
README.ja-JP.md

@@ -151,12 +151,12 @@ bun run build
   "preset": "openai",
   "presets": {
     "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": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -310,12 +310,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -351,12 +351,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
+      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
@@ -392,12 +392,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -482,12 +482,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
+      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
@@ -523,7 +523,7 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -564,12 +564,12 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <td colspan="2">
-      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.4-mini</code>
+      <b>Recommended Models:</b> <code>cerebras/zai-glm-4.7</code> <code>fireworks-ai/accounts/fireworks/routers/kimi-k2p5-turbo</code> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
@@ -611,7 +611,7 @@ Worktrees は、Git worktree を `.slim/worktrees/<slug>/` 配下の安全で隔
   </tr>
   <tr>
     <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>
   </tr>
   <tr>

+ 18 - 18
README.ko-KR.md

@@ -149,12 +149,12 @@ bun run build
   "preset": "openai",
   "presets": {
     "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": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -308,12 +308,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   <tr>
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.5</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-terra</code>
     </td>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -349,12 +349,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   <tr>
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -390,12 +390,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   <tr>
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.5 (high)</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-sol (high)</code>
     </td>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -480,12 +480,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   <tr>
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -521,7 +521,7 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   <tr>
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
@@ -562,12 +562,12 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   <tr>
     <td colspan="2">
-      <b>기본 모델:</b> <code>openai/gpt-5.4-mini</code>
+      <b>기본 모델:</b> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -609,7 +609,7 @@ Worktrees는 Git worktree를 `.slim/worktrees/<slug>/` 아래의 안전하고 
   </tr>
   <tr>
     <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>
   </tr>
   <tr>

+ 16 - 16
README.md

@@ -147,12 +147,12 @@ The default generated configuration includes both `openai` and `opencode-go` pre
   "preset": "openai",
   "presets": {
     "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": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -343,12 +343,12 @@ rules.
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -384,7 +384,7 @@ rules.
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -425,12 +425,12 @@ rules.
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -515,7 +515,7 @@ rules.
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -556,7 +556,7 @@ rules.
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -597,12 +597,12 @@ rules.
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -644,7 +644,7 @@ rules.
   </tr>
   <tr>
     <td colspan="2">
-      <b>Default Model:</b> <code>openai/gpt-5.4-mini</code> - <i>configure a vision-capable model to enable</i>
+      <b>Default Model:</b> <code>openai/gpt-5.6-luna</code> - <i>configure a vision-capable model to enable</i>
     </td>
   </tr>
   <tr>

+ 16 - 16
README.zh-CN.md

@@ -144,12 +144,12 @@ bun run build
   "preset": "openai",
   "presets": {
     "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": {
       "orchestrator": { "model": "opencode-go/glm-5.2", "skills": [ "*" ], "mcps": [ "*", "!context7" ] },
@@ -303,12 +303,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   <tr>
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.5 (medium)</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-terra (medium)</code>
     </td>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -344,7 +344,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   <tr>
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.4-mini</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
@@ -385,12 +385,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   <tr>
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.5 (high)</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-sol (high)</code>
     </td>
   </tr>
   <tr>
     <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>
   </tr>
   <tr>
@@ -475,7 +475,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   <tr>
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.4-mini</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
@@ -516,7 +516,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   <tr>
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.4-mini</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna</code>
     </td>
   </tr>
   <tr>
@@ -557,12 +557,12 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   <tr>
     <td colspan="2">
-      <b>默认模型:</b> <code>openai/gpt-5.5 (low)</code>
+      <b>默认模型:</b> <code>openai/gpt-5.6-luna (medium)</code>
     </td>
   </tr>
   <tr>
     <td colspan="2">
-      <b>推荐模型:</b> <code>openai/gpt-5.5 (low)</code>
+      <b>推荐模型:</b> <code>openai/gpt-5.6-luna (medium)</code>
     </td>
   </tr>
   <tr>
@@ -604,7 +604,7 @@ Worktrees 将 Git worktree 作为安全、隔离的编码通道管理,默认
   </tr>
   <tr>
     <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>
   </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",
       "args": [],
       "description": "Claude Code subscription agent for deep research",
-      "wrapperModel": "openai/gpt-5.4-mini",
+      "wrapperModel": "openai/gpt-5.6-luna",
       "permissionMode": "ask",
       "timeoutMs": 300000
     },

+ 2 - 2
docs/authors-preset.md

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

+ 4 - 4
docs/configuration.md

@@ -85,8 +85,8 @@ All config files support **JSONC** (JSON with Comments):
   /* Agent model mappings */
   "presets": {
     "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",
       "args": [],
       "description": "Claude Code subscription agent for deep research",
-      "wrapperModel": "openai/gpt-5.4-mini",
+      "wrapperModel": "openai/gpt-5.6-luna",
       "permissionMode": "ask",
       "timeoutMs": 300000
     },
@@ -296,7 +296,7 @@ teaches the orchestrator exactly when to delegate to it.
 {
   "agents": {
     "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.",
       "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",
   "presets": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5" }
+      "council": { "model": "openai/gpt-5.6" }
     }
   },
   "council": {
     "presets": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
+        "alpha": { "model": "openai/gpt-5.6-luna" },
         "beta": { "model": "google/gemini-3-pro" },
         "gamma": { "model": "openai/gpt-5.3-codex" }
       }
@@ -119,7 +119,7 @@ Then use it directly:
     "councillor_retries": 3,
     "presets": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" }
+        "alpha": { "model": "openai/gpt-5.6-luna" }
       }
     }
   }
@@ -157,7 +157,7 @@ council. Entries are `provider/model` strings or `{ "id", "variant" }` objects:
       "review": {
         "reviewer": {
           "model": [
-            "openai/gpt-5.5",
+            "openai/gpt-5.6",
             { "id": "google/gemini-3-pro", "variant": "high" },
             "anthropic/claude-opus-4-6"
           ],
@@ -182,7 +182,7 @@ Configure it using the normal agent system:
 {
   "presets": {
     "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": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5" }
+      "council": { "model": "openai/gpt-5.6" }
     }
   },
   "council": {
     "presets": {
       "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": {
     "openai": {
-      "council": { "model": "openai/gpt-5.5" }
+      "council": { "model": "openai/gpt-5.6" }
     }
   },
   "council": {
     "default_preset": "balanced",
     "presets": {
       "balanced": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
+        "alpha": { "model": "openai/gpt-5.6-luna" },
         "beta": { "model": "google/gemini-3-pro" },
         "gamma": { "model": "anthropic/claude-opus-4-6" }
       }
@@ -277,8 +277,8 @@ Councillor models always come from:
     "councillor_execution_mode": "serial",
     "presets": {
       "default": {
-        "alpha": { "model": "openai/gpt-5.4-mini" },
-        "beta": { "model": "openai/gpt-5.4-mini" }
+        "alpha": { "model": "openai/gpt-5.6-luna" },
+        "beta": { "model": "openai/gpt-5.6-luna" }
       }
     }
   }
@@ -300,7 +300,7 @@ Each councillor can receive its own steering prompt:
     "presets": {
       "review-board": {
         "reviewer": {
-          "model": "openai/gpt-5.4-mini",
+          "model": "openai/gpt-5.6-luna",
           "prompt": "Focus on bugs, edge cases, and failure modes."
         },
         "architect": {
@@ -358,7 +358,7 @@ Council responses include a footer like:
 
 ```text
 ---
-*Council: 2/3 councillors responded (alpha: gpt-5.4-mini, beta: gemini-3-pro)*
+*Council: 2/3 councillors responded (alpha: gpt-5.6-luna, beta: gemini-3-pro)*
 ```
 
 ---
@@ -424,7 +424,7 @@ Prefer this instead:
 {
   "presets": {
     "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
 
-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
 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 |
 |-------|-------|
-| 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
 
@@ -51,38 +51,38 @@ setting the top-level `preset` field:
   "presets": {
     "openai": {
       "orchestrator": {
-        "model": "openai/gpt-5.5",
+        "model": "openai/gpt-5.6-terra",
         "variant": "medium",
         "skills": ["*"],
         "mcps": ["*", "!context7"]
       },
       "oracle": {
-        "model": "openai/gpt-5.5",
+        "model": "openai/gpt-5.6-sol",
         "variant": "high",
         "skills": ["simplify"],
         "mcps": []
       },
       "librarian": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "low",
         "skills": [],
         "mcps": ["websearch", "context7", "gh_grep"]
       },
       "explorer": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "low",
         "skills": [],
         "mcps": []
       },
       "designer": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "medium",
         "skills": [],
         "mcps": []
       },
       "fixer": {
-        "model": "openai/gpt-5.5",
-        "variant": "low",
+        "model": "openai/gpt-5.6-luna",
+        "variant": "medium",
         "skills": [],
         "mcps": []
       }

+ 5 - 5
docs/preset-switching.md

@@ -24,11 +24,11 @@ Switch agent model presets at runtime without restarting OpenCode using the `/pr
   "presets": {
     "cheap": {
       "orchestrator": { "model": "anthropic/claude-3.5-haiku" },
-      "explorer": { "model": "openai/gpt-5.4-mini" },
+      "explorer": { "model": "openai/gpt-5.6-luna" },
       "oracle": { "model": "anthropic/claude-sonnet-4-6" }
     },
     "powerful": {
-      "orchestrator": { "model": "openai/gpt-5.5" },
+      "orchestrator": { "model": "openai/gpt-5.6" },
       "oracle": { "model": "anthropic/claude-opus-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:
   cheap ← active
     orchestrator → anthropic/claude-3.5-haiku
-    explorer → openai/gpt-5.4-mini
+    explorer → openai/gpt-5.6-luna
     oracle → anthropic/claude-sonnet-4-6
   powerful
-    orchestrator → openai/gpt-5.5
+    orchestrator → openai/gpt-5.6
     oracle → anthropic/claude-opus-4-6
 
 Usage: /preset <name> to switch.
@@ -92,7 +92,7 @@ Usage: /preset <name> to switch.
 
 ```
 Switched to preset "powerful":
-orchestrator → model: openai/gpt-5.5
+orchestrator → model: openai/gpt-5.6
 oracle → model: anthropic/claude-opus-4-6
 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",
     "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": [] },
-        "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',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'completed',
         result:
           'Consider Fastify for better performance and built-in type validation.',
@@ -30,7 +30,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain('**Original Prompt**:');
     expect(formatted).toContain(originalPrompt);
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
-    expect(formatted).toContain('**beta** (gpt-5.5):');
+    expect(formatted).toContain('**beta** (gpt-5.6):');
     expect(formatted).toContain(
       'Use Express.js with TypeScript interfaces for type safety.',
     );
@@ -57,7 +57,7 @@ describe('formatCouncillorResults', () => {
       },
       {
         name: 'beta',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'timed_out',
         error: 'Request timed out after 180000ms',
       },
@@ -86,7 +86,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain(
       '**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):');
   });
 
@@ -100,7 +100,7 @@ describe('formatCouncillorResults', () => {
       },
       {
         name: 'beta',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'error',
         error: 'Provider error',
       },
@@ -116,7 +116,7 @@ describe('formatCouncillorResults', () => {
     expect(formatted).toContain('**Councillor Responses**:');
     expect(formatted).toContain('All councillors failed to produce output:');
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
-    expect(formatted).toContain('**beta** (gpt-5.5):');
+    expect(formatted).toContain('**beta** (gpt-5.6):');
     expect(formatted).toContain('Request timed out');
     expect(formatted).toContain('Provider error');
   });
@@ -131,7 +131,7 @@ describe('formatCouncillorResults', () => {
       },
       {
         name: 'beta',
-        model: 'openai/gpt-5.5',
+        model: 'openai/gpt-5.6',
         status: 'completed',
         result: 'Another valid response',
       },
@@ -144,7 +144,7 @@ describe('formatCouncillorResults', () => {
 
     expect(formatted).toContain('**alpha** (claude-opus-4-6):');
     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('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', () => {
     const config: PluginConfig = {
       agents: {
-        explorer: { model: 'openai/gpt-5.4-mini' },
+        explorer: { model: 'openai/gpt-5.6-luna' },
         reviewer: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           prompt: 'You are the custom reviewer agent.',
         },
       },
@@ -21,7 +21,7 @@ describe('custom-agent creation', () => {
 
     const customAgent = agents.find((agent) => agent.name === 'reviewer');
     expect(customAgent).toBeDefined();
-    expect(customAgent?.config.model).toBe('openai/gpt-5.5');
+    expect(customAgent?.config.model).toBe('openai/gpt-5.6');
     expect(customAgent?.config.prompt).toBe(
       'You are the custom reviewer agent.',
     );
@@ -31,7 +31,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
       agents: {
         'test-auditor': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           prompt: 'You are a custom subagent for auditing.',
           orchestratorPrompt:
             '@test-auditor\n- Role: Compliance audit specialist',
@@ -83,7 +83,7 @@ describe('custom-agent creation', () => {
       disabled_agents: ['test-auditor', 'designer'],
       agents: {
         'test-auditor': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           prompt: 'You are a disabled custom agent.',
         },
       },
@@ -101,7 +101,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
       agents: {
         'unsafe/name': {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
         },
       },
     };
@@ -113,7 +113,7 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
       agents: {
         janitor: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           orchestratorPrompt: '@cleanup\n- Role: Cleanup specialist',
         },
       },
@@ -136,7 +136,7 @@ describe('custom-agent creation', () => {
           timeoutMs: 0,
           permissionMode: 'ask',
           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?.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(orchestrator?.config.prompt).toContain('@claude-research');
   });
@@ -217,7 +217,7 @@ describe('custom-agent creation', () => {
   test('rejects acpAgents that conflict with custom agents', () => {
     const config: PluginConfig = {
       agents: {
-        bridge: { model: 'openai/gpt-5.4-mini' },
+        bridge: { model: 'openai/gpt-5.6-luna' },
       },
       acpAgents: {
         bridge: {
@@ -257,11 +257,11 @@ describe('custom-agent creation', () => {
     const config: PluginConfig = {
       agents: {
         explorer: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           displayName: 'fancy-explorer',
         },
         janitor: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           orchestratorPrompt:
             'Please use @janitor to clean up after @explorer has completed.',
         },
@@ -314,7 +314,7 @@ describe('custom-agent creation', () => {
     const configOnlyAcp: PluginConfig = {
       agents: {
         explorer: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           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.
     const config: PluginConfig = {
       agents: {
-        oracle: { model: 'openai/gpt-5.5' },
+        oracle: { model: 'openai/gpt-5.6' },
       },
       council: {
         ...councilConfig(),
@@ -583,7 +583,7 @@ describe('council agent model resolution', () => {
       master: { model: 'anthropic/claude-opus-4-6' },
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
       },
     };
@@ -608,7 +608,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           options: { textVerbosity: 'low' },
         },
       },
@@ -640,7 +640,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           variant: 'high',
           temperature: 0.7,
           options: { textVerbosity: 'low', reasoningEffort: 'medium' },
@@ -649,7 +649,7 @@ describe('options passthrough', () => {
     };
     const agents = createAgents(config);
     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.temperature).toBe(0.7);
     expect(oracle?.config.options).toEqual({
@@ -661,7 +661,7 @@ describe('options passthrough', () => {
   test('options are absent when not configured', () => {
     const config: PluginConfig = {
       agents: {
-        oracle: { model: 'openai/gpt-5.5' },
+        oracle: { model: 'openai/gpt-5.6' },
       },
     };
     const agents = createAgents(config);
@@ -673,7 +673,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           options: { textVerbosity: 'low' },
         },
       },
@@ -687,7 +687,7 @@ describe('options passthrough', () => {
     const config: PluginConfig = {
       agents: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           options: { reasoningEffort: 'medium' },
         },
       },
@@ -723,7 +723,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('accepts options alongside other fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       variant: 'high',
       temperature: 0.7,
       options: { textVerbosity: 'low' },
@@ -736,7 +736,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('config without options is valid', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
     });
     expect(result.success).toBe(true);
     if (result.success) {
@@ -760,7 +760,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('accepts prompt and orchestratorPrompt override fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       prompt: 'You are a specialized reviewer.',
       orchestratorPrompt: '@reviewer\n- Role: Specialized reviewer',
     });
@@ -775,7 +775,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('rejects empty prompt fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       prompt: '',
     });
     expect(result.success).toBe(false);
@@ -783,7 +783,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('rejects empty orchestratorPrompt fields', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       orchestratorPrompt: '',
     });
     expect(result.success).toBe(false);
@@ -791,7 +791,7 @@ describe('AgentOverrideConfigSchema options validation', () => {
 
   test('rejects description field on overrides', () => {
     const result = AgentOverrideConfigSchema.safeParse({
-      model: 'openai/gpt-5.5',
+      model: 'openai/gpt-5.6',
       description: 'not supported for custom agents',
     } as Record<string, unknown>);
     expect(result.success).toBe(false);
@@ -803,7 +803,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
       agents: {
         oracle: {
-          model: 'openai/gpt-5.5',
+          model: 'openai/gpt-5.6',
           prompt: 'ignored built-in prompt override',
         },
       },
@@ -816,7 +816,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
       agents: {
         explorer: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           orchestratorPrompt: '@explorer\n- Role: should be invalid here',
         },
       },
@@ -830,7 +830,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
       presets: {
         openai: {
           oracle: {
-            model: 'openai/gpt-5.5',
+            model: 'openai/gpt-5.6',
             prompt: 'ignored preset built-in prompt override',
           },
         },
@@ -844,7 +844,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
       agents: {
         orchestrator: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           orchestratorPrompt: '@orchestrator\n- Role: should be invalid here',
         },
       },
@@ -857,7 +857,7 @@ describe('PluginConfigSchema custom-agent-only prompt fields', () => {
     const result = PluginConfigSchema.safeParse({
       agents: {
         janitor: {
-          model: 'openai/gpt-5.4-mini',
+          model: 'openai/gpt-5.6-luna',
           prompt: 'You are Janitor.',
           orchestratorPrompt: '@janitor\n- Role: Cleanup specialist',
         },
@@ -992,8 +992,8 @@ describe('disabled_agents', () => {
     const config: PluginConfig = {
       disabled_agents: ['janitor'],
       agents: {
-        janitor: { model: 'openai/gpt-5.4-mini' },
-        reviewer: { model: 'openai/gpt-5.4-mini' },
+        janitor: { model: 'openai/gpt-5.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: {
             orchestrator: {
               model: [
-                'openai/gpt-5.4-mini',
+                'openai/gpt-5.6-luna',
                 { 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;
     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.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', () => {
@@ -52,13 +52,13 @@ describe('providers', () => {
     expect(agents.orchestrator.model).toBe(
       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.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.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.designer.model).toBe('openai/gpt-5.4-mini');
+    expect(agents.designer.model).toBe('openai/gpt-5.6-luna');
     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.
 export const MODEL_MAPPINGS = {
   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: {
     orchestrator: { model: 'kimi-for-coding/k2p5' },

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

@@ -9,16 +9,16 @@ import {
 describe('CouncillorConfigSchema', () => {
   test('validates config with model and optional variant', () => {
     const result = CouncillorConfigSchema.safeParse({
-      model: 'openai/gpt-5.4-mini',
+      model: 'openai/gpt-5.6-luna',
       variant: 'low',
     });
     expect(result.success).toBe(true);
     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');
       // A single-model config normalizes to a one-entry chain.
       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', () => {
     const result = CouncillorConfigSchema.safeParse({
       model: [
-        'openai/gpt-5.4-mini',
+        'openai/gpt-5.6-luna',
         { id: 'google/gemini-3-pro', variant: 'high' },
       ],
     });
     expect(result.success).toBe(true);
     if (result.success) {
       // 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([
-        { id: 'openai/gpt-5.4-mini', variant: undefined },
+        { id: 'openai/gpt-5.6-luna', variant: undefined },
         { id: 'google/gemini-3-pro', variant: 'high' },
       ]);
     }
@@ -45,10 +45,10 @@ describe('CouncillorConfigSchema', () => {
     const config = {
       master: { model: 'anthropic/claude-opus-4-6' },
       master_timeout: 300000,
-      master_fallback: ['openai/gpt-5.5'],
+      master_fallback: ['openai/gpt-5.6'],
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
       },
     };
@@ -71,7 +71,7 @@ describe('CouncillorConfigSchema', () => {
     const config = {
       presets: {
         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: {
       default: {
         councillors: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
           beta: { model: 'openai/gpt-5.3-codex' },
         },
       },
@@ -122,7 +122,7 @@ test('unwraps legacy nested "councillors" key in preset', () => {
   if (result.success) {
     const preset = result.data.presets.default;
     expect(Object.keys(preset)).toEqual(['alpha', 'beta']);
-    expect(preset.alpha.model).toBe('openai/gpt-5.4-mini');
+    expect(preset.alpha.model).toBe('openai/gpt-5.6-luna');
     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: {
       mixed: {
         councillors: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
         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
     presets: {
       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
     presets: {
       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
     presets: {
       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', () => {
   const config: CouncillorConfig = {
-    model: 'openai/gpt-5.4-mini',
+    model: 'openai/gpt-5.6-luna',
     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', () => {
   const config: CouncillorConfig = {
-    model: 'openai/gpt-5.4-mini',
+    model: 'openai/gpt-5.6-luna',
   };
 
   const result = CouncillorConfigSchema.safeParse(config);
@@ -246,7 +246,7 @@ describe('CouncilPresetSchema', () => {
   test('validates a named preset with multiple councillors', () => {
     const raw = {
       alpha: {
-        model: 'openai/gpt-5.4-mini',
+        model: 'openai/gpt-5.6-luna',
       },
       beta: {
         model: 'openai/gpt-5.3-codex',
@@ -267,7 +267,7 @@ describe('CouncilPresetSchema', () => {
   test('accepts preset with single councillor', () => {
     const raw = {
       solo: {
-        model: 'openai/gpt-5.4-mini',
+        model: 'openai/gpt-5.6-luna',
       },
     };
 
@@ -294,7 +294,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
           beta: { model: 'openai/gpt-5.3-codex' },
           gamma: { model: 'google/gemini-3-pro' },
         },
@@ -315,7 +315,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         custom: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
       },
       default_preset: 'custom',
@@ -341,7 +341,7 @@ describe('CouncilConfigSchema', () => {
     const badConfig = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
       },
       timeout: -1000,
@@ -355,7 +355,7 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
         },
       },
       timeout: 0,
@@ -384,18 +384,18 @@ describe('CouncilConfigSchema', () => {
     const config = {
       presets: {
         default: {
-          alpha: { model: 'openai/gpt-5.4-mini' },
+          alpha: { model: 'openai/gpt-5.6-luna' },
           beta: { model: 'openai/gpt-5.3-codex' },
         },
         fast: {
-          quick: { model: 'openai/gpt-5.4-mini', variant: 'low' },
+          quick: { model: 'openai/gpt-5.6-luna', variant: 'low' },
         },
         thorough: {
           detailed1: {
             model: 'anthropic/claude-opus-4-6',
             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()
   .regex(
     /^[^/\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({
@@ -33,7 +33,7 @@ const CouncillorModelSchema = z
     z.array(z.union([ModelIdSchema, CouncillorModelEntrySchema])).min(1),
   ])
   .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) ' +
       'tried in order until one responds.',
   );
@@ -153,7 +153,7 @@ export const CouncillorExecutionModeSchema = z
  *   "council": {
  *     "presets": {
  *       "default": {
- *         "alpha": { "model": "openai/gpt-5.4-mini" },
+ *         "alpha": { "model": "openai/gpt-5.6-luna" },
  *         "beta":  { "model": "openai/gpt-5.3-codex" },
  *         "gamma": { "model": "google/gemini-3-pro" }
  *       }

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

@@ -96,7 +96,7 @@ describe('loadPluginConfig', () => {
       JSON.stringify({
         agents: {
           oracle: {
-            model: 'openai/gpt-5.5',
+            model: 'openai/gpt-5.6',
             prompt: 'This is now allowed for built-in agents.',
           },
         },
@@ -113,7 +113,7 @@ describe('loadPluginConfig', () => {
       JSON.stringify({
         agents: {
           orchestrator: {
-            model: 'openai/gpt-5.5',
+            model: 'openai/gpt-5.6',
             orchestratorPrompt: 'This must be rejected.',
           },
         },
@@ -789,7 +789,7 @@ describe('preset resolution', () => {
         presets: {
           openai: {
             oracle: {
-              model: 'openai/gpt-5.5',
+              model: 'openai/gpt-5.6',
               options: { textVerbosity: 'low' },
             },
           },
@@ -803,7 +803,7 @@ describe('preset resolution', () => {
     );
 
     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
     expect(config.agents?.oracle?.options).toEqual({
       textVerbosity: 'low',
@@ -850,7 +850,7 @@ describe('preset resolution', () => {
         presets: {
           concise: {
             oracle: {
-              model: 'openai/gpt-5.5',
+              model: 'openai/gpt-5.6',
               options: { textVerbosity: 'low' },
             },
           },
@@ -864,7 +864,7 @@ describe('preset resolution', () => {
     );
 
     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
     expect(config.agents?.oracle?.options).toEqual({
       textVerbosity: 'high',

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

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

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

@@ -58,7 +58,7 @@ function createTestCouncilConfig(overrides?: {
   const councilConfig = CouncilConfigSchema.parse({
     presets: overrides?.presets ?? {
       default: {
-        alpha: { model: 'openai/gpt-5.4-mini' },
+        alpha: { model: 'openai/gpt-5.6-luna' },
         beta: { model: 'openai/gpt-5.3-codex' },
       },
     },
@@ -142,7 +142,7 @@ describe('CouncilManager', () => {
       const config = createTestCouncilConfig({
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.6-luna' },
           },
           custom: {
             beta: { model: 'openai/gpt-5.3-codex' },
@@ -190,7 +190,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              councillor1: { model: 'openai/gpt-5.4-mini' },
+              councillor1: { model: 'openai/gpt-5.6-luna' },
               councillor2: { model: 'openai/gpt-5.3-codex' },
             },
           },
@@ -234,7 +234,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.6-luna' },
             },
             custom: {
               beta: { model: 'openai/gpt-5.3-codex' },
@@ -283,7 +283,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              timeout: { model: 'openai/gpt-5.4-mini' },
+              timeout: { model: 'openai/gpt-5.6-luna' },
               success: { model: 'openai/gpt-5.3-codex' },
             },
           },
@@ -327,7 +327,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             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: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.6-luna' },
               beta: { model: 'openai/gpt-5.3-codex' },
             },
           },
@@ -422,7 +422,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.6-luna' },
             },
           },
         },
@@ -458,7 +458,7 @@ describe('CouncilManager', () => {
       const defaultConfig = createTestCouncilConfig({
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.6-luna' },
           },
           fast: {
             beta: { model: 'openai/gpt-5.3-codex' },
@@ -506,7 +506,7 @@ describe('CouncilManager', () => {
       const config = createTestCouncilConfig({
         presets: {
           default: {
-            alpha: { model: 'openai/gpt-5.4-mini' },
+            alpha: { model: 'openai/gpt-5.6-luna' },
           },
           roled: {
             beta: { model: 'openai/gpt-5.3-codex' },
@@ -625,7 +625,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             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<
         [{ 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(
-        'Council alpha (gpt-5.4-mini)',
+        'Council alpha (gpt-5.6-luna)',
       );
     });
 
@@ -659,7 +659,7 @@ describe('CouncilManager', () => {
           presets: {
             default: {
               alpha: {
-                model: 'openai/gpt-5.4-mini',
+                model: 'openai/gpt-5.6-luna',
                 prompt: 'You are a meticulous reviewer focused on edge cases.',
               },
             },
@@ -706,7 +706,7 @@ describe('CouncilManager', () => {
         council: {
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.6-luna' },
             },
           },
         },
@@ -779,7 +779,7 @@ describe('CouncilManager', () => {
           councillor_retries: 1,
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.6-luna' },
             },
           },
         },
@@ -827,7 +827,7 @@ describe('CouncilManager', () => {
           councillor_retries: 2,
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.6-luna' },
             },
           },
         },
@@ -877,7 +877,7 @@ describe('CouncilManager', () => {
           presets: {
             default: {
               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,
           presets: {
             default: {
-              alpha: { model: 'openai/gpt-5.4-mini' },
+              alpha: { model: 'openai/gpt-5.6-luna' },
             },
           },
         },
@@ -951,7 +951,7 @@ describe('CouncilManager', () => {
           councillor_retries: 1,
           presets: {
             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 mgr = new ForegroundFallbackManager(
       client,
-      { orchestrator: ['openai/gpt-5.4', 'new-api/glm-5.2'] },
+      { orchestrator: ['openai/gpt-5.6', 'new-api/glm-5.2'] },
       true,
     );
 
@@ -918,13 +918,13 @@ describe('ForegroundFallbackManager resolveChain cross-agent isolation', () => {
           sessionID: 'compaction-sess',
           agent: 'compaction', // NOT a known omos built-in agent
           providerID: 'openai',
-          modelID: 'gpt-5.4',
+          modelID: 'gpt-5.6',
           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
     expect(mocks.promptAsync).toHaveBeenCalledTimes(1);
     const call = mocks.promptAsync.mock.calls[0] as [

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

@@ -844,7 +844,7 @@ describe('interview service', () => {
             info: {
               sessionID,
               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];
       expect(call.body.model).toEqual({
         providerID: 'openai',
-        modelID: 'gpt-5.4-mini',
+        modelID: 'gpt-5.6-luna',
       });
 
       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": {
     "openai": {
       "orchestrator": {
-        "model": "openai/gpt-5.5",
+        "model": "openai/gpt-5.6-terra",
         "variant": "high",
         "skills": ["*"],
         "mcps": ["*", "!context7"]
       },
       "librarian": {
-        "model": "openai/gpt-5.4-mini",
+        "model": "openai/gpt-5.6-luna",
         "variant": "low",
         "skills": [],
         "mcps": ["websearch", "context7", "gh_grep"]
@@ -233,7 +233,7 @@ Use this shape as a starting point:
 {
   "agents": {
     "api-reviewer": {
-      "model": "openai/gpt-5.5",
+      "model": "openai/gpt-5.6",
       "variant": "high",
       "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.",

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

@@ -119,13 +119,13 @@ tarball install.
 mkdir -p "$SMOKE/config"
 cat > "$SMOKE/config/opencode.json" <<EOF
 {
-  "model": "openai/gpt-5.5-fast",
+  "model": "openai/gpt-5.6-fast",
   "plugin": [
     "file://$SMOKE/app/node_modules/oh-my-opencode-slim/dist/index.js"
   ],
   "agent": {
     "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: [
           {
             name: 'alpha',
-            model: 'openai/gpt-5.4-mini',
+            model: 'openai/gpt-5.6-luna',
             status: 'completed',
             result: 'Alpha says yes',
           },

+ 1 - 1
src/tools/council.ts

@@ -10,7 +10,7 @@ const z = tool.schema;
 
 /**
  * Formats the model composition string for the council footer.
- * Shows short model labels per councillor: "α: gpt-5.4-mini, β: gemini-3-pro"
+ * Shows short model labels per councillor: "α: gpt-5.6-luna, β: gemini-3-pro"
  */
 function formatModelComposition(
   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' },
           },
           powerful: {
-            orchestrator: { model: 'openai/gpt-5.5' },
+            orchestrator: { model: 'openai/gpt-5.6' },
           },
         },
       };
@@ -125,7 +125,7 @@ describe('createPresetManager', () => {
         preset: 'cheap',
         presets: {
           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);
@@ -161,7 +161,7 @@ describe('createPresetManager', () => {
         presets: {
           cheap: {
             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 () => {
       recordTuiAgentModels({
         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: {
           cheap: {
             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({
-        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',
       });
     });
@@ -356,7 +356,7 @@ describe('createPresetManager', () => {
       setActiveRuntimePreset('cheap');
       recordTuiAgentModels({
         agentModels: {
-          explorer: 'openai/gpt-5.4-mini',
+          explorer: 'openai/gpt-5.6-luna',
         },
       });
 
@@ -527,7 +527,7 @@ describe('createPresetManager', () => {
         presets: {
           fallback: {
             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 = {
         presets: {
           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);

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

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

+ 4 - 4
src/tui.test.ts

@@ -26,8 +26,8 @@ describe('tui sidebar agents', () => {
     const agentNames = getSidebarAgentNames(
       createSnapshot({
         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', () => {
   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',
-      model: 'gpt-5.5-fast',
+      model: 'gpt-5.6-fast',
     });
     expect(
       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.
- * 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 {
   return model.split('/').pop() ?? model;