---
name: yamem
description: Навык файловой памяти проекта. Описывает структуру памяти, правила чтения, обновления, backlog, diary, topics, tasks и shared-базы. Активен всегда.
---

> [!IMPORTANT]
> Раздел **«При старте»** выполняется один раз при первом сообщении в чате.
> Раздел **«Перед ответом»** выполняется перед каждым ответом, если в ходе работы появился полезный результат для памяти.

# Память проекта (yamem)

## Конфигурация

Конфиг: `.agents/memory/yamem.config.yaml`.

Если файла нет, используй значения по умолчанию:

- `local.path=local`
- `local.type=directory`
- `local.pull_on_start=true`
- `local.commit_on_update=false`
- `optimization.auto=true`
- `optimization.interval_days=7`
- `notify_no_shared=true`
- `diary_read_days=7`

Если не указано иное, все пути ниже относительны к `.agents/memory/`.

## Структура памяти

```text
.agents/memory/
├── yamem.config.yaml
├── <local.path>/
│   ├── MEMORY.md
│   ├── diary/
│   │   └── YYYY-MM-DD.md
│   ├── backlog.md
│   ├── archive.md
│   ├── topics/
│   │   └── <topic>.md
│   └── tasks/
│       └── YYYY-MM-DD-topic/
│           ├── plan.md
│           ├── report.md
│           └── ...
└── shared/
    └── <base>/
        ├── README.md
        └── topics/
```

## Канонические шаблоны

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

### `MEMORY.md`

Рекомендуемая структура:

```markdown
# Memory Index

Последняя оптимизация: YYYY-MM-DD

## Проект

- Краткое описание проекта
- Основные каталоги и точки входа

## Инфраструктура

- Среды, хосты, сервисы без секретов
- Где искать доступы и переменные

## Ограничения

- Что нельзя ломать
- Важные технические и организационные ограничения

## Факты

- Устойчивые факты о проекте

## Грабли и уроки

- ⚠️ Проблема и проверенное решение

## Ссылки

- Относительные ссылки на важные topics, tasks и документы
```

Правила:

- в `MEMORY.md` храни только устойчивые факты, ограничения и уроки;
- временные заметки и сырые наблюдения туда не пиши;
- записи должны быть короткими, проверяемыми и годными для повторного чтения через недели.

### `backlog.md`

Рекомендуемая структура:

```markdown
# Бэклог

## Активные

- [ ] Краткое название задачи
      created: YYYY-MM-DD
      updated: YYYY-MM-DD
      notes: краткий контекст

- [/] Задача в работе
  created: YYYY-MM-DD
  updated: YYYY-MM-DD
  notes: что уже делается

## Ожидает

- [ ] Задача, зависящая от внешнего действия
      created: YYYY-MM-DD
      updated: YYYY-MM-DD
      notes: чего именно ждём

## Идеи

- [ ] Кандидат в работу без обязательства
      created: YYYY-MM-DD
      updated: YYYY-MM-DD
      notes: почему это может пригодиться

Завершённые задачи: см. `archive.md`
```

Правила:

- одна задача должна встречаться в backlog только один раз;
- `created` ставь при создании записи;
- `updated` обновляй при любом заметном движении по задаче;
- используй `[ ]` для новых задач и ожидания, `[/]` для задач в работе;
- если задача завершена, перенеси её в `archive.md`, а не оставляй дубликат в backlog;
- если задача потеряла актуальность, лучше явно отметить это в `notes`, чем молча удалять.

### `archive.md`

Рекомендуемая структура:

```markdown
# Архив

## YYYY-MM

- [x] Завершённая задача
      created: YYYY-MM-DD
      completed: YYYY-MM-DD
      result: краткий итог

- [x] Ещё одна завершённая задача
      created: YYYY-MM-DD
      completed: YYYY-MM-DD
      result: что получилось или где смотреть артефакт
```

Правила:

- архив хранит только завершённые задачи;
- для завершённой задачи фиксируй хотя бы `completed` и краткий `result`;
- если по задаче есть артефакт, укажи относительную ссылку в `result`;
- не превращай архив в дневник: только результат, без длинного повествования.

## Правила

### При старте

1. Прочитай `.agents/memory/yamem.config.yaml`, если он существует.
2. Определи:
   - локальный путь памяти: `<local.path>`;
   - тип локальной памяти: `directory` или `submodule`;
   - список shared-баз из конфига;
   - параметры синхронизации и оптимизации.
3. Если локальная память отсутствует, создай минимальную структуру:
   - `MEMORY.md` по каноническому шаблону
   - `diary/`
   - `backlog.md` по каноническому шаблону
   - `archive.md` по каноническому шаблону
   - `topics/`
   - `tasks/`
4. Если `local.type=submodule` и `local.pull_on_start=true`, попытайся выполнить синхронизацию локальной памяти.
   - Если синхронизация успешна, зафиксируй статус: `local memory synced`
   - Если неуспешна, зафиксируй статус: `local memory NOT synced (<причина>)`
   - Ошибка синхронизации не должна блокировать основную работу
5. Для каждой shared-базы из конфига:
   - если `type=submodule` и `pull_on_start=true`, попытайся синхронизировать её;
   - если синхронизация не удалась, кратко зафиксируй причину;
   - если база задана как обычный каталог, используй её по правилам ниже
6. Если shared-базы не настроены и `notify_no_shared=true`, сообщи об этом один раз в первом ответе.
7. Прочитай:
   - `<local.path>/MEMORY.md`
   - `<local.path>/backlog.md`
   - файлы дневника за последние `diary_read_days` дней, если они существуют
8. Получи список имён файлов в `<local.path>/topics/` и `<local.path>/tasks/`. Содержимое не читай — нужны только имена, чтобы знать, какие темы и активные задачи существуют, и иметь к ним быстрый доступ позже.
9. Если `optimization.auto=true` и в `MEMORY.md` есть отметка `Последняя оптимизация: YYYY-MM-DD`, которая старше `optimization.interval_days`, выполни только фазу анализа и кратко предложи оптимизацию. Не меняй файлы без подтверждения пользователя.
10. В первом ответе кратко укажи preflight-статус:
   - синхронизация локальной памяти;
   - синхронизация shared-баз;
   - есть ли срочные или незавершённые задачи в backlog.

### При работе над задачей

Для содержательной задачи, которая требует нескольких шагов, артефактов или накопления опыта:

1. При необходимости создай папку задачи:
   - `<local.path>/tasks/YYYY-MM-DD-topic/`
2. **Обязательно перед содержательным действием** проверь накопленное знание по теме запроса:
   - сопоставь ключевые слова запроса с именами файлов из `topics/` и `tasks/`, полученными при старте;
   - если совпадение есть (точное или близкое по смыслу) — прочитай файл целиком ДО первого действия, не действуй вслепую;
   - проверь `MEMORY.md`, backlog и недавний diary на упоминания темы;
   - если по именам не нашлось — используй текстовый поиск (`rg`, `grep` или эквивалент) по содержимому `topics/`, `tasks/`, `MEMORY.md` и `shared/*/topics/`.
3. Если найдены предупреждения, ограничения или грабли, учитывай их при планировании.

### Перед ответом

Если в ходе работы появился устойчивый полезный результат, обнови память.

Под устойчивым полезным результатом понимаются:

- новый факт о проекте;
- новое ограничение или грабля;
- новое решение, рецепт или урок;
- новая задача;
- завершение или изменение статуса задачи;
- полезный артефакт по отдельной задаче.

Если работа была короткой, ознакомительной или не оставила полезного следа, память не обновляй.

При обновлении памяти:

1. Добавь краткую запись в дневник текущего дня:
   - `<local.path>/diary/YYYY-MM-DD.md`
2. Обнови backlog:
   - новые задачи добавь в `backlog.md`;
   - завершённые задачи перенеси в `archive.md`;
   - если задача не завершена, но ожидает внешнего действия, пометь это явно
3. Общие и устойчивые факты добавь в `MEMORY.md`
4. Тематические знания и повторяемые решения добавь в `topics/<topic>.md`
5. Материалы в `shared` добавляй только если они:
   - обезличены;
   - полезны вне текущего проекта;
   - не содержат чувствительных данных;
   - достаточно стабильны, чтобы считаться рецептом, а не сырым журналом

### Git-правила

Если `local.commit_on_update=true`, коммить изменения памяти только при наличии реальных изменений.

Правила:

- не делай пустой commit;
- ошибки commit/push не должны блокировать основной ответ;
- если remote, upstream, авторизация или branch не настроены, просто сообщи об этом кратко;
- не переписывай историю памяти и не делай рискованных git-действий без явного запроса пользователя.

Для shared-баз действуют те же правила.

### Безопасность

- Запрещено хранить в памяти:
  - пароли, токены, ключи, секреты;
  - персональные данные;
  - чувствительные данные клиентов;
  - внутренние URL, IP, хосты, логины;
  - любые данные, которые нельзя безопасно закоммитить в git.
- В локальной памяти храни только ссылку на место поиска секрета, имя переменной или безопасное описание.
- В shared-памяти правила ещё строже: только полностью обезличенные материалы.

### Поиск

- Если не уверен, где нужная информация, используй доступный в среде текстовый поиск (`rg`, `grep` или эквивалент) по локальной памяти и нужным shared-базам.

### Команды пользователя

| Фраза пользователя                                                 | Действие агента                                     |
| ------------------------------------------------------------------ | --------------------------------------------------- |
| «что в отложках», «что в бэклоге», «покажи бэклог», «какие задачи» | Прочитай `backlog.md`                               |
| «что делали сегодня / вчера / на прошлой неделе»                   | Прочитай нужные файлы из `diary/`                   |
| «запомни это»                                                      | Сохрани факт, урок или заметку в подходящее место   |
| «добавь в бэклог»                                                  | Добавь задачу в `backlog.md`                        |
| «что ты знаешь про ...»                                            | Ищи в `MEMORY.md`, `topics/`, backlog, diary, tasks |
| «оптимизируй память»                                               | Запусти анализ оптимизации и предложи изменения     |

## Оптимизация памяти

### Триггер

Оптимизация запускается:

- по команде пользователя;
- автоматически только в режиме анализа, если пришло время по конфигу.

### Фаза 1 — Анализ (без изменений в файлах)

Ничего не меняй в файлах.

Проверь:

- старые записи diary;
- старые task-папки;
- переполненный archive;
- backlog без движения;
- устаревшие факты в `MEMORY.md`;
- дубли или пересечения между local topics и shared topics.

Консервативные правила:

- не считай локальный topic дублем, если в нём есть проектная специфика;
- не предлагай удалять старые task-папки, если из них ещё не извлечены знания;
- задачи без движения сначала предлагай пометить как `waiting` или `snoozed`, а не удалять;
- любые удаления и переносы считай потенциально рискованными.

### Фаза 2 — Отчёт

Покажи пользователю краткую сводку:

- что можно архивировать;
- что можно удалить;
- что можно перенести в `topics/` или `shared/`;
- какие факты выглядят устаревшими.

Жди подтверждения. До подтверждения не меняй файлы.

### Фаза 3 — Выполнение (после одобрения)

После подтверждения пользователя:

- выполни только явно одобренные изменения;
- обнови `Последняя оптимизация: YYYY-MM-DD` в `MEMORY.md`;
- при необходимости зафиксируй изменения по git-правилам выше.

## Примеры

### Запись в дневник (local/diary/YYYY-MM-DD.md)

```markdown
# 2026-03-21

## Краткое название задачи

- Сделано: ...
- Грабля: ...
- Артефакт: [../tasks/2026-03-21-topic/](../tasks/2026-03-21-topic/)
```

### Запись в бэклог (local/backlog.md)

```markdown
# Бэклог

## Активные

- [ ] Подготовить ...
      created: 2026-03-21
      updated: 2026-03-21
      notes: краткий контекст

- [/] В работе: ...
  created: 2026-03-21
  updated: 2026-03-21
  notes: что уже делается

## Ожидает

- [ ] Ждём внешнего доступа для ...
      created: 2026-03-21
      updated: 2026-03-21
      notes: чего именно ждём

Завершённые задачи: см. `archive.md`
```

### Запись в архив (local/archive.md)

```markdown
# Архив

## 2026-03

- [x] Подготовить ...
      created: 2026-03-20
      completed: 2026-03-21
      result: задача завершена, артефакт в `tasks/2026-03-21-topic/`
```

### Запись в топик

Файл `local/topics/topic-name.md`:

```markdown
# Название темы

## Факты

- ...

## Грабли

- ⚠️ ...
```

### Подключение субмодуля local/

Если `local/` нужно превратить в субмодуль, сначала сохрани текущее содержимое и перенеси его в отдельный репозиторий памяти. Только после этого подключай submodule.

```bash
git submodule add <url> .agents/memory/local
```

### Подключение shared-базы

```bash
git submodule add <url> .agents/memory/shared/<имя>
```
