Claude Code написал менеджер задач за 19 часов
Разработчик выпустил открытый менеджер задач Dela со сквозным шифрованием, весь код которого написал Claude Code. Проект ставится на свой сервер через Docker и работает в браузере, на Windows и Android.
Разработчик под ником на «Хабре» представил Dela — менеджер задач с клиентским шифрованием, который разворачивается на собственном сервере. Весь код проекта написал Claude Code: по словам автора, на это ушло около 19 часов. Dela работает в браузере, на Windows и Android, распространяется под лицензией AGPL-3.0, а серверная часть ставится через Docker.
Поводом стал Todoist: в бесплатной версии ограничено число проектов, а платить за подписку автор не хотел. Часть задач он вёл в Obsidian. Требования к своему решению он сформулировал так: содержимое не должен читать никто, кроме владельца, включая сам сервер; нужна синхронизация телефона и компьютера, офлайн-режим, быстрое добавление задачи одной фразой и виджет со списком.
Шифрование в Dela включено всегда и не отключается. Пароль на сервер не передаётся, из секрета входа сервер не может вывести ключ обёртки; при смене пароля перешифровывается только мастер-ключ, а задачи остаются как есть. Ключ восстановления — 32 случайных байта, показывается один раз при регистрации: без пароля и этого ключа расшифровать задачи нельзя, у сервера нет способа восстановить доступ.
Синхронизация построена на гибридных часах (HLC): каждая операция получает метку из физического времени в миллисекундах, счётчика внутри миллисекунды и id устройства. Побеждает значение с большей меткой, причём сравнение идёт по отдельным ячейкам (table, record, field) — поэтому правки разных полей на разных устройствах не конфликтуют. Сервер отклоняет операции, у которых время опережает его собственное больше чем на 60 секунд, а клиент запоминает поправку.
Сервер хранит только зашифрованные конверты и видит слот — хеш адреса ячейки с ключом, известным лишь участникам пространства. Метка лежит открыто, так как по ней сервер решает, какой конверт новее; слот и метка входят в AAD, поэтому подмена метки или перекладывание значения в другую ячейку ломает расшифровку. По WebSocket сервер лишь сигналит о новых данных в пространстве, а клиент забирает конверты страницами по курсору.
Для совместной работы у проекта отдельное пространство со своим ключом. В первой версии ключ участнику запечатывался анонимно через crypto_box_seal, но аудит показал, что так сервер мог подсунуть собственный ключ; после исправления ключ от другого отправителя Dela не принимает. При удалении участника владелец перешифровывает весь проект новым ключом — время смены растёт вместе с размером проекта.
Корректность сходимости проверяется детерминированной симуляцией: от 2 до 5 устройств с часами, сдвинутыми до 30 секунд в обе стороны, теряют сеть и подтверждения отправки, а в конце все устройства и сервер должны совпасть с эталоном. Тест прогоняет 60 сценариев по 2000 шагов, один на 50 000 шагов и 5 сценариев поверх зашифрованных конвертов. Быстрое добавление разбирает фразы на русском и английском прямо во время набора и подсвечивает распознанные части.
Материал подготовлен ИИ-редакцией «Сигнала» как пересказ публикации первоисточника. Фактическую точность и подробности проверяйте по оригиналу.