Files
obsidian-vault/personal/plans/personal-os-operating-plan-2026-10-03.md
T

213 lines
83 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
namespace: personal
tags:
- personal-os
- execution-plan
- focus
- work-life-balance
date: '2026-10-03T00:00:00.000Z'
status: approved-for-implementation
approved_on: '2026-10-03T00:00:00.000Z'
implementation_status: shadow-running
mission: '[[personal/projects/personal-os/personal-os-purpose]]'
updated: '2026-10-04'
---
# Personal OS — аудит и план запуска вокруг фокуса
> План реализации заменён пакетом R2: [[personal/projects/personal-os/personal-os-system-review-index]]. Ниже сохранены история и прежняя постановка; текущий порядок R0–R4, контракты и пороги приёмки находятся в R2.
> **Архитектура production v1 пока не согласована.** Выбор Node/TypeScript vs n8n/Node-RED, data flow, контуры планнера/ретроспектора, канал взаимодействия и критерии завершения собраны в [проекте архитектурного решения](/Users/admin/Developer/personal-os/planning/personal-os-architecture-decision-2026-10-04.md). Это предложение для обсуждения; оно не разрешает новые расписания, агентские запуски, миграции или доставку. Утверждённый ранее read-only shadow остаётся в своей прежней границе.
**Утверждённое решение от 2026-10-03:** сначала запустить контур управления самочувствием, фокусом и посильной нагрузкой Алекса. Его главная проблема сейчас — **рваный фокус**: одновременно идут его задачи и много агентных задач, которые неожиданно возвращаются к нему как ревью/решения. Технические источники дают факты, но само приложение на переднем плане не определяет рабочую тему. Кодинговые агенты — второй контур, ограниченный человеческим временем ревью и токенами. Этот документ заменяет прежнюю версию плана от 2026-10-03, где на первое место ошибочно поставлена техническая надёжность feed.
**Состояние выполнения на 2026-10-04:** пакеты A–C реализованы для подтверждённых источников; D работает как локальный shadow-фокус с явными `unknown`; E запущен как тихий сбор. `com.personalos.focus-shadow` работает по будням 08:00–20:00 каждые 15 минут; проверка 4 октября: 54 запуска, последний код 0, последний снимок 00:41 +06. Корпоративный Mattermost собирается отдельным read-only клиентом. Zoom: два transcript сохранены, ночной LaunchAgent включён на 02:15, первый запуск по расписанию ещё впереди. Через Balda на Monterey/Xcode 13 запущено создание пустого iPad-проекта; сборка и установка нового приложения не подтверждены. Двухдневная калибровка, ручная проверка 20 интервалов и пользовательский пилот ещё не завершены. Старый Executor, push-уведомления и запись в Asana/GitHub не включены. Миссия: [[personal/projects/personal-os/personal-os-purpose]]. Текущее состояние: [[personal/projects/personal-os/personal-os-status-2026-10]].
## 1. Системная задача и критерий пользы
В каждый момент система поддерживает состояние: **над какой рабочей темой я сейчас занят, какие агентные работы идут параллельно и ждут моего ревью, энергия/настроение (если я их указал), посильная нагрузка и граница рабочего дня, обязательства, встречи, накопившиеся изменения и цена переключения**. Рабочая тема может быть Asana-задачей, ревью PR/Tech Design/Ship Review, планированием, развитием команды, встречей или контролем агента; непосредственный кодинг — лишь один из видов работы. На основе этого система предлагает выполнимый фокус дня, защищает его, помогает вернуться после переключения, пересобирает план и сохраняет карьерные факты. Алекс может в один шаг сменить фокус, снизить нагрузку или отложить предложение.
Приоритеты строго такие: (1) хорошо себя чувствовать, (2) эффективно распределять нагрузку и фокус, (3) сохранять баланс жизни/работы, (4) выполнять и улучшать рабочие и карьерные результаты. Больший объём работы не компенсирует ухудшение первых трёх целей. ActivityWatch — наблюдение за поведением компьютера, **не датчик самочувствия и не оценка продуктивности человека**.
### P0: актуальное состояние проектов для всех агентных сценариев
Аудит к career advisor call 2026-10-04 показал сбой: обсуждённое в Zoom предложение о code-initialized Core Data models было позже отменено, но агент трактовал закрытую Asana-подзадачу и старый разговор как действующий результат. **Первый read-only project-truth analyzer для VSCode/SPM реализован и подключён к shadow** между сбором источников и focus/career/advisor выводом; рабочий JSON-only путь проверен без DB-миграции; playbook для подготовки advisor call создан, вторничная автоматизация на 09:00 включена; первый запуск ещё не проверен. Он различает предложение, решение, отмену, внедрение, проверку и открытый follow-up; хранит время, ссылку, свежесть, confidence и supersedes. При конфликте даёт `unknown` и не выдаёт неподтверждённое внедрение. Первый fixture — [[personal/projects/personal-os/project-truth-analyzer]]: Core Data code-init отменён, существующие модели сохранены под Xcode 27, cleanup открыт. Параллельная калибровка shadow-сбора продолжается; выпуск карьерных claims о проекте зависит от этой проверки.
### Сигнал раздражения из выгруженных транскриптов агентов — требование Алекса от 2026-10-04
**Источником служит выгрузка транскриптов общения Алекса с другими агентами, а не диалог с Personal OS.** Явная грубость или брань в сообщении Алекса агенту — предварительный сигнал раздражения в соответствующем рабочем интервале. Анализировать вместе с темой задачи, повторными неудачами агента и очередью ревью: это может объяснять цену работы и перегрузку. Не превращать сигнал в диагноз, оценку продуктивности или окончательный вывод о самочувствии; явная оценка Алекса имеет приоритет.
**Контракт реализации:** локально импортировать уже выгруженные транскрипты Codex/Claude/других используемых агентов, отделить сообщения Алекса от ответов агента, извлечь `irritation_signal` с временем, ссылкой на источник и confidence. В производном timeline/focus state хранить метку и ссылку на исходный транскрипт, без дублирования его текста. Проверить резкое обращение, техническую брань о коде и просто короткую команду; последние два случая не должны автоматически означать раздражение. Нынешний `session-observer.js` читает только metadata, поэтому импорт и анализ транскриптов **ещё не реализованы**, а сигнал пока `unknown`.
**Режим использования:** Personal OS пассивно анализирует выгрузки и учитывает результат при оценке нагрузки и качества работы агентов. В обычной жизни Алекс не ведёт переписку с «агентом Personal OS»; этот сигнал не запускает сообщения, вопросы или вмешательства в момент раздражения.
### Целевой цикл
1. **Понимание факта:** собирает временную линию человеческой работы и параллельных агентных задач, связывает рабочую тему с Asana/PR/встречей/worktree по доказательствам; неизвестное оставляет неизвестным.
2. **Понимание спроса и ёмкости:** определяет, что действительно требуется от Алекса, сколько времени/энергии займёт, где возникнет человеческое ревью; вычитает встречи, перерывы, переключения и окончание рабочего дня, учитывает добровольную отметку энергии/настроения.
3. **Выбор фокуса:** предлагает одну основную работу и ограниченное число обязательств, объясняет перенос/делегирование/ожидание остальных; Tech Design, Ship Review, team growth и карьерные дела не исчезают за срочным шумом.
4. **Защита и восстановление:** в фокусе обычные изменения копятся молча, при естественном переходе приходит короткая карточка «где остановился → что изменилось → что дальше». Критическое исключение имеет явное правило и ссылку.
5. **Обратная связь:** Алекс одним действием отмечает полезность/ошибку/перегрузку или меняет план; система измеряет последствия и корректирует правила. Агенты развивают систему только в пределах бюджета внимания и токенов.
### Два первичных блокера
**Блокер 1 — достоверность и смысл наблюдений.** Нужна единая модель `временной интервал человека ↔ рабочая тема ↔ конкретный объект Asana/PR/TD/Ship Review/meeting ↔ агентная задача ↔ ожидаемое ревью`. ActivityWatch даёт окна/AFK/переключения, а Asana, browser URL, VS Code/worktree, Codex/Claude, GitHub и Zoom дают смысл. Агент разбирает неоднозначные интервалы, но помечает уверенность и не строит решение на догадке. Первое доказательство: один рабочий день можно восстановить как последовательность реальных тем и агентных ожиданий без выдуманных привязок.
**Блокер 2 — решение «что надо делать» при ограниченном ресурсе.** Это отдельный анализ поверх фактов: роль и ответственность Алекса, важность для проекта/карьеры/команды, срок и цена ожидания, зависимые люди, доступные окна, энергия, перерывы, стоимость переключения, очередь агентных ревью. Выход — `сейчас / выделить окно / делегировать / ждать / перенести` с причиной и влиянием на баланс. Первое доказательство: в перегруженный день система защищает основной фокус и явно переносит низкоценное агентное ревью, не теряя настоящее обязательство.
Короткая доставка и обратная связь — следующий этап, который проверяет, что оба блокера действительно решены. Ровный сбор ActivityWatch без семантики рабочей темы не закрывает блокер 1; точная временная линия без выбора посильной работы не закрывает блокер 2.
### Что проверяем после сбора данных
Сбор событий — вход в цикл проверки, а не самостоятельная цель. **Первая проверка: можно ли восстановить человеческую рабочую тему и очередь его решений. Вторая: помогает ли предложенный выбор сохранить самочувствие и фокус, не теряя обязательств.** Ниже — гипотезы пилота; пороги уточняются по исходному замеру, а не выдаются за уже доказанный эффект.
| Гипотеза | Наблюдение и опровержение | Что меняем при ошибке |
|---|---|---|
| H1. ID/URL Asana и PR, worktree/ветка и явное состояние agent run позволяют связать большую часть важных интервалов и ожиданий без угадывания по приложению. | На 20 интервалах из разных типов работы вручную по исходным ссылкам проверяем `work_thread_id`, `actor`, `activity`, `needs_human` и свежесть; считаем долю верных `high-confidence`, долю `unknown`, ложные связи и пропущенные обязательства. Любая уверенная привязка, противоречащая источнику, опровергает правило, давшее её. | Исправить конкретный adapter/binding; снизить confidence; оставить `unknown`. Не повышать confidence только ради покрытия. |
| H2. «Рваный фокус» лучше объясняют переходы **между рабочими темами** и неожиданные agent review/approval, чем число смен приложений. | За два дня сопоставить реальные переходы, время возврата к теме и неплановые запросы с короткой добровольной оценкой «насколько рваным был день» 1–5. Если смены приложений без смены темы считаются прерываниями или оценка не согласуется с наблюдаемыми событиями, модель фрагментации неверна. | Пересмотреть правила границ темы и события прерывания; не оптимизировать счётчик окон. Субъективная оценка не заменяется ActivityWatch. |
| H3. Роли, зависимости, последствия ожидания и доступная ёмкость дают полезнее выбор «сейчас/позже», чем overdue/easiest-first. | На обычном и перегруженном дне в shadow-режиме сравнить предложение с проверенными Asana/PR/meeting обязательствами, свободным временем, перерывами и границей работы. Проверять: нет пропущенного важного действия, нет работы сверх ёмкости, есть причина переноса. Одного неверно названного срочным FYI достаточно для исправления роли. | Исправить извлечение `work_demand` или правило приоритета; явно показать неопределённость. Не повышать срочность из-за одного комментария, красного CI или даты без последствий. |
| H4. Пакетное ревью готовых agent results уменьшает неплановые обращения без накопления действительно срочных решений. | В пятидневном пилоте сравнить число обращений, минуты ревью, возраст очереди и пропущенные сроки с исходным замером. Если обращений меньше, но обязательства теряются или вечер занят ревью, гипотеза не подтверждена. | Изменить reviewer slot, WIP и правило критического исключения; не увеличивать параллельность агентов ради throughput. |
| H5. Добровольная отметка энергии/настроения улучшает посильность плана без дополнительной нагрузки. | Сравнить корректировки в дни с отметкой и `unknown`, частоту «слишком много», самочувствие и время на ввод. Если отметка не даёт пользы или раздражает, убрать запрос и оставить консервативный `unknown`. | Изменить `capacity-model.js`/момент запроса, а не выводить настроение из окна или активности. |
### Калибровка и исправление правил
1. **Тихий baseline, два рабочих дня.** Проверить свежесть каждого источника и восстановить события без уведомлений. Для Asana отдельно различать `assigned`, `mentioned`, `commented`, `blocked_by`, `requested_review`, `FYI`; для GitHub — мой PR, CI, approvals/changes requested и PR, где ожидается именно моё ревью. Отсутствующий канал обозначать `unknown`, не «нет обязательств».
2. **Выборка и эталон.** Взять 20 интервалов поперёк Asana, браузера/PR, VS Code/worktrees, agent sessions, встреч и личного контекста. Для каждого сохранить исходный ID/URL, тип источника, время наблюдения, автоматическую метку, confidence и проверенную метку. Личные проекты и статьи различать как `personal_project`, `work_research`, `leisure_or_break` или `unknown` по контексту и намерению; домен сайта сам по себе не доказывает «отвлечение». Без подтверждения Алекса не приписывать намерение или самочувствие.
3. **Разбор расхождений.** Сначала исправлять неверный/устаревший источник, затем связь объектов, затем роль и приоритет, затем момент/формат обращения. Менять одно правило за раз; сохранить в `calibration_cases` и `calibration_changes` исходный пример, исправление и результат повторного прогона. Уточнение у Алекса только на естественном переходе и лишь когда неоднозначность меняет его план; в пилоте максимум один такой вопрос в день.
4. **Shadow-план и пятидневный пилот.** На двух днях воспроизвести решения без доставки и проверить H3; после согласованного включения короткой карточки проверить H2/H4/H5 на пяти рабочих днях. Ежедневно смотреть только критические ложные срочности и пропущенные обязательства; по завершении сравнить субъективный фокус/самочувствие, неплановые обращения, review minutes, границу дня и расход токенов. Если карточки не читаются или вредят фокусу, остановить доставку и исправить правило. Отсутствие обратной связи не считать согласием.
**Аудит источников:** [[personal/plans/personal-os-source-audit-2026-10-03]] фиксирует `есть / нет / свежесть / достоверность / что требуется от Алекса / точная правка / проверка` для Asana, GitHub, браузера, worktrees и Codex/Claude/Balda. Его выводы уточняют P0.1; аудит не включал автозапуск сборщиков.
### Первый исполняемый срез — выполняется
**Пакет A — выполнен 2026-10-03.** Добавлены локальная очередь `work_demands`, статус источника и классификация прямых вопросов, ревью, назначений и неопределённостей. После одного read-only refresh очередь `fresh`: 2 прямых вопроса и 1 запрос на ревью из Asana; FYI и автоматические напоминания не названы обязанностью. Проверены 20 реальных комментариев без переноса текста в отчёт, 6 автоматических тестов проходят. Обновлён `~/context/attention.md`. Старый Executor и расписание не запускались.
**Ход 2026-10-03, 22:42 +06.** `com.personalos.focus-shadow` загружен с интервалом 15 минут: 3 октября тихий сбор продолжается до полуночи, затем — рабочие дни 08:00–20:00; два полных read-only прогона сегодня завершились без ошибок. Снимок сохраняется в `~/context/shadow.json`, `focus.json` и `shadow-history/`. GitHub: 27 моих open PR и 5 текущих review requests, оба набора точно совпали с независимым REST API; CI, head SHA, approvals и unresolved threads читаются. ActivityWatch: 254 локальных интервала; текущая тема `unknown`, потому что AFK-данные сейчас stale. DDG URL watcher загружен, но свежего URL ещё нет — не строить привязку по названию окна. Метаданные Codex/Claude и локальные worktrees читаются без текста разговоров; `needs_human` остаётся unknown без подтверждённого события. Календарь и Balda не имеют подтверждённого read-path/контракта в этом срезе. 18 тестов проходят. Два рабочих дня shadow и проверка 20 разнообразных интервалов остаются впереди; доставка карточек, Zoom, iPad и старый Executor не включены.
**Обновление 2026-10-04, 00:41 +06.** Последний полный снимок: Asana/GitHub и AW window/AFK/DDG URL `fresh`; Xcode/VS Code `stale` из-за отсутствия недавних событий. Обнаружены 78 worktrees, 40 с незавершёнными изменениями, 2157 изменённых путей и 64 коммита за 30 дней; учитываются размеры и пути без diff. Из 53 интервалов iTerm 18 привязаны к точному worktree по пути в заголовке. 65 Codex и 24 Claude сессии видны по metadata без бесед. Корпоративный Mattermost авторизован отдельным Chrome-клиентом: первый сбор 21 сообщение из 202 каналов, далее каждые 15 минут; на mm.qentra.top проверен сбор 265 сообщений из 9 каналов без фонового расписания. Outlook виден только как активность окна; чтения писем/встреч нет, доступные коннекторы отключены администратором, для Graph нужен разрешённый app/client ID. Календарь и Balda остаются `unknown`. Последний полный snapshot и 27 тестов прошли. Исторические цифры в абзаце выше относятся к 3 октября и не описывают текущую свежесть источников.
**Режим разработки:** одна активная coding-задача Personal OS за раз, один проверяемый результат на задачу, без unattended respawn; текущие Balda/Broker/Virfield уже занимают часть reviewer capacity. До достоверного учёта токенов не выдавать агенту бесконечный Ralph loop. Лимиты первого среза: одна попытка исправления после неудачной проверки, один пакет на ревью Алексу в день, целевой размер ревью до 20 минут. Фактические токены/стоимость логировать, отсутствие usage обозначать `unmetered`; численные token caps P1 согласуются отдельно. Параллельно coding-задаче можно вести read-only диагностику следующего адаптера без нового запроса к Алексу.
1. **Собрать достоверную очередь человеческих обязательств из Asana и GitHub.** В [`sync.js`](file:///Users/admin/Developer/personal-os/sync.js) и новом `work-demand.js` различить назначение, прямой запрос/вопрос, dependency, ревью и FYI с `source ID`, временем, ролью и confidence; комментарий без ответа сам по себе не равен обязательству. В [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js) получить все мои open PR в рабочих репозиториях и полный список текущих review requests независимо от unread, а для PR — head SHA, CI failures, approvals/changes requested и unresolved review threads. Репозитории брать из явной конфигурации и подтверждённых локальных worktrees, не только из текущего hardcoded `duckduckgo/apple-browsers`. Хранить раздельные `observed_at/stale/error`; ошибка GitHub не превращается в «нет PR». **Приёмка:** на выбранных Asana examples ложный FYI не становится «ответь»; мои 19 текущих PR в `duckduckgo/apple-browsers` не теряются из-за лимита 20; проверка review queue совпадает с текущим API/UI и имеет ссылки. **Польза:** система впервые показывает, что от меня реально ждут, без общего backlog dump.
2. **Привязать текущую работу и агентные ожидания к объектам шага 1.** В [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js) вычислять `Now` из свежего переднего окна и AFK; DDG URL восстанавливать через существующий watcher или явно показывать `unknown`. Новый `context-links.js` связывает точный Asana task ID/browser PR/repo-worktree-branch-head SHA; новый `session-observer.js` читает только metadata Codex/Claude, `agent-run-adapters.js` принимает подтверждённый `needs_human` или оставляет `unknown`. **Приёмка:** Asana→browser PR→worktree→agent run даёт одну человеческую тему и отдельное агентное время; личный проект/статья не становятся автоматически «плохим отвлечением»; старое событие Xcode/VS Code не побеждает текущее окно. **Польза:** меньше ручного поиска «где остановился» и ложных переключений.
3. **Собрать один локальный focus state по обязательствам и доступной ёмкости.** Новый `capacity-model.js` вычитает подтверждённые встречи, перерывы, резерв на переключение/неожиданное и reviewer slot из установленной границы дня; неизвестный календарь/энергия явно остаются неизвестными. Новый `day-coordinator.js` выбирает одну основную тему, не более трёх ближайших действий и явные переносы; `focus.json`/`focus.md` по запросу заменяют длинный статус. Никаких push и расписания на этом шаге. **Приёмка:** перегруженный fixture-день оставляет перерыв и один reviewer slot; настоящий deadline показан с причиной, FYI и готовый agent PR не прерывают фокус. **Польза:** появляется короткий ответ «что делать сейчас и почему это посильно».
4. **Калибровать без нагрузки на Алекса.** Новый локальный `scripts/run-focus-shadow.sh`/LaunchAgent запускает только read-only incremental Asana/GitHub refresh и локальную сборку timeline/решений без карточек и уведомлений; отдельные каналы помечают `fresh/stale/failed`, целевая свежесть важных обязательств в рабочее время — до 15 минут, с проверкой API затрат и задержек. Два рабочих дня shadow-сбора и 20 интервалов разных типов сравнить с ID/URL/состояниями источников; два дня воспроизвести focus-рекомендации без доставки. Исправлять по одному правилу и сохранять пример/до/после в `calibration_cases/changes`; у Алекса уточнять максимум один вопрос в день только если ответ меняет рекомендацию. **Приёмка:** ноль ложных high-confidence привязок и выдуманных `needs_human`, нет скрытого пропуска важного обязательства, неизвестное не маскируется. **Польза:** рекомендации опираются на проверенные факты, а не на названия окон.
5. **Включить ограниченный пользовательский пилот.** После отдельного согласования границы дня и канала показывать одну карточку на естественном переходе; обычные обновления копить молча. Пять рабочих дней измерять добровольную оценку самочувствия/рваного фокуса, неплановые обращения, минуты ревью, пропущенные обязательства и использование карточки. На «неверно/слишком много» исправлять следующее предложение; неиспользуемую карточку остановить. **Приёмка:** нет обычных прерываний во время focus/meeting и после границы дня; Алекс за ≤10 секунд корректирует план. **Польза:** система начинает помогать в моменте, не создавая новый поток сообщений.
**Утверждённая граница плана от 3 октября:** локальные read-only интеграции, файлы контекста, проверка на выборке и тихий автозапуск shadow-сборщика. Позже Zoom-экспорт отдельно включён и создание пустого iPad-проекта запущено; это не означает приёмку iPad-клиента или автоматического импорта новых встреч. Старый `com.personalos.readonly` и Executor остаются выключенными. Push-уведомления и запись в Asana/GitHub не включены. До пользовательского пилота нужны граница рабочего дня и канал короткой карточки.
### Передача в следующую сессию — исполняемые пакеты
**Стартовая инструкция:** «Выполни утверждённый первый срез Personal OS из этого документа. Начни с пакета A ниже; учитывай [[personal/plans/personal-os-source-audit-2026-10-03]] и миссию. Код и тихий локальный сбор разрешены в указанной границе. Не превращай это в новый раунд общего планирования. Дай один короткий отчёт о результате и проверках; не запрашивай ревью чаще одного раза в день». Разработка стартует в новой сессии; запись этого документа не запускает агентов или сервисы.
1. **Пакет A — Asana obligations.** Проверить текущее `git status` и схему без изменения существующих чужих файлов; сохранить локальные изменения. Из [`asana.js`](file:///Users/admin/Developer/personal-os/asana.js), [`sync.js`](file:///Users/admin/Developer/personal-os/sync.js) и `stories` сделать `work-demand.js` + аддитивную миграцию `migrations/003_focus_core.sql`: `role`, `requested_action`, `requester`, `evidence_gid`, `observed_at`, `confidence`, `unknown`. Отделить прямой вопрос/назначение/ревью от FYI и комментария без ответа. **Готово, когда:** на проверенной выборке прямой запрос показан со ссылкой, FYI не назван обязанностью, ошибка источника не выглядит как пустой список; есть тесты на эти три случая и краткий отчёт о реальных примерах без копирования чувствительного текста.
2. **Пакет B — GitHub obligations.** После пакета A обновить [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js): текущие мои PR и review assignments по подтверждённым рабочим репозиториям, CI/checks, approvals/changes requested, unresolved threads, head SHA, timestamps/errors по каждому источнику. `unread notification` оставить подсказкой, не источником истины для review queue. **Готово, когда:** число моих PR и текущих запросов на ревью совпадает с прямым GitHub API на момент проверки; сценарии failed CI, новый push после approval и resolved/unresolved comment дают правильное действие или `unknown`.
3. **Пакет C — наблюдаемый контекст.** После пакета B исправить [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js) и добавить `context-links.js`/`session-observer.js`/`agent-run-adapters.js`: переднее окно+AFK, точный URL/ID, локальные worktrees, metadata сессий и только подтверждённые `needs_human`. Проверить DDG watcher; при отсутствии свежего URL сохранять `browser_url_unknown`. **Готово, когда:** Asana→PR→worktree→агент соединены доказанной связью, человеческое и агентное время раздельны, старый Xcode/VS Code bucket не называется текущим фокусом.
4. **Пакет D — посильное решение.** После пакета C добавить `capacity-model.js`, `day-coordinator.js` и локальные `focus.json`/`focus.md` по запросу: одна основная тема, до трёх действий, причины переносов, встреча/перерыв/граница дня/reviewer slot; отсутствие энергии и календаря остаётся `unknown`. **Готово, когда:** обычный и перегруженный fixture-дни дают выполнимые планы, FYI/готовый agent PR не прерывают фокус, карточка занимает один экран.
5. **Пакет E — тихая проверка и пилот.** После пакета D проверить один read-only прогон, затем включить только новый `run-focus-shadow` для двух рабочих дней без уведомлений, проверить 20 интервалов и зафиксировать исправления. До пользовательского пятидневного пилота получить от Алекса границу рабочего дня и канал карточки; включить доставку только после этого. **Готово, когда:** источник/связь/роль/решение проверены по ссылкам, ноль ложных уверенных `needs_human`, измерены человеческие прерывания и reviewer minutes.
**Общие правила приёмки пакетов:** каждый пакет завершается работающим кодом, тестом фактического риска, коротким diff/артефактом и указанием оставшихся `unknown`; следующий пакет может готовиться автономно, но новые результаты к ревью Алексу не отправлять сверх одного пакета в день. Даты и числа из аудита — снимок 3 октября: в новой сессии проверить свежесть Asana/GitHub/AW, а не считать 19 PR постоянной величиной.
## 2. Что действительно есть 2026-10-03
| Слой | Проверенный факт | Граница факта |
|---|---|---|
| Asana | [`sync.js`](file:///Users/admin/Developer/personal-os/sync.js) читает задачи/комментарии в локальную PostgreSQL; разовый прогон 3 октября дал свежие данные. [`generate-status.js`](file:///Users/admin/Developer/personal-os/generate-status.js#L890) создал `~/context/status.md` (402 строки), пробный [`generate-attention.js`](file:///Users/admin/Developer/personal-os/generate-attention.js#L32) — 28-строчный список. | Фоновый `com.personalos.readonly` после остановки не загружен; разовый прогон не означает работающую Personal OS. Список не учитывает энергию, встречи, перерывы и контекст возврата. |
| ActivityWatch | Локальный `aw-server` слушает 127.0.0.1:5600. 3 октября в 14:13 UTC у bucket `window` и `afk` были свежие записи. [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L220) считает активное время, приложения, проекты, сессии и worktrees. Расширение `activitywatch.aw-watcher-vscode` установлено и в `~/.vscode/extensions/`, и в старом `~/.cursor/extensions/`; [`README.md`](file:///Users/admin/Developer/personal-os/README.md#L106) описывает только Cursor и устарел. | Xcode bucket обновлён последний раз 1 октября, `aw-watcher-vscode` — 2 октября, DDG URL — 8 июня; отсутствие более свежего события не доказывает поломку. Нужно различить источники bucket и проверить работу именно в VS Code. `currentFocus` берёт первый bucket по приоритету xcode→vscode→ddg→window за 20 минут, а не фактически переднее окно; последний [`status.md`](file:///Users/admin/context/status.md) написал `Now: loginwindow (18m ago)`. |
| GitHub и связь с работой | [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js) получает мои PR/CI и некоторые review requests; [`aw-projects.json`](file:///Users/admin/Developer/personal-os/aw-projects.json) умеет сопоставлять отдельные worktree/URL с проектом. Локально обнаружены 397 Codex и 59 Claude JSONL session files; последний Codex `session_meta` содержит `cwd/git`, Claude session — `cwd/gitBranch` в метаданных (проверено без чтения текста бесед). | Связь worktree ↔ ветка ↔ PR ↔ Asana task и sessions не собрана в единую историю дня. Работу агента нельзя автоматически считать человеческой активностью. Review requests зависят от unread notifications. |
| Встречи/Zoom | В старых промптах есть расписание и попытка MS365-проверки; записи бесед Zoom существуют по сообщению Алекса. | Подтверждённого текущего календарного канала и импорта этих записей в рабочий/карьерный профиль нет. Папка `~/Documents/Zoom` не указывает место всех записей. |
| Агенты | Старый Executor и Hermes-briefs выключены после инцидента. В [`executor_worker_runner.py`](file:///Users/admin/Developer/personal-os/agent/executor_worker_runner.py#L195) задано `max_turns=200`, а [`executor-runner.sh`](file:///Users/admin/Developer/personal-os/executor/executor-runner.sh#L17) допускает двух workers. В текущей Codex desktop задаче доступен read-only список задач с `active/idle/notLoaded`, но это не полный статус запросов к Алексу. | В видимом runner нет учёта токенов/денег и оценки минут ревью Алекса. Логи одного задания содержат повторные respawn без прогресса. Codex/Claude/Balda состояние `needs_human` пока нельзя достоверно собрать из одного списка или mtime; Balda/Broker/Virfield развиваются отдельно. |
| Карьера и день | [`generate-status.js`](file:///Users/admin/Developer/personal-os/generate-status.js#L731) показывает Advisor opportunities и visibility gaps; `activity_daily` хранит агрегаты времени по проектам. | Нет единого состояния для управленческой работы: PR/TD/Ship Review/team growth, баланса, энергии, встреч, ревью агентов и доказательств вклада. Карьерные сигналы оказываются внизу большого статуса; минуты кодинга не отражают менеджерский вклад. |
## 3. Почему старая версия не стала полезной
Алекс сообщил, что быстро перестал читать сгенерированные daily statuses. Точную причинную долю каждого фактора телеметрия не измеряла; ниже — **подтверждённые дефекты дизайна и вывод о вероятном эффекте**.
| Что было | Подтверждение | Почему это мешало | Что меняем в парадигме |
|---|---|---|---|
| Daily brief = большой отчёт. | В `briefs/daily/` 32 сохранившихся файла: медиана 115,5 строк, 30 из 32 длиннее 80; [`2026-05-15.md`](file:///Users/admin/Developer/personal-os/briefs/daily/2026-05-15.md) — 110 строк, с повторными просрочками и исторической trivia. [`daily-brief.md`](file:///Users/admin/Developer/personal-os/agent/prompts/daily-brief.md#L152) предписывает trivia и все разделы. | Высокая цена чтения в начале дня; сигналов больше, чем решений. Формат не был подстроен под то, открыл ли Алекс предыдущий выпуск. | Живое состояние и короткая карточка в нужный момент; подробности по запросу. Публикация не считается успехом без полезности для Алекса. |
| План дня строился от Asana-очереди и фиксированных правил. | [`daily-brief.md`](file:///Users/admin/Developer/personal-os/agent/prompts/daily-brief.md#L205) требует первым «1 Must» или самую лёгкую задачу, затем overdue/urgent; в нём нет запроса энергии и расчёта ёмкости дня. | Предлагаемый объём мог превышать доступное после встреч и перерывов; «первое лёгкое дело» могло вытеснять лучший фокус. | Сначала вместимость, энергия и фокус, затем выбор посильной работы. Перегрузка приводит к явному переносу. |
| «Фокус» выводился из приложения/времени, а не из рабочей темы. | [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L279) сопоставляет window events с Xcode/VSCode/DDG, [`aw-projects.json`](file:///Users/admin/Developer/personal-os/aw-projects.json) в основном классифицирует приложения, URL и имена worktree; связей с Codex/Claude runs, Asana-обязательствами и ревью TD/Ship Review нет. | Asana, browser PR и Claude могут относиться к одной рабочей теме; Codex на экране может быть управлением агентом. Смена приложения ≠ смена работы, и наоборот. | Временная линия рабочих тем с объектами и агентными ожиданиями, confidence и честным `unknown`. |
| Система не знала реальный момент для вмешательства. | [`inbox-triage.md`](file:///Users/admin/Developer/personal-os/agent/prompts/inbox-triage.md#L22) проверяет `Now` из 30-минутного status; [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L305) может выбрать старое Xcode событие или `loginwindow` как текущий фокус. | Даже верный сигнал мог появиться во время deep work или пропасть из-за ошибочной оценки фокуса. | Временная модель `focused / meeting / break / available / unknown`, с отдельной свежестью источников и ручным override. |
| Генерация не замыкала обратную связь. | [`heartbeat.sh`](file:///Users/admin/Developer/personal-os/scripts/heartbeat.sh#L140) проверяет существование файла brief, а не открытие, действие, отложение или неверность; в `schema.sql` нет принятия/полезности карточки. | Система не замечала, что документы перестали помогать, и продолжала производить их по графику. | Измерять добровольное использование и коррекции; прекращать неиспользуемые формы. |
| Автономия агентов создавала долг ревью и расход без ограничителя. | История инцидента в [[personal/projects/personal-os/executor-security-analysis]]; `max_turns=200`, `MAX_WORKERS=2`, нет ledger токенов; в [`executor/logs/1214071796247142/`](file:///Users/admin/Developer/personal-os/executor/logs/1214071796247142/) есть многократные `conflict_no_action` respawns. | Параллельные результаты и вопросы могут рвать фокус Алекса быстрее, чем он успевает проверять; повторы сжигали токены и внимание. | Планировать агентную работу как нагрузку на человека и бюджет; admission control, WIP, stop rules, пакетное ревью. |
## 4. Очерёдность правок — было → станет → проверка
### P0.1 — блокер 1: достоверная временная линия человека, рабочих тем и агентных задач
**Было:** [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L305) считает время приложений/проектов и может назвать старое Xcode/Cursor/DDG событие или `loginwindow` «текущим фокусом». Asana, браузерные PR, VS Code, Codex/Claude, worktrees, встречи и очередь агентных ревью не соединены. Название приложения не говорит, планирует ли Алекс работу, ревьюит TD, контролирует агента или пишет код.
**Станет:** локальная `work_timeline` из интервалов `start/end`, `actor=human|agent`, `work_thread_id`, `activity=planning|asana|pr_review|td_review|ship_review|team_growth|coding|agent_supervision|meeting|break|unknown`, `context_type=work_task|work_research|personal_project|leisure_or_break|unknown`, `source`, `evidence_url/id`, `confidence` и `state` агентной задачи (`running|blocked|waiting_review|done`). Несколько приложений могут соответствовать одной рабочей теме; две параллельные агентные задачи — двум отдельным потокам. Статья и личный проект не получают автоматически ярлык «отвлечение»: возможны работа, осознанный перерыв и неизвестный контекст. Переход между темами и входящий агентный запрос на ревью отмечаются отдельно; именно их частота и время возврата характеризуют «рваный фокус». Никакой интервал с низкой уверенностью не становится основанием для срочного прерывания.
**Как привязывать:** (1) точные ID/URL Asana task и GitHub PR; (2) git branch/worktree и явная связь с PR/Asana; (3) Codex/Claude session metadata `cwd/git/branch/time`, без текста разговоров; (4) календарь/Zoom для встречи; (5) классификация агентом только оставшихся неоднозначных интервалов, со ссылкой на улики и `unknown`, когда доказательств мало. Агент не задаёт вопрос по каждому `unknown`: уточнение допускается на естественном переходе, только если ответ изменит план, в пилоте — не более одного в день. Статус `waiting_review/needs_human` берётся из явного состояния задачи/запроса на approval, **не** из mtime файла или непрочитанного чата. В текущем Codex desktop read-only список задач показывает `active/idle/notLoaded`, но это ещё не полная семантика «ждёт Алекса»; доступ к pending approvals/ответам должен быть проверен отдельным адаптером. Для Claude и Balda/Broker аналогично использовать подтверждённые состояния или `unknown`. ActivityWatch определяет *когда* человек активен/AFK и какое окно впереди, не подменяет смысл работы. Учёт токенов и человеко-минут ревью привязан к отдельным agent runs.
**Правки:** [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js) — frontmost window + AFK как основа, свежесть, интервалы, исключить lock и старые bucket из `Now`; проверить установленное VS Code расширение, обновить [`README.md`](file:///Users/admin/Developer/personal-os/README.md#L106), диагностировать старый DDG URL watcher в [`DDGWatcher.swift`](file:///Users/admin/Developer/aw-watcher-ddg/Sources/AWWatcherDDG/DDGWatcher.swift) и Xcode watcher только если их данные нужны для связки. [`aw-projects.json`](file:///Users/admin/Developer/personal-os/aw-projects.json) — обновить правила рабочих тем и личного контекста. Новые `session-observer.js` (метаданные Codex/Claude), `agent-run-adapters.js` (явные состояния и запросы на human action из доступных Codex/Claude/Balda источников), `context-links.js` (worktree→branch→PR→Asana), `work-timeline.js` (нормализованный timeline и confidence), миграция `migrations/003_focus_core.sql` (`work_threads`, `work_intervals`, `agent_obligations`, `activity_bindings`, `calibration_cases`, `calibration_changes`). [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js) — регулярный refresh моих PR, CI failures, approvals/changes requested, review comments и полного списка PR на моё ревью, не только unread notifications; [`sync.js`](file:///Users/admin/Developer/personal-os/sync.js) — Asana ownership, роли и явные requests к Алексу; у каждого источника `observed_at/ok/stale/failed`. Точные интервалы обновления определить после аудита источников и измерения задержек; старый `generate-status.js` перестать использовать как единственный источник «Now».
**Приёмка:** два рабочих дня тихого shadow-сбора, без новых сообщений Алексу. На 20 проверенных интервалах ни одна `high-confidence` привязка не противоречит исходной Asana/PR/session ссылке; неоднозначные остаются `unknown`. Fixture `Asana task → browser PR → Claude по той же задаче` показывает одну рабочую тему и отдельную работу агента; fixture с двумя агентами показывает два `waiting_review` без удвоения человеческих часов. Xcode→browser, VS Code→Asana, lock/AFK и устаревший watcher дают корректное состояние, а не ложное «сейчас кодит».
### P0.2 — блокер 2: анализ «что надо делать» при реальном фокусе и самочувствии
**Было:** даже точные Asana/PR и минуты ActivityWatch выдавались как срочность/список задач. Не определялись роль Алекса и цена ожидания, вклад в карьеру и команду, доступная энергия, размер окна до следующей встречи, цена переключения и очередь агентных ревью. Календарь/Zoom пока не подтверждены как полный источник расписания.
**Станет:** `day_state` содержит явно выбранный фокус, добровольную энергию/настроение (1–5 или `unknown`), границу рабочего дня, подтверждённые встречи, доступные окна, перерывы, задачи и зависимости, карьерные обязательства, reviewer minutes/WIP и перенесённые пункты. `work_demand` для каждого кандидата хранит: роль `owner|reviewer|advisor|manager|observer`, кто ждёт, проверяемый срок и последствия ожидания, пользу для проекта/карьеры, длительность и когнитивную тяжесть, состояние агента, source links и уверенность. Результат по кандидату — `делать сейчас / выделить окно / делегировать / ждать / перенести` с человеческим объяснением.
**Приоритетный принцип:** сначала самочувствие и законные/реальные границы дня, затем защитить основную рабочую тему, затем обязательства перед другими людьми и узкие окна, затем карьерный/командный вклад; количество просроченных дат или готовых agent PR не является порядком дня. Один и тот же PR/Asana task дедуплицируется. У задачи с сомнительной ролью — `needs_clarification`, а не императив «ответить». При низкой энергии сложное ревью можно отложить, но настоящий hard deadline явно показать вместе с вариантом делегирования/сокращения другой работы.
**Правки:** `migrations/003_focus_core.sql` добавить `day_state`, `work_demands`, `focus_feedback` и использовать `agent_obligations` из P0.1 для оценки reviewer load; новый `work-demand.js` извлекает роли/зависимости из Asana, текущих PR, TD, Ship Reviews, meeting commitments и agent outputs, сохраняет доказательство и сомнения; новый `capacity-model.js` считает рабочую ёмкость; новый `day-coordinator.js` выбирает фокус и объясняет переносы. [`agent/task-role-classifier.md`](file:///Users/admin/Developer/personal-os/agent/task-role-classifier.md) и соответствующие playbooks обновить для advisor/manager/reviewer и контроля агентов; [`agent/prompts/daily-brief.md`](file:///Users/admin/Developer/personal-os/agent/prompts/daily-brief.md) убрать автоматическое «easiest first», полный overdue dump и неконтекстный план. Минимальный локальный ввод `focus-input.js`: сменить фокус/энергию/конец работы/«сегодня легче», без обязательного дневника. Для встреч сначала проверить фактический calendar read-path; при его отсутствии `meeting_schedule_unknown`, а не время, выведенное из Asana-задачи.
**Расчёт ёмкости:** время до границы работы − подтверждённые встречи − переходы между темами − защищённые перерывы − резерв на неожиданное − согласованное время человеческого ревью. Сложность работы соотносится с *явно указанной* энергией; `unknown` даёт консервативное предложение. Если спрос выше ёмкости, система показывает **что переносит/делегирует/оставляет ждать и почему**; не превращает личное время в рабочий резерв.
**Приёмка:** на fixture-дне с двумя встречами, низкой энергией, одним PR-review, одним TD/Ship Review, тремя Asana-задачами и двумя готовыми агентными результатами система оставляет одну основную рабочую тему, один ограниченный reviewer slot, перерыв и явные переносы; не предъявляет сразу два агентных ревью. На fixture-дне без календаря не выдумывает время встречи. На fixture с прямым запросом коллеги отличает реальное обязательство от FYI. Все решения имеют ссылку и расчёт ёмкости, личное время остаётся вне плана.
### P0.3. Управлять моментом и формой обращения к Алексу
**Было:** [`scripts/heartbeat.sh`](file:///Users/admin/Developer/personal-os/scripts/heartbeat.sh#L140) выпускал daily brief по часам и inbox каждые 30 минут; [`daily-brief.md`](file:///Users/admin/Developer/personal-os/agent/prompts/daily-brief.md#L205) требует длинный фиксированный формат. Пробный [`attention.md`](file:///Users/admin/context/attention.md) короче, но всё ещё список событий без плана нагрузки и состояния фокуса.
**Станет:** один короткий `focus_state` с текущей рабочей темой (не только app), доступной ёмкостью, **не более трёх** ближайших осмысленных действий, одной причиной сменить приоритет, временем следующего перехода/перерыва, числом/минутами ожидающих агентных ревью и ссылками. Подробный контекст открывается по желанию. Во время focus/meeting обычные изменения и готовые результаты агентов остаются в локальной очереди; после перехода — одна карточка восстановления. Критическое прерывание требует подтверждённого владельца, последствий ожидания и указанного deadline; возраст комментария или красная иконка недостаточны. Старое «3 часа» из миссии — кандидат на калибровку, не автоматическое правило для всех задач.
**Правки:** новый `focus-policy.js` (классы состояний, quiet hours, исключения); `day-coordinator.js` (динамический выбор после перехода); [`generate-attention.js`](file:///Users/admin/Developer/personal-os/generate-attention.js) заменить секции «Ответить/Ревью/Текущая работа» на компактный объект `focus_state` + фоновые обязательства и связи с источниками; `agent-run-adapters.js` складывает **уже существующие** Codex/Claude/Balda результаты и запросы в одну review queue, отличая genuine approval от обычного статуса. Там, где промпты/транспорт управляются Personal OS, заменить прямые статусные пинги единым review packet с оценкой времени; внешние неперехватываемые уведомления явно показывать как пробел. [`agent/prompts/daily-brief.md`](file:///Users/admin/Developer/personal-os/agent/prompts/daily-brief.md) заменить обязательные trivia, overdue dump и «easiest first» правилом краткой карточки с capacity/reason; [`scripts/heartbeat.sh`](file:///Users/admin/Developer/personal-os/scripts/heartbeat.sh) оставить старые brief jobs выключенными, позже вызвать только согласованный новый рендер. Выходы `~/context/focus.json` и `~/context/focus.md` атомарны; iPad позже читает тот же контракт в ограниченном виде.
**Приёмка:** во время 45-минутной работы над одной темой через Asana → browser PR → Claude два законченных agent jobs и обычный комментарий не создают три прерывания; переключение приложений внутри темы не обнуляет фокус. После блока доступна **одна** карточка с исходной темой, изменениями, ссылками и посильным следующим действием; агентные ревью остаются в выделенном окне. После встречи видно, к какой теме вернуться без поиска по нескольким приложениям. После границы рабочего дня обычных рабочих сигналов нет.
### P0.4. Замкнуть цикл на ощущении пользы, а не на числе сгенерированных файлов
**Было:** файл существует → job считает успех; невозможно узнать, пригодился ли план, был ли он слишком длинным, насколько посильным оказался день. Старые brief-форматы могли копиться, даже когда Алекс перестал их читать.
**Станет:** у карточки есть необязательные одношаговые элементы управления `полезно / неверно / слишком много / отложить` и оценка энергии/самочувствия 1–5, без переписки с агентом Personal OS. Система хранит correction с причиной и меняет следующий план: неверный сигнал удаляет ложное правило, «слишком много» уменьшает объём, пропуск карточки не порождает дополнительных напоминаний. Личные оценки остаются локальными и не становятся performance-метрикой.
**Правки:** `migrations/003_focus_core.sql` для `focus_feedback`; новый `focus-feedback.js`; [`agent/prompts/weekly-review.md`](file:///Users/admin/Developer/personal-os/agent/prompts/weekly-review.md) заменить обзор backlog на оценку: самочувствие (если добровольно указано), восстановление контекста, защищённые focus/break blocks, пропущенные обязательства, reviewer load, ложные прерывания. Отчёт не чаще раза в неделю и с одним предложением изменения правила.
**Приёмка 5 рабочих дней:** каждый день можно открыть состояние за один экран; ноль обычных прерываний во время подтверждённых focus blocks, ноль рабочих push после установленной границы, ни одно критическое сообщение без ссылки/причины. Начальный и итоговый замер включают число переходов **между рабочими темами**, число неплановых обращений к Алексу от агентов, накопленные минуты ревью и короткую добровольную оценку «рваности фокуса»/самочувствия; цель — уменьшение неплановых обращений и отсутствие ухудшения самочувствия, а не максимизация активных минут. Алекс может за ≤10 секунд отметить ошибку или перегрузку; его коррекция меняет следующий расчёт. Если он снова не читает карточку, формат пересматривается, а не размножается.
### P1. Допустить кодинговых агентов только через два бюджета
**Было:** `MAX_WORKERS=2`, `max_turns=200`, повторные respawn и подробные сообщения в чат; очередь ревью Алекса и токены не учитываются в плане дня.
**Станет:** перед запуском есть **два независимых лимита**: (A) человеческий — ожидаемые минуты ревью, уже ожидающие результаты, доступный reviewer slot с учётом энергии/фокуса; (B) агентный — токены/стоимость, время, число попыток и параллельность. Ledger хранит `provider/model`, input/output/cache tokens, оценку денег по фактическому тарифу, длительность, retries, прогноз и факт минут ревью. Агентная задача получает прогноз пользы и затрат; admission разрешён, только если оба остатка достаточны. На 80% дневного/недельного лимита новые coding jobs не стартуют, на 100% текущий job завершает безопасную точку и останавливается с артефактом/блокером. После двух попыток без нового проверяемого прогресса — stop без самоперезапуска. Готовый результат сверх reviewer capacity остаётся в очереди без уведомления Алекса.
**Правки:** `migrations/004_agent_capacity.sql` (`agent_runs`, `agent_usage`, `review_queue`, лимиты, прогноз/факт); новый `agent-budget.js` как admission/stop policy; [`agent/executor_worker_runner.py`](file:///Users/admin/Developer/personal-os/agent/executor_worker_runner.py#L195) логирует usage из ResultMessage/провайдера и прерывает по budget, не выдаёт `max_turns` за успех; [`executor/executor-runner.sh`](file:///Users/admin/Developer/personal-os/executor/executor-runner.sh#L17) в будущей замене/адаптере ограничивает WIP и запрещает бесконечный respawn; правила в `agent/prompts/executor-*.md` требуют одного проверяемого артефакта и оценки времени ревью, без полного trace в чат. Balda/Broker/Virfield остаются своим параллельным проектом; Personal OS пользуется их зрелым интерфейсом после приёмки.
**Предлагаемые стартовые лимиты для пилота, не включены:** одновременно 1 coding worker; 1 результат, ожидающий Алекса; до 20 минут ревью в рабочий день; максимум 1 автоматическая повторная попытка; 30 000 суммарных input+output токенов на задачу, 60 000 в день, 120 000 в неделю (cache tokens хранить отдельно для расчёта стоимости). После 3 измеренных задач пересчитать лимиты по реальной стоимости и времени ревью; стоимость в деньгах считать по фактическому провайдеру/плану, без выдуманной цены за токен. Если провайдер не отдаёт usage, пометить `unmetered` и не запускать следующий unattended loop. В день с низкой энергией reviewer slot можно обнулить без накопления срочных запросов.
**Приёмка:** два законченных агентных результата не вызывают два одновременных запроса к Алексу; второй ждёт свободного slot. Задача с повтором без diff/test progress останавливается; ledger показывает токены, время, оценку и факт человеческого ревью. Агентная работа не съедает защищённый focus block и не делает вечер новым рабочим временем.
### Параллельно: Zoom и iPad, но по контракту P0
- **Zoom:** текущий доступ к My Notes подтверждён через отдельный headless Chrome. Два transcript сохранены с `note_id` и источником; первый запуск по расписанию 5 октября и импорт первой новой заметки ещё нужно проверить. Следующий содержательный этап — из сохранённого transcript извлечь проверяемые решения, обещания, сроки и вклад с ссылкой на фрагмент; кандидаты проходят review перед попаданием в рабочий/карьерный профиль. Повторный импорт не должен создавать дубль. См. [[personal/projects/personal-os/zoom-ai-transcript-export]].
- **iPad Desk:** установка прежнего тестового проекта на физический iPad была подтверждена; создание нового пустого проекта через Balda на Monterey/Xcode 13 запущено 4 октября. Следующая контрольная точка — собираемый проект и артефакт установки нового приложения. Первый экран читает ограниченный `focus.json` по LAN: «фокус сейчас / одно ожидание меня / свежесть / нет связи». Приёмка: на iPad виден тот же focus state, после отключения сети ясно показана устаревшая версия; нет лишних алертов.
## 5. Последовательность, зависимости, участие Алекса
1. **Сейчас — тихий сбор запущен, калибровка не завершена.** Сверить 20 интервалов на двух рабочих днях, включая iTerm, DDG URL, личную работу и агентные ожидания; отметить ошибочные привязки. До пятидневного пользовательского пилота уточнить границу рабочего дня и канал карточки.
2. **P0.1 — блокер фактов:** после аудита собрать тихую временную линию человека/агентов/рабочих тем, проверить привязки к Asana/PR/meeting/worktree и честно показать неизвестные интервалы. Проверить 20 интервалов и два дня без новых сообщений Алексу.
3. **P0.1b — проектная правда:** первый датированный `project_state` для VSCode/SPM реализован, fixture, отдельный live-прогон и полный shadow-прогон во временную папку проходят; недостающий Asana-комментарий читается напрямую в read-only режиме. Полный shadow-прогон проверен в режиме `json_only`; следующий этап — подключить дополнительные проекты. Локальная DB-история остаётся необязательным улучшением. Затем направлять advisor/career outputs через claim-gate до новых утверждений о статусе. См. [[personal/projects/personal-os/project-truth-analyzer]].
4. **P0.2 — затем блокер решений:** выбрать посильную работу из Asana, PR, TD, Ship Review, встреч, team growth и агентных ревью по роли, пользе, сроку, энергии и доступному времени; испытать перегруженный день до включения schedule.
5. **P0.3 → P0.4:** показать один короткий живой focus state, провести 5 рабочих дней измеряемого пилота с возможностью исправить перегрузку. Только после этого решать о регулярной доставке.
6. **P1 и параллельные ветки:** продолжить ограниченный coding loop с учётом review/tokens; проверить первый ночной Zoom-запуск и извлечение кандидатов из transcript; принять пустой iPad-проект и затем вывести тот же focus state на устройство. Balda/Broker/Virfield не дублировать.
**Необходимое участие Алекса в пилоте:** перед доставкой карточки — граница рабочего дня и канал; затем по желанию один короткий сигнал «полезно/неверно/слишком много» и ручная смена энергии/фокуса, когда захочется. Система не требует ежедневного ведения журнала. Внешние записи и старый автономный Executor этим планом не разрешены.