[2026-10-03] eagle: personal/plans/personal-os-operating-plan-2026-10-03.md personal/projects/personal-os/personal-os-status-2026-10.md
This commit is contained in:
1 parent
da6e668d5f
commit
41172aa49a
2 files changed
+105
-45
No files matched your search
Executable → Regular
+97
-41
@@ -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/<cwd>/*.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 этим планом не разрешены.
|
||||
Executable → Regular
+8
-4
@@ -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]].
|
||||
|
||||
Reference in new issue
Block a user