A terminal UI that replicates Claude Code's "agent view" experience across multiple coding-agent CLIs in one unified dashboard: Claude Code, OpenAI Codex, GitHub Copilot CLI, and OpenCode.
Status: complete MVP across PLAN.md Phases 0–12.
- Single Go/Bubble Tea binary:
uam - Private tmux backend: every managed session runs under
tmux -L uam - Agent adapters for:
- Claude Code:
claude --dangerously-skip-permissions - Codex:
codex --sandbox danger-full-access - GitHub Copilot CLI:
copilot --autopilotorgh copilot --autopilot - OpenCode:
opencode --auto-approve
- Claude Code:
- Persistent metadata at
${XDG_CONFIG_HOME:-~/.config}/uam/sessions.json - Atomic JSON writes, flock locking, schema migration backups, corrupt-file self-healing
- TUI grouping by session state: Needs Input, Working, Review, Failed, Completed
- Peek/reply/attach/stop flows backed by tmux
capture-paneandsend-keys - Pin, rename, group-by-dir toggle, and persisted manual reorder
- PR URL detection from pane output plus optional
gh pr viewstatus refresh - Shell commands for automation
go install github.com/RandomCodeSpace/unified-agent-manager/cmd/uam@latest
make build # produces ./bin/uam
make test # go test ./...
make run # build + launch the TUIGo names installed binaries after the last import-path element. The root path
github.com/RandomCodeSpace/unified-agent-manager therefore installs a binary
named unified-agent-manager; use /cmd/uam when you want the uam command.
Requires Go 1.24+ and tmux 3.x. Agent CLIs are capability-probed at runtime; unavailable providers are hidden from the TUI dispatch selector.
uam # open TUI
uam new # guided terminal dispatch flow
uam dispatch [--safe] <agent> "prompt"
uam dispatch --cwd /path/to/repo claude "fix flaky tests"
uam ls [--json]
uam peek <id>
uam attach <id>
uam last
uam version
uam stop <id> # kill tmux session, keep record
uam rm <id> # kill tmux session and remove record| Key | Action |
|---|---|
↑ / ↓ |
Move selection |
Enter / → |
Attach selected session |
Type prompt + Enter |
Dispatch to default agent |
@codex prompt |
Dispatch to a specific agent |
Tab |
Cycle default agent |
Space |
Toggle peek panel |
Ctrl+T |
Pin selected session |
Ctrl+R |
Rename selected session |
Ctrl+X |
Stop/remove selected session with confirmation |
Ctrl+S |
Toggle group-by-directory |
Shift+↑/↓ |
Reorder rows and persist sort_index |
e |
Open easy-mode wizard |
? |
Help overlay |
q |
Quit |
go test ./...
make buildGitHub Actions run security checks on main, pull requests, and a weekly
schedule:
govulncheck ./...for known Go vulnerabilitiesgosec ./...with SARIF upload to GitHub code scanning- Dependency Review on pull requests
- SonarCloud analysis with Go coverage from
coverage.out
GitHub CodeQL default setup is also enabled for Go code scanning.
SonarCloud requires a repository secret named SONAR_TOKEN. The workflow skips
only the SonarCloud upload step until that secret exists.
Core packages:
internal/store: sessions JSON, locking, migration, backupsinternal/tmux: all tmux shell-out logicinternal/adapter: shared adapter interfaces, tmux adapter, state detectioninternal/adapter/{claude,codex,copilot,opencode}: provider registrationsinternal/app: service layer and Bubble Tea modelinternal/pr: optional GitHub PR status lookupinternal/refresh: refresh ticker policy