Skip to content

Agent roster + ad-hoc ACP agents: configure any ACP-speaking CLI, not just known presets #143

Description

@liam-russell

Problem

Two hard limits in the current agent config (packages/types/src/agents.ts):

  1. One agent, total. AgentConfig is a single { command, args, mode } — "only one agent is active at a time; there is no roster." The fan-out flow (Task fan-out: create worker worktrees with pre-seeded agent sessions in one action #137) wants per-subtask agent choice (a strong planner dispatching cheaper workers), which is impossible with a single slot.
  2. ACP is allowlisted. Integrated (chat) mode is only offered when the command matches ACP_PRESET_TOKENS (claude, gemini, codex, kiro, cursor-agent). ACP is an open stdio protocol — obscure or internal agents (Snowflake CoCo, company-internal wrappers, brand-new tools) may speak it perfectly well, but SproutGit forces them into raw-terminal mode.

Proposal

  • Agent roster: a list of named agents in Settings. Existing presets stay as quick-add buttons; the on-demand ACP adapter install flow (acp-adapters.ts) keeps working for the known presets.
  • Ad-hoc entries: { name, command, args, env, mode, acp: boolean } — the user asserts "this command speaks ACP" instead of the token allowlist deciding. Per-agent env vars cover API keys and base URLs (which also lets any CLI agent run against OpenRouter or a proxy without global env pollution).
  • Test button: extend agent:test to do a real ACP initialize handshake and report the agent's name/version/capabilities — instant feedback that an ad-hoc integration works before it's used in anger.
  • Selection: a default agent, overridable per launch and per fan-out subtask (Task fan-out: create worker worktrees with pre-seeded agent sessions in one action #137).
  • Import/export: agent definitions as JSON so a team can share a working config for an obscure agent once.

Relates #134 (planner and workers may be different agents entirely).

Metadata

Metadata

Assignees

No one assigned

    Labels

    P1Differentiator — strengthens the worktree-first / agent-native storyarea:featureNew functionalityenhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions