feat(delegate-task): force background mode for unstable agents

Detects unstable agents via is_unstable_agent config or gemini in model
name. Forces background mode even when run_in_background=false, with
system message explaining the forced conversion for monitoring.
This commit is contained in:
justsisyphus 2026-01-20 18:48:13 +09:00
parent 9729548a2a
commit 18e02a33be

View File

@ -482,6 +482,51 @@ ${textContent || "(No text output)"}`
: parsedModel)
: undefined
categoryPromptAppend = resolved.promptAppend || undefined
// Unstable agent detection - force background mode for monitoring
const isUnstableAgent = resolved.config.is_unstable_agent === true || actualModel.toLowerCase().includes("gemini")
if (isUnstableAgent && args.run_in_background === false) {
// Force background mode for unstable agents
const systemContent = buildSystemContent({ skillContent, categoryPromptAppend })
try {
const task = await manager.launch({
description: args.description,
prompt: args.prompt,
agent: agentToUse,
parentSessionID: ctx.sessionID,
parentMessageID: ctx.messageID,
parentModel,
parentAgent,
model: categoryModel,
skills: args.skills.length > 0 ? args.skills : undefined,
skillContent: systemContent,
})
ctx.metadata?.({
title: args.description,
metadata: { sessionId: task.sessionID, category: args.category },
})
return `[UNSTABLE AGENT MODE]
This category uses an unstable/experimental model (${actualModel}).
Forced to background mode for monitoring stability.
Task ID: ${task.id}
Session ID: ${task.sessionID}
Monitor progress: Use \`background_output\` with task_id="${task.id}"
Or watch the session directly for real-time updates.`
} catch (error) {
return formatDetailedError(error, {
operation: "Launch background task (unstable agent)",
args,
agent: agentToUse,
category: args.category,
})
}
}
} else {
if (!args.subagent_type?.trim()) {
return `Agent name cannot be empty.`