From f82ebe09152c7d6d6906692fd485d6776aa32372 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sat, 3 Oct 2026 20:49:39 +0600 Subject: [PATCH] [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 --- .../personal-os-operating-plan-2026-10-03.md | 70 +++++++++++-------- .../personal-os/personal-os-purpose.md | 24 ++++--- .../personal-os/personal-os-status-2026-10.md | 7 +- 3 files changed, 63 insertions(+), 38 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-purpose.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 0fd7f06d..c6f9e905 --- a/personal/plans/personal-os-operating-plan-2026-10-03.md +++ b/personal/plans/personal-os-operating-plan-2026-10-03.md @@ -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//*.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 этим планом не разрешены. diff --git a/personal/projects/personal-os/personal-os-purpose.md b/personal/projects/personal-os/personal-os-purpose.md old mode 100755 new mode 100644 index 91bfa46f..bb122bc4 --- a/personal/projects/personal-os/personal-os-purpose.md +++ b/personal/projects/personal-os/personal-os-purpose.md @@ -12,30 +12,37 @@ status: current-mission ## Миссия -**Personal OS координирует внимание, нагрузку и рабочий контекст Алекса так, чтобы он хорошо себя чувствовал, мог глубоко работать, сохранял баланс жизни и работы и устойчиво улучшал рабочие и карьерные результаты.** Система держит контекст вне головы Алекса, помогает выбрать посильный фокус дня, защищает его, возвращает к задаче после переключения и берёт на себя анализ, который не требует решения человека. +**Personal OS координирует внимание, нагрузку и рабочий контекст Алекса так, чтобы он хорошо себя чувствовал, мог глубоко работать, сохранял баланс жизни и работы и устойчиво улучшал рабочие и карьерные результаты.** Система держит контекст вне головы Алекса, помогает выбрать посильный фокус дня, защищает его, возвращает к задаче после переключения и берёт на себя анализ, который не требует решения человека. Сейчас главная практическая проблема — **рваный фокус**: параллельные человеческие и агентные задачи постоянно требуют переключения и контроля, а Алекс остаётся ограниченным ресурсом для ревью и решений. Это персональная система поддержки решений и исполнения, а не генератор длинных статусов. Её качество определяется тем, уменьшились ли переключения, перегрузка и ручная координация при сохранении важных обязательств. Рост числа задач, сообщений и агентных результатов сам по себе не считается улучшением. ## Приоритет целей — в указанном порядке 1. **Самочувствие.** Учитывать явно указанное настроение/энергию и возможность отдыха. ActivityWatch не может достоверно вывести самочувствие сам по себе. Плохое самочувствие уменьшает предлагаемый объём работы, а не создаёт долг «догнать план». -2. **Качество фокуса и посильная нагрузка.** Учитывать текущую работу, время на погружение, переключения, встречи, перерывы, дедлайны и доступные окна. План дня меняется вместе с реальностью; система показывает одну обоснованную рекомендацию, а не навязывает жёсткое расписание. +2. **Качество фокуса и посильная нагрузка.** Учитывать рабочую тему, а не только активное приложение; время на погружение, переключения между человеческой работой и контролем агентов, встречи, перерывы, дедлайны и доступные окна. План дня меняется вместе с реальностью; система показывает одну обоснованную рекомендацию, а не навязывает жёсткое расписание. 3. **Баланс жизни и работы.** Защищать перерывы, окончание рабочего дня и личное время; не превращать свободное время в автоматически доступный ресурс для рабочих или агентных задач. -4. **Работа и карьера.** Не пропускать реальные обязательства в Asana, PR/review и встречах; сохранять подтверждённые результаты, вклад и возможности роста, чтобы они не терялись за текущей срочностью. +4. **Работа и карьера.** Не пропускать реальные обязательства в Asana, PR и код-ревью, Tech Designs, Ship Reviews, встречах и развитии команды; сохранять подтверждённые результаты, вклад и возможности роста. Карьерный вектор включает больше координации, ревью и менеджмента; часы непосредственного кодинга не являются мерой успеха. Эти цели образуют порядок принятия решений: система не оптимизирует рабочие метрики ценой ухудшения первых трёх пунктов. Алекс всегда может вручную изменить приоритет, уровень энергии или режим дня. ## Что система должна понимать -- **Рабочие обязательства:** Asana — основной источник задач, назначений, комментариев и сроков; GitHub — PR, CI, review requests и ожидание ответов. Ни просрочка, ни комментарий сами по себе не доказывают срочность. -- **Фактическая работа и контекст:** ActivityWatch (активное приложение, AFK, окна работы, перерывы, переключения), Xcode/Cursor и git worktrees, соответствие worktree ↔ PR ↔ задача/проект; сессии Codex/Claude как работа над проектом, а не автоматически работа Алекса. +- **Рабочие обязательства:** Asana — основной источник задач, назначений, комментариев, сроков, Tech Designs и Ship Reviews; GitHub — PR, CI, review requests и ожидание ответов; встречи и team growth — часть рабочего и карьерного контекста. Ни просрочка, ни комментарий сами по себе не доказывают срочность. +- **Фактическая работа и контекст:** ActivityWatch показывает переднее приложение, AFK, окна работы, перерывы и переключения. Работа может происходить в VS Code, Codex, Claude, Asana, браузере на PR/документах или во встрече; приложение **не равно рабочей задаче**. Git worktrees, ветки, PR, Asana task и сессии агентов помогают восстановить конкретную рабочую тему. Время агента и время Алекса учитываются раздельно. Старый Cursor больше не является актуальным рабочим инструментом. - **Ритм дня:** подтверждённые встречи, Zoom-записи/транскрипты, окна между встречами, время на переходы и восстановление контекста. Существование записи не означает, что она уже импортирована. - **Человеческая сторона:** настроение и энергия по желанию Алекса, заданный им фокус, доступное время и граница рабочего дня. Отсутствие самоотчёта — «неизвестно», а не «энергии достаточно». -- **Нагрузка от агентов:** ожидаемое время ревью и число результатов, которые ждут Алекса; стоимость, токены, длительность и повторы агентных задач. +- **Нагрузка от агентов:** какие Codex/Claude/Balda задачи идут параллельно, какие застряли, какие готовы и сколько времени ревью/решений потребуют от Алекса; стоимость, токены, длительность и повторы. Агентный результат — новый входящий запрос к ограниченному человеческому ресурсу. + +## Два первичных блокера + +1. **Достоверная картина фактической работы и агентной нагрузки.** Свести события в единую временную линию и связи `человек ↔ рабочая тема ↔ источник ↔ агентная задача ↔ ожидаемое ревью` с доказательством и уровнем уверенности. Для неизвестного контекста говорить «не знаю», а не угадывать по названию приложения. +2. **Выбор нужной работы при текущей ёмкости.** Разбирать, что действительно важно/срочно для рабочих и карьерных целей, и сопоставлять с энергией, встречами, перерывами, ценой переключения, reviewer load и границей рабочего дня. Результат — посильная рекомендация `делать сейчас / выделить окно / делегировать / ждать / перенести` с причиной. + +Короткая доставка и обратная связь замыкают эти два контура; кодинговые агенты, Zoom-импорт и iPad на них опираются. Точность сбора данных необходима, но сама по себе не выбирает хорошую работу для Алекса. ## Основной контур — управление фокусом -1. Система поддерживает живую картину: что Алекс делает сейчас, что важно сегодня, что ждёт его, что может подождать, насколько план посилен при текущей энергии и календаре. +1. Система поддерживает живую картину: какой рабочей темой занят Алекс, что делают параллельные агенты, где образуется очередь его ревью, что важно сегодня, что может подождать и насколько план посилен при текущей энергии и календаре. Переднее приложение — лишь одно из наблюдений. 2. Во время глубокого фокуса и встреч она копит изменения и бережёт внимание. Исключение для действительно критического сигнала задаётся явным правилом с доказательством; старое правило «красный сигнал старше трёх часов» — исходная гипотеза для проверки, а не универсальная команда прервать работу. 3. На естественном переходе она даёт короткую карточку: где остановился, что изменилось, что разумно сделать дальше, почему, сколько это займёт. Рядом — возможность отложить, сменить фокус или снизить план. 4. В конце дня она фиксирует фактическую работу и доказательства вклада без оценки «успешности» по числу активных минут. Если день был тяжёлым, результатом может быть сохранённый контекст и защищённое восстановление. @@ -49,7 +56,8 @@ status: current-mission ## Как понять, что миссия выполняется - Алекс субъективно отмечает, что план посилен и ему легче удерживать фокус; короткий добровольный отклик важнее вывода из телеметрии. -- Во время фокусного блока нет обычных прерываний; после встречи/перерыва контекст возвращается без ручного поиска по Asana, PR и чатам. +- Во время фокусного блока нет обычных прерываний; после встречи, ревью агентной работы или перерыва контекст возвращается без ручного поиска по Asana, PR, сессиям агентов и чатам. +- Уменьшается субъективное ощущение «рваного фокуса» и число неплановых переключений между рабочими темами по сравнению с коротким исходным замером; неизвестные интервалы не приписываются выдуманной задаче. - День учитывает встречи, рабочие обязательства, review-очередь агентов, перерывы и границу рабочего времени. Перегруженный день ведёт к явному сокращению/переносу задач. - Количество запросов к Алексу и минуты ревью измеряются. Агентные задачи прекращают расходовать бюджет при превышении лимитов или отсутствии прогресса. - Важные рабочие обязательства не теряются, а карьерный вклад хранится с датой и ссылкой на подтверждение. 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 3785d0aa..ce20eae5 --- a/personal/projects/personal-os/personal-os-status-2026-10.md +++ b/personal/projects/personal-os/personal-os-status-2026-10.md @@ -17,7 +17,10 @@ confidence: 1 автономным Executor (апр–май 2026, см. [[personal/projects/personal-os/executor-security-analysis]]). **Требуется перепланирование с нуля** — старая архитектура (Hermes/Eagle + cron + executor) не возобновляется как есть. - **Миссия и приоритет теперь уточнены Алексом:** [[personal/projects/personal-os/personal-os-purpose]] — - самочувствие, фокус, баланс, затем работа и карьера. Конкретный аудит и предложенная очередь: + самочувствие, фокус, баланс, затем работа и карьера. Текущий главный симптом — «рваный фокус» + из-за параллельной работы и контроля агентов. Первые два блокера: точная временная линия + человеческой/агентной работы с привязкой к теме; затем анализ нужной работы с учётом + энергии, встреч и reviewer load. Конкретный аудит и предложенная очередь: [[personal/plans/personal-os-operating-plan-2026-10-03]]. Это план для согласования, не включённая система. - Агентная инфраструктура в целом живёт отдельно (Balda / Callee / Prism на Mac) — это не Personal OS, а общий агентный стек; на нём может быть построена будущая версия. @@ -30,7 +33,7 @@ confidence: 1 | Брифы (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 | 🟡 локальный сервер работает; 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` | +| ActivityWatch | 🟡 локальный сервер работает; 2026-10-03 window/AFK свежие, Xcode последний раз 2026-10-01, `aw-watcher-vscode` 2026-10-02, DDG URL 2026-06-08 | расширение VS Code установлено, README ошибочно описывает только Cursor; локальный API buckets 2026-10-03 14:13 UTC; `aw-query.js` ещё неверно выбирает `currentFocus` | | Репо `~/Developer/personal-os` | последний коммит 2026-06-16; много незакоммиченного (брифы мая–июня, `agent/infra/`) | `git status` | ## Что живо рядом (не Personal OS, но связано)