---
name: experience-reuse
description: Достать прежнюю работу до планирования и записать её после проверки, чтобы уже сделанная задача стоила одного поиска, а не повторного вывода. Поставляет искомое хранилище, схемы записей, проверяющий CLI и политику устаревания. Загружать, когда задача похожа на уже сделанную — или когда выполненная задача, вероятно, повторится.
license: MIT
version: 1.0.0
tools: [tools/experience.py]
---

# Навык: повторное использование опыта

## Назначение

Задача, которая уже делалась, должна стоить одного поиска, а не повторного вывода. Этот навык даёт
агенту хранилище прежней работы — что просили, что сработало, что провалилось — плюс одну команду,
которая это достаёт, и правила, не дающие хранилищу стать вторым источником истины.

Экономика и есть причина существования навыка:

| Ситуация | Без хранилища | С хранилищем |
|---|---|---|
| Та же миграция три месяца спустя | заново разобрать схему, повторить провальный подход, перепроверить | `search` отдаёт рецепт и известный провал одним вызовом |
| Провал, на диагностику которого ушло два часа | открывается заново методом проб | достаётся за секунды вместе с рабочим обходом |
| Передача работы другому агенту | пересказ в чате, который больше никто не читает | запись с метаданными, применимостью и проверкой |

Доставание обязано быть дешёвым, иначе оно не произойдёт. Поэтому хранилище — это CLI над
обычными Markdown-файлами: одна команда, ранжированные кандидаты и причина, по которой каждый
оказался на своём месте.

## Когда активировать

- Карточка задачи похожа на прежнюю работу: та же технология, тот же тип результата, то же окружение.
- Задача, про которую известно, что она повторяется: миграции, шаги релиза, проходы по документации,
  диагностика инцидентов.
- Пользователь говорит «мы это делали», «как в прошлый раз», «как в том репозитории».
- Диагностируется провал, который кажется знакомым.
- После успешной нетривиальной задачи — чтобы решить, стоит ли её записывать.

## Когда не активировать

- Тривиальные запросы: доставание дороже самой задачи.
- Задачи, контекст которых полностью нов: прежней работы ещё не может быть.
- Всё, где прежняя запись встала бы выше текущих свидетельств. Она не встаёт никогда — см.
  *Применимость*.

## Входы

| Вход | Источник | Обязателен |
|---|---|---|
| Текущая карточка задачи | `PROMPT.md` M1 | да |
| Поисковый запрос словами задачи | выводится из карточки задачи | да |
| Хранилище | `memory/` в рабочем репозитории либо путь от пользователя | да, иначе деградация |
| Факты текущего окружения | файлы, версии, схема | да, для проверки применимости |

## Выходы

1. **Строка доставания** в ответе: сколько кандидатов, какие использованы, какие отвергнуты и
   почему. «Релевантного опыта нет» — полноценный и полезный выход.
2. **Вердикт применимости** по каждой переиспользованной записи: совпадает, адаптирована или
   отвергнута — с причиной.
3. **Предложение записи** после успешной задачи, если результат переиспользуем и не содержит
   чувствительных данных.

## Workflow

```bash
# 1. хранилище на месте? одна команда, без обхода каталогов
python tools/experience.py check

# 2. достать до планирования — запрос словами задачи, а не словарём хранилища
python tools/experience.py search "добавить nullable колонку в список на php" --limit 5

# 3. прочитать лучшую запись целиком, а не только строку ранжирования
python tools/experience.py show php-add-column-to-endpoint

# 4. после проверенной задачи — предложить запись; add отвергнет негодную
python tools/experience.py add drafts/my-task.md

# 5. помечать устаревшее, никогда не удалять
python tools/experience.py deprecate old-recipe --by new-recipe
```

Порядок важен: `search` до `plan`, `add` только после `verify`. Запись, сделанная до проверки, —
это догадка со схемой.

## Правила поиска

1. **Запрос словами задачи.** «Добавить дату окончания в список услуг» лучше, чем «задача по схеме
   базы». Индекс лексический и честен об этом.
2. **Читать лучшего кандидата, не доверять рангу.** Оценка — фильтр, а не приговор.
3. **Запись о провале меняет план раньше, чем рецепт.** Знать, что не сработало, дешевле, чем
   знать, что сработало.
4. **Останавливаться на трёх кандидатах.** Если третий не релевантен — ответа в хранилище нет;
   сказать это и работать.
5. **Сообщать промах.** «Релевантного опыта нет» говорит следующему читателю, что запись нужна.

## Чек-лист применимости

Запись можно переиспользовать только когда пройдены все шесть пунктов. Это правило модуля M13 в
`PROMPT.md`, переписанное чек-листом, потому что именно этот шаг и пропускают.

| # | Проверка | Провал, когда |
|---:|---|---|
| 1 | Цель совпадает с записанной | запись решала соседнюю задачу |
| 2 | Окружение совпадает: версии, рантайм, ОС, пути | рецепт требует инструмента, которого здесь нет |
| 3 | Права совпадают | прежний подход требовал административных прав, которых нет |
| 4 | Прежние допущения ещё верны | схема, API или контракт с тех пор изменились |
| 5 | Прежняя проверка покрывает текущее условие приёмки | там доказывали «страница рисуется», здесь нужно «выгрузка побайтово совпадает» |
| 6 | Правило безопасности или соответствия не запрещает это теперь | прежний подход хранил учётные данные в файле конфигурации |

Любой провал означает: адаптировать и назвать адаптацию либо отвергнуть и назвать причину.
Молчание не вариант — невысказанная адаптация неотличима от слепого копирования.

## Шаблоны записей

| Тип | Файл | Когда |
|---|---|---|
| Запись задачи | `templates/task-record.md` | задача дала переиспользуемый результат; ссылается на остальные три |
| Рецепт | `templates/recipe.md` | тот же подход с высокой вероятностью применится снова |
| Артефакт | `templates/artifact.md` | файл, конфигурацию, скрипт или чек-лист можно адаптировать, а не создавать заново |
| Запись провала | `templates/failure-record.md` | провал был неочевидным, повторяющимся или дорогим для повторного открытия |

Очищенные примеры: `examples/recipe.md`, `examples/failure-record.md`, `examples/task-record.md`.
В них заполнители, а не реальные хосты и учётные данные — `check` самого хранилища падает на секрете.

## Безопасность и приватность

Без исключений, и там где может — принудительно инструментом:

1. Никогда не хранить учётные данные, токены, закрытые ключи, cookies, идентификаторы сессий и
   значения паролей.
2. Имена хостов, IP-адреса, названия заказчиков и персональные данные заменять на `<HOST>`, `<IP>`,
   `<CUSTOMER>`, `<USER>`, `<PATH>`, `<API_KEY>`.
3. Хранить *форму* решения, а не содержимое базы заказчика.
4. В публичный репозиторий попадают только очищенные примеры.
5. `experience.py add` отказывает записи с литералом, похожим на токен, или с абсолютным путём
   машины. Эта проверка — пол, а не ревью: человек всё равно читает запись перед публикацией.

Срок хранения и устаревание: `policies/security-and-privacy.md`.

## Анти-паттерны

| Анти-паттерн | Почему хуже, чем отсутствие хранилища |
|---|---|
| Слепое копирование рецепта | самый дешёвый способ воспроизвести старый дефект в новом репозитории |
| Хранить переписку вместо процедуры | нечитаемо, ненаходимо и несёт приватный контекст |
| Записывать каждую задачу | хранилище становится шумом, поиск перестаёт находить, агент перестаёт искать |
| Молчаливое удаление устаревшей записи | исчезает след аудита, и тот же неверный подход возвращается |
| Пометить `validated` без реальной перепроверки | статус врёт, и следующий агент ему верит |
| Два хранилища (по одному на агента) | две истины, одна из них устарела, и никто не знает какая |

## Критерий готовности

- Доставание выполнено до планирования, и его результат назван в ответе, включая пустой.
- По каждой переиспользованной записи есть явный вердикт: совпадает, адаптирована или отвергнута.
- Адаптация названа: что изменилось и почему.
- Если запись создана, `experience.py check` даёт ноль ошибок.
- Ни один секрет, хост или персональные данные не попали в хранилище.

## Проверка

```bash
python tools/experience.py selftest      # 13 проверок: поиск, отказ, устаревание, устаревание записи
python tools/experience.py check         # схема, секреты, дубликаты, отсутствие проверки
```
