Skip to content

Wire up the alternate bundled agents (codex, copilot, opencode) as per-session choices #17

Description

@xerhab

Context

The agent image already installs @openai/codex, @github/copilot, and opencode-ai alongside Claude Code (agent/Dockerfile), and entrypoint.sh has an AGENT env var — but it's container-wide, only claude is actually wired (creds preflight, RC launch), and the session manager hardcodes the claude --remote-control invocation in _launch_tmux().

Problem

The multiplexer is agent-generic by design (per the repo docs: "the name is agent-generic so it can host other agents later") but in practice can only run Claude. Making the agent a per-session choice rather than per-container would let one host run a Claude session and a codex session side by side — useful for comparing agents on the same task, and as a hedge on subscription limits.

Proposal

  • Add agent to the session registry record and the spawn command; default claude.
  • Factor the launch command out of _launch_tmux() into a per-agent table: command line, required creds path(s) for a preflight check, and whether the agent supports something RC-like. tmux + ttyd + worktree handling is identical for all of them — that machinery needs no changes.
  • Auth: each agent needs its own mounted config (e.g. ~/.codex, ~/.config/gh for copilot). Spawn should fail fast with a clear per-session errorMsg ("no codex credentials mounted") instead of a tmux window that dies instantly — the existing _set_error() path fits.
  • Capability degradation: non-Claude sessions won't have transcript parsing (usage_report()/session_report() are Claude-transcript-specific), so working/idle/question/PR/cost signals should be null rather than wrong. The web terminal keeps working for all of them since it's just tmux+ttyd. Per-agent usage parsers can come later, piecemeal.
  • UI: agent picker in the spawn form; badge on the session card; guard the RC-name display (rcName is Claude-specific).

Touchpoints

  • agent/hub-agent.py — registry schema, spawn command, launch table, signal guards
  • agent/entrypoint.sh — preflight becomes per-agent and non-fatal (the container hosts mixed sessions)
  • agent-hub/public/index.html — picker + badge
  • DockerOps compose (sibling repo) — extra credential mounts, documented here

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions