From e7c740be5fd5a4d9c505e451e6c12c7e03ec6e11 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Thu, 25 Dec 2025 18:38:10 -0500 Subject: Omni/Agent/Subagent: fix per-spawn guardrails for Coder MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Coder subagent was ignoring per-spawn guardrails from subagentGuardrails and always using SubagentConfig defaults. Now uses getGuardrail helper to check SpawnGuardrails first, falling back to SubagentConfig defaults if not specified. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- Omni/Agent/Subagent.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'Omni') diff --git a/Omni/Agent/Subagent.hs b/Omni/Agent/Subagent.hs index 597b361..3eeda3e 100644 --- a/Omni/Agent/Subagent.hs +++ b/Omni/Agent/Subagent.hs @@ -844,7 +844,10 @@ runCoderSubagentWrapper keys config callbacks = do else do onSubagentStart callbacks ("Starting Coder subagent for " <> namespace <> "...") - -- Build CoderConfig from SubagentConfig + -- Build CoderConfig from SubagentConfig, using per-spawn guardrails if provided + let getGuardrail field def = case subagentGuardrails config of + Just g -> fromMaybe def (field g) + Nothing -> def let coderCfg = Coder.CoderConfig { Coder.coderNamespace = namespace, @@ -852,9 +855,9 @@ runCoderSubagentWrapper keys config callbacks = do Coder.coderContext = subagentContext config, Coder.coderModel = fromMaybe "anthropic/claude-sonnet-4" (subagentModel config), Coder.coderTimeout = subagentTimeout config, - Coder.coderMaxCost = subagentMaxCost config, - Coder.coderMaxTokens = subagentMaxTokens config, - Coder.coderMaxIterations = subagentMaxIterations config, + Coder.coderMaxCost = getGuardrail spawnMaxCostCents (subagentMaxCost config), + Coder.coderMaxTokens = getGuardrail spawnMaxTokens (subagentMaxTokens config), + Coder.coderMaxIterations = getGuardrail spawnMaxIterations (subagentMaxIterations config), Coder.coderMaxVerifyRetries = 3 } -- cgit v1.2.3