conductor-oss/conductor · error · IllegalArgumentException

SWARM tool name collides with compiler-owned transfer contro

Error message

SWARM tool name collides with compiler-owned transfer control: ${transferName}

What it means

Error "SWARM tool name collides with compiler-owned transfer control: ${transferName}" thrown in conductor-oss/conductor.

Source

Thrown at agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/compiler/MultiAgentCompiler.java:1407

    List<ToolConfig> buildTransferToolsFor(
            AgentConfig self,
            List<AgentConfig> allSwarmAgents,
            Map<String, List<String>> swarmTransitions) {
        List<ToolConfig> transferTools = new ArrayList<>();
        Set<String> declaredToolNames = new HashSet<>();
        if (self.getTools() != null) {
            for (ToolConfig tool : self.getTools()) {
                if (tool.getName() != null) {
                    declaredToolNames.add(tool.getName());
                }
            }
        }
        for (AgentConfig peer : allSwarmAgents) {
            if (peer.getName().equals(self.getName())) continue;
            if (!isTransitionAllowed(self, peer.getName(), swarmTransitions)) continue;
            String transferName = self.getName() + "_transfer_to_" + peer.getName();
            if (declaredToolNames.contains(transferName)) {
                throw new IllegalArgumentException(
                        "SWARM tool name collides with compiler-owned transfer control: "
                                + transferName);
            }
            String peerDesc =
                    peer.getDescription() != null && !peer.getDescription().isEmpty()
                            ? peer.getDescription()
                            : (peer.getInstructions() instanceof String
                                    ? (String) peer.getInstructions()
                                    : "Agent: " + peer.getName());
            ToolConfig transferTool =
                    ToolConfig.builder()
                            .name(transferName)
                            .description(
                                    "Transfer the conversation to "
                                            + peer.getName()
                                            + ". "
                                            + peerDesc
                                            + " Call at most ONE transfer tool per turn.")

View on GitHub (pinned to cf7c3e4a8a)

Solutions

  1. Rename the SWARM tool so it does not collide with the compiler-generated transfer control tool name.

When it happens

Trigger: Thrown at agentspan/src/main/java/org/conductoross/conductor/ai/agentspan/runtime/compiler/MultiAgentCompiler.java:1407 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of conductor-oss/conductor@cf7c3e4a8a (2026-08-14). Data as JSON: /api/errors/7274006d312ed406. Report an issue: GitHub.