abtop — btop для ИИ-агентов: мониторинг сессий Claude Code, Codex и OpenCode

· 2 мин чтения
ai-agents claude-code opencode tui developer-tools
📂 Исходный код на GitHub

Rust-утилита, работающая по принципу btop, но показывающая состояние ИИ-агентов в реальном времени: сессии, токены, контекст, лимиты, процессы и порты. Работает только на чтение, без API-ключей и авторизации.

abtop — btop для ИИ-агентов: мониторинг сессий Claude Code, Codex и OpenCode

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