tududi — менеджер задач, проектов и заметок с открытым кодом. Его можно поставить на свой сервер одной командой Docker. Ниже — как его запустить, собирать задачи через Telegram-бота и подключить ИИ-агента, который читает и создаёт задачи через MCP.
Что такое tududi
tududi — проект Криса Велериса (Chris Veleris) под лицензией MIT. Данные устроены как иерархия: области → проекты → задачи → подзадачи. Заметки и теги можно добавлять на любом уровне. Раздел «Входящие» работает по принципу GTD: сначала мысль записывается, потом вы решаете, чем она станет.
По умолчанию всё хранится в одном файле SQLite. Для нескольких пользователей можно переключиться на PostgreSQL. Версия на своём сервере бесплатна. Есть и платная облачная версия на tududi.com; актуальные условия проверяйте там.
Основные возможности
| Возможность | Что даёт | Как включить |
| Повторяющиеся задачи | Ежедневные, еженедельные, ежемесячные, по дню недели, в последний день месяца; повтор от даты выполнения | Работает сразу |
| Иерархия | Области, проекты, задачи, подзадачи, заметки, теги | Работает сразу |
| Telegram | Сообщение боту становится элементом во «Входящих»; ежедневная сводка | Настройки → Telegram |
| MCP-сервер | 59 инструментов: задачи, проекты, входящие, цели, привычки, люди, поиск | FF_ENABLE_MCP=true |
| REST API | /api/v1, справка Swagger на /api-docs, личные API-ключи | Profile → API Keys |
| CalDAV | Синхронизация с tasks.org, Apple Reminders, Thunderbird, Nextcloud | FF_ENABLE_CALDAV=true и ENCRYPTION_KEY |
| Семья и небольшая команда | Роли admin, user, guest; группы; участники без email; задачи для внешних контактов | Работает сразу |
| Единый вход (SSO) | OIDC: Google, Okta, Keycloak, Authentik, Azure AD | Переменные OIDC_* |
| Встроенный ИИ-ассистент | Любой OpenAI-совместимый провайдер, в том числе локальные Ollama или LM Studio | LLM_API_KEY, LLM_BASE_URL |
Установка в Docker
Для быстрой проверки хватит одной команды. Номер версии лучше указать явно, а не ставить latest:
docker run -d --name tududi \
-e TUDUDI_USER_EMAIL=admin@example.com \
-e TUDUDI_USER_PASSWORD='<надёжный-пароль>' \
-e TUDUDI_SESSION_SECRET=$(openssl rand -hex 64) \
-v ~/tududi_db:/app/db \
-v ~/tududi_uploads:/app/uploads \
-v ~/tududi_backups:/app/backups \
-p 3002:3002 \
chrisvel/tududi:1.7.12Для постоянной работы удобнее Docker Compose: настройки хранятся в отдельном файле .env.
services:
tududi:
image: chrisvel/tududi:1.7.12
container_name: tududi
restart: unless-stopped
env_file: .env
volumes:
- ./tududi_db:/app/db # база SQLite и автокопии перед обновлением
- ./tududi_uploads:/app/uploads # вложения и аватары
- ./tududi_backups:/app/backups
ports:
- "127.0.0.1:3002:3002" # снаружи — только через обратный прокси с HTTPS# .env — права доступа: chmod 600 .env
TUDUDI_USER_EMAIL=admin@example.com
TUDUDI_USER_PASSWORD=<надёжный-пароль>
TUDUDI_SESSION_SECRET=<результат openssl rand -hex 64>
BASE_URL=https://tasks.example.com # адрес, по которому вы открываете tududi
TUDUDI_ALLOWED_ORIGINS=https://tasks.example.com
TUDUDI_TRUST_PROXY=true # обязательно за nginx, Caddy или Traefik
FF_ENABLE_MCP=true # включить MCP-сервер
FF_ENABLE_CALDAV=true # включить CalDAV
ENCRYPTION_KEY=<результат openssl rand -hex 32> # шифрует пароли внешних календарейTUDUDI_SESSION_SECRET, при каждом перезапуске создаётся новый ключ и всех пользователей выкидывает из системы. Значение ENCRYPTION_KEY после подключения внешних календарей не меняйте: сохранённые пароли перестанут расшифровываться..env остались DATABASE_URL или DB_DIALECT от другого приложения, tududi переключится на PostgreSQL.Обновление: выполните docker compose pull, затем docker compose up -d. При каждом запуске tududi делает копию базы db-backup-<timestamp>.sqlite3 и только потом применяет миграции. Если миграция не прошла, контейнер не запустится, а копия сохранит состояние до обновления.
Проверка: откройте http://localhost:3002 или свой домен и войдите с email и паролем из .env. Если вход проходит и открывается рабочий интерфейс, установка работает.
Подключение Telegram
- Напишите в Telegram боту @BotFather, отправьте
/newbot, задайте имя и username, который заканчивается наbot. Сохраните токен. - В tududi откройте меню профиля → Settings → вкладку Telegram, вставьте токен и нажмите Setup Telegram.
- Когда статус станет Connected, откройте бота, нажмите Start и отправьте любое сообщение.
- Сообщение появится во «Входящих» примерно через 30 секунд.
tududi сам опрашивает Telegram, поэтому серверу не нужен публичный адрес — достаточно исходящего доступа к api.telegram.org. Боту попадают только сообщения, отправленные после подключения. Ежедневная сводка задач включается там же, на вкладке Telegram.
# Проверка токена с сервера: в ответе должен прийти JSON с данными бота
curl https://api.telegram.org/bot<ТОКЕН>/getMeПодключение ИИ-агента через MCP
- Укажите
FF_ENABLE_MCP=trueи перезапустите tududi. В профиле появится вкладка MCP Integration с генератором конфигурации. - Откройте Profile → API Keys → Generate New Token. Токен показывается один раз — сразу его сохраните.
- Если tududi работает в Docker или на удалённом сервере, используйте HTTP-режим по адресу
/api/mcp. Локальный режим stdio через границу контейнера не работает.
Codex (~/.codex/config.toml):
[mcp_servers.tududi]
url = "https://tasks.example.com/api/mcp"
bearer_token_env_var = "TUDUDI_API_TOKEN" # токен берётся из переменной окружения
default_tools_approval_mode = "prompt" # спрашивать подтверждение перед вызовом инструментовCodex нет в списке клиентов в документации tududi. Эта конфигурация собрана по документации Codex для серверов Streamable HTTP; tududi пишет, что поддерживает этот транспорт. Проверьте её на своём сервере.
Claude Desktop (пример из документации tududi):
{
"mcpServers": {
"tududi": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://tasks.example.com/api/mcp",
"--header", "Authorization:Bearer ${TUDUDI_API_TOKEN}"],
"env": { "TUDUDI_API_TOKEN": "<ваш-токен>" }
}
}
}Проверка: этот запрос должен вернуть список инструментов (list_tasks, create_task и другие):
curl https://tasks.example.com/api/mcp/tools \
-H "Authorization: Bearer $TUDUDI_API_TOKEN"delete_task и delete_project. Держите токен только в настройках клиента, оставьте подтверждение вызовов включённым и отзовите токен в Profile → API Keys, если потеряли устройство.Полезные сценарии
Сбор задач с телефона
- Задача: не терять поручения, которые появляются в дороге и на встречах.
- Условие: подключён Telegram-бот.
- Действие: одна мысль — одно сообщение боту. Вечером откройте «Входящие» и превратите каждый элемент в задачу, проект или заметку.
- Результат: «Входящие» пустые, задачи лежат в проектах со сроками.
- Ограничение: бот не распознаёт даты и приоритеты в тексте. «Завтра» останется просто словом, срок вы ставите при разборе.
Утренний план от агента
- Задача: начать день с короткого списка вместо просмотра всех проектов.
- Условие: MCP подключён к Codex или Claude.
- Действие: отправьте агенту запрос ниже.
- Результат: агент вызывает
list_tasksс фильтрамиtodayиupcomingи показывает три приоритетные задачи. - Ограничение: агент видит только записанное. Без сроков и приоритетов план получится пустым или случайным.
Промпт:
Подключись к tududi через MCP. Покажи мои задачи на сегодня и ближайшие задачи из списка upcoming. Сгруппируй их по проектам и выдели три самые важные с учётом приоритета и срока.
Ничего не изменяй, не завершай и не удаляй без моего отдельного подтверждения.Общий список дел для семьи
- Задача: распределить домашние дела, не заводя всем email.
- Условие: у tududi есть адрес с HTTPS, доступный всем участникам.
- Действие: создайте область или проект «Дом» и группу участников. Ребёнка добавьте как участника без email и выдайте ему ссылку для входа. Задачу для мастера назначьте на контакт.
- Результат: дела всех участников видны на одной доске Everyone.
- Ограничение: права ролей (admin, user, guest) заранее сверьте с разделом People, Members and Roles в документации.
Ограничения и когда tududi не подходит
- Сервер — ваша зона ответственности: обновления, резервные копии, HTTPS. Если заниматься этим не хочется, берите облачную версию или готовый сервис вроде Todoist.
- Проект быстро меняется: с 3 по 7 октября 2026 года вышло десять релизов (v1.7.3–v1.7.12). Фиксируйте версию образа и читайте список изменений перед обновлением.
- Документация местами расходится: README говорит, что CalDAV включён по умолчанию, а справочник переменных — что
FF_ENABLE_CALDAVпо умолчаниюfalse. Задайте флаг явно. - Флаги
FF_ENABLE_CALENDARиFF_ENABLE_HABITSничего не делают: «Календарь» и «Привычки» каждый пользователь включает сам в Profile → Features & Add-ons. - Встроенный ИИ-ассистент отправляет содержимое запросов провайдеру. Чтобы данные не уходили с вашей машины, укажите в
LLM_BASE_URLлокальную Ollama или LM Studio.
Что делать, если…
| Ситуация | Причина | Решение |
После входа сразу выбрасывает, в логах ValidationError про X-Forwarded-For | Работа за прокси без нужной настройки | TUDUDI_TRUST_PROXY=true |
| Всех выкидывает после перезапуска | Нет постоянного TUDUDI_SESSION_SECRET | Задать значение в .env |
Ссылки в письмах ведут на localhost | Не задан BASE_URL | Указать публичный адрес |
| Сообщения боту не доходят до «Входящих» | Неверный токен, не нажат Start или нет доступа к Telegram | Проверить getMe, подождать 30 секунд |
MCP feature is not enabled | Выключен флаг | FF_ENABLE_MCP=true и перезапуск |
Invalid or expired API token | Токен истёк или отозван | Создать новый в Profile → API Keys |
| После обновления с v1.1.x пропадают новые данные | Старый путь тома /app/backend/db | Смонтировать /app/db |
Ссылки
- Репозиторий tududi на GitHub
- Документация и справочник переменных
- Интеграция с Telegram
- Интеграция с MCP
- Релизы и Docker Hub
Следующий шаг
MCP и безопасность — prompt injection, tool poisoning и как защититься
Если вы выбираете, где держать задачи семьи или команды и как дать к ним доступ ИИ-агенту без лишних рисков, это удобнее обсуждать на вашей конкретной схеме.
Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov


