Talorys — персональный AI-ассистент, который живёт в вашем аккаунте Cloudflare
📂 Исходный код на GitHubTalorys — открытый персональный AI-ассистент на TypeScript, который целиком разворачивается в аккаунте Cloudflare пользователя: React-интерфейс на Pages, приватный Worker на Hono и Durable Object с SQLite. Поддерживает чат с потоковыми ответами, память с семантическим поиском, историю фактов, задачи, заметки, проекты, автоматизации и push-уведомления. Лицензия MIT.
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
Установщик делает восемь шагов:
- Проверяет Node.js (22+) и использует свой встроенный Wrangler CLI. Глобально установленные
wranglerилиcfподхватываются, но не обязательны. - Проверяет вход в Cloudflare или открывает страницу авторизации в браузере.
- Даёт выбрать аккаунт, если их несколько, и имя агента.
- Спрашивает пароль владельца. Ввод скрытый, стойкость проверяется. Пароль хешируется локально через PBKDF2-SHA256 и хранится только как секрет Cloudflare.
- Генерирует 256-битный секрет сессии, пару ключей Web Push и уникальные имена ресурсов (
talorys-<id>-agent,talorys-<id>-web). - Разворачивает приватный Worker вместе с его Durable Object на SQLite, сохраняет секреты, создаёт и публикует проект Pages со связкой service binding.
- Проверяет живое развёртывание: фронтенд, endpoint авторизации, отказ для неавторизованных, состояние хранилища. Инференс AI при этом не запускается.
- Печатает настоящий адрес
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