Skip to content

PierrickMartos/claude-tower

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

claude-tower

A terminal control tower for all your Claude Code sessions — a macro view of what every agent is doing, with live status, idle time, and one-line AI summaries. Built for running many agents at once.

Latest release

claude-tower preview

Features

Every session, one screen Subscribes to cmux's event feed and keeps a live registry of every Claude Code session — across projects and worktrees.
Status at a glance running / awaiting / idle with per-session idle timers and the last tool each agent touched.
AI summaries A debounced Haiku call turns the last ~20 transcript messages into a one-line "what is this session actually doing" summary.
Zero config auth Reuses the OAuth token from your existing Claude Code login in the macOS keychain — no API key, no env var. An Anthropic API key or AWS Bedrock work too, via the same env vars Claude Code uses.
Resumable A cursor file lets the cmux subscriber pick up where it left off after a restart; the subprocess auto-reconnects with backoff.

Install

macOS only. Requires cmux running locally and a recent Claude Code install.

Download a binary

Grab the latest build for your Mac — these links always point to the newest release:

Chip Download
Apple Silicon (M1+) claude-tower-darwin-arm64
Intel claude-tower-darwin-amd64
curl -fsSL -o claude-tower https://github.com/PierrickMartos/claude-tower/releases/latest/download/claude-tower-darwin-arm64
chmod +x claude-tower
xattr -d com.apple.quarantine claude-tower  # unsigned binary — clear Gatekeeper flag
./claude-tower

Or build from source

# 1. Install Go (one-time)
brew install go

# 2. Clone, then build:
git clone https://github.com/PierrickMartos/claude-tower.git
cd claude-tower
go mod tidy
go build

# 3. Run — by default auth is read from your Claude Code login (macOS keychain).
#    If you're not logged in yet, run `claude` once to authenticate.
#    An API key or AWS Bedrock work too — see Auth below.
./claude-tower

Keyboard shortcuts

Key Action
j / k or / Navigate rows
g / G Jump to top / bottom
r Force re-summarise the focused row
q Quit

How it works

  1. Subscribes to cmux events (NDJSON socket stream, reconnects via --cursor-file).
  2. Filters agent.hook.* events → maintains an in-memory session registry keyed by Claude session id (running / awaiting / idle status, last tool, idle time).
  3. cmux redacts tool input and prompt text by design, so for the LLM summary the reader tails the matching transcript at ~/.claude/projects/<cwd>/<sid>.jsonl.
  4. A debounced (5s) per-session worker sends the last ~20 transcript messages to claude-haiku-4-5 and gets back a one-line summary.

Auth

Three methods, resolved per call with the same env conventions Claude Code itself uses:

Precedence When Method
1 CLAUDE_CODE_USE_BEDROCK is truthy AWS BedrockInvokeModel with the standard AWS credential chain (env, ~/.aws profile, SSO, IMDS). Model defaults to eu.anthropic.claude-haiku-4-5-20251001-v1:0; override with ANTHROPIC_SMALL_FAST_MODEL (e.g. a us. inference profile).
2 ANTHROPIC_API_KEY is set API key — direct Anthropic API call with x-api-key.
3 otherwise Claude Code OAuth (default) — reads the access token your Claude Code login put in the macOS keychain (security find-generic-password -s "Claude Code-credentials"). Re-read on every call, so re-logging into Claude Code (which refreshes the token) is picked up automatically.

If auth can't be resolved (no keychain token, expired token, AWS config error) the summary falls back to the session's slug (auto-generated by Claude Code, just less polished) — the UI keeps working either way.

⚠️ Unofficial use (OAuth mode only). Anthropic's OAuth tokens are issued for Claude Code traffic. Inference calls work and many community tools rely on it, but it's not officially supported, and rate limits draw from your subscription. The API-key and Bedrock modes are ordinary, fully supported API usage.

Layout

  • main.go — wires everything together
  • internal/cmuxevents/ — subprocess wrapper around cmux events
  • internal/registry/ — session state map
  • internal/transcript/ — Claude Code JSONL reader
  • internal/creds/ — auth resolution (keychain OAuth, API key, or Bedrock)
  • internal/summarizer/ — Haiku one-liner
  • internal/ui/ — Bubble Tea model

Troubleshooting

Symptom Fix
cmux: command not found Install / launch cmux, ensure cmux is on PATH
Empty table No Claude sessions are running, or cmux hooks aren't installed (cmux hooks setup --agent claude)
Generic "[no summary]" rows Not logged into claude yet, or first 5s debounce not elapsed
Rows show slug instead of summary OAuth token expired — run claude once to refresh. In Bedrock mode: AWS config failed to load — check AWS_REGION / credentials

About

A terminal control tower for all your Claude Code sessions

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Contributors