You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two hard limits in the current agent config (packages/types/src/agents.ts):
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.
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.
Problem
Two hard limits in the current agent config (
packages/types/src/agents.ts):AgentConfigis 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.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
acp-adapters.ts) keeps working for the known presets.{ 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).agent:testto do a real ACPinitializehandshake and report the agent's name/version/capabilities — instant feedback that an ad-hoc integration works before it's used in anger.Relates #134 (planner and workers may be different agents entirely).