[Feature]: Allow multiple named entries (aliases) per agent harness
- Dominant language
- TypeScript
- Stars
- 71.3k
- Forks
- 4.7k
- Avg merge
- 17h 8m
- Merged PRs (30d)
- 475
Description
### Problem or use case
Each CLI harness can only appear once in Settings → Agents. I use one harness (e.g. Codex) against several different models — OpenAI's hosted models, third-party providers, and locally-deployed open-source models. The CLI invocation is identical; only the model / base URL / API key differs. Today the only per-agent customization is `agentCmdOverrides`, `agentDefaultArgs`, and `agentDefaultEnv`, all keyed by a single `TuiAgent` id, so I can configure exactly one Codex profile and have to hand-edit settings whenever I switch models.
Locally I already distinguish these combinations with shell aliases — one alias per model × reasoning-effort pair, all wrapping the same CLI. Orca can't see them: a shell alias isn't on PATH as a binary, and `detectCmdAliases` in `TUI_AGENT_CONFIG` works the other way around — it collapses several command names into a single catalog entry rather than surfacing them as separate ones. So the distinction I maintain in my shell is flattened away the moment I'm in Orca.
### Proposed solution
Let one harness back multiple named catalog entries. Each entry would have its own label, args, and env, and would show up as a separate row in Settings → Agents and in the agent picker — so `Codex (gpt-5)`, `Codex (local qwen)`, `Codex (vendor X)` can be enabled, disabled, and set-as-default independently.
`claude-agent-teams` is already exactly this shape by hand: a distinct id whose `expectedProcess` is `claude` and which requires `claude` on PATH. Generalizing that into user-definable entries with a `baseAgent: TuiAgent` field would cover it.
Concretely, an entry should be able to override the launch command itself, not just args and env — that's what lets `codex-high` and `codex-local-qwen` be two rows backed by one harness, mirroring the aliases I already have.
### Alternatives or additional context
- Workaround today is editing `agentDefaultEnv` per switch, or shell wrappers on PATH that Orca can't detect as agents.
- Main blockers: `TuiAgent` is a closed union (`src/shared/types.ts:2397`) and every table is `Record`; `isTuiAgent` validates by membership in `TUI_AGENT_CONFIG`; `normalizeDisabledTuiAgents` (`src/main/persistence.ts:5274`) silently drops unknown ids. A parallel `customAgents` list with `baseAgent` would avoid widening the union.
- The commit-message flow already has a scoped `CUSTOM_AGENT_ID` escape hatch (`src/shared/commit-message-agent-spec.ts:673`), but it never reaches the launchable catalog.
Contributor guide
Assessment
This issue has not been assessed yet.