Відображення стану агентів кодингу в списку вікон Tmux
Паралельний запуск агентів на зразок Claude Code та Codex у tmux ускладнює відстеження того, яке вікно працює, чекає на дію чи завершило роботу. Обхід дерева процесів та парсинг термінального буфера дозволяють вивести динамічні індикатори безпосередньо у список вікон tmux.

Вплив: Середній
Чому це важливо
Ви зможете контролювати фонові сесії агентів у кількох вікнах одночасно без постійного перемикання контексту та без переходу на сторонні мультиплексори.
TL;DR
- 01Claude Code та Codex не оновлюють заголовки вікон tmux динамічно; необхідний прямий аналіз екрана через capture-pane.
- 02Визначення процесів вимагає рекурсивного обходу через pgrep, оскільки інсталятори CLI запускають версійні бінарники.
- 03Порядок правил критичний: для Claude спочатку перевіряється виконання, а для Codex — очікування підтвердження.
Ключові факти
- Ціль інтеграції
- Рядок стану tmux без заміни мультиплексора
- Підтримувані агенти
- Claude Code, Codex, Grok, pingme
- Метод детекції
- Обхід дерева процесів + парсинг термінала через capture-pane
Ненадійність заголовків вікон та назв команд
При одночасному запуску агентських CLI (Claude Code, Codex, Grok) типовою помилкою є спроба читати pane_title або pane_current_command. Claude Code записує назву сесії у pane_title лише один раз під час старту та не оновлює її через OSC escape-послідовності. Натомість Grok транслює динамічні спінери шрифтом Брайля (⠋, ⠸), створюючи несумісність між агентами. Змінна pane_current_command також не працює: бінарники запускаються за версійними шляхами (наприклад, 2.1.267 чи grok-1.0.30-mac), через що tmux не бачить базової назви програми.
Обхід дерева процесів та аналіз буфера екрана
Стабільна схема базується на розділенні двох завдань:
1. Визначення активного агента: Рекурсивний обхід PID через pgrep -P виявляє потрібний процес у дереві панелі (claude, codex, grok, pingme). 2. Захоплення екрана: Виклик tmux capture-pane зчитує останні рядки буфера термінала. 3. Застосування правил стану для кожного агента:
- Claude: Наявність
esc to interruptозначає станworking, порожній промпт❯—idle, а запити на кшталтdo you want to proceed?чиwaiting for permission— станaction. - Codex: Перевірка запитів дозволу (
press enter to confirm or esc to cancel) повинна передувати перевірціesc to interrupt, щоб агент не зависав у хибному статусі виконання. - Grok: Застосування патернів футера (
<n>/<n>:select,Allow …?) для очікування підтверджень та[stop]|Ctrl+c:cancelдля обчислень.
Результат перевірки інтегрується у window-status-format, забезпечуючи миттєву візуалізацію стану кожного агента безпосередньо у списку вікон tmux.
Спробуй за 2 хвилини
agent_in_pane() {
local root="$1" pids="$root" queue="$root"
while [ -n "$queue" ]; do
local pid="${queue%% *}"
queue="${queue#$pid}"; queue="${queue# }"
for c in $(pgrep -P "$pid" 2>/dev/null); do
pids="$pids $c"; queue="$queue $c"
done
done
ps -o comm= -p $pids 2>/dev/null | sed -nE 's|.*/||; /^(claude|codex|grok)$/p' | head -n 1
}bash
✓ Коли використовувати
- При одночасному запуску 3 або більше автономних CLI-агентів у вкладках tmux.
- Коли агенти зупиняються на запитах доступу до термінала у фонових вікнах.
✕ Коли НЕ варто
- Якщо ви працюєте з агентами виключно через графічні IDE, такі як Cursor чи Windsurf.
- Якщо ви використовуєте спеціалізовані термінальні мультиплексори з вбудованим інтерфейсом моніторингу.
Що зробити сьогодні
- Додайте у dotfiles скрипт рекурсивного пошуку через pgrep для ідентифікації бінарників агентів у кожній панелі.
- Налаштуйте сканування виводу tmux capture-pane на маркери 'esc to interrupt' та запити дозволів.
- Підключіть індикатори статусу до параметра tmux window-status-current-format.
Джерела