{"id":51611545,"url":"https://github.com/stefanprodan/cctop","last_synced_at":"2026-07-12T08:30:42.819Z","repository":{"id":364656977,"uuid":"1268484853","full_name":"stefanprodan/cctop","owner":"stefanprodan","description":"Live top-style monitor for Claude Code sessions","archived":false,"fork":false,"pushed_at":"2026-07-07T16:41:50.000Z","size":683,"stargazers_count":118,"open_issues_count":2,"forks_count":10,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-07-07T17:18:21.641Z","etag":null,"topics":["ai-agents","bun","claude-code","monitoring","tui"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stefanprodan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-13T15:34:59.000Z","updated_at":"2026-07-07T16:42:19.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/stefanprodan/cctop","commit_stats":null,"previous_names":["stefanprodan/cctop"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/stefanprodan/cctop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanprodan%2Fcctop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanprodan%2Fcctop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanprodan%2Fcctop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanprodan%2Fcctop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stefanprodan","download_url":"https://codeload.github.com/stefanprodan/cctop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stefanprodan%2Fcctop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35387180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-12T02:00:06.386Z","response_time":87,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","bun","claude-code","monitoring","tui"],"created_at":"2026-07-12T08:30:41.970Z","updated_at":"2026-07-12T08:30:42.812Z","avatar_url":"https://github.com/stefanprodan.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cctop\n\nInteractive top-style monitor for Claude Code sessions. Know at a glance what\nClaude is working on, how much context it has left, and which sessions are\nwaiting for input.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screens/cctop-tui.png\" alt=\"cctop\"\u003e\n\u003c/p\u003e\n\n## Features\n\n- **All your sessions at a glance** — every running Claude Code session in one\n  table: process stats (PID, memory, CPU, uptime), busy/idle state, context\n  size, model, host app (terminal or IDE), project, git branch, and last prompt.\n- **Sub-agent \u0026 process tree** — live sub-agents (with their latest turn) and\n  each session's sub-processes, open and orphaned TCP ports.\n- **Live TUI** — navigate with the keyboard, open a per-session detail view, and\n  filter and sort on the fly; piped or run with `--once` it prints a single frame.\n  The sort mode, refresh interval, and notifications toggle are remembered\n  across restarts.\n- **Get pinged when a session needs you** *(opt-in)* — press `n` and cctop\n  rings the terminal bell and raises a desktop notification (OSC 9, supported\n  by iTerm2, Ghostty, kitty, WezTerm, Windows Terminal) whenever a busy\n  session finishes its turn and waits for your input — so you can look away\n  while agents run. Works with tmux `monitor-bell` window flags too.\n- **Status at a glance** — busy sessions are green, idle red; CPU and context\n  heat toward red as they climb; the selected session is marked with a blue bar.\n- **Weekly usage limits** *(opt-in)* — show your Claude subscription's 5h/7d\n  rate-limit usage in the summary line.\n- **Quit a runaway session** in place (`x` → `SIGTERM`, with confirm), or\n  **free ports** held by a session's leftover dev server\n  (`f` in the detail view).\n- **Session history** (`h`) — a dashboard over past sessions: a per-day\n  token-usage chart, recent sessions, and breakdowns by model, tool/MCP, and\n  project.\n- **Read-only and local** — the TUI reads only `~/.claude` and the process table,\n  spawns no processes; the only files it writes are its own preferences and\n  usage cache under `~/.claude/cctop/`.\n- **Zero dependencies** — a single Bun program with no npm packages;\n  it uses only the Bun runtime and OS built-ins.\n\n## Install\n\nOn macOS or Linux, install the standalone binary with Homebrew:\n\n```sh\nbrew install stefanprodan/tap/cctop\n```\n\nOr install it as a script with Bun:\n\n```sh\nbun install -g github:stefanprodan/cctop#v0.5.0\n```\n\n### Usage limits (opt-in)\n\nTo display the subscription's rate-limit usage, add the following to\nyour Claude Code [status-line](https://code.claude.com/docs/en/statusline) script:\n\n```bash\ninput=$(cat)\n\n# persist the account-wide 5h/7d rate limits\nprintf '%s' \"$input\" | cctop --capture-usage || true\n```\n\nWith `--capture-usage` the rate limits stats are persisted to\n`~/.claude/cctop/usage.json` from which the cctop TUI reads.\nSee [docs/usage-limits.md](docs/usage-limits.md) for more details.\n\n### Update\n\nWith Homebrew:\n\n```sh\nbrew upgrade stefanprodan/tap/cctop\n```\n\nOr upgrade the script to the latest [release](https://github.com/stefanprodan/cctop/releases) with Bun:\n\n```sh\nbun rm -g cctop; bun install -g github:stefanprodan/cctop#v0.5.0\n```\n\n### Uninstall\n\nWith Homebrew:\n\n```sh\nbrew uninstall stefanprodan/tap/cctop\n```\n\nOr with Bun:\n\n```sh\nbun uninstall -g cctop\n```\n\nIf you enabled usage limits, also remove the `cctop --capture-usage` line from\nyour Claude Code status-line script.\n\n## Usage\n\nOn an interactive terminal `cctop` runs as a live TUI (like `top`); when piped,\nredirected, or run with `--once` it prints a single frame and exits.\n\n### Keys\n\nWhile the TUI is running:\n\n| Key             | Action                                                           |\n|-----------------|------------------------------------------------------------------|\n| `↑`/`k` `↓`/`j` | move the selection                                               |\n| `PgUp`/`PgDn`   | jump 10 rows                                                     |\n| `g` / `G`       | jump to top / bottom                                             |\n| `enter`         | open the detail view for the selected session                    |\n| `h`             | open the session history dashboard (`↹` tabs, `r` rescan)        |\n| `esc`           | leave the detail view / close an overlay                         |\n| `/`             | filter sessions (type, `enter` to apply)                         |\n| `s`             | cycle the sort column (default, cpu, mem, ctx, pid)              |\n| `n`             | toggle notifications (bell + desktop when a session needs input) |\n| `x`             | quit the selected session (`SIGTERM`, with confirm)              |\n| `f`             | reclaim the detail view's orphan ports (`SIGTERM`, with confirm) |\n| `?`             | toggle the help overlay                                          |\n| `q` / `Ctrl-C`  | quit cctop                                                       |\n\n### Options\n\n```\ncctop [filter] [options]\n\n  filter                 only show sessions whose project, host, branch,\n                         model, or session id contains this\n  -w, --watch[=seconds]  set the refresh interval (default: 1s, min 0.25s)\n  --once                 render once and exit (default when piped)\n  --json                 print full session details as JSON\n  -v, --version          show version\n  -h, --help             show this help\n```\n\nExamples:\n\n```sh\ncctop flux         # start filtered to sessions matching \"flux\"\ncctop --watch=0.5  # refresh twice a second\ncctop --once       # single frame, then exit\ncctop --json       # machine-readable snapshot\n```\n\n## Contributing\n\n`cctop` is open source and contributions are welcome — open an issue or send a\npull request on [GitHub](https://github.com/stefanprodan/cctop). See\n[docs/CONTRIBUTING.md](docs/CONTRIBUTING.md) to get set up.\n\n## License\n\n[Apache 2.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefanprodan%2Fcctop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstefanprodan%2Fcctop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstefanprodan%2Fcctop/lists"}