[2026-10-03] eagle: personal/plans/personal-os-operating-plan-2026-10-03.md personal/projects/personal-os/personal-os-purpose.md personal/projects/personal-os/personal-os-status-2026-10.md
This commit is contained in:
1 parent
cc9e4a8e00
commit
f82ebe0915
3 files changed
+63
-38
No files matched your search
Executable → Regular
+42
-28
@@ -8,34 +8,42 @@ mission: "[[personal/projects/personal-os/personal-os-purpose]]"
|
||||
|
||||
# Personal OS — аудит и план запуска вокруг фокуса
|
||||
|
||||
**Решение, которое предлагается согласовать:** сначала запустить контур управления самочувствием, фокусом и посильной нагрузкой Алекса. Asana, GitHub, ActivityWatch, встречи, Zoom и агенты дают этому контуру данные и возможности. Кодинговые агенты — второй контур, ограниченный человеческим временем ревью и токенами. Этот документ заменяет прежнюю версию плана от 2026-10-03, где на первое место ошибочно поставлена техническая надёжность feed.
|
||||
**Решение, которое предлагается согласовать:** сначала запустить контур управления самочувствием, фокусом и посильной нагрузкой Алекса. Его главная проблема сейчас — **рваный фокус**: одновременно идут его задачи и много агентных задач, которые неожиданно возвращаются к нему как ревью/решения. Технические источники дают факты, но само приложение на переднем плане не определяет рабочую тему. Кодинговые агенты — второй контур, ограниченный человеческим временем ревью и токенами. Этот документ заменяет прежнюю версию плана от 2026-10-03, где на первое место ошибочно поставлена техническая надёжность feed.
|
||||
|
||||
**Выполнение:** этот документ описывает правки, но не включает автозапуск, старый Executor или запись в 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 — наблюдение за поведением компьютера, **не датчик самочувствия и не оценка продуктивности человека**.
|
||||
|
||||
### Целевой цикл
|
||||
|
||||
1. **Наблюдение:** локальные источники сообщают о фактической работе, обязанностях, встречах и агентных результатах с временем/достоверностью.
|
||||
2. **Оценка ёмкости дня:** система вычитает встречи, перерывы, переключения, завершение рабочего дня и ожидаемое ревью агентов; учитывает добровольную отметку энергии/настроения.
|
||||
3. **Выбор фокуса:** предлагает одну основную работу и ограниченное число обязательств, объясняет перенос остальных; карьерные дела не исчезают за срочным шумом.
|
||||
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.
|
||||
|
||||
## 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. | 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. |
|
||||
| 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. | В видимом 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` хранит агрегаты времени по проектам. | Нет единого проверенного дневного состояния с балансом, энергией, встречами, ревью агентов и доказательствами вклада; карьерные сигналы оказываются внизу большого статуса. |
|
||||
| Агенты | Старый 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. Почему старая версия не стала полезной
|
||||
|
||||
@@ -45,43 +53,48 @@ mission: "[[personal/projects/personal-os/personal-os-purpose]]"
|
||||
|---|---|---|---|
|
||||
| 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. | Агентный throughput мог расти быстрее, чем Алекс способен проверять; повторы сжигали токены и внимание. | Планировать агентную работу как нагрузку на человека и бюджет; admission control, WIP, stop rules, пакетное ревью. |
|
||||
| Автономия агентов создавала долг ревью и расход без ограничителя. | История инцидента в [[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. Вернуть достоверное «что происходит сейчас» без модели и без новых уведомлений
|
||||
### P0.1 — блокер 1: достоверная временная линия человека, рабочих тем и агентных задач
|
||||
|
||||
**Было:** [`aw-query.js`](file:///Users/admin/Developer/personal-os/aw-query.js#L305) называет текущим первый недавний Xcode/Cursor/DDG bucket даже при другом переднем приложении; `loginwindow` попадает в `Now`; дополнительные watchers частично устарели. Сводка говорит «сколько минут», но не связывает фокус с достоверностью наблюдения.
|
||||
**Было:** [`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, контролирует агента или пишет код.
|
||||
|
||||
**Станет:** переднее `aw-watcher-window` + AFK определяют `focused / meeting / break / available / unknown`; Xcode/Cursor/DDG только уточняют *совпадающий во времени* передний app. У каждой привязки есть время наблюдения, источник и `confidence`; старые данные не превращаются в «сейчас». Нет ActivityWatch или свежего window bucket → `unknown`, без автоматического вывода о готовности к работе.
|
||||
**Станет:** локальная `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`, `source`, `evidence_url/id`, `confidence` и `state` агентной задачи (`running|blocked|waiting_review|done`). Несколько приложений могут соответствовать одной рабочей теме; две параллельные агентные задачи — двум отдельным потокам. Переход между темами и входящий агентный запрос на ревью отмечаются отдельно; именно их частота и время возврата характеризуют «рваный фокус». Никакой интервал с низкой уверенностью не становится основанием для срочного прерывания.
|
||||
|
||||
**Правки:** [`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.
|
||||
**Как привязывать:** (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.
|
||||
|
||||
**Приёмка:** в 4 заданных сценариях состояние совпадает с frontmost app и AFK; locked/старые события дают `unknown` или `break`, никогда «активно в Xcode». Никаких новых прерываний на этом этапе.
|
||||
**Правки:** [`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`). [`gh-snapshot.js`](file:///Users/admin/Developer/personal-os/gh-snapshot.js) — текущие PR/review assignments, [`sync.js`](file:///Users/admin/Developer/personal-os/sync.js) — Asana ownership; у каждого источника `observed_at/ok/stale/failed`. Старый `generate-status.js` перестать использовать как единственный источник «Now».
|
||||
|
||||
### P0.2. Собрать рабочий контекст и посильную ёмкость дня
|
||||
**Приёмка:** два рабочих дня тихого 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 дают корректное состояние, а не ложное «сейчас кодит».
|
||||
|
||||
**Было:** Asana, PR, worktree, активное время и встречи лежат в отдельных снимках; день = список urgent/overdue без энергии, перерывов, стоимости переключений и ревью агентной работы. Calendar/Zoom не подтверждены как надёжные каналы.
|
||||
### P0.2 — блокер 2: анализ «что надо делать» при реальном фокусе и самочувствии
|
||||
|
||||
**Станет:** локальное `day_state` содержит: выбранный Алексом фокус, добровольную энергию/настроение (например 1–5 или «не знаю»), границу рабочего дня, встречи с источником/уверенностью, доступные окна, перерывы, обязательства, карьерные дела, ожидаемые минуты ревью и явно отложенные пункты. `work_context` связывает AW block → worktree/ветку → PR → Asana task только по детерминированному ID/ссылке или подтверждённому правилу; для неясных случаев — `unlinked`. Время Codex/Claude помечается как **работа агента**, а не активность Алекса.
|
||||
**Было:** даже точные Asana/PR и минуты ActivityWatch выдавались как срочность/список задач. Не определялись роль Алекса и цена ожидания, вклад в карьеру и команду, доступная энергия, размер окна до следующей встречи, цена переключения и очередь агентных ревью. Календарь/Zoom пока не подтверждены как полный источник расписания.
|
||||
|
||||
**Правки:** новая миграция `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-задачи.
|
||||
**Станет:** `day_state` содержит явно выбранный фокус, добровольную энергию/настроение (1–5 или `unknown`), границу рабочего дня, подтверждённые встречи, доступные окна, перерывы, задачи и зависимости, карьерные обязательства, reviewer minutes/WIP и перенесённые пункты. `work_demand` для каждого кандидата хранит: роль `owner|reviewer|advisor|manager|observer`, кто ждёт, проверяемый срок и последствия ожидания, пользу для проекта/карьеры, длительность и когнитивную тяжесть, состояние агента, source links и уверенность. Результат по кандидату — `делать сейчас / выделить окно / делегировать / ждать / перенести` с человеческим объяснением.
|
||||
|
||||
**Правило выбора:** рабочая ёмкость = время до границы работы − подтверждённые встречи − переходы − защищённые перерывы − резерв на непредвиденное − согласованное время человеческого ревью. Сложность предлагаемой задачи соотносится с явно указанной энергией; при `unknown` используется консервативный объём, а не вывод «полный ресурс». Если обязательств больше ёмкости, система показывает **что переносится/делегируется и почему**, вместо невыполнимого списка.
|
||||
**Приоритетный принцип:** сначала самочувствие и законные/реальные границы дня, затем защитить основную рабочую тему, затем обязательства перед другими людьми и узкие окна, затем карьерный/командный вклад; количество просроченных дат или готовых agent PR не является порядком дня. Один и тот же PR/Asana task дедуплицируется. У задачи с сомнительной ролью — `needs_clarification`, а не императив «ответить». При низкой энергии сложное ревью можно отложить, но настоящий hard deadline явно показать вместе с вариантом делегирования/сокращения другой работы.
|
||||
|
||||
**Приёмка:** на fixture-дне с двумя встречами, низкой энергией, PR-review и тремя Asana-задачами план не превышает доступные окна, включает перерыв и reviewer slot, объясняет один перенос. На fixture-дне без календаря не выдаёт уверенное время встречи. Личное время не считается рабочим резервом.
|
||||
**Правки:** `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` с текущим фокусом, доступной ёмкостью, **не более трёх** ближайших осмысленных действий, одной причиной сменить приоритет, временем следующего перехода/перерыва, reviewer load и ссылками. Подробный контекст открывается по желанию. Во время focus/meeting обычные изменения остаются в локальной очереди; после перехода — одна карточка восстановления. Критическое прерывание требует подтверждённого владельца, последствий ожидания и указанного deadline; возраст комментария или красная иконка недостаточны. Старое «3 часа» из миссии — кандидат на калибровку, не автоматическое правило для всех задач.
|
||||
**Станет:** один короткий `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/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 позже читает тот же контракт в ограниченном виде.
|
||||
**Правки:** новый `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 позже читает тот же контракт в ограниченном виде.
|
||||
|
||||
**Приёмка:** обычный комментарий Asana во время 45-минутного Xcode-блока не создаёт прерывание; после блока доступна одна карточка с ссылкой, ответственной стороной и посильным следующим действием. После встречи видно, к какой работе вернуться без поиска по нескольким приложениям. После границы рабочего дня обычных рабочих сигналов нет.
|
||||
**Приёмка:** во время 45-минутной работы над одной темой через Asana → browser PR → Claude два законченных agent jobs и обычный комментарий не создают три прерывания; переключение приложений внутри темы не обнуляет фокус. После блока доступна **одна** карточка с исходной темой, изменениями, ссылками и посильным следующим действием; агентные ревью остаются в выделенном окне. После встречи видно, к какой теме вернуться без поиска по нескольким приложениям. После границы рабочего дня обычных рабочих сигналов нет.
|
||||
|
||||
### P0.4. Замкнуть цикл на ощущении пользы, а не на числе сгенерированных файлов
|
||||
|
||||
@@ -91,7 +104,7 @@ mission: "[[personal/projects/personal-os/personal-os-purpose]]"
|
||||
|
||||
**Правки:** `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 секунд отметить ошибку или перегрузку; его коррекция меняет следующий расчёт. Полезность и самочувствие проверяются **его ответом**, а не количеством активных минут. Если он снова не читает карточку, формат пересматривается, а не размножается.
|
||||
**Приёмка 5 рабочих дней:** каждый день можно открыть состояние за один экран; ноль обычных прерываний во время подтверждённых focus blocks, ноль рабочих push после установленной границы, ни одно критическое сообщение без ссылки/причины. Начальный и итоговый замер включают число переходов **между рабочими темами**, число неплановых обращений к Алексу от агентов, накопленные минуты ревью и короткую добровольную оценку «рваности фокуса»/самочувствия; цель — уменьшение неплановых обращений и отсутствие ухудшения самочувствия, а не максимизация активных минут. Алекс может за ≤10 секунд отметить ошибку или перегрузку; его коррекция меняет следующий расчёт. Если он снова не читает карточку, формат пересматривается, а не размножается.
|
||||
|
||||
### P1. Допустить кодинговых агентов только через два бюджета
|
||||
|
||||
@@ -113,8 +126,9 @@ mission: "[[personal/projects/personal-os/personal-os-purpose]]"
|
||||
## 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 не дублировать.
|
||||
2. **P0.1 — сначала блокер фактов:** собрать тихую временную линию человека/агентов/рабочих тем, проверить привязки к Asana/PR/meeting/worktree и честно показать неизвестные интервалы. Проверить 20 интервалов и два дня без новых сообщений Алексу.
|
||||
3. **P0.2 — затем блокер решений:** выбрать посильную работу из Asana, PR, TD, Ship Review, встреч, team growth и агентных ревью по роли, пользе, сроку, энергии и доступному времени; испытать перегруженный день до включения schedule.
|
||||
4. **P0.3 → P0.4:** показать один короткий живой focus state, провести 5 рабочих дней измеряемого пилота с возможностью исправить перегрузку. Только после этого решать о регулярной доставке.
|
||||
5. **P1 и параллельные ветки:** включить ограниченный coding loop с учётом review/tokens; импортировать Zoom; отдать тот же focus state на iPad. Balda/Broker/Virfield не дублировать.
|
||||
|
||||
**Необходимое участие Алекса в пилоте:** одно согласование границ; затем по желанию один короткий сигнал «полезно/неверно/слишком много» и ручная смена энергии/фокуса, когда захочется. Система не требует ежедневного ведения журнала. Внешние записи и старый автономный Executor этим планом не разрешены.
|
||||
Reference in new issue
Block a user