[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

This commit is contained in:
Alexey Martemyanov committed 2026-10-04 00:57:54 +06:00
1 parent 6795e2957b
commit 4d2845227c
4 files changed
+79 -30

No files matched your search

@@ -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 по доказательствам; неизвестное оставляет неизвестным.
@@ -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`. |
@@ -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 возвращать только после контролей безопасности и лимитов ревью/токенов из утверждённого плана.
## Связанные
@@ -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.
---