From 41172aa49ab04b290388096cdd4c2f4fd435903d Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sat, 3 Oct 2026 20:24:19 +0600 Subject: [PATCH] [2026-10-03] eagle: personal/plans/personal-os-operating-plan-2026-10-03.md personal/projects/personal-os/personal-os-status-2026-10.md --- .../personal-os-operating-plan-2026-10-03.md | 138 ++++++++++++------ .../personal-os/personal-os-status-2026-10.md | 12 +- 2 files changed, 105 insertions(+), 45 deletions(-) mode change 100755 => 100644 personal/plans/personal-os-operating-plan-2026-10-03.md mode change 100755 => 100644 personal/projects/personal-os/personal-os-status-2026-10.md diff --git a/personal/plans/personal-os-operating-plan-2026-10-03.md b/personal/plans/personal-os-operating-plan-2026-10-03.md old mode 100755 new mode 100644 index 802a77f1..beb7a732 --- a/personal/plans/personal-os-operating-plan-2026-10-03.md +++ b/personal/plans/personal-os-operating-plan-2026-10-03.md @@ -1,64 +1,120 @@ --- namespace: personal -tags: [personal-os, execution-plan, proposal] +tags: [personal-os, execution-plan, focus, work-life-balance] date: 2026-10-03 -status: proposed +status: proposed-for-approval +mission: "[[personal/projects/personal-os/personal-os-purpose]]" --- -# Personal OS — порядок запуска и конкретный P0 +# Personal OS — аудит и план запуска вокруг фокуса -**Статус:** план для согласования. Код, внешний доступ и автозапуск этим документом не меняются. Этот документ заменяет выводы черновика `planning/agent-system-priority-plan-2026-10-03.md` о якобы запущенном расписании и готовом безопасном iPad-фиде. +**Решение, которое предлагается согласовать:** сначала запустить контур управления самочувствием, фокусом и посильной нагрузкой Алекса. Asana, GitHub, ActivityWatch, встречи, Zoom и агенты дают этому контуру данные и возможности. Кодинговые агенты — второй контур, ограниченный человеческим временем ревью и токенами. Этот документ заменяет прежнюю версию плана от 2026-10-03, где на первое место ошибочно поставлена техническая надёжность feed. -## Что нужно Алексу сейчас +**Выполнение:** этот документ описывает правки, но не включает автозапуск, старый Executor или запись в Asana/GitHub. Миссия: [[personal/projects/personal-os/personal-os-purpose]]. Состояние до этого аудита: [[personal/projects/personal-os/personal-os-status-2026-10]]. -Один короткий, достоверный список **новых обязательств и блокеров** с причиной, ссылкой и временем проверки источника. Система сама собирает и проверяет данные, запоминает вклад для карьеры и улучшает себя через ограниченные агентные циклы. Алекс видит только решение, требующее его участия; ежедневное планирование за него не навязывается. Основание: [[personal-os-purpose]] — пропущенные комментарии, отложенные карьерные задачи и потеря контекста после переключений. +## 1. Системная задача и критерий пользы -## Порядок работ +В каждый момент система поддерживает состояние: **мой текущий фокус, энергия/настроение (если я их указал), нагрузка и граница рабочего дня, реальные обязательства, ближайшие встречи, накопившиеся изменения, цена переключения, очередь ревью агентной работы и бюджет агентов**. На основе этого она предлагает выполнимый фокус дня, защищает его, помогает вернуться после встречи/перерыва, пересобирает план при изменениях и сохраняет карьерные факты с доказательствами. Пользователь может в один шаг сменить фокус, снизить нагрузку или отложить предложение. -1. **P0 — надёжный рабочий сигнал.** Довести существующие Asana/GitHub → локальное зеркало → `attention` до состояния, где каждый срочный пункт подтверждён источником, сбои видны, повторения и исторический шум убраны. После согласования конкретных правок ниже включить ограниченный автоматический запуск. Результат для Алекса: меньше ручных проверок Asana/GitHub и меньше пропущенных ответов. -2. **Параллельно — автономная разработка.** Codex/Claude берут небольшую согласованную задачу, работают в отдельном worktree, собирают/проверяют, исправляют ошибки, возвращают diff, результат проверки и точный блокер. Первый пакет — качество `attention` и импорт Zoom. Balda/Broker/Virfield уже развиваются отдельно и не являются условием запуска P0. -3. **Параллельно — существующие Zoom-записи.** Найти фактический источник записей в доступном Zoom-аккаунте (пустой `~/Documents/Zoom` ничего не доказывает), импортировать **одну существующую беседу**: обязательства и решения в рабочий профиль, подтверждённый вклад в карьерный. Каждый факт со ссылкой на встречу и фрагмент; затем идемпотентный импорт новых записей. Результат: обещания и доказательства вклада не приходится вспоминать вручную. -4. **Параллельно — iPad Desk.** Агент берёт тот же ограниченный feed, показывает пункты, свежесть источников и отсутствие связи. Физическая установка приложения на iPad **уже подтверждена Алексом**; задача — реализовать и доставить полезный экран через имеющийся Mac Monterey/Xcode 13 и подтверждённый путь установки. При необходимости Codex CLI на Mac или управление сборкой по SSH. Результат: рабочий интерфейс без новой ручной процедуры для Алекса. +Приоритеты строго такие: (1) хорошо себя чувствовать, (2) эффективно распределять нагрузку и фокус, (3) сохранять баланс жизни/работы, (4) выполнять и улучшать рабочие и карьерные результаты. Больший объём работы не компенсирует ухудшение первых трёх целей. ActivityWatch — наблюдение за поведением компьютера, **не датчик самочувствия и не оценка продуктивности человека**. -## P0: факты текущего состояния +### Целевой цикл -| Факт | Подтверждение | Последствие | +1. **Наблюдение:** локальные источники сообщают о фактической работе, обязанностях, встречах и агентных результатах с временем/достоверностью. +2. **Оценка ёмкости дня:** система вычитает встречи, перерывы, переключения, завершение рабочего дня и ожидаемое ревью агентов; учитывает добровольную отметку энергии/настроения. +3. **Выбор фокуса:** предлагает одну основную работу и ограниченное число обязательств, объясняет перенос остальных; карьерные дела не исчезают за срочным шумом. +4. **Защита и восстановление:** в фокусе обычные изменения копятся молча, при естественном переходе приходит короткая карточка «где остановился → что изменилось → что дальше». Критическое исключение имеет явное правило и ссылку. +5. **Обратная связь:** Алекс одним действием отмечает полезность/ошибку/перегрузку или меняет план; система измеряет последствия и корректирует правила. Агенты развивают систему только в пределах бюджета внимания и токенов. + +## 2. Что действительно есть 2026-10-03 + +| Слой | Проверенный факт | Граница факта | |---|---|---| -| Однократная синхронизация и генерация `attention.md/json` прошли 3 октября: 4 комментария, 4 запроса на ревью, 2 блокера PR, 5 текущих задач. | [`generate-attention.js`](file:///Users/admin/Developer/personal-os/generate-attention.js#L111), локальный `~/context/attention.md` | Данные доступны; это один успешный прогон, а не доказательство надёжного фонового режима. | -| Новый `com.personalos.readonly` **не загружен** в `launchd`; установленный plist переименован в `.disabled` после требования остановить изменения. | Проверка `launchctl print gui/501/com.personalos.readonly` 3 октября: service not found; [`run-readonly.sh`](file:///Users/admin/Developer/personal-os/scripts/run-readonly.sh#L1) | Автономного обновления сейчас нет. Запуск — отдельный согласуемый шаг после исправлений. | -| Старый `status.md` маркирует 20 самых старых просрочек как красные сигналы; комментарии берёт из всех активных задач за 7 дней, даже если не доказано, что ответ нужен. | [`getOverdueTasks`](file:///Users/admin/Developer/personal-os/generate-status.js#L178), [`getUnreadComments`](file:///Users/admin/Developer/personal-os/generate-status.js#L205), [`renderSignals`](file:///Users/admin/Developer/personal-os/generate-status.js#L437) | Красная очередь содержит исторический шум и чужие обсуждения. | -| Пробный `attention` сужает задачи до моих, но объявляет комментарии «Ответить» по признаку «после него нет моего ответа». Отсутствие ответа не доказывает потребность отвечать; один и тот же объект может попасть в две секции. | [`buildAttention`](file:///Users/admin/Developer/personal-os/generate-attention.js#L32), [`renderMarkdown`](file:///Users/admin/Developer/personal-os/generate-attention.js#L79) | Алекс снова вынужден вручную проверять достоверность очереди. | -| GitHub review requests выбираются из непрочитанных participating notifications; ошибки запросов превращаются в пустые массивы. Общая метка свежести берётся только из Asana. | [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js#L100), [`getGithubSnapshot`](file:///Users/admin/Developer/personal-os/gh-snapshot.js#L138), [`buildAttention`](file:///Users/admin/Developer/personal-os/generate-attention.js#L32) | Прочитанный запрос или сбой GitHub может исчезнуть из очереди без предупреждения. | -| «Защита» iPad-фида сейчас — regex только по `title/detail`, а выдача ограничена пятью элементами на секцию без числа скрытых. | [`safeItem`](file:///Users/admin/Developer/personal-os/generate-attention.js#L13), [`MAX_ITEMS`](file:///Users/admin/Developer/personal-os/generate-attention.js#L15) | Фид ещё нельзя считать безопасным для iPad или полным. | +| 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. | Xcode bucket обновлён последний раз 1 октября, Cursor — 2 октября, DDG URL — 8 июня. Эти дополнительные привязки нельзя считать текущими без проверки причин. `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 с проектом. | Связь worktree ↔ ветка ↔ PR ↔ Asana task и Codex/Claude 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. | В видимом runner нет учёта токенов/денег и оценки минут ревью Алекса. Логи одного задания содержат повторные respawn без прогресса. Balda/Broker/Virfield развиваются отдельно; их приёмка не пройдена как условие для P0. | +| Карьера и день | [`generate-status.js`](file:///Users/admin/Developer/personal-os/generate-status.js#L731) показывает Advisor opportunities и visibility gaps; `activity_daily` хранит агрегаты времени по проектам. | Нет единого проверенного дневного состояния с балансом, энергией, встречами, ревью агентов и доказательствами вклада; карьерные сигналы оказываются внизу большого статуса. | -## P0: точные изменения — что на что +## 3. Почему старая версия не стала полезной -| № | Было → станет | Конкретная правка | Как это улучшит день | +Алекс сообщил, что быстро перестал читать сгенерированные daily statuses. Точную причинную долю каждого фактора телеметрия не измеряла; ниже — **подтверждённые дефекты дизайна и вывод о вероятном эффекте**. + +| Что было | Подтверждение | Почему это мешало | Что меняем в парадигме | |---|---|---|---| -| 1 | Общая дата Asana и тихая пустота GitHub → статус каждого источника: `ok/failed/stale`, `fetched_at`, ошибка без секретов. | В `sync.js` и `gh-snapshot.js` сохранять результат каждого источника; в `generate-attention.js` добавлять `sources`. При сбое оставить последний успешный снимок с пометкой «устарел», **не** писать «нет сигналов». Файлы обновлять атомарно. | Пустой экран больше не означает ложное «всё спокойно». | -| 2 | «Любой чужой комментарий без моего ответа = ответить» → `нужен ответ / нужна проверка / FYI` с явным правилом. | Считать кандидатом прямое назначение, явное упоминание или комментарий на собственной активной задаче; исключать ботов/широкие AOR-потоки. Для `нужен ответ` требовать конкретный запрос/вопрос, отсутствие более позднего ответа и ссылку на комментарий. Неуверенный текст — в «проверить», без срочного пуша. Реализовать в запросах `generate-status.js`/`generate-attention.js` и общем классификаторе. | Реально ожидающие люди видны; шум не вынуждает открывать каждую задачу. | -| 3 | Древние просрочки первыми, фиксированные `slice(0,5)`, дубли → ранжированная очередь событий. | Срок сам по себе не делает пункт срочным. Поднимать свежие обращения и блокеры, затем ближайшие сроки активных приоритетов; старые просрочки — отдельная уборка. Дедупликация по `source+object_id`, устойчивый `signal_id`, `new_since`, `acknowledged`, `dismissed`, счётчик остальных. `ack/dismiss` только в локальной БД. | В коротком списке видно, что изменилось с прошлого просмотра; один пункт не занимает два места. | -| 4 | GitHub только через unread notifications → текущие назначения и реальные блокеры PR. | Запрашивать открытые PR с `review-requested:@me` и проверять текущего reviewer; отдельно `CHANGES_REQUESTED`, failing CI и неразрешённые review threads у моих PR. Исторические Executor PR исключать по идентификатору/происхождению, а не только по префиксу заголовка. Ошибку API показывать в статусе источника. | Прочитанный запрос на ревью не исчезает, а старый PR не выглядит новой проблемой. | -| 5 | Один raw `attention.json` с regex → два явных выхода: локальный полный и минимальный iPad. | Типизированный feed: `signal_id`, `source`, `source_updated_at`, `detected_at`, `kind`, `urgency`, `reason`, `evidence_url`, `state`; iPad получает только разрешённые поля после allowlist и проверки чувствительности **до** передачи. Локальный feed не уходит в облачную модель/Mattermost по умолчанию. Агент разработки не получает Asana PAT. | iPad показывает полезный контекст, а рабочие детали остаются в разрешённой границе. | +| 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; в нём нет запроса энергии и расчёта ёмкости дня. | Предлагаемый объём мог превышать доступное после встреч и перерывов; «первое лёгкое дело» могло вытеснять лучший фокус. | Сначала вместимость, энергия и фокус, затем выбор посильной работы. Перегрузка приводит к явному переносу. | +| Система не знала реальный момент для вмешательства. | [`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. | Агентный throughput мог расти быстрее, чем Алекс способен проверять; повторы сжигали токены и внимание. | Планировать агентную работу как нагрузку на человека и бюджет; admission control, WIP, stop rules, пакетное ревью. | -### Как это работает после P0 +## 4. Очерёдность правок — было → станет → проверка -1. Локальный сборщик читает Asana/GitHub, сохраняет последний успешный снимок и отдельный статус каждого источника. Внешних записей нет. -2. Детерминированный классификатор сравнивает новый снимок с предыдущим, выдаёт сигналы с причиной и ссылкой; отделяет «требует действия» от «проверить». -3. Локальная очередь убирает дубли, помнит просмотренное/отклонённое и показывает первые пять **по важности** плюс число остальных; устаревший источник помечается. -4. Obsidian/локальный экран читают полный feed; iPad получает только проверенный минимальный feed. Агент анализирует разрешённый снимок и приносит конкретные улучшения, не пишет в Asana/GitHub без отдельного решения Алекса. +### P0.1. Вернуть достоверное «что происходит сейчас» без модели и без новых уведомлений -### Порядок внедрения и критерий приёмки P0 +**Было:** [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L305) называет текущим первый недавний Xcode/Cursor/DDG bucket даже при другом переднем приложении; `loginwindow` попадает в `Now`; дополнительные watchers частично устарели. Сводка говорит «сколько минут», но не связывает фокус с достоверностью наблюдения. -1. **Сначала исправить статус источников и границу данных.** Проверка: отключённый GitHub отображается как `failed/stale`; в iPad feed нет запрещённых полей; Asana PAT доступен только процессу синхронизации. -2. **Затем исправить правила комментариев, просрочек и GitHub.** Проверка на сохранённых случаях от 3 октября: чужой AOR-комментарий не «срочный ответ»; комментарий с последующим ответом не появляется; прямой неотвеченный запрос появляется со ссылкой; старая просрочка не вытесняет новый блокер; прочитанный review request остаётся до снятия назначения. -3. **Затем включить локальную очередь и короткий экран.** Проверка: одна задача — один сигнал; видны новые пункты и число скрытых; `ack/dismiss` переживает обновление; файлы никогда не бывают частично записаны. -4. **После согласования включить ограниченный фоновой запуск** в рабочее время и наблюдать пять рабочих дней. Приёмка: источник обновляется не реже чем раз в 40 минут, пока Mac бодрствует и сеть доступна; каждый срочный пункт имеет актуальное подтверждение; сбой виден; Алекс один раз отмечает ложные срочные сигналы, чтобы внести их в правила. +**Станет:** переднее `aw-watcher-window` + AFK определяют `focused / meeting / break / available / unknown`; Xcode/Cursor/DDG только уточняют *совпадающий во времени* передний app. У каждой привязки есть время наблюдения, источник и `confidence`; старые данные не превращаются в «сейчас». Нет ActivityWatch или свежего window bucket → `unknown`, без автоматического вывода о готовности к работе. -**От Алекса сейчас:** согласовать состав P0 и границу данных. Дальше агенты делают изменения, проверяют и показывают результат с diff; к Алексу возвращаются только при смене границ или необходимости внешнего действия. Старый Executor, Hermes и новая запись во внешние рабочие системы этим планом не запускаются. +**Правки:** [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js) — исправить `currentFocus`, окна перекрытия, фильтр lock/AFK и freshness; [`aw-projects.json`](file:///Users/admin/Developer/personal-os/aw-projects.json) — привести правила к реально активным worktrees; [`generate-status.js`](file:///Users/admin/Developer/personal-os/generate-status.js#L631) — показывать качество наблюдения. Добавить небольшие fixture-тесты для Xcode→браузер, заблокированного экрана, устаревшего bucket и break. -## Связанные материалы +**Приёмка:** в 4 заданных сценариях состояние совпадает с frontmost app и AFK; locked/старые события дают `unknown` или `break`, никогда «активно в Xcode». Никаких новых прерываний на этом этапе. -- [[personal-os-purpose]] — зачем существует система. -- [[personal-os-v2-plan]] — прежний широкий проектный черновик. -- [`generate-status.js`](file:///Users/admin/Developer/personal-os/generate-status.js), [`generate-attention.js`](file:///Users/admin/Developer/personal-os/generate-attention.js), [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js) — текущая реализация. +### P0.2. Собрать рабочий контекст и посильную ёмкость дня + +**Было:** Asana, PR, worktree, активное время и встречи лежат в отдельных снимках; день = список urgent/overdue без энергии, перерывов, стоимости переключений и ревью агентной работы. Calendar/Zoom не подтверждены как надёжные каналы. + +**Станет:** локальное `day_state` содержит: выбранный Алексом фокус, добровольную энергию/настроение (например 1–5 или «не знаю»), границу рабочего дня, встречи с источником/уверенностью, доступные окна, перерывы, обязательства, карьерные дела, ожидаемые минуты ревью и явно отложенные пункты. `work_context` связывает AW block → worktree/ветку → PR → Asana task только по детерминированному ID/ссылке или подтверждённому правилу; для неясных случаев — `unlinked`. Время Codex/Claude помечается как **работа агента**, а не активность Алекса. + +**Правки:** новая миграция `migrations/003_focus_core.sql` (`day_state`, `activity_bindings`, `focus_blocks`, `feedback`); новый `context-links.js` связывает worktree/ветку с PR и Asana по идентификаторам/ссылкам; новый `session-observer.js` читает только метаданные фактических Codex/Claude sessions (возможные пути `~/.codex/sessions/**/rollout-*.jsonl` и `~/.claude/projects//*.jsonl` сначала проверить на этой машине): `cwd`, ветка, время, роль human/agent, usage при наличии — без текста бесед. [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js) отдаёт интервалы и freshness; [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js) отдаёт текущие review obligations; [`sync.js`](file:///Users/admin/Developer/personal-os/sync.js) и GitHub snapshot отмечают `fetched_at/ok/stale/failed`, чтобы сбой не означал «нет работы»; новый `day-coordinator.js` считает ёмкость и причины выбора. Добавить минимальный локальный ввод `focus-input.js`: сменить фокус/энергию/конец работы/«сегодня легче», все поля кроме фокуса необязательны. Для встреч сначала проверить существующий календарный read-path; при отсутствии обозначать `meeting_schedule_unknown`, а не придумывать окна из Asana-задачи. + +**Правило выбора:** рабочая ёмкость = время до границы работы − подтверждённые встречи − переходы − защищённые перерывы − резерв на непредвиденное − согласованное время человеческого ревью. Сложность предлагаемой задачи соотносится с явно указанной энергией; при `unknown` используется консервативный объём, а не вывод «полный ресурс». Если обязательств больше ёмкости, система показывает **что переносится/делегируется и почему**, вместо невыполнимого списка. + +**Приёмка:** на fixture-дне с двумя встречами, низкой энергией, PR-review и тремя Asana-задачами план не превышает доступные окна, включает перерыв и reviewer slot, объясняет один перенос. На fixture-дне без календаря не выдаёт уверенное время встречи. Личное время не считается рабочим резервом. + +### 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` с текущим фокусом, доступной ёмкостью, **не более трёх** ближайших осмысленных действий, одной причиной сменить приоритет, временем следующего перехода/перерыва, reviewer load и ссылками. Подробный контекст открывается по желанию. Во время 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/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 позже читает тот же контракт в ограниченном виде. + +**Приёмка:** обычный комментарий Asana во время 45-минутного Xcode-блока не создаёт прерывание; после блока доступна одна карточка с ссылкой, ответственной стороной и посильным следующим действием. После встречи видно, к какой работе вернуться без поиска по нескольким приложениям. После границы рабочего дня обычных рабочих сигналов нет. + +### P0.4. Замкнуть цикл на ощущении пользы, а не на числе сгенерированных файлов + +**Было:** файл существует → job считает успех; невозможно узнать, пригодился ли план, был ли он слишком длинным, насколько посильным оказался день. Старые brief-форматы могли копиться, даже когда Алекс перестал их читать. + +**Станет:** у карточки есть одношаговые ответы `полезно / неверно / слишком много / отложить` и необязательная оценка энергии/самочувствия 1–5. Система хранит 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) агентный — токены/стоимость, время, число попыток и параллельность. Агентная задача имеет прогноз пользы, review minutes и токенов; задача может готовиться в фоне, но не предъявляет результат сверх reviewer capacity. После лимита или двух попыток без нового проверяемого прогресса — stop с точным blocker, без самоперезапуска. + +**Правки:** `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 учтённых токенов на задачу, 60 000 в день, 120 000 в неделю. После 3 измеренных задач пересчитать лимиты по реальной стоимости и времени ревью; стоимость в деньгах считать по фактическому провайдеру/плану, без выдуманной цены за токен. Если провайдер не отдаёт usage, пометить `unmetered` и не запускать следующий unattended loop. В день с низкой энергией reviewer slot можно обнулить без накопления срочных запросов. + +**Приёмка:** два законченных агентных результата не вызывают два одновременных запроса к Алексу; второй ждёт свободного slot. Задача с повтором без diff/test progress останавливается; ledger показывает токены, время, оценку и факт человеческого ревью. Агентная работа не съедает защищённый focus block и не делает вечер новым рабочим временем. + +### Параллельно: Zoom и iPad, но по контракту P0 + +- **Zoom:** существующие записи найти через фактический источник учётной записи; импортировать одну прошлую встречу в `meeting_context` с участниками, решениями, обещаниями, сроками и ссылкой/фрагментом. Обязательства попадают в рабочий контекст, подтверждённый вклад — в карьерный; это влияет на план *после встречи*, а не создаёт ещё один длинный brief. Затем идемпотентный импорт новых. Новый адаптер `zoom-import.js` и миграция `meeting_context`; метод доступа выбирается после проверки аккаунта, старую заметку [[personal/projects/personal-os/zoom-ai-transcript-export]] считать вариантами, не доказанным текущим доступом. Приёмка: одна существующая встреча даёт проверяемое обязательство и/или факт вклада со ссылкой, повторный импорт не создаёт дубль. +- **iPad Desk:** установка на физический iPad уже подтверждена. Передать агенту ограниченное приложение «фокус сейчас / вместимость дня / когда вернуться / одно ожидание меня / свежесть», читающее `focus.json` по LAN с минимальными полями. iPad — пассивный интерфейс того же контура; не проект по повторной проверке установки. Приёмка: на iPad виден тот же focus state, после отключения сети ясно показана устаревшая версия; нет лишних алертов. + +## 5. Последовательность, зависимости, участие Алекса + +1. **Сейчас — утверждена миссия, план предложен.** Уточнить только границы: желаемое окончание рабочего дня, начальные лимиты reviewer/tokens, допустимый канал короткой карточки. Предлагаемые настройки в P1 позволяют принять их одним решением; добровольная энергия/настроение не обязательны. +2. **P0.1 → P0.2:** исправить достоверность текущего состояния и собрать ёмкость дня на локальных источниках. Проверить на сохранённых сценариях до включения schedule. +3. **P0.3 → P0.4:** показать один короткий живой focus state, провести 5 рабочих дней измеряемого пилота с возможностью исправить перегрузку. Только после этого решать о регулярной доставке. +4. **P1 и параллельные ветки:** включить ограниченный coding loop с учётом review/tokens; импортировать Zoom; отдать тот же focus state на iPad. Balda/Broker/Virfield не дублировать. + +**Необходимое участие Алекса в пилоте:** одно согласование границ; затем по желанию один короткий сигнал «полезно/неверно/слишком много» и ручная смена энергии/фокуса, когда захочется. Система не требует ежедневного ведения журнала. Внешние записи и старый автономный Executor этим планом не разрешены. diff --git a/personal/projects/personal-os/personal-os-status-2026-10.md b/personal/projects/personal-os/personal-os-status-2026-10.md old mode 100755 new mode 100644 index c47a6147..3785d0aa --- a/personal/projects/personal-os/personal-os-status-2026-10.md +++ b/personal/projects/personal-os/personal-os-status-2026-10.md @@ -16,6 +16,9 @@ confidence: 1 - **Personal OS (рабочий контур вокруг Asana) — ВЫКЛЮЧЕН.** Остановлен после инцидента с автономным Executor (апр–май 2026, см. [[personal/projects/personal-os/executor-security-analysis]]). **Требуется перепланирование с нуля** — старая архитектура (Hermes/Eagle + cron + executor) не возобновляется как есть. +- **Миссия и приоритет теперь уточнены Алексом:** [[personal/projects/personal-os/personal-os-purpose]] — + самочувствие, фокус, баланс, затем работа и карьера. Конкретный аудит и предложенная очередь: + [[personal/plans/personal-os-operating-plan-2026-10-03]]. Это план для согласования, не включённая система. - Агентная инфраструктура в целом живёт отдельно (Balda / Callee / Prism на Mac) — это не Personal OS, а общий агентный стек; на нём может быть построена будущая версия. @@ -23,11 +26,11 @@ confidence: 1 | Компонент | Состояние | Последний след | |---|---|---| -| `sync.js` / `generate-status.js` (Asana → Postgres → `status.md`) | ⛔ не запускается (cron `data-pipeline` на паузе) | heartbeat.log — 2026-06-04 | +| `sync.js` / `generate-status.js` (Asana → Postgres → `status.md`) | ⛔ регулярный cron на паузе; один ручной прогон 2026-10-03 успешен | `~/context/status.md`, 402 строки; `~/context/attention.md`, 28 строк; `com.personalos.readonly` не загружен | | Брифы (daily / weekly / inbox / EOD / retrospector) | ⛔ cron на паузе | последний daily brief — 2026-06-16 (git `61f0831`) | | Executor (v1 autonomous, v2 runner/analyzer) | ⛔ на паузе с ~2026-05-01, «waiting for new executor arch» | `executor/logs/` | | Hermes cron на Eagle | 1 из 22 активен (`sync-vault`) на 2026-06-24 | [[personal/projects/personal-os/hermes-cron-jobs]] | -| ActivityWatch-watchers (DDG, Xcode) | неизвестно — не проверялось | README репо | +| ActivityWatch | 🟡 локальный сервер работает; 2026-10-03 window/AFK свежие, Xcode последний раз 2026-10-01, Cursor 2026-10-02, DDG URL 2026-06-08 | локальный API buckets 2026-10-03 14:13 UTC; `aw-query.js` ещё неверно выбирает `currentFocus` | | Репо `~/Developer/personal-os` | последний коммит 2026-06-16; много незакоммиченного (брифы мая–июня, `agent/infra/`) | `git status` | ## Что живо рядом (не Personal OS, но связано) @@ -46,8 +49,9 @@ confidence: 1 ## Что нужно для перезапуска (вход в перепланирование) -> 📋 **План v2:** [[personal/plans/personal-os-v2-plan]] — iPad Desk, иконки задач, ActivityWatch++, -> PR-трекинг, фокус/ретро, переезд на Swift, постоянные AI-ревью; MVP ≈ 1 неделя. +> 📋 **Актуальный предложенный план:** [[personal/plans/personal-os-operating-plan-2026-10-03]]. +> Прежний [[personal/plans/personal-os-v2-plan]] — технический черновик до уточнения миссии; +> его порядок (iPad/иконки/порт) не задаёт приоритет для запуска Personal OS. 1. Пересобрать цели: какие из исходных болей (комментарии без ответа, приоритеты дня, Asana vs реальность, карьерные сигналы) актуальны сейчас — см. [[personal/projects/personal-os/personal-os-purpose]].