{"record":{"id":"7274006d312ed406","repo":"conductor-oss/conductor","slug":"swarm-tool-name-collides-with-compiler-owned-trans","errorCode":null,"errorMessage":"SWARM tool name collides with compiler-owned transfer control: ${transferName}","messagePattern":"SWARM tool name collides with compiler-owned transfer control: (.+?)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":400,"severity":"error","filePath":"agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/compiler/MultiAgentCompiler.java","lineNumber":1407,"sourceCode":"    List<ToolConfig> buildTransferToolsFor(\n            AgentConfig self,\n            List<AgentConfig> allSwarmAgents,\n            Map<String, List<String>> swarmTransitions) {\n        List<ToolConfig> transferTools = new ArrayList<>();\n        Set<String> declaredToolNames = new HashSet<>();\n        if (self.getTools() != null) {\n            for (ToolConfig tool : self.getTools()) {\n                if (tool.getName() != null) {\n                    declaredToolNames.add(tool.getName());\n                }\n            }\n        }\n        for (AgentConfig peer : allSwarmAgents) {\n            if (peer.getName().equals(self.getName())) continue;\n            if (!isTransitionAllowed(self, peer.getName(), swarmTransitions)) continue;\n            String transferName = self.getName() + \"_transfer_to_\" + peer.getName();\n            if (declaredToolNames.contains(transferName)) {\n                throw new IllegalArgumentException(\n                        \"SWARM tool name collides with compiler-owned transfer control: \"\n                                + transferName);\n            }\n            String peerDesc =\n                    peer.getDescription() != null && !peer.getDescription().isEmpty()\n                            ? peer.getDescription()\n                            : (peer.getInstructions() instanceof String\n                                    ? (String) peer.getInstructions()\n                                    : \"Agent: \" + peer.getName());\n            ToolConfig transferTool =\n                    ToolConfig.builder()\n                            .name(transferName)\n                            .description(\n                                    \"Transfer the conversation to \"\n                                            + peer.getName()\n                                            + \". \"\n                                            + peerDesc\n                                            + \" Call at most ONE transfer tool per turn.\")","sourceCodeStart":1389,"sourceCodeEnd":1425,"githubUrl":"https://github.com/conductor-oss/conductor/blob/cf7c3e4a8adfb158be778ab1ec525323c363cd3a/agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/compiler/MultiAgentCompiler.java#L1389-L1425","documentation":"Error \"SWARM tool name collides with compiler-owned transfer control: ${transferName}\" thrown in conductor-oss/conductor.","triggerScenarios":"Thrown at agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/compiler/MultiAgentCompiler.java:1407 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Rename the SWARM tool so it does not collide with the compiler-generated transfer control tool name."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"cf7c3e4a8adfb158be778ab1ec525323c363cd3a","analyzedAt":"2026-08-14T03:33:19.897Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}