tududi — менеджер задач, проектов и заметок с открытым кодом. Его можно поставить на свой сервер одной командой Docker. Ниже — как его запустить, собирать задачи через Telegram-бота и подключить ИИ-агента, который читает и создаёт задачи через MCP.

📌
Руководство собрано по README репозитория, официальной документации docs.tududi.com и релизу v1.7.12 от 7 октября 2026 года. Дата проверки — 11 октября 2026 года. На тестовом сервере эти шаги не запускались.

Что такое tududi

tududi — проект Криса Велериса (Chris Veleris) под лицензией MIT. Данные устроены как иерархия: области → проекты → задачи → подзадачи. Заметки и теги можно добавлять на любом уровне. Раздел «Входящие» работает по принципу GTD: сначала мысль записывается, потом вы решаете, чем она станет.

По умолчанию всё хранится в одном файле SQLite. Для нескольких пользователей можно переключиться на PostgreSQL. Версия на своём сервере бесплатна. Есть и платная облачная версия на tududi.com; актуальные условия проверяйте там.

💡
MCP (Model Context Protocol) — открытый протокол, через который ИИ-клиент вызывает инструменты внешней системы: список задач, создание задачи, поиск. Подробнее — в справочнике по MCP.

Основные возможности

ВозможностьЧто даётКак включить
Повторяющиеся задачиЕжедневные, еженедельные, ежемесячные, по дню недели, в последний день месяца; повтор от даты выполненияРаботает сразу
ИерархияОбласти, проекты, задачи, подзадачи, заметки, тегиРаботает сразу
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, NextcloudFF_ENABLE_CALDAV=true и ENCRYPTION_KEY
Семья и небольшая командаРоли admin, user, guest; группы; участники без email; задачи для внешних контактовРаботает сразу
Единый вход (SSO)OIDC: Google, Okta, Keycloak, Authentik, Azure ADПеременные OIDC_*
Встроенный ИИ-ассистентЛюбой OpenAI-совместимый провайдер, в том числе локальные Ollama или LM StudioLLM_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

  1. Напишите в Telegram боту @BotFather, отправьте /newbot, задайте имя и username, который заканчивается на bot. Сохраните токен.
  2. В tududi откройте меню профиля → Settings → вкладку Telegram, вставьте токен и нажмите Setup Telegram.
  3. Когда статус станет Connected, откройте бота, нажмите Start и отправьте любое сообщение.
  4. Сообщение появится во «Входящих» примерно через 30 секунд.

tududi сам опрашивает Telegram, поэтому серверу не нужен публичный адрес — достаточно исходящего доступа к api.telegram.org. Боту попадают только сообщения, отправленные после подключения. Ежедневная сводка задач включается там же, на вкладке Telegram.

# Проверка токена с сервера: в ответе должен прийти JSON с данными бота
curl https://api.telegram.org/bot<ТОКЕН>/getMe
⚠️
Токен даёт полный контроль над ботом, а найти бота по username может любой. В настройках профиля tududi есть список разрешённых пользователей — внесите туда свой username или ID.

Подключение ИИ-агента через MCP

  1. Укажите FF_ENABLE_MCP=true и перезапустите tududi. В профиле появится вкладка MCP Integration с генератором конфигурации.
  2. Откройте Profile → API Keys → Generate New Token. Токен показывается один раз — сразу его сохраните.
  3. Если 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"
🔴
Токен MCP даёт полный доступ на чтение и запись ко всем данным пользователя, включая 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

Ссылки

Следующий шаг

MCP и безопасность — prompt injection, tool poisoning и как защититься

Если вы выбираете, где держать задачи семьи или команды и как дать к ним доступ ИИ-агенту без лишних рисков, это удобнее обсуждать на вашей конкретной схеме.

Если захотите обсудить, как это применить у себя или в команде — пишите в Telegram @pimenov