From 4d2845227c0e81100f5d78a380726934c20f0517 Mon Sep 17 00:00:00 2001 From: Alexey Martemyanov Date: Sun, 4 Oct 2026 00:57:54 +0600 Subject: [PATCH] [2026-10-04] eagle: personal/plans/personal-os-operating-plan-2026-10-03.md personal/plans/personal-os-source-audit-2026-10-03.md personal/projects/personal-os/personal-os-status-2026-10.md personal/projects/personal-os/zoom-ai-transcript-export.md --- .../personal-os-operating-plan-2026-10-03.md | 6 ++ .../personal-os-source-audit-2026-10-03.md | 1 + .../personal-os/personal-os-status-2026-10.md | 13 ++- .../personal-os/zoom-ai-transcript-export.md | 89 +++++++++++++------ 4 files changed, 79 insertions(+), 30 deletions(-) diff --git a/personal/plans/personal-os-operating-plan-2026-10-03.md b/personal/plans/personal-os-operating-plan-2026-10-03.md index 1bf16a62..848b7d08 100755 --- a/personal/plans/personal-os-operating-plan-2026-10-03.md +++ b/personal/plans/personal-os-operating-plan-2026-10-03.md @@ -25,6 +25,12 @@ updated: '2026-10-04' Приоритеты строго такие: (1) хорошо себя чувствовать, (2) эффективно распределять нагрузку и фокус, (3) сохранять баланс жизни/работы, (4) выполнять и улучшать рабочие и карьерные результаты. Больший объём работы не компенсирует ухудшение первых трёх целей. ActivityWatch — наблюдение за поведением компьютера, **не датчик самочувствия и не оценка продуктивности человека**. +### Сигнал раздражения в общении с агентами — требование Алекса от 2026-10-04 + +**Явная грубость или брань Алекса в обращении к агенту — сигнал раздражения.** Учитывать её при выборе тона ответа и посильной нагрузки: отвечать короче и прямо по задаче, исправлять проблему без оправданий, не множить вопросы и обычные напоминания, уменьшать поток агентных работ на ревью. Это предварительный сигнал контекста, а не диагноз, оценка характера или доказательство общей усталости; добровольная оценка самочувствия и явная коррекция Алекса имеют приоритет. + +**Данные и граница:** нынешний `session-observer.js` читает только metadata Codex/Claude и не анализирует текст сообщений, поэтому сигнал пока **не реализован** в Personal OS. Для реализации нужен отдельный локальный адаптер только к сообщениям Алекса агентам (Codex/Claude/Balda по доступному подтверждённому каналу): вывод `irritation_signal` с временем, источником и confidence; агентные ответы не классифицировать как состояние Алекса. В `focus.json` и истории хранить только производную метку, не цитаты и не сырой текст; разрешить исправить ложное срабатывание. Проверить на примерах резкого обращения, нейтральной технической брани и обычного лаконичного запроса: последние два не должны автоматически становиться раздражением. До проверенного адаптера состояние `unknown`, без вывода по ActivityWatch, частоте окон или mtime. + ### Целевой цикл 1. **Понимание факта:** собирает временную линию человеческой работы и параллельных агентных задач, связывает рабочую тему с Asana/PR/встречей/worktree по доказательствам; неизвестное оставляет неизвестным. diff --git a/personal/plans/personal-os-source-audit-2026-10-03.md b/personal/plans/personal-os-source-audit-2026-10-03.md index be3c8627..9f7b9e18 100755 --- a/personal/plans/personal-os-source-audit-2026-10-03.md +++ b/personal/plans/personal-os-source-audit-2026-10-03.md @@ -24,6 +24,7 @@ updated: '2026-10-04' | ActivityWatch/DDG | Window, AFK и DDG URL `fresh`; URL watcher работает. Xcode/VS Code buckets `stale` при отсутствии недавних событий. | Свежесть специализированных bucket проверять при реальной активности приложения. | | Git worktrees | 78 проверены; 40 с незавершёнными изменениями, 2157 изменённых путей, 64 коммита за 30 дней. Размеры изменений учитываются без diff. | Worktree без PR/Asana связи остаётся `unknown`. | | Codex/Claude | 65/24 сессии по metadata без текста бесед. | `needs_human` нельзя выводить из mtime/idle. | +| Стиль общения с агентами | Алекс указал 4 октября: явная грубость в его обращениях — сигнал раздражения. | Metadata-адаптер не читает сообщения; нужна отдельная локальная проверка сообщений Алекса с производной меткой, без хранения цитат в focus state и с проверкой ложных срабатываний. | | Mattermost | Отдельный авторизованный read-only клиент: корпоративный сервер собирается каждые 15 минут (первый сбор 21 сообщение / 202 канала); Qentra проверена (265 / 9). | Qentra была тестом; корпоративные сообщения пока хранятся отдельным локальным потоком. | | iTerm | 18 из 53 окон привязаны к worktree по точному пути prompt в заголовке. | Остальные окна не имеют доказанной темы. | | Outlook | Активность окна классифицируется как mail/calendar browsing. | Письма и события не читаются: доступные коннекторы отключены администратором, нужен разрешённый Graph app с `Mail.Read`/`Calendars.Read`. | diff --git a/personal/projects/personal-os/personal-os-status-2026-10.md b/personal/projects/personal-os/personal-os-status-2026-10.md index e69c6108..c74b2a63 100755 --- a/personal/projects/personal-os/personal-os-status-2026-10.md +++ b/personal/projects/personal-os/personal-os-status-2026-10.md @@ -16,6 +16,7 @@ confidence: 1 - **Корпоративный Mattermost подключён отдельно.** Клиент с собственной Chrome-сессией читает сообщения `chat.duckduckgo.com` каждые 15 минут (первый запуск 21 сообщение из 202 каналов, повторный 0 новых; LaunchAgent код 0). Тест на `mm.qentra.top` дал 265 сообщений из 9 каналов; Qentra не добавлена в фоновое расписание. Токены/куки в Personal OS не копируются, файлы снимков имеют режим 0600. - **iTerm и рабочие ветки учитываются.** Последний снимок: 78 worktrees, 40 с незавершёнными изменениями, 2157 изменённых путей, 64 коммита за 30 дней. Диффы не сохраняются. Из 53 интервалов iTerm 18 привязаны к worktree по пути в заголовке, прочие остаются `unknown`. - **Outlook подключён только как активность окна.** За последний снимок интервалов Outlook нет; письма и встречи не читаются. Outlook Email/Calendar connectors отключены администратором; для Graph нужен разрешённый client ID/tenant ID с `Mail.Read` и `Calendars.Read`. Календарь остаётся `unknown`. +- **Zoom My Notes проверен через браузерный драйвер.** Драйвер открыл список заметок и полный transcript со спикерами и временными метками в авторизованной вкладке. Выбран браузерный экспорт в Markdown/JSON; экспортёр ещё не реализован. API и права администратора для текущего пути не нужны. Детали: [[personal/projects/personal-os/zoom-ai-transcript-export]]. - **Пилот не завершён.** Двухдневная калибровка, ручная проверка 20 интервалов и пятидневный пользовательский пилот впереди. План: [[personal/plans/personal-os-operating-plan-2026-10-03]]. Аудит: [[personal/plans/personal-os-source-audit-2026-10-03]]. ## Проверенные источники (снимок 2026-10-04 00:41 +06) @@ -25,17 +26,19 @@ confidence: 1 | Asana и GitHub | `fresh`; 27 моих открытых PR, 5 текущих запросов на ревью. Прямые запросы Asana отделены от FYI. | | ActivityWatch | Window/AFK и DDG URL `fresh`; Xcode и VS Code `stale` из-за отсутствия недавних событий, а не доказанной поломки. Текущая тема привязывается только по доказательству. | | Codex/Claude | Метаданные 65 и 24 сессий; `needs_human` не выводится из mtime или состояния окна. | +| Стиль общения с агентами | Требование Алекса от 4 октября: явная грубость в его обращениях к агентам — сигнал раздражения, который должен сокращать ответ и поток обычных запросов/ревью. Сейчас тексты сообщений не читаются, поэтому автоматический сигнал ещё не реализован; состояние `unknown`. | | Worktrees | `fresh`; коммиты и незакоммиченные пути учитываются без текста diff. | | Mattermost | Корпоративный и тестовый снимки `fresh`; фоновый сбор включён только для корпоративного сервера. | | iTerm | Частичная привязка к worktree по точному пути shell prompt в заголовке окна. | | Outlook/календарь | Активность приложения — частично; сообщения, события и тема встречи — `unknown`. | +| Zoom My Notes | Доступ через авторизованную вкладку подтверждён: список заметок и полный transcript читаются браузерным драйвером. Экспортёр в Markdown/JSON ещё не реализован. | | Balda | Подтверждённого read-only контракта для этого среза нет. | ## Что остаётся выключенным - Старый Executor, Hermes briefs и их push-уведомления остаются на паузе после инцидента 2026-04/05 ([[personal/projects/personal-os/executor-security-analysis]]). - Старый `com.personalos.readonly` не является контуром нового shadow-сбора. -- Запись в Asana/GitHub, доставка focus-карточек, Zoom-импорт и iPad-клиент не включены. +- Запись в Asana/GitHub, доставка focus-карточек, браузерный экспорт Zoom My Notes и iPad-клиент не включены. ## Что живо рядом (не Personal OS, но связано) @@ -54,9 +57,11 @@ confidence: 1 ## Что осталось до пилота 1. Проверить 20 разнообразных интервалов и два рабочих дня shadow-сбора; исправить ложные уверенные связи и пропуски обязательств. -2. Получить разрешённый Microsoft Graph app (tenant ID, client ID, делегированные `Mail.Read`/`Calendars.Read`) для чтения Outlook; до этого встречи не учитываются как подтверждённая занятость. -3. Перед доставкой карточки согласовать границу рабочего дня и канал; затем провести пятидневный пилот с короткой обратной связью. -4. Старый Executor возвращать только после контролей безопасности и лимитов ревью/токенов из утверждённого плана. +2. Добавить локальный адаптер стиля сообщений Алекса агентам: грубость → предварительный сигнал раздражения, с проверкой ложных срабатываний и без хранения цитат в focus state. +3. Получить разрешённый Microsoft Graph app (tenant ID, client ID, делегированные `Mail.Read`/`Calendars.Read`) для чтения Outlook; до этого встречи не учитываются как подтверждённая занятость. +4. Реализовать браузерный экспорт новых Zoom My Notes в Markdown/JSON с дедупликацией по `note_id`. +5. Перед доставкой карточки согласовать границу рабочего дня и канал; затем провести пятидневный пилот с короткой обратной связью. +6. Старый Executor возвращать только после контролей безопасности и лимитов ревью/токенов из утверждённого плана. ## Связанные diff --git a/personal/projects/personal-os/zoom-ai-transcript-export.md b/personal/projects/personal-os/zoom-ai-transcript-export.md index 3c1e0e84..0be13448 100755 --- a/personal/projects/personal-os/zoom-ai-transcript-export.md +++ b/personal/projects/personal-os/zoom-ai-transcript-export.md @@ -5,7 +5,7 @@ aliases: - "zoom-ai-transcript-export" - "Zoom automation" created: '2026-05-11' -updated: '2026-05-31' +updated: '2026-10-04' tags: - zoom-ai-transcript-export - personal-os @@ -21,46 +21,83 @@ related: Связано: [[executor-security-analysis]] -Yes — multiple paths, listed fastest to most flexible. +## Проверено 2026-10-04 + +- Zoom **My Notes** включён и автоматически транскрибирует Zoom, Teams, Google Meet и другие встречи. +- Заметки хранятся в Zoom Cloud и открываются через `https://us01mynotes.zoom.us`. +- У каждой заметки есть постоянный `note_id` в URL: `https://us01mynotes.zoom.us/{note_id}`. +- Страница заметки содержит полный transcript: текст, спикеров и временные метки. +- Текущий корпоративный аккаунт не разрешает создавать приложения в Zoom Marketplace: General App, Server-to-Server OAuth и Webhook Only App отключены. Раздел **User Management → Roles** пользователю недоступен. +- Открытая вкладка My Notes сама ничего не экспортирует. Локальный экспортёр пока не реализован. ## Options -### 1. Zoom MCP connector for Claude (no code) -Zoom ships an official MCP connector available in Claude's connector directory. Retrieves summaries, transcripts, recordings, and related meeting content. Use on-demand or via a Cowork workflow. +### 1. Встроенный Zoom Workflow — только обработанные итоги -### 2. Zoom REST API + Server-to-Server OAuth (real automation) -Relevant endpoints: -- `GET /v2/meetings/meeting_summaries` — list all AI Companion summaries -- `GET /v2/meetings/{meetingUUID}/meeting_summary` — fetch a specific summary body -- `GET /v2/meetings/{meetingId}/transcript` — full transcript +В My Notes есть кнопка **Workflow**. Проверенные готовые сценарии: + +- Send Meeting Summary to Gmail +- Save Meeting Summary to Google Docs +- Generate Post-Meeting Action Tracker +- Log Meeting Summary as Salesforce Note + +Они работают с summary и action items. Готового Workflow для автоматического сохранения полного сырого transcript не обнаружено. + +### 2. Zoom My Notes API — справочная альтернатива + +Endpoints: + +- `GET /v2/my_notes/notes?meeting_id={meeting_id}` — список заметок встречи +- `GET /v2/my_notes/notes/{note_id}/content?include=transcript` — заметка, AI content и полный transcript Required scopes: -- `meeting:read:list_summaries:admin` -- `meeting:read:summary:admin` -- `meeting:read:summary:master` (sometimes needed for cross-account — currently buggy per active dev forum thread) -Run as a cron/launchd job, poll for new summaries, write to disk / Obsidian / pgvector store. +- `my_notes:read:note` +- `my_notes:read:content` -### 3. Webhook-driven (push) -Zoom emits `meeting.summary_completed` events. Point webhook at your VPS, receive event, call API to pull body. Cleaner than polling. +Webhook: -### 4. Manual (not really automation) -In Zoom Docs: open summary → ⋯ menu → Export to Word/PDF. Per-meeting only. +- `my_notes.transcript_generated` + +Этот путь не используется в текущей реализации. + +### 3. Браузерный экспортёр — выбранная реализация + +Экспортёр управляет открытой авторизованной вкладкой My Notes через браузерный драйвер: + +1. Открывает **My Notes → All notes**. +2. Собирает `note_id` и обрабатывает только новые заметки. +3. Открывает каждую страницу заметки. +4. Извлекает transcript из страницы. +5. Сохраняет Markdown и JSON в Obsidian или pgvector. + +Предлагаемая структура: + +```text +zoom-transcripts/ + index.json + 2026-09-29 Meeting title/ + transcript.md + transcript.json +``` + +Во время работы драйвера вкладка My Notes должна оставаться открытой и авторизованной. Драйвер уже подтвердил доступ к списку заметок и полному transcript внутри отдельной заметки. + +### 4. Zoom MCP connector + +Официальный Zoom MCP может получать материалы встреч при наличии разрешённых scopes. Для текущего корпоративного аккаунта доступ к данным через MCP нужно проверять отдельно: наличие одобренного коннектора не гарантирует разрешение на полный My Notes transcript. ## Caveats -- Transcripts have limited retention in Zoom — pull regularly, not on-demand months later. -- Summary endpoint OAuth scopes are currently fragile; expect debugging. -- Account admin must enable AI Companion API access; host must have transcript retention on. -- Avoid lethal-trifecta: if pulling via MCP connector in a Claude session, don't combine with web fetch in the same conversation. +- My Notes transcript retention включён и управляется политикой аккаунта. Заметки могут удаляться автоматически. +- Browser exporter не создан и не запущен. +- Открытая вкладка нужна драйверу во время выгрузки, но сама по себе ничего не сохраняет. ## Recommended path -Given existing infra (PostgreSQL + pgvector knowledge base, VPS with reverse tunnel, orchestrator agents): - -**Option 3 (webhook) → pgvector** is highest-leverage. Webhook handler on the VPS receives `meeting.summary_completed`, calls the summary + transcript endpoints, writes to pgvector for retrieval by your knowledge agent. - -Fallback: Option 2 (polling) if webhook setup is blocked by network/firewall. +1. Реализовать экспортёр через браузерный драйвер и открытую авторизованную вкладку My Notes. +2. Экспортировать новые заметки в Markdown + JSON. +3. Индексировать сохранённые transcript в pgvector. ---