CTOP 实战:用终端面板实时监控你的所有 AI 编码 Agent 会话
在你同时跑三四个 Claude Code 会话做不同任务时,有没有想过:哪个花了最多 token?哪个又快跳到上下文压缩了?今天的 API 费用已经烧了多少?
用 htop 看进程资源,它不关心 AI Agent 的上下文窗口;切到每个终端窗口手动看,又太累。
CTOP 就是为解决这个痛点而生的——一个终端 TUI 监控面板,实时展示你所有 AI 编码 Agent 的运行状态、资源消耗和费用统计。90⭐ MIT 开源,npm 一行安装。
安装
CTOP 提供多种安装方式,任选一种:
npm install -g ctop-claude npx ctop-claude brew tap aakashadesara/ctop && brew install ctop-claude
安装后直接运行 ctop 启动面板。如果当前没有运行中的 Agent 会话,你会看到一个空白面板——启动一个 Claude Code、Codex CLI 或 OpenCode 会话后,它就会自动出现。
TUI 面板速览
CTOP 的界面借鉴了 htop 的设计风格,分为几个核心区域:
列表视图:默认启动时看到的是表格模式,每一行代表一个 Agent 进程,列字段包括 PID、CPU%、内存、Agent 类型(Claude Code / Codex / OpenCode)、上下文使用率(带进度条)、已用 token 数、会话时长和预估费用。
面板视图:按 P 切换到卡片网格模式,每个 Agent 会话以卡片形式展示,适合同时监控 3-5 个会话的全貌。
快捷键记忆:
| 按键 | 功能 |
|---|---|
j/k 或 ↑/↓ | 上下导航 |
P | 切换列表 / 面板视图 |
s / S | 切换排序列 / 反转 |
/ | 过滤会话 |
d | 开关仪表盘 |
L | 开关日志面板 |
l | 查看会话详情 |
x / X | SIGTERM / SIGKILL 终止会话 |
p | 置顶(Pin)重要会话 |
核心功能逐项看
上下文窗口追踪
上下文窗口条(context bar)是 CTOP 最有用的功能之一。它用视觉化进度条展示每条会话的上下文占用情况,分为输入(input)、缓存(cache hit)、输出(output)和空闲(free)四段。当条形接近满时,说明上下文即将压缩——你可以提前 /compact 或在合适时机重启会话。
在列表视图中,ctop ls --json 输出的 contextPct 字段可以直接被脚本读取:
ctop ls --json | jq '.[] | select(.contextPct != null and .contextPct < 20)'
费用估算
CTOP 按 Claude 和 OpenAI 的公开 API 定价,实时计算每个会话当前已经产生的 API 费用,并在仪表盘(按 d)中展示汇总数据。这对控制开发预算尤其有用——你可以在每月初设定一个心理上限,然后时刻看到目前跑了多少。
Token 波形图
在面板视图中,CTOP 会为每个 Agent 显示一个实时 token 脉冲波形图(sparkline)。如果你看到突然的脉冲高峰,说明 Agent 正在生成一个大块输出或处理大量上下文——是注意力转移的信号。
日志尾随
按 L 在拆分面板中实时流式查看当前选中 Agent 的对话日志,效果相当于 tail -f 但按会话组织,无需切换到对应的终端窗口。
会话控制
在 CTOP 中可以直接终止无响应或卡住的 Agent 进程:
x— 发送 SIGTERM(优雅关闭)X— 发送 SIGKILL(强制终止)K— 终止所有 AgentA— 批量清理已退出的僵尸会话
CLI 模式
除了交互式 TUI,CTOP 还提供命令行模式供脚本和 AI Agent 自身调用:
ctop ls ctop ls --json ctop ls --agent claude ctop ls --cwd ~/code/my-project ctop get--json ctop log --tail 20 ctop stats --json
更有趣的是 ctop whoami 命令——它能探测当前你在哪个 Agent 会话中(通过 $CTOP_PID → 父进程链 → $PWD 三重匹配),并返回匹配置信度标签(exact、ppid、cwd-guess、none)。这让 Agent 可以实现"自我认知":知道自己是谁,在哪个项目目录下运行。
ctop whoami --json
Agent Skill 集成
CTOP 自带了 Claude Code Skill 文件,可以安装到你的 Claude Code 技能目录:
mkdir -p .claude/skills && cp -r skills/ctop .claude/skills/ mkdir -p ~/.claude/skills && cp -r skills/ctop ~/.claude/skills/
安装后,你可以直接问 Claude Code 类似这样的问题:
- "我现在哪个 Agent 在跑?"
- "所有会话今天花了多少钱?"
- "有没有哪个会话的上下文快满了?"
Claude Code 会自动调用 ctop 的 CLI 命令来回答你。
桌面通知与告警
CTOP 支持桌面通知(按 n 开关),当 Agent 完成一个长任务时弹出提醒。CLI 模式下还可以用 ctop alerts 获取三类智能告警:
- 低上下文(Low Context):会话的上下文窗口即将消耗殆尽
- 空闲超时(Idle):Agent 长时间没有活动
- 僵尸进程(Ghost):Agent 已退出但面板仍残留进程记录
ctop alerts --severity critical
自定义配置
CTOP 使用 ~/.ctoprc 配置文件:
{
"refreshInterval": 5000,
"contextLimit": 200000,
"defaultView": "list",
"theme": "dracula",
"contextBarStyle": "block",
"notifications": {
"enabled": true,
"minDuration": 30
}
}
你也可以在启动时通过命令行参数覆盖:ctop --refresh 3 --pane。
插件系统
如果默认的列字段不够用,可以在 ~/.ctop/plugins/ 目录下放 JS 插件来扩展自定义列:
module.exports = {
name: 'git-branch',
column: {
header: 'BRANCH',
width: 15,
getValue: (proc) => proc.cwd ? getGitBranch(proc.cwd) : '-',
},
};
重启 CTOP 后新列自动生效。
小结
CTOP 解决了 AI 编码 Agent 使用中的一个实际痛点——当你从跑一个 Agent 变成跑三四个、甚至在不同终端窗口里同时运行多个会话时,一个统一的监控面板就是刚需。
它和 htop 的设计哲学一致:先用工具看清全局,再做决策。你可以先看一眼仪表盘,发现某条会话的上下文快满了就 /compact,某条会话的 API 费用已经走了大半预算就考虑是否要提前终止——而不是等到 Cloudflare 账单出来才后悔。
- GitHub: aakashadesara/ctop
- 安装:
npm install -g ctop-claude - 许可证: MIT