diff --git a/src/tools/delegate-task/subagent-resolver.ts b/src/tools/delegate-task/subagent-resolver.ts index 1d67f24b4..104917c5a 100644 --- a/src/tools/delegate-task/subagent-resolver.ts +++ b/src/tools/delegate-task/subagent-resolver.ts @@ -60,6 +60,14 @@ Create the work plan directly - that's your job as the planning agent.`, } } + if (parentAgent && getAgentConfigKey(agentName) === getAgentConfigKey(parentAgent)) { + return { + agentToUse: "", + categoryModel: undefined, + error: `Cannot spawn "${agentName}" from within itself. Self-delegation creates infinite recursion. Use category-based delegation to spawn a Sisyphus-Junior worker instead (e.g., category="quick" or category="deep").`, + } + } + let agentToUse = agentName let categoryModel: DelegatedModelConfig | undefined let fallbackChain: FallbackEntry[] | undefined = undefined diff --git a/src/tools/delegate-task/sync-continuation.test.ts b/src/tools/delegate-task/sync-continuation.test.ts index fa05e93ab..1f749e9f1 100644 --- a/src/tools/delegate-task/sync-continuation.test.ts +++ b/src/tools/delegate-task/sync-continuation.test.ts @@ -530,6 +530,7 @@ describe("executeSyncContinuation - toast cleanup error paths", () => { task: false, call_omo_agent: false, question: false, + switch_agent: false, write: false, edit: false, }) @@ -600,6 +601,7 @@ describe("executeSyncContinuation - toast cleanup error paths", () => { task: false, call_omo_agent: false, question: false, + switch_agent: false, write: false, edit: false, })