abtop — btop для ИИ-агентов: мониторинг сессий Claude Code, Codex и OpenCode
📂 Исходный код на GitHubRust-утилита, работающая по принципу btop, но показывающая состояние ИИ-агентов в реальном времени: сессии, токены, контекст, лимиты, процессы и порты. Работает только на чтение, без API-ключей и авторизации.
abtop — btop для ИИ-агентов
Представьте: у вас открыто четыре терминала. В одном крутится Claude Code над одним проектом, в втором — Codex CLI над другим, в третьем — OpenCode, а в четвёртоме вы держите htop, чтобы проверить, не сожрал ли кто всю память. Переключаться между ними вручную, чтобы посмотреть, сколько токенов ушло и не упёрся ли агент в лимит, — неудобно.
abtop решает ровно эту задачу. Это TUI-утилита на Rust, которая работает по принципу btop, но вместо процессов и сетевых интерфейсов показывает сессии ИИ-агентов: расход токенов, заполнение контекстного окна в процентах, состояние лимитов запросов, дочерние процессы и открытые порты. На сегодня у проекта около 3.6 тысяч звёзд, лицензия MIT, основной язык — Rust.
Ключевая деталь, которая отличает подход от «просто посмотрите в логи»: abtop ничего не отправляет и не авторизуется. Сессии находятся через локальное состояние процессов и файлов, поэтому рядом могут спокойно жить несколько активных профилей — личный, рабочий, экспериментальный. Поддерживаются macOS, Linux и Windows, включая нативную сборку под Windows без WSL.
Что показывает и зачем
Четыре ситуации из README, ради которых инструмент и написан:
- Запущено три и более агентов в разных проектах — их видно на одном экране.
- Упёрлись в лимиты — квота отображается в реальном времени.
- Агент поднял сервер и забыл его погасить — есть детект «осиротевших» портов.
- Контекстное окно наполняется — по каждой сессии рисуется процентная шкала с предупреждениями.
Всё это работает только на чтение: ни API-ключей, ни авторизации, ни телеметрии наружу.
Установка
Для macOS и Linux — готовый инсталлятор:
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/graykode/abtop/releases/latest/download/abtop-installer.sh | sh
Для тех, кто предпочитает Cargo:
cargo install abtop
Под Windows есть PowerShell-вариант, а в любом терминале с Git в PATH работает cargo install abtop:
powershell -c "irm https://github.com/graykode/abtop/releases/latest/download/abtop-installer.ps1 | iex"
Тонкости по платформам:
- На Linux нужен установленный
sqlite3— без него не будет мониторинга сессий OpenCode. - На Windows используются
sysinfoдля процессов и метрик хоста,netstat -anoдля слушающих портов. Load average в Windows отсутствует, поэтомуLOADпоказывается как 0. Конфиг Claude Code резолвится автоматически из%USERPROFILE%\.claude. - Готовые бинарники для всех платформ лежат на странице GitHub Releases.
Запуск и основные флаги
abtop # запустить TUI
abtop --once # напечатать снимок состояния и выйти
abtop --json # один JSON-снимок и выход (для скриптов)
abtop --setup # установить хук сбора лимитов
abtop --theme dracula # стартовать с конкретной темой
abtop --mouse # включить мышь: клики и колесо
Рекомендуемый размер терминала — 120x40 или больше, минимальный — 80x24, при маленьком размере панели аккуратно скрываются. Захват мыши по умолчанию выключен, чтобы не ломать выделение текста и копирование мышью; если удобнее кликать по панелям, включайте --mouse.
Отдельная приятная функция — Terminal Jump. По Enter фокус переходит на терминал, где запущен выбранный агент. Поддерживаются cmux, tmux и iTerm2 на macOS:
tmux new -s work
# pane 0: abtop
# pane 1: claude (project A)
# pane 2: claude (project B)
# → Enter на сессии в abtop переключает на её pane
Поддерживаемые агенты
| Возможность | Claude Code | Codex CLI | OpenCode |
|---|---|---|---|
| Обнаружение сессий | да | да | да |
| Учёт токенов | да | да | да |
| Заполнение контекста | да | да | нет |
| Определение статуса | да | да | да |
| Текущая задача | да | да | нет |
| Лимиты запросов | да | да | нет |
| Состояние Git | да | да | да |
| Дочерние процессы / порты | да | да | да |
| Субагенты | да | нет | нет |
| Статус памяти | да | нет | нет |
Поддержка OpenCode читает локальную базу SQLite по пути ~/.local/share/opencode/opencode.db (на Windows это тоже путь по умолчанию, дополнительно проверяются %LOCALAPPDATA%\opencode и %APPDATA%\opencode) и требует sqlite3 в PATH. На Windows CLI ставится через winget install SQLite.SQLite; без него abtop один раз напечатает предупреждение в stderr.
Темы и конфигурация
Встроено 12 тем, четыре из них — для пользователей с нарушениями цветовосприятия: high-contrast, protanopia, deuteranopia, tritanopia. Переключение — клавишей t на лету или флагом --theme; выбор сохраняется в ~/.config/abtop/config.toml. Есть и светлые темы для ярких терминалов: light (Solarized cream) и white (чистый белый в духе GitHub).
Файл ~/.config/abtop/config.toml поддерживает:
theme = "btop"
# Скрыть отдельные CLI агентов из TUI (регистр не важен).
# Полезно, если вы работаете только с одним агентом и хотите чистый вид.
hidden_agents = ["codex"]
# Дополнительные корни профилей Claude Code.
# abtop также сам находит ~/.claude и ~/.claude-* с папками
# sessions/ и projects/ внутри.
claude_config_dirs = ["~/.claude-personal", "~/.claude-work-team"]
# Язык интерфейса. Пусто или не задано — автоопределение из LANG.
language = "zh"
Интерфейс поддерживает английский (по умолчанию) и упрощённый китайский. Если language не задан, abtop смотрит на LANG: любое значение, начинающееся с zh, включает китайский, всё остальное — английский.
Горячие клавиши
| Клавиша | Действие |
|---|---|
↑/↓ или k/j |
Выбрать сессию |
Enter |
Перейти в терминал сессии |
x |
Завершить выбранную сессию |
X |
Закрыть все «осиротевшие» порты |
t |
Следующая тема |
1–5 |
Показать/скрыть панели |
Esc |
Открыть/закрыть страницу конфигурации |
q |
Выход |
r |
Принудительное обновление |
Библиотека и JSON-снимок
abtop — ещё и крейт-библиотека. Слой сбора данных можно переиспользовать локально, без повторного сканирования и без внешних процессов:
use abtop::app::App;
use abtop::{config, theme::Theme};
let cfg = config::load_config();
let mut app = App::new_with_config_and_claude_dirs(
Theme::default(), &cfg.hidden_agents, cfg.panels, &cfg.claude_config_dirs,
);
app.tick_no_summaries();
let json = serde_json::to_string(&app.to_snapshot(2_000)).unwrap();
Метод App::tick_no_summaries() принципиально не порождает claude --print, то есть не трогает вашу квоту Claude. Структура App не является Send, поэтому держите её в одном потоке и передавайте дальше уже сериализованный JSON. Референсный потребитель этого API — abtop-web-ui, локальный веб-дашборд, построенный ровно на нём.
Приватность
abtop читает только локальные файлы и метаданные процессов. В TUI и в выводе --once видны имена инструментов и пути к файлам, но содержимое файлов и текст промптов не отображаются. Суммари сессий генерируются через claude --print — это единственное косвенное обращение к сети.
С JSON-снимком нужно быть аккуратнее: он включает summary, chat_messages, рабочие директории, корни конфигов, превью вызовов инструментов, команды дочерних процессов, счётчики токенов и метаданные портов. Текст чата ограничен по длине и редактируется сборщиками, но он всё равно происходит из локальных транскриптов и может содержать чувствительный контекст проекта. Считайте JSON-снимки локальными приватными данными и не сбрасывайте их в общие логи без своих мер контроля доступа.
Итог
Проект молодой (создан в марте 2026, последние обновления — в сентябре) и активно дорабатывается: 28 открытых issues. Но идея отличная, а реализация — на Rust с ratatui, с нативной поддержкой всех трёх major-агентов, с библиотечным API и честной моделью приватности. Если вы гоняете несколько агентов параллельно, abtop закрывает тот самый вопрос «а что сейчас происходит у соседнего окна» без скриптов, хаков и чтения логов.
Отдельный респект @tbouquet, который, по словам автора, сделал огромную часть работы над темами, конфиг-оверлеем, переключением панелей, фильтрацией сессий, деревом субагентов, шкалой контекстного окна с детекцией компакции — и множество фиксов с усилением безопасности.
Источник: https://github.com/graykode/abtop