diff --git a/crates/goose/src/agents/agent.rs b/crates/goose/src/agents/agent.rs index 36fdfd4b4381..c9f84e9571ba 100644 --- a/crates/goose/src/agents/agent.rs +++ b/crates/goose/src/agents/agent.rs @@ -412,6 +412,20 @@ impl Agent { cancellation_token: Option, session: &Session, ) -> (String, Result) { + if session.session_type == crate::session::SessionType::SubAgent + && (tool_call.name == DYNAMIC_TASK_TOOL_NAME_PREFIX + || tool_call.name == SUBAGENT_EXECUTE_TASK_TOOL_NAME) + { + return ( + request_id, + Err(ErrorData::new( + ErrorCode::INVALID_REQUEST, + "Subagents cannot create other subagents".to_string(), + None, + )), + ); + } + if tool_call.name == PLATFORM_MANAGE_SCHEDULE_TOOL_NAME { let arguments = tool_call .arguments