Talorys — персональный AI-ассистент, который живёт в вашем аккаунте Cloudflare

· 8 мин чтения
ai-agents self-hosted cloudflare personal-assistant automation
📂 Исходный код на GitHub

Talorys — открытый персональный AI-ассистент на TypeScript, который целиком разворачивается в аккаунте Cloudflare пользователя: React-интерфейс на Pages, приватный Worker на Hono и Durable Object с SQLite. Поддерживает чат с потоковыми ответами, память с семантическим поиском, историю фактов, задачи, заметки, проекты, автоматизации и push-уведомления. Лицензия MIT.

Talorys — персональный AI-ассистент, который живёт в вашем аккаунте Cloudflare

Talorys — открытый персональный AI-ассистент, который целиком живёт в вашем аккаунте Cloudflare. Он ведёт чат с потоковыми ответами, запоминает важные факты о вас, ведёт задачи, заметки и проекты, а ещё будит напоминаниями по расписанию. Своего сервера и своей базы у разработчиков нет: всё, что вы пишете, хранится в Durable Object внутри вашего аккаунта. Установка — одна команда. Лицензия MIT, язык — TypeScript.

Слоган проекта звучит так: один человек, один аккаунт Cloudflare, одна команда, один личный AI-агент.

Что умеет

  • Личный чат. Ответ приходит потоком, в Markdown, с индикаторами работы инструментов.
  • Память. Личные факты и предпочтения, которые видно, можно править и удалять. В модель на каждом шаге уходит только самое важное из сохранённого, а не вся база.
  • Семантический поиск по памяти. Находит воспоминания по смыслу, а не только по точному слову, и показывает их от новых к старым вместе с датой сохранения. По умолчанию выключен. Включается переключателем Semantic memory recall в самом низу раздела Settings → AI (остальные настройки появляются после включения) или флагом --semantic при установке. Подробности в документации.
  • История памяти. Факты меняются со временем. Сказали, что продали машину, — ассистент спросит, не стала ли старая машина фактом из прошлого. С дополнительной проверкой через AI уверенный ответ делается автоматически, а спорные конфликты ждут вашего решения. Подробности в документации.
  • Задачи, заметки и проекты. Полное создание, чтение, изменение и удаление прямо в интерфейсе. То же самое делается из чата: «Добавь задачу посмотреть мой проект завтра».
  • Автоматизации. Разовые и повторяющиеся напоминания, ежедневные сводки по задачам и AI-рутины. Результаты приходят во внутренний центр уведомлений. Работают на будильниках Durable Object, поэтому ничего не должно висеть открытым.
  • Push-уведомления. Напоминания, сводки и рутины приходят системными уведомлениями на телефон и компьютер, даже когда Talorys закрыт. Настройка — Settings → General. Используется обычный Web Push с шифрованием от устройства до сервера. На iPhone и iPad сначала нужно добавить Talorys на домашний экран.
  • Один пользователь по замыслу. Ни регистрации, ни аккаунтов, ни команд. Пароль владельца задаёт установщик.
  • Работает и без AI. Если Workers AI недоступен или бесплатная квота исчерпана, задачи, заметки, память и напоминания продолжают работать.

Как это устроено

Браузер ──HTTPS──▶ Cloudflare Pages (React-приложение + Pages Function)
                         │  service binding (без публичного URL)
                         ▼
                   Приватный Worker (роутер Hono)
                         │  getAgentByName("personal-agent")
                         ▼
                   TalorysAgent — Durable Object из Cloudflare Agents SDK
                     ├─ SQLite: диалоги, память, задачи, заметки, проекты,
                     │          автоматизации, сессии, настройки, расход
                     ├─ Workers AI: @cf/zai-org/glm-4.7-flash (поток и вызовы инструментов)
                     └─ Будильники: напоминания и расписания

Браузер общается только с вашим сайтом на *.pages.dev. Запросы /api/* выполняет Pages Function и передаёт их агенту через service binding — напрямую, без публичного адреса.

Сам Worker агента задеплоен с workers_dev: false и preview_urls: false, то есть публичного URL у него нет вообще. Проверка пароля и права доступа происходят на стороне Worker, а не во фронтенде. Ответы чата идут сквозным потоком через Server-Sent Events. Подробнее в описании архитектуры.

Какие сервисы Cloudflare заняты

Сервис Зачем Есть в бесплатном плане
Cloudflare Pages Фронтенд и Pages Function Да
Cloudflare Workers Приватный Worker с API Да
Durable Objects (SQLite) Все данные и будильники расписания Да
Workers AI Модель чата @cf/zai-org/glm-4.7-flash Да, с дневной нормой

R2, D1, KV, Vectorize, AI Search, Workflows и любые платные сервисы Talorys не создаёт.

Установка

npx create-talorys@latest

Установщик делает восемь шагов:

  1. Проверяет Node.js (22+) и использует свой встроенный Wrangler CLI. Глобально установленные wrangler или cf подхватываются, но не обязательны.
  2. Проверяет вход в Cloudflare или открывает страницу авторизации в браузере.
  3. Даёт выбрать аккаунт, если их несколько, и имя агента.
  4. Спрашивает пароль владельца. Ввод скрытый, стойкость проверяется. Пароль хешируется локально через PBKDF2-SHA256 и хранится только как секрет Cloudflare.
  5. Генерирует 256-битный секрет сессии, пару ключей Web Push и уникальные имена ресурсов (talorys-<id>-agent, talorys-<id>-web).
  6. Разворачивает приватный Worker вместе с его Durable Object на SQLite, сохраняет секреты, создаёт и публикует проект Pages со связкой service binding.
  7. Проверяет живое развёртывание: фронтенд, endpoint авторизации, отказ для неавторизованных, состояние хранилища. Инференс AI при этом не запускается.
  8. Печатает настоящий адрес https://….pages.dev, который сообщил Cloudflare.

Рядом появляется каталог talorys/ с файлом talorys.json (идентификатор установки, ID аккаунта, имена ресурсов, URL — без секретов) и собранными файлами для развёртывания. Его нужно сохранить для обновлений.

Если установка прервалась, запустите ту же команду в том же месте. Установщик сверит уже созданное: дубликатов не будет, пароль не спросит заново, и данные никогда не удаляются.

Для установки без диалога:

TALORYS_OWNER_PASSWORD=... npx create-talorys@latest --yes --account-id <id>

Если вы не залогинены в Cloudflare, добавьте переменную окружения CLOUDFLARE_API_TOKEN.

Права доступа

Вход через браузер идёт обычным OAuth-потоком Wrangler, глобальный API-ключ не нужен. Если вместо этого вы используете API-токен, ему нужно:

  • Account › Workers Scripts › Edit
  • Account › Cloudflare Pages › Edit
  • Account › Workers AI › Read
  • Account › Account Settings › Read
  • User › User Details › Read (необязательно, только чтобы показать вашу почту)

Подробности в документации по развёртыванию.

Вход и восстановление пароля

Откройте напечатанный установщиком адрес, введите пароль владельца и начинайте общаться. Входить можно с любого числа устройств — владелец у них один. Список сессий — Settings → Security.

Потеряли пароль? Из каталога talorys/:

npx create-talorys@latest reset-password

Команда заменяет секрет с паролем и выходит из всех устройств.

Где лежат данные

Все данные хранятся в одном Durable Object на SQLite (personal-agent) внутри вашего аккаунта Cloudflare. В Talorys нет телеметрии, аналитики, трекинга и рекламного кода, и ничего не отправляется разработчикам.

При этом Cloudflare обрабатывает ваши данные ради своих сервисов, включая запуск Workers AI на ваших сообщениях и на относящихся к ним фрагментах памяти. С условиями Cloudflare стоит ознакомиться отдельно. Модель угроз описан в документации по безопасности.

Что бесплатно, а что может стоить денег

Talorys рассчитан на бесплатный план Cloudflare Workers и сам платные функции не включает. Но «безлимита задаром» не обещается:

  • На бесплатных планах есть квоты аккаунта: запросы, использование Durable Object и дневная норма Workers AI в Neuron. Квоты задаёт Cloudflare и может их менять.
  • Когда норма AI исчерпана, чат показывает понятное сообщение и продолжит работать после суточного сброса. Остальное продолжает работать, данные не страдают.
  • На платном плане расход сверх включённого тарифицируется по правилам Cloudflare.

Встроенные ограничители настраиваются в Settings → AI: максимум выходных токенов, максимум токенов контекста (старая история сжимается), максимум вызовов инструментов и шагов рассуждения за запрос, максимум запросов к AI в сутки и максимум запланированных AI-запусков в сутки. У векторного поиска свой дневной предел запросов. Простые напоминания и сводки по задачам AI не используют вообще.

Панель расхода разделяет токены, о которых сообщил провайдер, и оценочные значения по умолчанию, показывает за сегодня и за семь дней приблизительное число Neuron и стоимость инференса в долларах. Это не счёт Cloudflare и не остаток квоты: расход аккаунта и бесплатные лимиты там не учтены. Точные цифры по аккаунту — в панели Cloudflare.

Локальная разработка

Требуется Node.js 22+.

git clone https://github.com/rociiu/talorys.git
cd talorys
npm install
npm run dev

npm run dev поднимает в одном терминале Worker агента (wrangler dev, порт 8787), прокси-функцию Pages со связкой service binding (wrangler pages dev, порт 8788) и интерфейс на Vite (http://localhost:5173). Создаётся файл apps/agent/.dev.vars с локальным паролем talorys-dev-password (переопределяется через TALORYS_DEV_PASSWORD) и включается детерминированная подставная модель AI, поэтому вход в Cloudflare не нужен. Состояние лежит в .wrangler/state.

Остальные команды: npm run build, npm test, npm run test:e2e, npm run test:pack, npm run typecheck, npm run lint. Подробности в документации по разработке.

Резервная копия

Settings → Privacy → Download backup выдаёт файл talorys-backup.json с диалогами, памятью, задачами, заметками, проектами, настройками и автоматизациями. Сессии и учётные данные в копию не попадают.

Импорт проверяет файл и сливает данные в одной транзакции. Повторный импорт того же бэкапа безопасен, а воспоминание, которое вы правили после создания копии, не перезаписывается. Файл бэкапа считается недоверенным: новые автоматизации приходят выключенными, существующие не меняются, кроме выключения, а настройки модели, лимитов, демо-режима, авто-памяти и истории памяти остаются как были. В отчёте об импорте перечислено всё, что пропущено.

Обновление

Из каталога talorys/:

npx create-talorys@latest update

Команда публикует свежие версии Worker и фронтенда в те же самые ресурсы. Пространство имён Durable Object не пересоздаётся (миграции только дописываются), пароль владельца и сессии сохраняются, а обновления схемы применяются автоматически и в одной транзакции при первом запросе. Есть ещё команды status и doctor.

Если что-то пошло не так

Проблема Что делать
Установщик остановился на середине Запустить ту же команду, она продолжит работу
«did not pass its health checks yet» Новым сайтам на pages.dev нужно несколько минут, повторите
Ошибки доступа Войти в аккаунт, где можно править Workers и Pages, или использовать токен с правами выше
Чат пишет, что норма AI исчерпана Дождаться суточного сброса или включить демо-режим в Settings → AI
Заблокировали после неудачных входов Подождать 15 минут или сбросить пароль через CLI

Команда npx create-talorys@latest doctor проверяет всё автоматически. Ещё детали в документации по устранению неполадок.

Структура репозитория

apps/agent              Приватный Worker: API на Hono, TalorysAgent, инструменты, репозитории SQLite
apps/web                Приложение на React и Vite, Pages Function (functions/api/[[path]].ts)
packages/shared         Схемы Zod, типы, логика повторений и перехода часовых поясов, хеширование паролей
packages/create-talorys Установщик одной командой (npm-пакет)
tests/e2e               UI-тесты на Playwright
tests/smoke             Необязательный тест развёртывания на настоящем аккаунте
docs/                   Архитектура, развёртывание, разработка, безопасность, устранение неполадок

Лицензия — MIT, текст лежит в репозитории: LICENSE.

Источник: https://github.com/rociiu/talorys