Skip to content

[FEATURE] #879 - Add multi-agent CLI tool selection and role-based dispatch #907

@stephanj

Description

@stephanj

Parent Issue

Part of #879 — Support Multi-Agent Execution Modes Per Task

Context

CliTaskExecutorService currently dispatches to a single CLI tool per task (the one selected in settings). Multi-agent modes require dispatching different phases to different tools — e.g., Claude as implementer, Copilot as reviewer. The existing CliToolConfig model supports multiple enabled tools but only one is used per task.

Task

Enable role-based CLI tool selection so different agents can use different tools.

Key Changes

  1. Extend Agent settings with role-to-tool mapping:

    • Default implementer tool (dropdown of enabled CLI tools)
    • Default reviewer tool (dropdown of enabled CLI tools)
    • Default validator tool (dropdown or "same as implementer")
    • Allow different tools per role (e.g., Claude implements, Gemini reviews)
  2. Add resolveToolForRole(AgentRole role) to settings:

    CliToolConfig resolveToolForRole(AgentRole role) {
        return switch (role) {
            case IMPLEMENTER -> getImplementerTool();
            case REVIEWER -> getReviewerTool();
            case VALIDATOR -> getValidatorTool();
        };
    }
  3. Update MultiAgentPhaseManager to call resolveToolForRole() before each phase dispatch.

  4. Update CliTaskExecutorService.execute() to accept role-specific CliToolConfig (already parameterized — just ensure the phase manager passes the right config).

  5. LLM mode equivalent: For LLM-mode execution, allow different models per role (e.g., Opus for implementation, Sonnet for review).

Files to Modify

  • src/main/java/com/devoxx/genie/ui/settings/agent/AgentSettingsComponent.java
  • src/main/java/com/devoxx/genie/service/DevoxxGenieSettingsService.java
  • src/main/java/com/devoxx/genie/service/spec/MultiAgentPhaseManager.java

Dependencies

Acceptance Criteria

  • Settings UI allows selecting different CLI tools per agent role
  • resolveToolForRole() returns correct tool for each role
  • Implementer and reviewer can use different CLI tools in the same task
  • Default: all roles use the same tool (backward compatible)
  • Settings persist across IDE restarts

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions