abtop
一款面向 AI 编程代理的终端监控工具,类似 btop/htop,但监控对象是 Claude Code、Codex CLI 与 OpenCode 会话。实时展示 token 用量、上下文窗口占比、速率限制、子进程与监听端口,Rust 编写,跨平台只读运行。
爱鲜报评分
0 人评分
3.8k
星数
是
中文
Rust
主语言
是
活跃
30
贡献者
人工分析
EDITORIAL推荐理由
同时开多个 AI 编程代理时,很难知道谁在烧 token、谁快撞上速率限制、谁留下了没关的端口。abtop 把这些信息集中到一个 TUI 面板里,只读、无需 API Key,还支持 JSON 快照供脚本复用。对重度使用 Claude Code / Codex CLI 的开发者来说,是相当实用的运维视角补充。
适用场景
- 同时运行多个 Claude Code / Codex CLI 会话时的统一监控
- 观察 token 消耗与上下文窗口占用,提前规避速率限制
- 排查 AI 代理遗留的孤儿进程与监听端口
- 在 tmux 多窗格工作流中快速跳转到对应代理终端
- 通过 --json 快照接入自建脚本或监控面板
优点
- 只读采集本地进程与文件状态,不需要 API Key 或登录鉴权
- 跨 macOS、Linux、Windows 原生支持,Windows 无需 WSL
- 支持 Claude Code、Codex CLI、OpenCode 三种主流代理
- 12 套内置主题,含 4 套色盲友好配色,界面可定制
- 同时提供 TUI 与库/JSON 接口,便于二次开发集成
缺点
- OpenCode 会话监控依赖系统安装 sqlite3 CLI
- 上下文窗口占比、速率限制等能力在 OpenCode 上不完整
- Windows 无 load average,LOAD 指标恒为 0
- 推荐终端尺寸 120x40,小窗口下部分面板会被隐藏
abtop:给 AI 编程代理用的 btop
同时开着好几个 Claude Code、Codex CLI 会话时,你大概也遇到过这些情况:不知道哪个会话在猛烧 token、配额快用完了却没察觉、代理起了个服务忘了关。abtop 就是把这些信息收进一个终端面板的工具——思路和 btop / htop 一样,只不过监控对象换成了 AI 编程代理。
核心能力
- 会话总览:自动发现本机正在运行的 Claude Code、Codex CLI、OpenCode 会话,支持多个 profile 并存。
- Token 与上下文:按会话展示 token 用量与上下文窗口占用百分比,接近上限时给出提示。
- 速率限制:实时查看配额消耗情况,避免撞墙。
- 进程与端口:展示代理派生的子进程和监听端口,并支持识别孤儿端口。
- 终端跳转:在 tmux、cmux、iTerm2 中按
Enter直接跳到对应会话所在的终端。
所有数据都来自本地进程与文件状态,只读、不需要 API Key、不需要登录。
安装与使用
macOS / Linux 可用官方安装脚本,也可以走 Cargo:
cargo install abtop
Windows 原生支持,无需 WSL;OpenCode 会话发现需要额外安装 sqlite3 CLI。
常用启动方式:
abtop # 启动 TUI
abtop --once # 打印一次快照后退出
abtop --json # 输出 JSON 快照,便于脚本消费
abtop --theme dracula
abtop --mouse # 开启鼠标点击与滚轮
界面与主题
内置 12 套主题,包括 btop、dracula、catppuccin、tokyo-night、gruvbox、nord 等,另有 4 套色盲友好配色(high-contrast、protanopia、deuteranopia、tritanopia)以及两套浅色主题。运行时按 t 循环切换,选择会写入 ~/.config/abtop/config.toml。
配置与中文界面
配置文件支持隐藏指定代理、追加 Claude Code profile 目录、指定界面语言等:
theme = "btop"
hidden_agents = ["codex"]
claude_config_dirs = ["~/.claude-personal"]
language = "zh"
language 留空时会根据 LANG 自动判断,以 zh 开头即切换为简体中文。
作为库使用
abtop 同时是一个 Rust 库 crate,本地工具可以在进程内复用它的数据采集层,拿到与 TUI 相同的状态快照:
use abtop::app::App;
let mut app = App::new_with_config_and_claude_dirs(/* ... */);
app.tick_no_summaries(); // 不会调用 claude --print,不消耗配额
let json = serde_json::to_string(&app.to_snapshot(2_000)).unwrap();
注意 App 不是 Send,需要保持在单线程中使用。
适用人群
适合日常同时跑多个 AI 编程代理、关心 token 成本与配额、习惯在终端里工作的开发者。如果你只用单个代理且不关注资源消耗,收益会相对有限。
评论
- 暂无评论,来写第一条吧。