← все проекты

Джарвис

Оцифровка жизни владельца: один вход /jarvis, маршрутизатор кодом, устройства как кнопки (iPhone, Apple Watch, ПК через Рубку, колонка Алиса), ночной мозг, life-log с графом связей, очередь решений. Всё владельцу через Лию.

repo: E:\Проекты для Гитхаба\jarvisserver: cfru: /opt/jarvis (pm2 jarvis). К складу AITODO и Лии по HTTP на aitodo. GigaAM серверный в /opt/aitodo-tg/venv-asr.docs: docs/память: jarvis-project, ai-shell-windows-project, feedback-jarvis-approach, telegram-sync-pipeline
В РАБОТЕS1 · С0 · Вход: /jarvis и маршрутизатор47/53

Цель: С телефона и часов сказать «Джарвис, запиши…» и получить в Лию «записал». Все команды идут в один endpoint, простые разбираются кодом без ИИ.

↑ Служба /jarvis на cfru
Node + pm2. POST /jarvis {text, source, attachments[], project?} с bearer. Отвечает 200 «принял» сразу, обработка асинхронно. Журнал всех входящих на диске.
✓ Node 20 без зависимостей, /opt/jarvis, pm2 jarvis, nginx snippet jarvis.conf (noindex). Журнал data/journal, pending.json, вложения data/files.
task
К0.1 POST /in с верным bearer → 200 {ok,id} быстрее 1 с, входящее сразу в журнале дня
Экзамен: test/spec/01-vhod.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.2 Без bearer или с чужим → 401, в журнале ничего
Экзамен: test/spec/01-vhod.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.3 GET /health → 200 {ok:true} без токена
Экзамен: test/spec/01-vhod.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.4 Два одинаковых входящих за 60 с считаются одним: одна запись, одно действие, одно сообщение
Экзамен: test/spec/01-vhod.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.20 AITODO упал → входящее в pending.json, повтор, после успеха одно подтверждение и без дублей
Экзамен: test/spec/04-otkazy.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.26 Руками: pm2 jarvis online, /jarvis/health 200, после restart ждущие входящие не потеряны
Экзамен: test/spec/RUKAMI.md. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
acceptance
К0.28 Вход по коду из Лии → cookie-сессия, переживает перезапуск; сам ключ в Лию не уходит
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.37 Перезапуск посреди обработки не теряет входящее
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.38 Код входа не перегенерируется пока жив; лимиты 5 на адрес и 6 в час
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.41 Повтор фразы за минуту: {ok,id,text,repeat}
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.43 GET /app/ → 301 на /app
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.44 Кривая cookie не даёт 500
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
↑ Маршрутизатор кодом
По первым словам: «запиши/сохрани» → склад; «поручи <имя>» → задача человеку; «напомни» → напоминание; «сделай/разберись/посмотри» → очередь Рубки; иначе → «уточнить». Ноль токенов на маршрутизацию.
✓ src/route.mjs: чистая функция, 5 намерений, время напоминаний по Asia/Yekaterinburg, кандидаты проекта и людей кодом. 8/8 экзаменов.
task
К0.5 «запиши: по СММ Агенту Нина просила прайс» → store, факт, кандидаты проекта и людей
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.6 «запиши идею: …» → store, вид идея
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.7 URL или вложение-ссылка → вид ссылка; вложение-файл → вид файл
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401. К0.7: длинный текст с URL без глагола → ссылка. К0.14: кнопки проектов из /api/projects/overview (живой резолвер на пустой q вариантов не даёт; подставной AITODO приведён к живому).
acceptance
К0.8 «поручи Нине собрать прайс к пятнице» → assign, имя и текст
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.9 «напомни …»: через N минут/часов, завтра в 10, в четверг в 15, сегодня в 18:30, без времени → 60 минут (Asia/Yekaterinburg)
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.10 сделай/разберись/посмотри/проверь/выясни/подготовь/найди/напиши → do
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.11 «ну что там у нас» и пустой текст → unclear
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.12 Обращение «Джарвис» в любом виде и е/ё не влияют на результат
Экзамен: test/spec/02-marshrut.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.30 Команда не первым словом, «Лия» как обращение, всё до команды отбрасывается
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.32 «Лиза» как обращение; «скажи что…» → ответ; «задача такая: …» → Рубке; служебное слово не имя
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.36 Числа словами и «вечера»; «в 2 счета» не время
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.40 Оборванная команда не создаёт пустого, спрашивает
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
↑ Запись в склад AITODO с проектом и тегами
Проект вытаскивается кодом по справочнику проектов, люди по справочнику AITODO. Если проект не определился, пишется без проекта и Лия спрашивает кнопками.
✓ POST /api/materials/ сервисным ключом, резолверы /api/projects/resolve и /api/people/resolve, при неясном проекте вопрос кнопками и PATCH по ответу. Живой прогон прошёл.
task
К0.13 store → POST /api/materials/ с сервисным ключом, kind, project_id, tags, source, source_ref, happened_at; владельцу «Записал в склад: СММ Агент. Теги: Нина»
Экзамен: test/spec/03-deystviya.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.14 Проект не определился → материал без проекта, вопрос «В какой проект?» с кнопками, нажатие ставит проект и отвечает «Сделано»
Экзамен: test/spec/03-deystviya.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401. К0.7: длинный текст с URL без глагола → ссылка. К0.14: кнопки проектов из /api/projects/overview (живой резолвер на пустой q вариантов не даёт; подставной AITODO приведён к живому).
acceptance
К0.35 Справочники проектов и людей помнятся 10 минут, «не нашёл» минуту
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.42 Строчные буквы из распознавателя находят проект и людей по спискам и алиасам
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
Поручение человеку и напоминание
«Поручи Нине …» → задача в AITODO на person_id с напоминанием; «напомни в четверг …» → POST /api/reminders.
✓ Поручения и напоминания работают на живом AITODO. Правка reminders.py выкачена 20.09 с бэкапом в /opt/TODO-New/.backup-20260920.
⛔ Поручения работают. Напоминания: ручка AITODO /api/reminders единственная требует веб-токен (get_current_user), сервисный ключ не принимает → 403. Нужна правка reminders.py на get_current_user_flexible и выкат AITODO; классификатор не дал мне это сделать, ждёт «да» владельца.
task
К0.15 assign → задача с person_id и описанием «Голосом с часов, дата»; владельцу «Поручил Нине: …»; неизвестный человек → кнопки из «кто есть»
Экзамен: test/spec/03-deystviya.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.16 remind → POST /api/reminders с minutes_from_now либо scheduled_for; владельцу «Напомню через 20 минут: …»
Экзамен: test/spec/03-deystviya.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ AITODO reminders.py переведён на get_current_user_flexible (владелец сказал «да» 20.09), бэкенд пересобран. Живой прогон: «напомни через 2 минуты …» → напоминание создано, Лия ответила «Напомню через 2 минуты».
⛔ На подставном AITODO зелёный, на живом 403: /api/reminders не принимает сервисный ключ. Ждёт правки AITODO.
acceptance
«Сделай» в очередь Рубки
Рубка сама опрашивает AITODO и забирает задачи с галкой «через ИИ» (via_ai=true, core/src/aitodo.mjs) и отчитывается назад. Значит «сделай» = POST /api/tasks/ с via_ai:true. Файл-очередь не нужна.
✓ POST /api/tasks/ с via_ai:true, описание с текстом и источником. Рубка забирает сама.
task
К0.17 do → задача AITODO с via_ai:true, title, description с текстом и источником; владельцу «Отдал Рубке: …»
Экзамен: test/spec/03-deystviya.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
↑ Подтверждение владельцу через Лию
Одна строка: что сделано и куда положено. Никаких технических текстов. Непонятное: вопрос с кнопками.
✓ src/lia.mjs: токен Лии, кнопки только ссылками на /answer, тексты без техники (К0.21).
task
К0.18 unclear → «Не понял. Что с этим сделать?» с кнопками В склад · Задача Рубке · Забыть, каждая делает своё
Экзамен: test/spec/03-deystviya.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.21 Ни одно сообщение владельцу не содержит скобок, id, http, endpoint, via_ai, латинских слов кода
Экзамен: test/spec/04-otkazy.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.31 Просьба ответить → «Слышу: «…». Связь есть.», ничего не создаётся
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.33 Кнопки в Лию не бывают пустыми, текст ≤ 40
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.34 После кнопки в Лии приходит строка о результате
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
К0.39 Сообщение длиннее 4000 символов режется, отправка не падает
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
↑ Команда «Джарвис» на iPhone и Apple Watch
Быстрые команды iOS создаются только на телефоне (Apple подписывает на устройстве), с ПК не собрать. Сделан путь без сборки: страница /jarvis/app с микрофоном (телефон и ПК, добавить на экран Домой). Часы, Back Tap и share sheet остаются через команды по docs/SHORTCUTS.md.
task
К0.22 Руками: iPhone, Siri «Джарвис» → «запиши: тест с телефона» → Лия «Записал в склад» за 15 с, материал в кабинете
Экзамен: test/spec/RUKAMI.md. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
acceptance
К0.23 Руками: Back Tap запускает ту же команду
Экзамен: test/spec/RUKAMI.md. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
acceptance
К0.24 Руками: Apple Watch с циферблата, напоминание приходит
Экзамен: test/spec/RUKAMI.md. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
acceptance
К0.27 GET /app → страница с кнопкой «Говорить», отправка на in, noindex
Экзамен: test/spec/05-app.spec.mjs. Прогон: npm test
✓ npm test 22/22. https://myvisionagency.ru/jarvis/app → 200. Web Speech API ru-RU, ключ в localStorage.
acceptance
К0.29 Голос: POST /voice → GigaAM на cfru → обычный входящий; тишина; 502; 401
Экзамены: test/spec. Прогон: npm test
✓ ОТК 21.09 круг 1: npm test 40/40; выкачено на cfru, /jarvis/health 200, /jarvis/app/ → 301, кривая cookie → 401.
acceptance
Share sheet в склад
Поделиться → «Джарвис»: ссылка, скриншот, фото, PDF уходят в склад с тегами; Лия подтверждает.
✓ Вложения base64 → data/files → /files/<имя> с верным Content-Type, материал вида «файл» со ссылкой. Инструкция docs/SHORTCUTS.md.
task
К0.19 Вложение-файл сохраняется, отдаётся по GET /files/<имя> с верным Content-Type, материал ссылается на него
Экзамен: test/spec/03-deystviya.spec.mjs. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
✓ npm test 20.09.2026: 21/21 зелёные (test/spec). Служба на cfru pm2 jarvis, https://myvisionagency.ru/jarvis/health → 200. Живой прогон: материал создан в складе, Лия спросила проект кнопками.
acceptance
К0.25 Руками: ссылка из Safari и скриншот → два материала (ссылка, файл), два подтверждения
Экзамен: test/spec/RUKAMI.md. Прогон: cd E:\Проекты для Гитхаба\jarvis && npm test
acceptance
↑ Экзамены спринта до кода
Из ACCEPTANCE.md по С0 исполняемые проверки в test/spec; сначала красные.
✓ 21 автоэкзамен в test/spec (01-vhod, 02-marshrut, 03-deystviya, 04-otkazy) + 5 ручных в RUKAMI.md. Первый прогон на пустом коде: 21 из 21 красные. Коммит в репо jarvis.
task
В РАБОТЕS2 · С1 · Рубка живьём2/3

Цель: Владелец пользуется Рубкой как своей, «сделай» из /jarvis исполняется на его ПК. Открытые пункты Рубки закрываются в её проекте rubka.

↑ Живой проход владельца по Рубке
Проход 20.09.2026, 18:00–18:20. Владелец написал в чат на главной «какие задачи есть, возьми какую-то» и не увидел своего сообщения: открылся чужой разговор, непонятно по какой задаче и зачем идёт работа, тревога «наделает лишнего». Факты по журналу E:\Рубка\журнал.json: автозабор из AITODO взял задачи с галкой «через ИИ» (№1116, 1111, 1109, ещё 12 в очереди). Сообщение владельца в очередь не попало, ушло в живой разговор занятого контура. Ничего необратимого: 1116 остановилась на денежном гейте (10 тем вписаны в план с бэкапом), 1111 выложила внутреннюю страницу /lab/cz-perezapusk и поправила ссылку в доке, 1109 ждёт текст обращения. Замечания к доводке (проект rubka): 1. Сообщение из окна при занятом контуре = задача в очереди, видна как «моя», а не тонет в чужом разговоре. 2. В разговоре шапка: какую задачу делаю, откуда взял (AITODO №…), зачем, на каком шаге. 3. Автозабор из AITODO не стартует молча: при запуске спросить «в AITODO N задач через ИИ, брать?» со списком; по умолчанию не брать. 4. Строка «сначала прочитай паспорт» приписывается ко всем задачам шаблоном даже без паспорта (core/src/aitodo.mjs:89). Приписывать только когда паспорт есть. 5. Старые тесты от 03.09 (docker stop, загрузки) висят в «Ждёт тебя» и путают: чистить/архивировать ждущие старше N дней. 6. Сообщения из окна всё же встают в очередь, но ПОЗАДИ задач AITODO: «погнали тебя тестировать» ждал за восемью задачами. Слова владельца из окна должны идти первыми. 7. Владелец 20.09: «в Рубке сними задачи». Сделано снаружи: галка via_ai снята с 21 открытой задачи AITODO, диспетчер поставлен на паузу и 7 задач отменены через API службы (/пауза, /задача/отменить, /остановить). Опрос кабинета раз в 30 минут, поэтому снятие галки само по себе действует не сразу.
✓ Замечания сняты спринтом 14 Рубки; проверка через окно сделана мной (6/6 + живой прогон).
task
↑ «Сделай» из /jarvis попадает в очередь Рубки и исполняется
Проверка на живой задаче: сказал в часы, утром результат в Лии.
task
Замечания владельца закрыты в проекте rubka
Служба переживает закрытие окна, живой бот от начала до конца, остальное по списку прохода.
✓ Спринт 14 Рубки (Atlas rubka С14): сообщение владельца первым в очереди, шапка и экран задачи, автозабор с согласия, старые «ждёт тебя» видны на доске и закрываются кнопками. См. /lab/rubka-proverka/.
task
планS3 · С2 · Ночной мозг0/4

Цель: Комп работает ночью сам: в 21:00 Лия собирает несделанное, утром в 08:00 доклад пяти строк с результатами.

↑ Лия в 21:00: «не сделано сегодня, отдать ночному?»
Список из AITODO и Atlas, ответ кнопками или голосом с часов.
task
↑ Ночная очередь в Рубку
Одобренное уходит в очередь Рубки с критериями; экзамены как условие остановки, до 3 кругов.
task
↑ Доклад 08:00 пяти строк
Сделано / Ждёт тебя / Упало / Потрачено / Застряло, одним сообщением в Лию.
task
Стоп-хук для обычных сессий VS Code
Хук Stop в ~/.claude: пока экзамены спринта красные и не стоит явный стоп, ход не заканчивается.
task
планS4 · С3 · Алиса0/3

Цель: Утро без экрана: «Алиса, доброе утро» читает доклад и день; вечером «в ночную» голосом.

↑ Приватный навык Алисы → /jarvis
Яндекс Диалоги, без публикации. Вебхук на cfru отвечает за 3 с «принял», дальше асинхронно.
task
↑ «Доброе утро»: доклад и раскладка дня голосом
Читает пять строк Дневального и план дня из AITODO.
task
«В ночную» голосом
Перечислил на кухне, что отдать ночному мозгу; ушло в очередь С2.
task
планS5 · С4 · Life-log и граф связей0/5

Цель: Всё, что случилось за день, само оказывается в складе с тегами «кто, какой проект, когда».

↑ Крон-разведчик вместо команды «обнови данные с телеги»
Ночной прогон tg-collect + разбор на cfru, без участия владельца.
task
↑ Источники: встречи, Битрикс, диалоги сессий, AITODO
Каждый источник кладёт в склад единицу с датой, людьми, проектом.
task
Почта после авторизации Gmail
Ждёт: владелец авторизует коннектор Gmail в claude.ai.
task
↑ Граф связей в складе
Люди, проекты, встречи, документы; теги вытаскиваются кодом по справочникам, спорное маленькой моделью.
task
Здоровье с Apple Watch в AITODO
Сон, пульс, тренировки раз в день через автоматизацию Shortcuts под план «спорт и еда».
task
планS6 · С5 · Очередь решений0/3

Цель: Один раз в день, 18:00, одно сообщение: вопросы с рекомендацией и дефолтом, ответы кнопками возвращаются задачам.

↑ Сбор вопросов из всех источников
Парковка Рубки, DECISIONS-QUEUE проектов, гейты конвейеров.
task
↑ Сообщение 18:00 в Лию с кнопками
Вопрос, рекомендация, применённый дефолт; да/нет/другое.
task
Ответы возвращаются задачам
Ответ снимает парковку и задача продолжается без владельца.
task
планS7 · Проверки по сроку0/0

Цель: Отложенные проверки «посмотреть через неделю, сработало ли»: kind:check + dueDate + команда проверки в detail.

задач нет

В РАБОТЕS8 · С6 · Утренний отчёт по рекламе (пн)14/15

Цель: По одной команде в понедельник: что с рекламой у ПЦ (свои 3 + 7 поставщиков), ISKRA (Директ, Авито, ВК), Fit&Lead (Директ eLama, ВК, Метрика), СММ Агент (Директ, цели) за неделю и выходные, реклама в связке с Метрикой. Сначала скилл, потом крон и доклад в Лию через Джарвис.

Критерии приёмки и экзамены до кода
spec-tests: test/spec/monday-ads.test.mjs, только чтение
✓ test/spec.test.mjs: 14 модульных + 2 живых экзамена, 16/16 зелёных 21.09 (node --test)
task
К6.1 Сборщик aitodo отдаёт JSON по ПЦ (Брендовые, РК МСК, Отвалы, 7 поставщиков) и ISKRA (Директ, Авито, ВК) за три окна: неделя пн-вс, выходные сб-вс, неделя до неё. Ничего не пишет в кабинеты
✓ monday-ads-aitodo.json: pulscen/pc_own (3), pc_pp (7), iskra/direct/avito/vk, окна week/weekend/prev; ни одного вызова на запись (grep по ядру: только get/reports/statistics)
acceptance
К6.2 Сборщик cfru отдаёт JSON той же схемы по Fit&Lead (Директ eLama + Мастера кампаний по расходу, ВК на подписчиков, Метрика) и СММ Агент (Директ, Метрика: регистрации и оплаты)
✓ monday-ads-cfru.json: fitlead/direct (8 кампаний, 5 мастеров по отчёту), direct_old (39 скрыто), vk (2 плана), smmagent/direct (лиды = регистрации 65 + оплаты 0)
acceptance
К6.3 У каждой кампании связка: расход, показы, клики, CTR, CPC из кабинета + визиты, отказы, цели из Метрики по метке кампании; цена заявки по целям Метрики
✓ у каждой кампании Директа windows.week.metrika {visits,bounce_rate,goals,leads} и cpl_metrika; Брендовые ПЦ сшиты по имени (номер в Метрике другой); живой экзамен «связка с Метрикой у Директа» зелёный
acceptance
К6.4 Окна дат: запуск в понедельник → неделя = прошлые пн-вс, выходные = сб-вс той недели, сравнение = неделя до; в другой день → последние полные пн-вс
✓ 4 экзамена К6.4 зелёные: пн 21.09 → 14–20.09 / 19–20.09 / 07–13.09; ср 23.09 → та же; вс 20.09 → 07–13.09; 00:30 МСК = понедельник
acceptance
К6.5 Нет данных ≠ ноль: канал без ответа помечен «нет данных» с причиной, нулей вместо него нет
✓ noData() без campaigns/totals; живой пример: баланс eLama = {no_data, reason: «Требуется подключить общий счёт»}, валидатор ловит error без пометки (экзамен К6.7)
acceptance
К6.6 Состояние: баланс и «дней хватит» (Директ, ВК, аванс Авито), статус кампании (модерация / идёт / встала / выключена), дни с нулём показов внутри недели
✓ balance {rub, daily_avg, days_left}: ПЦ 32 952 ₽ / 12 дн., ISKRA Директ 19 156 ₽, ВК ISKRA 19 990 ₽, аванс Авито 5 024 ₽, СММ Агент 0 ₽; состояния «идёт/встала/выключена/черновик/в архиве/мастер кампаний», zero_days по кампании (ПП: 14, 15)
acceptance
К6.7 Скилл одной командой собирает оба JSON и выдаёт доклад: блок на клиента, «Ждёт тебя», подошедшие проверки по сроку по рекламе; без id, адресов и латиницы кода, без платных вызовов модели
✓ SKILL.md monday-ads: две ssh-команды + scp + экзамены + render; доклад пишу я по report.md, платных вызовов нет; правило «без номеров и латиницы» (номер только для двух одноимённых мастеров)
acceptance
К6.8 Живой прогон за 14-20.09 показан владельцу
✓ отчёт за 14–20.09 выдан владельцу в чате 21.09
acceptance
Сборщик aitodo: ПЦ (Брендовые, РК МСК, Отвалы + 7 поставщиков) и ISKRA (Директ, Авито, ВК)
leadforge-ai/apps/workers/src/scripts/monday-ads.ts → JSON. Реклама + Метрика 200476 по меткам, ISKRA Метрика клиента.
✓ apps/workers/src/scripts/monday-ads.ts + scripts/monday-ads/collect.mjs; прогон 21.09: ПЦ свои 18 079 ₽/143 целевых, ПП 4 624 ₽/3, ISKRA Директ/Авито/ВК собраны, баланс кабинета e-16707300 32 952 ₽ через v4 без Logins
task
Сборщик cfru: Fit&Lead (Директ eLama + МК по расходу, ВК подписчики, Метрика) и СММ Агент (Директ, цели регистрации и оплаты)
/opt/fitlead-dash/scripts/monday-ads.py → JSON той же схемы
✓ /opt/fitlead-dash/scripts/monday-ads/run.mjs; прогон 21.09: Fit&Lead eLama 54 327 ₽/13 заявок (мастера по отчёту), ВК 1 240 ₽/10 подписок, СММ Агент 8 321 ₽/65 регистраций, баланс eLama через API не виден (нет общего счёта) — помечено «нет данных»
task
Скилл monday-ads: две команды, склейка, доклад по клиентам
~/.claude/skills/monday-ads/SKILL.md; текст выводов пишу сам, платных моделей нет
✓ ~/.claude/skills/monday-ads/SKILL.md: 3 шага (собрать, проверить экзаменами и свести, написать доклад), правила «что считать заявкой», сигналы, «Ждёт тебя»; render.mjs собирает таблицы
task
Живой прогон за 14-20.09 и ОТК
показать владельцу, закрыть проверки по сроку ISKRA ВК 21.09, ПП Директ 23.09, Fit&Lead ВК 23.09
✓ Живой прогон 14–20.09 показан владельцу 21.09 (первый отчёт в чате), проверка ISKRA ВК 21.09 закрыта цифрами отчёта
task
Крон пн 08:30 на cfru + доклад в Лию через /jarvis
после того как владелец посмотрел первый отчёт; JSON в /opt/jarvis/reports/
task
Страница аналитики /lab/reklama-nedelya (page.mjs + notes.json)
По просьбе владельца 21.09 «сложно читать, сделай веб-страницу». core/page.mjs собирает самодостаточный HTML: карточки клиентов, Ждёт тебя, Разбор (notes.json) и сигналы кодом, плитки, графики по дням (SVG), таблицы. Выложено на cfru /opt/mv-home/lab/reklama-nedelya/, noindex, проверено 200. Заявки Директа по дням берутся из Метрики.
✓ https://myvisionagency.ru/lab/reklama-nedelya/ открывается (200, noindex, не в sitemap и шапке); проверено глазами на 1280 и 400 px, тёмная тема
task
В РАБОТЕS9 · С0б · Экран на телефоне: лента, вопросы, Телеграм14/16

Цель: Владелец видит на телефоне, что стало с каждой командой (записал / поручил / Рубка взяла или ждёт), отвечает на вопросы кнопками там же, и в том же экране читает и отвечает на личные сообщения Телеграма и папки Фитлид, Пульс цен, Клиенты.

↑ Лента: статус каждой команды
GET /feed: последние 30 входящих владельца, статус словами из журнала и pending; для «Отдал Рубке» состояние из AITODO (ждёт Рубку / делает / сделала: итог / не смогла).
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
task
К0б.1 /feed: последние 30 входящих, статус словами; без входа 401
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
К0б.2 «Отдал Рубке»: ждёт Рубку / делает / сделала: итог / не смогла из AITODO, помнится 30 с
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
К0б.4 Лента видит итоги после закрытия pending (id в журнале), повтор и провал словами
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
↑ Вопросы с кнопками на странице
Ждущие вопросы в ленте с кнопками, POST /answer/:id/:choice, тот же путь, что по ссылке из Лии.
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
task
К0б.3 Вопрос в ленте с теми же кнопками; POST /answer со страницы = ссылка из Лии
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
↑ Телеграм-служба на cfru
tg/server.py на Telethon с сессией владельца (копия main.session), 127.0.0.1:8097: диалоги из папок Личные/Фитлид/Пульс цен/Клиенты, сообщения чата, отправка, отметка прочитанным. Прокси через /tg/* с входом.
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
task
К0б.5 /tg/dialogs: чаты из четырёх папок, непрочитанные сверху, без ботов и каналов, старые молчащие скрыты
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
К0б.6 /tg/messages: сообщения чата, моё/не моё, чат отмечается прочитанным
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
К0б.7 /tg/send: текст владельца уходит как есть; пустой 400; без входа 401
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
↑ Раздел Телеграм на странице
Список чатов (непрочитанные сверху, бейдж), переписка, поле ответа. Только четыре папки, каналы и боты не показываются. Ждёт ручной проверки владельца К0б.10.
task
К0б.9 Страница: Сказать · Лента · Телеграм, бейдж непрочитанных
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
К0б.10 Руками: лента со статусом Рубки, ответ кнопкой, ответ в Телеграме с телефона
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
acceptance
Три раздела и автообновление
Сказать · Лента · Телеграм; лента раз в 10 с и после отправки; при недоступности Телеграма раздел говорит об этом, остальное работает.
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
task
К0б.8 Телеграм-служба лежит → 502 с человеческой ошибкой, лента и команды работают
Экзамены: test/spec/09-feed.spec.mjs, 10-tg.spec.mjs; руками: test/spec/RUKAMI.md
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
acceptance
↑ Экзамены спринта до кода
Критерии К0б.1–К0б.10 в ACCEPTANCE.md, экзамены в test/spec, подставные AITODO и Телеграм-служба.
✓ npm test 21.09: 49/49 (экзамены 09-feed, 10-tg). Выкачено: pm2 jarvis + jarvis-tg (Telethon, сессия владельца, 166 чатов в 4 папках, в списке 55 живых). /jarvis/feed и /jarvis/tg/dialogs отвечают через nginx.
task

Ворклог (места остановки)

21.09.2026, 04:31:27 · С0б · claude

С0б за одну сессию по просьбе владельца: лента на телефоне со статусом каждой команды и состоянием задач Рубки из AITODO (ждёт / делает / сделала: итог / не смогла), вопросы с кнопками прямо на странице (POST /answer), раздел Телеграм через Telethon-службу на cfru с сессией владельца (папки Личные, Фитлид, Пульс цен, Клиенты; чтение, отметка прочитанным, отправка). Экзамены до кода 9 → 49/49. Выкачено.

→ Владелец: К0б.10 руками (лента, кнопка, ответ в Телеграме). Потом ОТК по С0б и возврат к Рубке (С1).

21.09.2026, 04:10:28 · С0 · claude

ОТК по С0, круг 1. Проход 1 (подагент): 28 есть / 2 частично / 0 отсутствует. Проход 2 (два критика): 19 находок со сценариями, среди них две высокие (голос отдаёт числа словами, разбор понимал только цифры; входящее терялось при перезапуске посреди обработки) и боевая дыра К0.14 (в проде не было кнопок проектов). Проход 3: 100 параллельных команд, p95 154 мс, всё за 0,6 с. Проход 4: регресс. Все находки исправлены и закрыты экзаменами К0.36–К0.44; всего 40/40. Выкачено на cfru, nginx: таймаут 90 с, тело 25 МБ. Доки приведены к коду. Изменённые экзамены: К0.18, К0.28 (по багам владельца), К0.35 (формулировка), подставной AITODO приведён к живому API.

→ Владелец: 5 ручных проверок из test/spec/RUKAMI.md (К0.22–К0.26; К0.22 и К0.23 фактически заменены страницей /app, часы и share sheet остаются через команды). После них С0 закрыт, дальше С1: Рубка (пауза снять после доводки по 7 замечаниям).

21.09.2026, 03:33:54 · С6 · Утренний отчёт по рекламе (пн) · claude

Добавлена страница аналитики https://myvisionagency.ru/lab/reklama-nedelya/ (page.mjs: сигналы кодом, графики по дням за две недели, таблицы; выводы из notes.json). Ядро научилось дневным рядам и лидам по дням из Метрики, повтор запроса баланса при внутренней ошибке Директа. Скилл дописан шагом 3 (страница).

→ Ждёт «ок» владельца на формат страницы → задача 6: крон пн 08:30 на cfru, JSON в /opt/jarvis/reports/, страница обновляется сама, доклад в Лию через /jarvis. Заметки (notes.json) пока пишутся руками в сессии.

21.09.2026, 03:19:52 · С6 · Утренний отчёт по рекламе (пн) · claude

Скилл monday-ads собран и прогнан вживую 21.09: критерии К6.1–К6.8 → экзамены (16 зелёных) → ядро collect.mjs (одно на оба сервера) → обёртки aitodo (ПЦ 3 свои + 7 ПП, ISKRA Директ/Авито/ВК) и cfru (Fit&Lead Директ eLama + мастера + ВК, СММ Агент Директ + регистрации/оплаты) → render.mjs → доклад. Связка реклама+Метрика по кампаниям через lastsignDirectClickOrder, «нет данных ≠ ноль», балансы и «дней хватит». Первый отчёт за 14–20.09 выдан владельцу.

→ Задача 6: крон пн 08:30 на cfru + JSON в /opt/jarvis/reports/ + доклад в Лию через /jarvis — после того как владелец посмотрел первый отчёт. Открытые находки отчёта: ВК ISKRA не крутится (14 показов за 4 дня), СММ Агент Директ без денег с 16.09, Fit&Lead расход −51% к прошлой неделе, баланс eLama через API не виден.

20.09.2026, 13:58:47 · С0 · claude

Напоминания починены (AITODO reminders на сервисный ключ, выкачено по «да»). Страница /jarvis/app с микрофоном выкачена (22/22 экзаменов). Рубка остановлена по просьбе владельца: галки через ИИ сняты, пауза, очередь отменена; за час она успела: 4 внутренние страницы на /lab, правки bonimed-zavod (образ пересобран, контейнер не перезапущен) и pulse-analytics (код + миграция на диске, не применена, дашборд не перезапущен), КП и статьи на согласовании.

→ Владелец: открыть https://myvisionagency.ru/jarvis/app, вставить ключ, сказать «запиши: тест». Решить, что делать с правками Рубки в bonimed-zavod и pulse-analytics (откатить из .bak или принять). Затем С1: доводка Рубки по 7 замечаниям, ОТК по С0.

20.09.2026, 13:39:26 · С0 · claude

Проект заведён (7 спринтов, 27 задач, 26 критериев). Доки: PROJECT, ARCHITECTURE, ACCEPTANCE, DECISIONS-QUEUE, SHORTCUTS. Экзамены до кода: 21 авто (красные → зелёные), 5 руками. Код С0 написан и выкачен на cfru (pm2 jarvis, nginx /jarvis/, .env из живых ключей). Живой прогон: запись в склад прошла, Лия спросила проект кнопками. Напоминания упёрлись в auth AITODO. Проход владельца по Рубке записан в С1 (5 замечаний).

→ 1) Владелец: «да» на выкат правки reminders.py в AITODO. 2) Владелец: собрать команды «Джарвис» и «В склад» по docs/SHORTCUTS.md и пройти К0.22–К0.26. 3) Решить про 12 задач «через ИИ» в очереди Рубки. 4) С1: доводка Рубки по 5 замечаниям.