diff --git a/packages/app/e2e/helpers/agent-bottom-anchor.ts b/packages/app/e2e/helpers/agent-bottom-anchor.ts index 4bd8a30235..b4c2cc8293 100644 --- a/packages/app/e2e/helpers/agent-bottom-anchor.ts +++ b/packages/app/e2e/helpers/agent-bottom-anchor.ts @@ -131,7 +131,7 @@ export async function seedBottomAnchorAgent(input: { const lineCount = Math.max(14, input.lineCount ?? 14); const created = await input.client.createAgent({ provider: "codex", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", thinkingOptionId: "low", modeId: "full-access", cwd: input.cwd, diff --git a/packages/app/e2e/helpers/archive-tab.ts b/packages/app/e2e/helpers/archive-tab.ts index 5c40d8ee16..5bfe2b9011 100644 --- a/packages/app/e2e/helpers/archive-tab.ts +++ b/packages/app/e2e/helpers/archive-tab.ts @@ -109,7 +109,7 @@ export async function createIdleAgent( ): Promise { const created = await client.createAgent({ provider: "codex", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", thinkingOptionId: "low", modeId: "full-access", cwd: input.cwd, diff --git a/packages/app/e2e/helpers/daemon-registry.ts b/packages/app/e2e/helpers/daemon-registry.ts index dd0146890e..b2e7e170d1 100644 --- a/packages/app/e2e/helpers/daemon-registry.ts +++ b/packages/app/e2e/helpers/daemon-registry.ts @@ -2,7 +2,7 @@ export const TEST_HOST_LABEL = "localhost"; export const TEST_PROVIDER_PREFERENCES = { claude: { model: "haiku" }, - codex: { model: "gpt-5.1-codex-mini", thinkingOptionId: "low" }, + codex: { model: "gpt-5.4-mini", thinkingOptionId: "low" }, } as const; export function buildDirectTcpConnection(endpoint: string) { diff --git a/packages/server/src/server/agent/agent-metadata-generator.test.ts b/packages/server/src/server/agent/agent-metadata-generator.test.ts index f2937de701..ade9543ce9 100644 --- a/packages/server/src/server/agent/agent-metadata-generator.test.ts +++ b/packages/server/src/server/agent/agent-metadata-generator.test.ts @@ -11,7 +11,7 @@ import { createAllClients, shutdownProviders } from "./provider-registry.js"; import { generateAndApplyAgentMetadata } from "./agent-metadata-generator.js"; import { createWorktree, validateBranchSlug } from "../../utils/worktree.js"; -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; const shouldRun = !process.env.CI && !!process.env.OPENAI_API_KEY; diff --git a/packages/server/src/server/agent/agent-response-loop.e2e.test.ts b/packages/server/src/server/agent/agent-response-loop.e2e.test.ts index f5f0df66ae..da63dae7fe 100644 --- a/packages/server/src/server/agent/agent-response-loop.e2e.test.ts +++ b/packages/server/src/server/agent/agent-response-loop.e2e.test.ts @@ -15,7 +15,7 @@ import { createAgentMcpServer } from "./mcp-server.js"; import { createAllClients, shutdownProviders } from "./provider-registry.js"; import pino from "pino"; -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; const hasOpenAICredentials = !!process.env.OPENAI_API_KEY; diff --git a/packages/server/src/server/agent/agent-response-loop.test.ts b/packages/server/src/server/agent/agent-response-loop.test.ts index 7920ffbf91..be894c7a55 100644 --- a/packages/server/src/server/agent/agent-response-loop.test.ts +++ b/packages/server/src/server/agent/agent-response-loop.test.ts @@ -156,7 +156,7 @@ describe("generateStructuredAgentResponseWithFallback", () => { schema, providers: [ { provider: "claude", model: "haiku" }, - { provider: "codex", model: "gpt-5.1-codex-mini" }, + { provider: "codex", model: "gpt-5.4-mini" }, ], runner: async (options) => { calls.push({ @@ -186,7 +186,7 @@ describe("generateStructuredAgentResponseWithFallback", () => { schema, providers: [ { provider: "claude", model: "haiku" }, - { provider: "codex", model: "gpt-5.1-codex-mini" }, + { provider: "codex", model: "gpt-5.4-mini" }, ], runner: async (options) => { calls.push({ @@ -198,7 +198,7 @@ describe("generateStructuredAgentResponseWithFallback", () => { }); expect(result).toEqual({ summary: "ok" }); - expect(calls).toEqual([{ provider: "codex", model: "gpt-5.1-codex-mini" }]); + expect(calls).toEqual([{ provider: "codex", model: "gpt-5.4-mini" }]); }); it("falls back when an available provider fails", async () => { @@ -216,7 +216,7 @@ describe("generateStructuredAgentResponseWithFallback", () => { schema, providers: [ { provider: "claude", model: "haiku" }, - { provider: "codex", model: "gpt-5.1-codex-mini" }, + { provider: "codex", model: "gpt-5.4-mini" }, ], runner: async (options) => { calls.push({ @@ -233,7 +233,7 @@ describe("generateStructuredAgentResponseWithFallback", () => { expect(result).toEqual({ summary: "ok" }); expect(calls).toEqual([ { provider: "claude", model: "haiku" }, - { provider: "codex", model: "gpt-5.1-codex-mini" }, + { provider: "codex", model: "gpt-5.4-mini" }, ]); }); @@ -252,7 +252,7 @@ describe("generateStructuredAgentResponseWithFallback", () => { schema, providers: [ { provider: "claude", model: "haiku" }, - { provider: "codex", model: "gpt-5.1-codex-mini" }, + { provider: "codex", model: "gpt-5.4-mini" }, { provider: "opencode", model: "opencode/gpt-5-nano" }, ], runner: async () => { diff --git a/packages/server/src/server/agent/agent-response-loop.ts b/packages/server/src/server/agent/agent-response-loop.ts index 256d4ab117..d99b2c115b 100644 --- a/packages/server/src/server/agent/agent-response-loop.ts +++ b/packages/server/src/server/agent/agent-response-loop.ts @@ -93,7 +93,7 @@ export interface StructuredAgentGenerationWithFallbackOptions { export const DEFAULT_STRUCTURED_GENERATION_PROVIDERS: readonly StructuredGenerationProvider[] = [ { provider: "claude", model: "haiku" }, - { provider: "codex", model: "gpt-5.1-codex-mini", thinkingOptionId: "low" }, + { provider: "codex", model: "gpt-5.4-mini", thinkingOptionId: "low" }, { provider: "opencode", model: "opencode/gpt-5-nano" }, ] as const; diff --git a/packages/server/src/server/agent/provider-manifest.ts b/packages/server/src/server/agent/provider-manifest.ts index 34bdfd86b1..8d27d2daff 100644 --- a/packages/server/src/server/agent/provider-manifest.ts +++ b/packages/server/src/server/agent/provider-manifest.ts @@ -138,7 +138,7 @@ export const AGENT_PROVIDER_DEFINITIONS: AgentProviderDefinition[] = [ voice: { enabled: true, defaultModeId: "auto", - defaultModel: "gpt-5.1-codex-mini", + defaultModel: "gpt-5.4-mini", }, }, { diff --git a/packages/server/src/server/agent/providers/opencode-agent.test.ts b/packages/server/src/server/agent/providers/opencode-agent.test.ts index d31648607b..e6e38f5609 100644 --- a/packages/server/src/server/agent/providers/opencode-agent.test.ts +++ b/packages/server/src/server/agent/providers/opencode-agent.test.ts @@ -124,7 +124,7 @@ const hasOpenCode = isBinaryInstalled("opencode"); m.id.includes("gpt-4.1-nano") || m.id.includes("gpt-4.1-mini") || m.id.includes("gpt-5-nano") || - m.id.includes("gpt-5.1-codex-mini") || + m.id.includes("gpt-5.4-mini") || m.id.includes("gpt-4o-mini"), ); diff --git a/packages/server/src/server/daemon-e2e/agent-basics.e2e.test.ts b/packages/server/src/server/daemon-e2e/agent-basics.e2e.test.ts index 50bc048283..a5ea9b8f70 100644 --- a/packages/server/src/server/daemon-e2e/agent-basics.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/agent-basics.e2e.test.ts @@ -19,8 +19,8 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -// Use gpt-5.1-codex-mini with low thinking preset for faster test execution -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +// Use gpt-5.4-mini with low thinking preset for faster test execution +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; describe("daemon E2E", () => { diff --git a/packages/server/src/server/daemon-e2e/agent-configs.ts b/packages/server/src/server/daemon-e2e/agent-configs.ts index c54035dac9..ca66c17aef 100644 --- a/packages/server/src/server/daemon-e2e/agent-configs.ts +++ b/packages/server/src/server/daemon-e2e/agent-configs.ts @@ -34,7 +34,7 @@ export const agentConfigs = { }, codex: { provider: "codex", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", thinkingOptionId: "low", modes: { full: "full-access", diff --git a/packages/server/src/server/daemon-e2e/agent-operations.e2e.test.ts b/packages/server/src/server/daemon-e2e/agent-operations.e2e.test.ts index 442d6ae03a..6422fce7f0 100644 --- a/packages/server/src/server/daemon-e2e/agent-operations.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/agent-operations.e2e.test.ts @@ -18,8 +18,8 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -// Use gpt-5.1-codex-mini with low thinking preset for faster test execution -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +// Use gpt-5.4-mini with low thinking preset for faster test execution +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; describe("daemon E2E", () => { diff --git a/packages/server/src/server/daemon-e2e/checkout-ship.e2e.test.ts b/packages/server/src/server/daemon-e2e/checkout-ship.e2e.test.ts index 25f0dd784f..d9950c5a7e 100644 --- a/packages/server/src/server/daemon-e2e/checkout-ship.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/checkout-ship.e2e.test.ts @@ -7,7 +7,7 @@ import { execSync } from "child_process"; import { createDaemonTestContext, type DaemonTestContext } from "../test-utils/index.js"; import { createWorktree } from "../../utils/worktree.js"; -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; function tmpCwd(prefix: string): string { diff --git a/packages/server/src/server/daemon-e2e/file-download.e2e.test.ts b/packages/server/src/server/daemon-e2e/file-download.e2e.test.ts index dbce142ae8..6fa381b849 100644 --- a/packages/server/src/server/daemon-e2e/file-download.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/file-download.e2e.test.ts @@ -18,8 +18,8 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -// Use gpt-5.1-codex-mini with low thinking preset for faster test execution -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +// Use gpt-5.4-mini with low thinking preset for faster test execution +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; describe("daemon E2E", () => { diff --git a/packages/server/src/server/daemon-e2e/filesystem.e2e.test.ts b/packages/server/src/server/daemon-e2e/filesystem.e2e.test.ts index 6294c5512a..73c8290679 100644 --- a/packages/server/src/server/daemon-e2e/filesystem.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/filesystem.e2e.test.ts @@ -18,8 +18,8 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -// Use gpt-5.1-codex-mini with low thinking preset for faster test execution -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +// Use gpt-5.4-mini with low thinking preset for faster test execution +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; describe("daemon E2E", () => { diff --git a/packages/server/src/server/daemon-e2e/git-operations.e2e.test.ts b/packages/server/src/server/daemon-e2e/git-operations.e2e.test.ts index 2f5381c86e..f63218a358 100644 --- a/packages/server/src/server/daemon-e2e/git-operations.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/git-operations.e2e.test.ts @@ -174,8 +174,8 @@ function getWorktreeTerminalBootstrapEntries( return terminals as WorktreeTerminalBootstrapEntry[]; } -// Use gpt-5.1-codex-mini with low thinking preset for faster test execution -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +// Use gpt-5.4-mini with low thinking preset for faster test execution +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; describe("daemon E2E", () => { diff --git a/packages/server/src/server/daemon-e2e/images.e2e.test.ts b/packages/server/src/server/daemon-e2e/images.e2e.test.ts index ef7b33ff7a..461c8d4d3b 100644 --- a/packages/server/src/server/daemon-e2e/images.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/images.e2e.test.ts @@ -19,7 +19,7 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +const CODEX_TEST_MODEL = "gpt-5.4-mini"; describe("daemon E2E", () => { let ctx: DaemonTestContext; diff --git a/packages/server/src/server/daemon-e2e/models.e2e.test.ts b/packages/server/src/server/daemon-e2e/models.e2e.test.ts index dc98d1aa04..24a5e65389 100644 --- a/packages/server/src/server/daemon-e2e/models.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/models.e2e.test.ts @@ -19,7 +19,7 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +const CODEX_TEST_MODEL = "gpt-5.4-mini"; function isBinaryInstalled(binary: string): boolean { try { diff --git a/packages/server/src/server/daemon-e2e/permissions-codex.e2e.test.ts b/packages/server/src/server/daemon-e2e/permissions-codex.e2e.test.ts index d1f424ce31..159191cf46 100644 --- a/packages/server/src/server/daemon-e2e/permissions-codex.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/permissions-codex.e2e.test.ts @@ -18,8 +18,8 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -// Use gpt-5.1-codex-mini with low thinking preset for faster test execution -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +// Use gpt-5.4-mini with low thinking preset for faster test execution +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; describe("daemon E2E", () => { diff --git a/packages/server/src/server/daemon-e2e/tool-calls.e2e.test.ts b/packages/server/src/server/daemon-e2e/tool-calls.e2e.test.ts index 51dac983b0..1026812e94 100644 --- a/packages/server/src/server/daemon-e2e/tool-calls.e2e.test.ts +++ b/packages/server/src/server/daemon-e2e/tool-calls.e2e.test.ts @@ -19,8 +19,8 @@ function tmpCwd(): string { return mkdtempSync(path.join(tmpdir(), "daemon-e2e-")); } -// Use gpt-5.1-codex-mini with low thinking preset for faster test execution -const CODEX_TEST_MODEL = "gpt-5.1-codex-mini"; +// Use gpt-5.4-mini with low thinking preset for faster test execution +const CODEX_TEST_MODEL = "gpt-5.4-mini"; const CODEX_TEST_THINKING_OPTION_ID = "low"; type ToolCallItem = Extract; diff --git a/packages/server/src/server/persistence-hooks.test.ts b/packages/server/src/server/persistence-hooks.test.ts index bedcb57348..6a65ce3f74 100644 --- a/packages/server/src/server/persistence-hooks.test.ts +++ b/packages/server/src/server/persistence-hooks.test.ts @@ -143,7 +143,7 @@ describe("persistence hooks", () => { config: { title: "Voice agent (created)", modeId: "default", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", thinkingOptionId: "minimal", systemPrompt: "Use speak first.", mcpServers: { @@ -159,7 +159,7 @@ describe("persistence hooks", () => { expect(buildConfigOverrides(record)).toMatchObject({ cwd: "/tmp/project", modeId: "plan", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", thinkingOptionId: "minimal", title: "Voice agent (created)", systemPrompt: "Use speak first.", @@ -180,7 +180,7 @@ describe("persistence hooks", () => { config: { title: "Creation title", modeId: "default", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", systemPrompt: "Confirm and speak first.", mcpServers: { paseo: { @@ -196,7 +196,7 @@ describe("persistence hooks", () => { provider: "codex", cwd: "/tmp/project", modeId: "plan", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", title: "Creation title", systemPrompt: "Confirm and speak first.", mcpServers: { diff --git a/packages/server/src/server/speech/providers/local/sherpa/speech-download.e2e.test.ts b/packages/server/src/server/speech/providers/local/sherpa/speech-download.e2e.test.ts index 08d9ad0df3..15bd4e2237 100644 --- a/packages/server/src/server/speech/providers/local/sherpa/speech-download.e2e.test.ts +++ b/packages/server/src/server/speech/providers/local/sherpa/speech-download.e2e.test.ts @@ -202,7 +202,7 @@ describe("speech models (download E2E)", () => { provider: "codex", cwd: voiceCwd, modeId: "full-access", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", thinkingOptionId: "low", }, }); diff --git a/packages/server/src/server/test-utils/fake-agent-client.ts b/packages/server/src/server/test-utils/fake-agent-client.ts index f37e174be1..9bd307b374 100644 --- a/packages/server/src/server/test-utils/fake-agent-client.ts +++ b/packages/server/src/server/test-utils/fake-agent-client.ts @@ -914,8 +914,8 @@ class FakeAgentClient implements AgentClient { return [ { provider: this.provider, - id: "gpt-5.1-codex-mini", - label: "gpt-5.1-codex-mini", + id: "gpt-5.4-mini", + label: "gpt-5.4-mini", isDefault: true, }, ]; diff --git a/packages/server/src/server/voice-local-agent.e2e.test.ts b/packages/server/src/server/voice-local-agent.e2e.test.ts index bfd09acefa..c776a2580a 100644 --- a/packages/server/src/server/voice-local-agent.e2e.test.ts +++ b/packages/server/src/server/voice-local-agent.e2e.test.ts @@ -54,7 +54,7 @@ function waitForSignal( }, voiceLlmProvider: "codex", voiceLlmProviderExplicit: true, - voiceLlmModel: "gpt-5.1-codex-mini", + voiceLlmModel: "gpt-5.4-mini", }); }, 120000); diff --git a/packages/server/src/server/voice-roundtrip.e2e.test.ts b/packages/server/src/server/voice-roundtrip.e2e.test.ts index f4e56a5fea..c44d1a870d 100644 --- a/packages/server/src/server/voice-roundtrip.e2e.test.ts +++ b/packages/server/src/server/voice-roundtrip.e2e.test.ts @@ -32,7 +32,7 @@ function getVoiceRoundtripConfig(provider: VoiceRoundtripProvider): { case "codex": return { provider: "codex", - model: "gpt-5.1-codex-mini", + model: "gpt-5.4-mini", modeId: "full-access", thinkingOptionId: "low", }; diff --git a/skills/paseo/SKILL.md b/skills/paseo/SKILL.md index 312e5916de..61716caa29 100644 --- a/skills/paseo/SKILL.md +++ b/skills/paseo/SKILL.md @@ -214,7 +214,7 @@ paseo terminal kill "$id" **Codex:** - `--provider codex/gpt-5.4` — Latest frontier agentic coding model (preferred for all engineering tasks) -- `--provider codex/gpt-5.1-codex-mini` — Cheaper, faster, but less capable +- `--provider codex/gpt-5.4-mini` — Cheaper, faster, but less capable ## Permissions