# Задачи (/ru/docs/tasks)

Задача — одно дело, которое ждёт вас: вопрос без ответа, просьба, данное вами обещание. Эта
страница помогает не терять такие дела в чатах. Прочитав её, вы сможете попросить агента показать
план на сегодня, превратить сообщение в задачу, привязать к ней все относящиеся сообщения и закрыть
её, когда дело сделано. Задачи хранятся на вашем компьютере, в локальном хранилище `tg`, `max` и
`memo`. Ничто на этой странице не отправляет сообщений.

Категории, теги на задачах, ключи по типам, бронь задачи и проверка на дубликаты уже есть в общем
ядре инструментов (cli-core). Они есть в `tg`, `max` и `memo`.
Технические подробности — на странице [Как устроены задачи](/llms.mdx/docs/ru/tasks-architecture/content.md).

## Откуда берутся задачи [#откуда-берутся-задачи]

* **Правила находят их в сообщениях.** Вопрос, на который никто не ответил, становится задачей типа
  `question`. Сообщение с упоминанием вас — задачей `mention`; упоминание должен отметить сам
  мессенджер, просто написанное имя не учитывается. Правило автоответа с действием `task` открывает
  задачу `request` на каждое подходящее сообщение ([Telegram](/llms.mdx/docs/ru/tg/replies/content.md), [MAX](/llms.mdx/docs/ru/max/replies/content.md)).
  Правила работают, когда агент синхронизирует или разбирает ваши чаты, и пока инструмент работает в
  фоне (`messages sync`, `review` и `serve`). Правило выбирает категорию задачи по словам сообщения.
* **Их добавляет агент или вы.** Обещание («пришлю договор в понедельник») или просьбу, которую не
  поймало правило, добавляют вручную, с типом `promise` или `request` и с категорией.
* **Задачи проекта** живут в проекте и имеют ключ: ключ проекта и номер, например `HRB-12`. Их типы —
  `chore`, `bug` и `feature`. Их создают через `memo`; см. [Задачи и напоминания в Memo](/llms.mdx/docs/ru/memo/tasks/content.md).

Правило закрывает задачу `question` или `mention`, когда вы отвечаете в чате. Если у сообщения уже
есть задача, повторное добавление вернёт её же.

## Попросите агента [#попросите-агента]

> ```text prompt
> Используй tg CLI. Синхронизируй мои чаты и покажи план задач: что просрочено, что нужно сделать сегодня и в каких чатах ждут моего ответа. Для каждой задачи покажи сообщения, из которых она появилась. Ничего не отправляй.
> ```

Вы получите короткий список: открытые задачи со сроками и чаты, где последним написал собеседник.
Каждая задача указывает на свои сообщения, поэтому видно, откуда она взялась. Для MAX напишите
«max CLI».

> ```text prompt
> Используй tg CLI. В чате с Иваном Примером я обещал прислать подписанный договор до пятницы. Добавь задачу-обещание для этого сообщения со сроком в пятницу и понятным названием. Привяжи к ней более ранние сообщения, где мы договорились о цене.
> ```

> ```text prompt
> Используй tg CLI. Пройди по списку задач, которые могут быть дубликатами. Объедини пары, которые явно об одном деле, отклони явно разные, а остальные отметь как неясные. Потом покажи мне только неясные пары.
> ```

## Одна задача — много сообщений [#одна-задача--много-сообщений]

Задача начинается с одного сообщения — её источника. Более поздние сообщения о том же деле
привязываются к ней, и задача хранит всю историю. У привязки есть вид: `related-to` (по умолчанию),
`evidence` (сообщение показывает, что задача настоящая) или `created-from`. Задача может указывать
и на чат, человека, документ, заметку или веб-адрес.

В одном чате может быть много задач. Три разных вопроса от Анны Пример в одной группе — три задачи.
Задача — об одном деле, а не об одном чате или одном человеке.

## Команды [#команды]

<details>
  <summary>
    Необязательно: команды для терминала
  </summary>

  Что нужно посмотреть сегодня:

  ```sh
  tg personal tasks agenda
  max personal tasks agenda
  ```

  Открытые задачи одного чата:

  ```sh
  tg personal tasks list 'chat:"Renovation" state:open'
  ```

  Добавить задачу для сообщения и спланировать её:

  ```sh
  tg personal tasks add msg:telegram/1/77/42 --type promise --category documents --title "Send Bob Sample the signed contract" --due 3d
  tg personal tasks plan <task> --description "Done when Bob confirms he has it." --remind-time 2d
  ```

  Привязать ещё сообщения и посмотреть всё в одном месте:

  ```sh
  tg personal tasks link <task> msg:telegram/1/77/45 msg:telegram/1/77/51 --kind evidence
  tg personal tasks show <task>
  ```

  Закрыть:

  ```sh
  tg personal tasks close <task> --as done --reason "contract sent"
  tg personal tasks close <task> --as dismissed --reason no-reply-needed
  ```

  `<task>` — ключ задачи, как его печатает `tasks agenda`, или её полный id. В `max` те же команды; некоторые новые имена ниже (`tasks related`,
  `duplicates defer`, `--into`, `--lease` и поля запроса в плане) в `max` пока называются по-старому.
</details>

* **agenda** показывает просроченные задачи, задачи со скорым сроком или пора проверить, затем чаты,
  где ответа ждут от вас, и чаты, где ждёте вы. Предупреждает, если хранилище давно ничего не сохраняло.
* **add** требует тип и категорию (`--category`) и
  отказывает, если уже есть похожая задача; см. [Без дубликатов](#без-дубликатов).
* **plan** задаёт название, описание, срок и следующую проверку. Следующая проверка — когда агенту
  стоит снова посмотреть на задачу; вам она не напоминает.
* **link** привязывает к задаче сообщения, чаты, людей, документы, заметки или адреса.
* **show** показывает одну задачу с планом и всем, что к ней привязано.
* **close** закрывает задачу как `done` или `dismissed`. Закрытая задача остаётся закрытой. Открыть
  её снова может только `tasks unmerge`, и только если задачу закрыло объединение.

## Отношения между задачами [#отношения-между-задачами]

Одна задача проекта может ждать другую (`blocked-by`), продолжать её (`follow-up-of`) или просто быть
с ней связана по смыслу (`related-to`). Такие отношения устанавливаете только вы; агент может их
предложить. Они работают между задачами проектов в `memo`: см.
[Что делать в первую очередь](/llms.mdx/docs/ru/memo/tasks/content.md#%D1%87%D1%82%D0%BE-%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C-%D0%B2-%D0%BF%D0%B5%D1%80%D0%B2%D1%83%D1%8E-%D0%BE%D1%87%D0%B5%D1%80%D0%B5%D0%B4%D1%8C).

Есть ещё два вида. `duplicate-of` говорит, что задача — то же дело, что и другая. Его записывает
объединение, и он связывает задачи из сообщений одного аккаунта. `discovered-from` говорит, что
задача нашлась во время работы над другой.

## Как агент работает с задачами после синхронизации [#как-агент-работает-с-задачами-после-синхронизации]

1. Агент загружает новые сообщения (`messages sync`). Синхронизация запускает правила задач на
   сохранённом, с того места, где остановился прошлый запуск. Первый запуск читает только чаты с
   сообщениями за последние 14 дней, поэтому старые вопросы не становятся задачами. В ответе сказано,
   сколько задач открыто, сколько закрыто и сколько пар ушло в список на проверку.
2. Читает план и сверяет каждую новую задачу с её сообщениями.
3. Задаёт название, срок и правильную категорию, привязывает сообщения, которые относятся к одному
   делу, и закрывает сделанное.
4. Проходит по списку возможных дубликатов (см. ниже).
5. Показывает вам, что изменил, и спрашивает, прежде чем что-либо уйдёт с компьютера.

## Без дубликатов [#без-дубликатов]

Одна и та же просьба часто приходит несколькими сообщениями: «пришлёшь счёт?», потом «счёт на 15 000,
пожалуйста», потом напоминание через два дня. Это должна быть одна задача. Инструмент проверяет
каждую новую задачу до того, как создать её:

* **Уверен, что это та же задача:** так бывает, только когда у того же сообщения уже есть задача
  этого типа. Правило также не открывает задачу для сообщения, привязанного к задаче как `evidence`.
  Новая задача не создаётся, а в ответе показана та задача.
* **Не уверен:** инструмент не гадает. Если задачу добавляет агент, `tasks add` отказывает и
  показывает до пяти похожих задач с причинами («тот же человек, та же сумма»). Агент повторяет
  команду с `--into <task>`, чтобы привязать сообщение к одной из них, или с `--new`, чтобы создать
  новую задачу. Если задачу нашло правило, задача создаётся, а похожие пары попадают в список на
  проверку.
* **Явно другая:** создаётся новая задача.

Проверка сравнивает слова (в том числе другие формы слова и опечатки), человека, сумму денег, срок,
категорию, ответы и время. Один только общий чат никогда не делает две задачи «одной».
**Инструмент никогда не объединяет задачи только по оценке.** Некоторые похожие задачи, например
подарок маме и подарок папе на ту же сумму, отличаются смыслом одного слова, поэтому решает агент или
вы.

**Кто решает.** Список на проверку разбирает агент, который просматривает ваши чаты после
синхронизации. Он объединяет пары об одном деле и отклоняет пары о разных. Если он не может решить,
он отмечает пару как неясную. Вы видите только неясные пары: `tasks duplicates decision:unsure`.

Объединение привязывает все сообщения дубликата к оставшейся задаче и закрывает дубликат как
`dismissed` с отношением `duplicate-of`. **Объединение можно отменить**, и ничего не удаляется.
Отклонённая пара больше не возвращается.

```text
tasks related REQ-23
tasks duplicates
tasks merge REQ-23 --into REQ-22
tasks duplicates reject REQ-23 REQ-22
tasks duplicates defer REQ-23 REQ-22
tasks duplicates decision:unsure
tasks unmerge REQ-23
```

`tasks related` показывает задачи, которые могут быть тем же делом, что и данная, — лучшие первыми,
каждую с полосой (`likely`, `maybe` или `different`) и причинами. Команда ничего не меняет.

## Категории, теги и ключи [#категории-теги-и-ключи]

* **Категория** говорит, о чём задача. Список по умолчанию: `money`, `documents`, `meeting`,
  `delivery`, `access`, `personal` и `other`. Список один на всё хранилище и общий для `tg`, `max` и
  `memo`, поэтому «финансы» и «платежи» не появятся рядом. `tasks add` требует категорию и отказывает,
  если такого имени нет в списке. Правило выбирает категорию по словам сообщения или `other`, если ни
  одно слово не подошло; агент исправляет её через `tasks plan --category`.
* **Список можно менять.** У каждой категории есть смысл и слова, по которым её выбирает правило.
  Слово может указать свой язык, например `es:vuelo`. Можно добавить или изменить категорию, удалить
  её или вернуть список по умолчанию. `other` удалить нельзя. Задачи сохраняют свою категорию.
* **Теги** вроде `urgent` или `waiting-for-them` работают и на задачах: `tags add urgent --task REQ-22`.
  Теги нужны только для фильтров; проверка на дубликаты их не учитывает.
* **Ключи по типам:** задача из сообщения получает короткий ключ, например `Q-15` для вопроса,
  `REQ-22` для просьбы, `M-7` для упоминания или `PR-4` для обещания. Ключ никогда не меняется, его
  можно цитировать в чате или заметке. Старые задачи сохраняют свой ключ, например
  `IN1A2B3C4D-17`; работают оба вида ключей и полный id.

```text
tasks add msg:telegram/1/77/42 --type request --category money
tasks categories
tasks agenda category:money tag:urgent
tasks list category:money
config set task_categories.travel "trips and tickets | flight, hotel, es:vuelo"
config unset task_categories.travel
config unset task_categories
config show
```

Команды `config` меняют хранилище, а не один профиль: список одинаков во всех профилях.

## Бронь задачи [#бронь-задачи]

Когда одновременно работают два агента или агент и вы, один из них сначала бронирует задачу. Бронь
заканчивается сама через 30 минут, поэтому остановившийся агент не держит задачу вечно. Повторная
бронь продлевает вашу. Закрытие задачи снимает бронь. План задач показывает, кто держит каждую
задачу, и скрывает задачи, которые забронировал кто-то другой; `tasks agenda claimed:any` показывает и
их. Вы, владелец, можете снять любую бронь.

Держатель брони — одна сессия агента. Инструмент берёт первое, что задано:

1. `--holder <name>`
2. переменная окружения `WIRECAT_HOLDER`
3. `claude-code:<session id>` из переменной `CLAUDE_CODE_SESSION_ID`, которую задаёт Claude Code
4. имя агента из переменной `AI_AGENT`
5. `owner`

Агент без переменной сессии, например веб-агент, передаёт id своего чата через `--holder`.

```text
tasks claim REQ-22 --lease 30m
tasks release REQ-22
tasks agenda claimed:any
```

У агентов, которые работают через MCP-сервер, есть те же инструменты, например `tasks_claim`,
`tasks_release`, `tasks_categories`, `tasks_related`, `tasks_duplicates`, `tasks_merge` и `tasks_unmerge`.

## Ещё не сделано [#ещё-не-сделано]

* **Проверка, когда сообщение привязывают к существующей задаче.** Проверка читает только название,
  описание и исходное сообщение задачи. Сначала она должна научиться читать и привязанные сообщения.
* **Настройка весов по вашим ответам.** Каждое объединение, отказ, `--into` и `--new` сохраняются,
  но пока ничто не меняет по ним веса.

## Связанные страницы [#связанные-страницы]

* [Как устроены задачи](/llms.mdx/docs/ru/tasks-architecture/content.md): данные, ключи, бронь и проверка на дубликаты
  по шагам.
* [Задачи и напоминания в Memo](/llms.mdx/docs/ru/memo/tasks/content.md): задачи проектов, исполнители и напоминания.
* [Поиск](/llms.mdx/docs/ru/search/content.md): найти сообщения, к которым относится задача.
