Вузьке місце одного значка
Уявіть свій екран під час інтенсивної сесії програмування. В одній вкладці термінала Claude Code проводить рефакторинг React-компонента. В іншій Codex переписує модуль Python. Третій агент генерує юніт-тести, четвертий чекає на API-ключ, а п'ятий щойно завершив фонову перевірку лінтером. Ваша панель меню — або інший системний трей, який ви використовуєте — має місце рівно для одного значка статусу. Одна крихітна крапка або напис мають представляти весь цей рій. Питання лише в тому, яка сесія заслуговує на це місце.
Легка відповідь — показувати ту сесію, яка була активною останньою. Це здається раціональним. Щось сталося, тому воно випливає на передній план. Цей інстинкт хибний, і він коштуватиме вам дорого. Фоновий спостерігач файлів, що оновлює часову мітку, — це не крик про допомогу. Тим часом сесія, яка десять хвилин тому отримала помилку доступу, може залишатися непомітною, чекаючи, поки ви введете "yes" або виправите шлях. Якщо ви ранжуєте за свіжістю подій, ви приховуєте саме те, що потребує вашої уваги. Вам потрібно ранжувати за можливістю дії.
Чому принцип останніх подій не працює
Розробники звертаються до часових міток, тому що це просто. Кожна система їх створює, кожна база даних їх індексує, а сортування — це один рядок коду. Але простота перестає бути корисною в той момент, коли ви починаєте керувати кількома незалежними виконавцями.
Ось конкретний сценарій помилки. П'ята сесія щойно додала рядок логу, тому що її спостерігач залежностей помітив зміну файлу в node_modules. Її часова мітка оновилася на поточну. Сесія номер два, однак, поставила вам запитання три хвилини тому: "Мені встановити цей пакет? (y/n)". Ви ще не відповіли. Якщо ваша панель меню показує найновішу сесію, сесія номер п'ять отримає зелене сяйво, а сесія номер два зникне зі списку. Нібито нічого не зламано. Проте один із ваших агентів зупинився в очікуванні вашого рішення, поки ви зайняті моніторингом лінтера, який не потребує вашої участі.
Свіжість подій вимірює рух. Терміновість потребує сенсу. Запис у файл не має внутрішнього сенсу, якщо він не створює для вас завдання. Запит на очікуванні, з іншого боку, — це чиста можливість дії. Ви не зможете випустити код, просто спостерігаючи за змінами у фоні. Ви випускаєте його, усуваючи перешкоди. Перший зсув у мисленні простий: ставтеся до часової мітки як до способу вирішення нічиєї, а не як до основного сигналу.
Спочатку класифікуйте, потім сортуйте
Кращий підхід — це двоступеневий фільтр. По-перше, позначте кожну сесію залежно від того, що вона потребує від вас. По-друге, ранжуйте ці мітки. Тільки якщо дві сесії мають однакову мітку, ви звертаєтеся до годинника.
Це змушує вас визначити, що насправді означає «терміново» у вашому робочому процесі. Сесія з обмеженням частоти запитів (rate-limited) не є терміновою; вона спить. Сесія в роботі зайнята, але якщо їй не потрібне рішення, вона може спокійно продовжувати обчислення. Заблокована сесія є терміновою, оскільки помилки накопичуються. Необроблена передача завдання є терміновою, тому що ви буквально відповідаєте за наступний крок, і агент не може продовжувати, поки ви не вживете заходів.
Класифікація перетворює вашу панель меню зі стрічки новин на список завдань. Крок ранжування стає механічним. Ви вже вирішили, що заблокований виконавець має вищий пріоритет, ніж зайнятий. Ви вже вирішили, що невидиме запитання важливіше за видиме. Час бере участь лише тоді, коли дві сесії закликають до уваги на одному рівні пріоритетності. Тоді, і тільки тоді, перемагає та, що була раніше. Це невелика поступка справедливості за принципом «першим прийшов — першим обслужений», але вона ніколи не повинна перекривати сам стан.
Практична шкала пріоритетів
В Agent Island v1.7.1 команда формалізувала це у п'ятибальну шкалу, яку може запозичити будь-хто, хто запускає кілька AI-сесій:
- Непідтверджена потреба у вашій участі: 4. Сесія передала щось вам, і ви ще цього не бачили. Наступний крок за вами.
- Заблоковано: 3. Сесія зіткнулася з помилкою, проблемою з правами доступу або іншою перешкодою. Вона потребує вашої уваги, оскільки не може виправити це самостійно.
- У роботі: 2. Сесія активно виконує обчислення. Вона не чекає на вас, тому отримує значок лише за умови, що немає нічого терміновішого.
- Підтверджена потреба у вашій участі: 1. Ви вже бачили запит або запитання, але ще не відповіли на нього. Ви знаєте про це, тому терміновість падає на рівень нижче, ніж у невидимих переривань.
- Очікування або обмеження частоти: 0. Сесія є фоновим шумом. Вона чекає своєї черги або просто нічого не робить.
Ця шкала чітко співвідноситься з діями користувача. Коли ви завершуєте передачу завдання, сесія опускається до статусу «у роботі» або «очікування». Коли в робочій сесії виникає помилка, вона миттєво переходить у статус «заблоковано». Коли ви натискаєте, щоб підтвердити запит, але вам потрібно
