Taskless

Taskless

Проекты, задачи, цели, звонки, AI-агент, MCP — в одном приложении.

taskless.ru / today
Сегодня · 12 мая
+3 за день
Активное
Запланировано
Календарь
Доделать миграцию milestones M1
In progress
IS
14:00
Ревью PR #312 — release flow
Review
АК
15:30
Звонок: дизайн-обзор лендинга
Meeting
МШ
16:00
Обновить таблицу через SCSS modules
Done
IS
11:42
Drag-drop reorder среди подпроектов
Todo
ДВ
завтра
AI
Агент предлагает Декомпозировать «Лендинг» на 4 подзадачи

Как идёт работа

Каждый блок описывает что есть в продукте на этом шаге. Все шаги связаны — задача знает про звонок, из которого появилась; PR знает про задачу, к которой принадлежит; релиз знает про задачи, которые в нём поехали.

01

Звонки

LiveKit-комнаты прямо внутри. Постоянные для команды, ad-hoc по ссылке для гостей. На звонке работает realtime-экстрактор: слушает разговор и предлагает задачи и action items карточками, которые принимаются одной кнопкой. Egress пишет запись на диск, post-call extractor строит summary с тайм-кодами.

Учитываются отпуск, больничный, командировка и фокус-блоки: если зовёшь на встречу человека с активным absence — появится предупреждение.

LiveKit realtime AI Egress absences
02

Задачи

Список, kanban с drag-pan, timeline с now-line. Подзадачи в drawer и fullpage с одинаковым набором действий, drag-drop reorder среди соседей одного parent. Комментарий ведёт себя как чат: @-mentions, rich-text через TipTap, drag-drop загрузка изображений, code blocks, чек-листы.

Задачи группируются в цели (milestones) с дедлайном и прогрессом N/M. Цели крепятся к проекту, видны в общей workspace-ленте /milestones с фильтрами upcoming / passed / cancelled. У каждой — отдельная страница с progress-bar и списком задач.

Multi-select фильтры по статусам, приоритетам и исполнителям одновременно. SSE-канал держит состояние синхронным во всех открытых вкладках. Push-уведомления с группировкой по сущности, deep-link открывает drawer на нужном комментарии.

subtasks milestones SSE live TipTap push
03

Код

В настройках проекта — кнопка «Новый репозиторий»: создаёт репу на GitHub через App-installation и привязывает её к проекту автоматически. Для существующих реп — AI-suggest по Dockerfile / build spec (image, port, env, healthcheck) для подготовки к деплою.

В карточке задачи — кнопка создания ветки. Имя берётся из slug'а задачи. PR, привязанный к задаче по имени ветки, отображается в карточке с состоянием (open / merged / closed), статусом code-review (approved / changes_requested / commented) и комбинированным CI-статусом.

create-repo branch · PR review · CI AI build-spec
04

Деплой

Preview environment на каждый PR — отдельное окружение с собственными env-переменными. Значения хранятся в БД зашифрованными (AES-256-GCM); UI показывает revealable-rows для редактирования.

YAML-парсер для GitHub Actions: workflows из репы видны прямо в taskless, deploy запускается кнопкой. В карточке релиза — список задач, которые в этот релиз попадают (по веткам / PR-ам, привязанным к задачам). После деплоя задачи автоматически переходят в following-статус.

preview env AES-256-GCM GH Actions release ↔ tasks
Подробнее
01

AI-агент

В приложении живёт чат с AI-агентом, у которого есть набор tool'ов для работы с сущностями taskless. Параллельно умеет искать задачи, встречи, проекты и absences — типичный запрос «что не успели за неделю» вызывает findTasks + findMeetings + findAbsences одновременно и собирает overdue вместе с «обсуждалось на созвоне, задачи нет».

Ответы агента — не только текст: он умеет возвращать proposal-карточки (создать задачу, обновить, перенести срок, назначить), которые принимаются одной кнопкой. Тот же набор tool'ов выставлен наружу как MCP-сервер — 15 тулов по одному HTTP-эндпоинту, OAuth 2.1, читается любым AI-клиентом (Claude Code, Cursor, Continue).

/api/mcp · OAuth 2.1 · 15 tools
~/agent · ретроспектива недели
ИС
Илья 10:24
Как прошла неделя? Что не успели?
AI
Агент 10:24
Запустил findTasks + findMeetings + findAbsences параллельно. Вот что нашёл:
overdue Миграция milestones M1
● Илья срок: 9 мая сдвиг: +3 дня
forgotten «Подзадачи в drawer» — обсуждалось 9 мая, задачи нет
● из созвона «Sprint planning»
AI
Агент 10:24
Хотите расставить overdue по приоритетам или предложить новый план?
→ Расставить приоритеты Новый план Назначить Анне
call · sprint planning · 4 участника · 23:42
ИС
Илья
АК
Анна
МШ
Михаил
ДВ
Денис
Подробнее
02

Звонки

Звонки построены на LiveKit и работают прямо внутри приложения. Бывают двух видов: постоянные комнаты (привязаны к проекту, заходят и выходят свободно) и ad-hoc по ссылке, которая открывается без регистрации — гость попадает в greenroom настроить камеру и звук.

На звонке работают два пайплайна AI-экстрактора. Realtime — пишет watermark и каждые несколько секунд отправляет дельту в LLM, по результатам появляются proposal-карточки прямо в правом сайдбаре: «создать задачу», «зафиксировать решение», «назначить исполнителя». Post-call — после окончания собирает полный summary с тайм-кодами, привязанными к timeline-событиям из встречи.

LiveKit Egress пишет видеозапись на диск (плеер с тайм-кодами уже есть, S3-storage в roadmap). Все proposal'ы и timeline-события остаются после звонка — можно вернуться и принять то, что не успели.

LiveKit · Egress + Redis · 7 типов proposal'ов
Подробнее
03

Задачи и комментарии

Задачи открываются в drawer (рядом со списком) или в fullpage — оба вида показывают одинаковый набор действий. Подзадачи имеют drag-drop reorder среди соседей одного parent. Multi-select фильтры работают по нескольким измерениям одновременно: статус × приоритет × исполнители, под результатами — ActiveFiltersBar с возможностью сбросить одним кликом.

Комментарий — это полноценный rich-text-блок на TipTap: @-mentions с автокомплитом, изображения через drag-drop прямо в текст, code blocks с подсветкой через lowlight, чек-листы. После публикации уведомление приходит через web push с группировкой по сущности, deep-link открывает drawer ровно на нужном комментарии.

Состояние во всех открытых вкладках держится синхронным через SSE-канал на workspace: новый комментарий, изменение статуса, назначение — всё доезжает без перезагрузки.

SSE · WebPush · TipTap rich-text
task · cmole9edo · drawer
TASK · cmole9edo
Редизайн экрана звонка целиком
СтатусDone
ИсполнительИС Илья
ПроектCalls v2
Срок2026-05-02
Realtime AI-proposal pipeline + CallTimeline UI + дизайн-перенос (Header, Tile, PIP, Chat). Все 7 типов proposal'ов в проде.
Подзадачи · 15/15
Realtime extractor + watermark
Done
CallTimeline UI: proposal-карточки
Done
Header redesign + spotlight
Done
Комментарии 7
АК
Анна 2 мая · 11:42
@илья — proposal-чипы на иконке amber выглядят чуть тусклее в светлой теме. Можно немного поднять контраст?
ИС
Илья 2 мая · 11:48
Поднял до 0.82L, оставил тон. Вот:
АК
Анна 2 мая · 11:51
Огонь. Принимаем.
Написать комментарий… @   ⌘   ⌥

Ещё несколько вещей подробнее

Не killer features, но именно они часто становятся причиной «удобно».

Поднять preview прямо на задаче

В карточке задачи есть секция Previews — нажимаешь «+ Поднять», и из ветки задачи запускается отдельный preview-стенд. UI показывает прогресс по фазам: В очереди → Сборка (отдельный кружок на каждый build-step монорепо) → Pull → Sidecars → Старт → Прогрев → Готово. По окончании появляется URL — можно потыкать руками или показать заказчику.

Каждый стенд — отдельный docker-контейнер с --rm, то есть при стопе он сам удаляется. Стоп — кнопкой в UI. Параллельно работает cleanup-cron: ищет зомби-контейнеры (БД-row есть, контейнер живёт сам по себе, или наоборот) и подчищает.

/api/previews docker --rm monorepo-aware cleanup-cron

AI: лимиты и статистика

Каждый вызов LLM (Claude) проходит через checkAiQuota и записывается в таблицу AiUsage с моделью, токенами и стоимостью. На workspace есть две квоты: общий лимит на весь workspace и per-member лимит — обе расходуются параллельно. Период — месячный по умолчанию.

В UI — AiQuotaBanner, показывает сколько осталось и когда сброс. Эндпоинт /api/ai/state отдаёт состояние; есть aggregate и groupBy-by-model для статистики использования. Когда лимит исчерпан — LLM-вызов отклоняется до сброса периода, остальной taskless продолжает работать как обычно.

AiUsage workspace + member quota monthly period per-model stats

История изменений workspace

В админ-настройках workspace есть лента audit-событий — кто и когда менял настройки, инвайтил людей, переименовывал, удалял интеграции. Эндпоинт GET /workspaces/:id/audit, доступ только админам workspace.

Сейчас в зачатке — пишутся базовые события (создание/изменение/удаление настроек), формат уже устаканен и расширяется по мере добавления новых событий. Никаких per-task / per-comment audit'ов сейчас нет — только workspace-level.

/workspaces/:id/audit admin-only в зачатке

Страница уведомлений

Отдельная страница /notifications — лента всех уведомлений пользователя, не только последние. Группировка по дням (Сегодня / Вчера / конкретные даты), пагинация по 30. Поверх — фильтр по workspace, чтобы видеть только нужный.

Уведомления делятся на 4 типа bubble: task (ListChecks-иконка), meeting (Phone), comment (MessageSquare), system (FileText). Для задач/комментариев из title парсится автор и рендерится отдельным аватаром — actor-уведомления уходят влево, system'ные (recording_finished, transcription_finished и т.п.) — вправо.

SSE-stream подписывается на новые уведомления в реальном времени — лента обновляется без перезагрузки. Каждое уведомление кликабельно: deep-link через navigateToHref открывает нужную задачу/встречу/комментарий.

/notifications SSE-stream group by day ws-filter deep-link

Остальное

Мелкие фичи, которые есть в коде и работают. Каждая — реальный модуль из репозитория.

Три view-режима

Список, kanban с drag-pan, timeline с now-line. Фильтры и сортировка переходят между видами без потери состояния.

/tasks · /kanban · /timeline

MCP-сервер

15 тулов, OAuth 2.1. Управляй taskless из Claude Code, Cursor или Continue. Создавай задачи прямо из чата с агентом.

/api/mcp · 15 tools

Запись звонков

LiveKit Egress пишет в Redis-volume. Плеер с тайм-кодами привязан к timeline-событиям из встречи.

livekit · egress · S3-ready

Создать репу одной кнопкой

Из настроек проекта: новый GitHub-репозиторий через App-installation, привязан к проекту автоматически.

App-installation · auto-link

Подзадачи

Drawer и fullpage с одинаковым набором действий. Drag-drop reorder среди соседей одного parent.

drawer + fullpage + timeline

Цели (milestones)

Группы задач с дедлайном и прогрессом N/M. Workspace-wide лента /milestones с фильтрами upcoming / passed / cancelled, drag-reorder в MilestoneRail.

progress · deadline · MCP

Multi-select фильтры

Статусы, приоритеты, исполнители — все одновременно. ActiveFiltersBar показывает что выбрано, одной кнопкой очистка.

статус × приоритет × ×N

GitHub OAuth per-user

Каждый пользователь авторизуется через свой GitHub. Запросы к API идут через его токены — атрибуция корректна.

User.githubLogin · ghUserRequest

Rich-text комментарии

TipTap-редактор: @-mentions, изображения, code blocks, чек-листы. Drag-drop загрузка прямо в комментарий.

TipTap · WebRTC drop

Push-нотификации

Web Push с группировкой по сущности. Deep-link открывает drawer на нужном комментарии. Persistent история.

VAPID · group-by-entity

Schedule + agenda

Календарь с now-line. Бэклог и запланированное симметричны. Митинг автоматически добавляет создателя.

now-line · backlog↔scheduled

Preview environments

На каждый PR — изолированное окружение. Env-переменные хранятся зашифрованными (AES-256-GCM). YAML-парсер GH Actions, deploy из taskless.

AES-256-GCM · per-PR · YAML

Agent control навигации

«Покажи задачи Анны на этой неделе» — агент сам строит URL и перенаправляет. Per-page meta для каждого роута.

NL → URL · per-page meta

Стек и архитектура

Монорепо на pnpm + turbo, три пакета: API (Node/Express, ESM, ts → dist), frontend (React 19 + Vite SPA) и shared (zod-схемы, общие типы). Данные в Postgres через Prisma. Live-обновления через SSE-канал на workspace, push через web-push (VAPID).

Звонки — LiveKit. Realtime AI-экстрактор и post-call summary — два отдельных пайплайна, оба ходят в Claude. Запись через LiveKit Egress с Redis-volume. MCP-сервер — отдельный HTTP-эндпоинт с OAuth 2.1, выставляет те же 15 тулов, что и внутренний агент.

Self-hosted: один docker compose up поднимает весь стек. Провайдеры моделей и звонков подключаются через ENV, не зашиты в код.

node 22 postgres prisma react 19 vite livekit redis tiptap claude opus mcp 2.1
300+
релизов за первый месяц в проде
15
MCP-тулов для агентного управления
3
view-режима: list · kanban · timeline
7
типов realtime proposal'ов на звонках
SSE
live-обновления на всех открытых вкладках
docker compose — весь стек на одной машине