diff --git a/src/shared/migration/agent-names.test.ts b/src/shared/migration/agent-names.test.ts
new file mode 100644
index 000000000..c68d59499
--- /dev/null
+++ b/src/shared/migration/agent-names.test.ts
@@ -0,0 +1,100 @@
+///
+
+import { describe, expect, test } from "bun:test"
+import { AGENT_NAME_MAP, migrateAgentNames } from "./agent-names"
+
+describe("AGENT_NAME_MAP parenthesized aliases", () => {
+ test("maps Sisyphus (Ultraworker) to sisyphus", () => {
+ // given
+ const alias = "Sisyphus (Ultraworker)"
+
+ // when
+ const result = AGENT_NAME_MAP[alias]
+
+ // then
+ expect(result).toBe("sisyphus")
+ })
+
+ test("maps Hephaestus (Deep Agent) to hephaestus", () => {
+ // given
+ const alias = "Hephaestus (Deep Agent)"
+
+ // when
+ const result = AGENT_NAME_MAP[alias]
+
+ // then
+ expect(result).toBe("hephaestus")
+ })
+
+ test("maps Prometheus (Plan Builder) to prometheus", () => {
+ // given
+ const alias = "Prometheus (Plan Builder)"
+
+ // when
+ const result = AGENT_NAME_MAP[alias]
+
+ // then
+ expect(result).toBe("prometheus")
+ })
+
+ test("maps Atlas (Plan Executor) to atlas", () => {
+ // given
+ const alias = "Atlas (Plan Executor)"
+
+ // when
+ const result = AGENT_NAME_MAP[alias]
+
+ // then
+ expect(result).toBe("atlas")
+ })
+
+ test("maps Metis (Plan Consultant) to metis", () => {
+ // given
+ const alias = "Metis (Plan Consultant)"
+
+ // when
+ const result = AGENT_NAME_MAP[alias]
+
+ // then
+ expect(result).toBe("metis")
+ })
+
+ test("maps Momus (Plan Critic) to momus", () => {
+ // given
+ const alias = "Momus (Plan Critic)"
+
+ // when
+ const result = AGENT_NAME_MAP[alias]
+
+ // then
+ expect(result).toBe("momus")
+ })
+})
+
+describe("migrateAgentNames with parenthesized aliases", () => {
+ test("migrates all parenthesized aliases to canonical names", () => {
+ // given
+ const legacyAgents = {
+ "Sisyphus (Ultraworker)": { model: "claude-opus-4" },
+ "Hephaestus (Deep Agent)": { model: "gpt-5.4" },
+ "Prometheus (Plan Builder)": { model: "claude-opus-4" },
+ "Atlas (Plan Executor)": { model: "kimi-k2.5" },
+ "Metis (Plan Consultant)": { model: "claude-opus-4" },
+ "Momus (Plan Critic)": { model: "claude-opus-4" },
+ }
+
+ // when
+ const { migrated, changed } = migrateAgentNames(legacyAgents)
+
+ // then
+ expect(changed).toBe(true)
+ expect(migrated.sisyphus).toEqual({ model: "claude-opus-4" })
+ expect(migrated.hephaestus).toEqual({ model: "gpt-5.4" })
+ expect(migrated.prometheus).toEqual({ model: "claude-opus-4" })
+ expect(migrated.atlas).toEqual({ model: "kimi-k2.5" })
+ expect(migrated.metis).toEqual({ model: "claude-opus-4" })
+ expect(migrated.momus).toEqual({ model: "claude-opus-4" })
+ expect(migrated["Sisyphus (Ultraworker)"]).toBeUndefined()
+ expect(migrated["Hephaestus (Deep Agent)"]).toBeUndefined()
+ })
+})
diff --git a/src/shared/migration/agent-names.ts b/src/shared/migration/agent-names.ts
index 67b9e1dbe..d3c10fff0 100644
--- a/src/shared/migration/agent-names.ts
+++ b/src/shared/migration/agent-names.ts
@@ -3,28 +3,36 @@ export const AGENT_NAME_MAP: Record = {
omo: "sisyphus",
OmO: "sisyphus",
Sisyphus: "sisyphus",
+ "Sisyphus (Ultraworker)": "sisyphus",
sisyphus: "sisyphus",
+ // Hephaestus variants → "hephaestus"
+ "Hephaestus (Deep Agent)": "hephaestus",
+
// Prometheus variants → "prometheus"
"OmO-Plan": "prometheus",
"omo-plan": "prometheus",
"Planner-Sisyphus": "prometheus",
"planner-sisyphus": "prometheus",
"Prometheus - Plan Builder": "prometheus",
+ "Prometheus (Plan Builder)": "prometheus",
prometheus: "prometheus",
// Atlas variants → "atlas"
"orchestrator-sisyphus": "atlas",
Atlas: "atlas",
+ "Atlas (Plan Executor)": "atlas",
atlas: "atlas",
// Metis variants → "metis"
"plan-consultant": "metis",
"Metis - Plan Consultant": "metis",
+ "Metis (Plan Consultant)": "metis",
metis: "metis",
// Momus variants → "momus"
"Momus - Plan Critic": "momus",
+ "Momus (Plan Critic)": "momus",
momus: "momus",
// Sisyphus-Junior → "sisyphus-junior"