Аудит выполнения screenpipe-daily-diagnostic — 03.07.2026

Аудируемый запуск: диагностика дня за 2026-07-02 (четверг). Скилл — не Bitrix, но фреймворк аудитора применён. Фокус запроса Анатолия: «ИИ открывает одну пустую вкладку и одну рабочую».

Метрики

ПоказательФактНорма
Вызовов javascript_tool5≤ 8
Ошибок API / 403 / пустых00
[TRUNCATED] в выводе2 (крупный JSON)0–1
Обходных путей1 (дозапрос полей после truncation)0
Вызовов на сбор данных2 (probe + пагинация)≤ 5
Открыто вкладок21
Закрыто вкладок в конце1все свои
Осталось «мусорных» вкладок1 пустая0
Read-only соблюдёндада
Отчёт записан в vaultда (перезапись)да

Оценка эффективности: ⭐️4/5 — данные собраны чисто и быстро, но после запуска осталась пустая вкладка.


Проблемы

🟡 Major

P101 — Остаётся пустая вкладка после запуска (именно то, что заметил Анатолий)

  • Факт. Последовательность вызовов была такой:
    1. tabs_context_mcp{createIfEmpty:true} → создал новую группу с пустой вкладкой 254361695 (chrome://newtab/).
    2. tabs_create_mcp → создал вторую вкладку 254361696.
    3. Вся работа со Screenpipe шла в 254361696.
    4. В конце tabs_close_mcp(254361696) → закрыл только рабочую. Осталась пустая 254361695.
  • Корень. tabs_context_mcp с createIfEmpty:true сам создаёт готовую пустую вкладку («creates a new Window with a new tab group containing an empty tab which can be used for this conversation»). SKILL.md в шаге 2 дополнительно велит «Создай НОВУЮ вкладку» через tabs_create_mcp. В итоге вкладок получается две: одна от createIfEmpty, одна от tabs_create_mcp. Шаг закрытия (строка 70) закрывает «вкладку Screenpipe, которую создавал» — то есть одну. Пустая от createIfEmpty остаётся сиротой.
  • Почему это важно. Запуск ежедневный по будням. Каждый прогон будет оставлять по одной пустой вкладке → за неделю накапливается 5 пустых вкладок в браузере пользователя. Данных не портит, но именно это и раздражает.
  • В SKILL.md. Строки 14–15 (создание вкладки) и 70 (закрытие) — рассинхрон: создаётся 2 вкладки, закрывается 1.

🟢 Minor

P102 — [TRUNCATED] при возврате крупного JSON из javascript_tool

  • Факт. Вызовы агрегации (__agg, __agg2) вернули JSON, обрезанный в отображении на ~800 байт. Пришлось делать дозапрос отдельных полей (hourRec, topBlocks, bitrix, aiTools) шестым вызовом.
  • Корень. Лимит на размер строки, возвращаемой javascript_tool (тот же механизм, что P002 в базе Bitrix). Кириллица + большой объект = обрезка.
  • Fix. Сохранять агрегат на window.__agg, а наружу возвращать сразу узкими порциями (≤ ~600 симв. на вызов), а не одним большим JSON.stringify. Стоило одного лишнего вызова — некритично.

P103 — В отчёт не попал раздел детального разбора ИИ-задач по заголовкам

  • Факт. Разбивка ИИ по инструментам сделана (Claude десктоп/браузер, Colab, NotebookLM, Qwen, Codex, ChatGPT), но «какие задачи ставились в ИИ» слито с разделом «Что сделано», отдельного подраздела нет.
  • Оценка. Соответствие SKILL.md шаг 4 частичное; на качество вывода почти не влияет. Minor.

Предложения по улучшению SKILL.md

Улучшение 1 — Убрать вторую вкладку (главный фикс P101)

Где вставить: заменить строку 15 в разделе «# 2». Было:

- Создай НОВУЮ вкладку (запомни её tabId — её нужно будет закрыть в конце), перейди на http://localhost:3030/health...

Стало:

- Вкладку создавай РОВНО ОДНУ. Сначала вызови tabs_context_mcp БЕЗ createIfEmpty и посмотри группу:
  · если группа пуста или её нет — вызови tabs_context_mcp{createIfEmpty:true}; он САМ создаёт готовую пустую вкладку — используй ИМЕННО ЕЁ, НЕ вызывай после этого tabs_create_mcp;
  · если в группе уже есть вкладки — создай одну рабочую через tabs_create_mcp.
  Запомни tabId рабочей вкладки. НЕ должно получиться двух вкладок. Затем перейди на http://localhost:3030/health...

Почему важно: это прямая причина «пустая + рабочая». createIfEmpty:true уже даёт пригодную вкладку — второй tabs_create_mcp лишний.

Улучшение 2 — Закрывать ВСЕ свои вкладки, а не одну (страховка P101)

Где вставить: заменить строку 70 в разделе «# 8». Было:

- ЗАКРОЙ вкладку Screenpipe, которую создавал (tabs_close_mcp по её tabId)...

Стало:

- ЗАКРОЙ за собой ВСЕ вкладки, которые появились из-за запуска. Перед закрытием вызови tabs_context_mcp
  и закрой (tabs_close_mcp) как рабочую вкладку Screenpipe, ТАК И любую оставшуюся пустую вкладку
  chrome://newtab/ в этой группе. После себя не оставляй ни одной открытой вкладки. (Если это
  последняя вкладка группы — Chrome сам уберёт группу, это нормально.)

Почему важно: даже если вкладок случайно окажется две, финальный шаг гарантированно уберёт пустую.

Улучшение 3 — Возврат данных порциями (P102)

Где вставить: после строки в «# 3» про «агрегируй ВНУТРИ страницы». Текст:

- Крупные агрегаты держи на window.__agg, наружу возвращай узкими кусками (≤ ~600 симв. на вызов),
  а не одним большим JSON.stringify — иначе кириллический вывод обрежется в [TRUNCATED].
  Не использовать btoa/base64 — блокируется.

Почему важно: экономит 1 лишний дозапрос на каждом прогоне.


Что сработало хорошо

  • Сбор данных чистый: 1 probe + пагинация до 2211 кадров одним циклом, сортировка по времени.
  • Категоризация, тайминг (cap 90 сек), паузы (>120 сек), переключения — посчитаны корректно, цифры сошлись с эталоном 2026-07-02 (active 251 vs 254 мин — в пределах ±10–15%).
  • Health прочитан до сбора: сразу видно audio_status=not_started → раздел встреч честно «данных нет».
  • Read-only соблюдён, отчёт корректно перезаписан (файл на дату уже существовал).
  • Вкладка Screenpipe в конце всё же закрыта (просто не единственная открытая).

Итог

Запуск технически чистый (5 вызовов, 0 ошибок, данные верны), но подтверждается жалоба Анатолия: остаётся одна пустая вкладка. Причина — связка tabs_context_mcp{createIfEmpty:true} (уже даёт вкладку) + лишний tabs_create_mcp (даёт вторую), а закрывается только одна. Главная правка — Улучшение 1 (создавать ровно одну вкладку) + Улучшение 2 (в конце закрывать все свои, включая пустую).