← Blog
·9 blog.minutes

Как хранить историю вашей работы с ИИ в виде памяти с поиском

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

Год назад большинство разработчиков пользовались ИИ-ассистентом лишь время от времени — быстрое автодополнение здесь, разговор «с резиновой уточкой» там. Сегодня такие инструменты, как Claude Code, Cursor, GPT и Gemini, пишут значительную долю кода, который уходит в продакшн. Это огромный сдвиг, и он породил незаметную проблему, к которой почти никто не готовился: рассуждения, стоящие за вашим кодом, теперь живут в эфемерных окнах чата, которые исчезают в тот момент, когда вы закрываете вкладку.

Вы почти наверняка это ощущали. Вы смотрите на функцию, которую влили на прошлой неделе, и не можете вспомнить, какой промпт её породил, какие альтернативы вы отвергли и почему ИИ выбрал именно этот подход, а не другой. Дифф лежит в Git, но разговор, который его сформировал, исчез. Чем больше кода пишет ИИ, тем шире становится разрыв между тем, что изменилось, и тем, почему это изменилось.

Эта статья о том, как закрыть этот разрыв. Мы разберём, почему история работы с ИИ важна, что на самом деле должна фиксировать хорошая память, почему подход local-first — правильное значение по умолчанию, и как настроить всё так, чтобы ваши промпты, ответы и диффы превратились в единую хронологию с поиском и возможностью отката.

Скрытая цена потери истории вашей работы с ИИ

Системы контроля версий решили одну из версий этой проблемы ещё десятилетия назад. Git точно показывает, что изменилось, строка за строкой, и кто это закоммитил. Но Git создавался для мира, где каждую строку осознанно писал человек. Он фиксирует артефакт, а не намерение — а теперь, когда в процессе участвует ИИ, намерение размазано по десяткам промптов и ответов, которые никогда не попадают в ваш репозиторий.

Представьте обычный рабочий день. Вы просите ассистента отрефакторить модуль аутентификации. На протяжении двадцати сообщений вы им управляете: используй эту библиотеку, обработай тот граничный случай, не трогай логику сессий. Итоговый дифф выглядит аккуратно. Через три недели баг возникает ровно в той логике сессий, которую вы просили не трогать, — а у вас нет ни записи этой инструкции, ни компромиссов, которые вы обсуждали, ни двух подходов, которые вы пробовали и отбросили. Вы отлаживаете вслепую, заново восстанавливая контекст, который у вас уже был.

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

Git фиксирует, что изменилось. Память работы с ИИ фиксирует, почему это изменилось, — промпт, ответ и рассуждения, породившие дифф.

Что на самом деле должна фиксировать память для работы с ИИ

Не всякий инструмент логирования является памятью. Полезная история работы с ИИ должна фиксировать три вещи вместе, как единую связанную единицу, — иначе она рассказывает вам лишь часть истории.

1. Промпт

Промпт — это намерение. Это то, что вы на самом деле запросили, своими словами, включая ограничения и предпочтения, которые вы явно прописали. Без промпта ответ — просто текст без опоры. Промпт также делает историю доступной для поиска по-человечески: спустя месяцы вы будете искать то, что пытались сделать, а не имя переменной.

2. Ответ

Ответ — это то, что выдал ИИ: объяснение, код и часто рассуждения о том, почему он выбрал именно такой подход. Именно эта часть исчезает быстрее всего, потому что она целиком живёт внутри инструмента. Сохранение полного ответа — а не только того блока кода, который вы скопировали, — сохраняет альтернативы, оговорки и предупреждения модели, которые в итоге оказались важны.

3. Дифф

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

Память также должна фиксировать ручные правки, которые вы вносите после. Вы редко принимаете вывод ИИ дословно — вы его дорабатываете. Если ваша история фиксирует только версию ИИ, она расходится с реальностью. Сохранение ваших собственных последующих правок в виде настоящих диффов делает хронологию честной.

Почему local-first — правильное значение по умолчанию

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

Память в подходе local-first переворачивает значение по умолчанию. Всё фиксируется и хранится на вашей собственной машине, в локальной базе данных, без учётной записи и без API-ключа. Ничто не покидает ваш компьютер, пока вы явно не решите это синхронизировать. Одно это решение снимает большинство возражений о приватности и комплаенсе ещё до того, как они возникнут: если данные никогда не покидают ваш ноутбук, их нельзя взломать, истребовать по повестке или случайно обучить на них модель.

Подход local-first вдобавок оказывается быстрее и надёжнее. Поиск работает по базе данных на диске, а не через сетевой запрос туда-обратно. Ваша история работает в самолёте, в кофейне с плохим wifi или в изолированной от сети (air-gapped) среде. Облако становится опцией, которую вы включаете для синхронизации между устройствами или совместной работы в команде, — а не зависимостью, которую вы вынуждены принять.

Есть одна вещь, которую local-first-инструмент обязан делать правильно: секреты. Промпты часто содержат API-ключи, токены, пароли и вставленные значения из .env. Ответственная память автоматически вымарывает их ещё до того, как что-либо записывается на диск, чтобы ваша история незаметно не стала наименее защищённой копией ваших секретов.

Строим хронологию: захват, поиск, восстановление

Когда принципы определены, практический рабочий процесс сводится к трём глаголам: захватывать то, что происходит, искать это, когда нужно, и восстанавливать любую точку, к которой хотите вернуться. Именно вокруг этого цикла построен PromptWake, и его стоит разобрать, потому что та же схема применима, каким бы инструментом вы ни пользовались.

Захват

Захват должен быть автоматическим. Если вам нужно помнить о том, чтобы что-то залогировать, вы этого не сделаете, и в истории появятся дыры ровно там, где происходила самая интересная работа. Правильная модель — это фоновый демон, который следит за инструментами, которыми вы уже пользуетесь, и записывает каждое взаимодействие по мере его возникновения. Вы устанавливаете его один раз и забываете о его существовании.

$ npx promptwake init

После этой единственной команды промпты, ответы и диффы из ваших ИИ-инструментов автоматически захватываются в локальную хронологию. Хороший захват не зависит от инструмента: он распознаёт множество ассистентов — Claude Code, Cursor, GPT, Gemini и другие, — так что ваша история становится единой, а не разбросанной по десятку отдельных логов чатов.

Поиск

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

Поскольку поиск работает по связанным единицам «промпт — ответ — дифф», один запрос может провести вас от симптома к его первопричине. Вы находите изменённую строку, и хронология показывает вам промпт, который её породил, ответ, который её объяснил, и последующие правки, которые вы внесли вручную.

Восстановление

Последний элемент — возможность вернуться назад. Не каждый эксперимент удаётся, а ИИ делает смелые изменения дешёвыми — а значит, вам нужен и дешёвый способ их отменять. Если каждое изменение в хронологии хранит достаточно данных, чтобы его обратить, то откат к состоянию до рефакторинга — это одно действие, независимо от того, закоммитили ли вы его в Git.

Именно здесь окупается память, ориентированная на диффы. Поскольку она зафиксировала точные строки, которые изменились, она может вычислить обратную операцию и чисто восстановить любую точку. Ваша хронология перестаёт быть записью только для чтения и становится тем, по чему можно перемещаться в обоих направлениях.

От личной памяти к командной

Всё вышеописанное ценно для одного разработчика. Для команды это становится преобразующим. Когда ИИ пишет всё большую долю кодовой базы, вопрос о том, кто, какой ИИ и когда попросил что-то построить, превращается в настоящую задачу управления — для код-ревью, безопасности и комплаенса.

Общая хронология позволяет ревьюеру увидеть намерение за изменением, а не только дифф. Журнал аудита фиксирует каждое действие в рабочем пространстве, так что есть ответ, когда кто-то спрашивает, как появился тот или иной кусок кода. Доступ на основе ролей удерживает эту историю в подобающих границах. Ничто из этого не требует отказа от гарантии local-first для отдельных пользователей: синхронизация включается по желанию, а вымарывание секретов по-прежнему выполняется до того, как что-либо становится общим.

Направление движения очевидно. По мере того как написанный ИИ код становится нормой, а не исключением, от команд будут ожидать, что они станут проверять и аудировать его так же, как уже проверяют и аудируют код, написанный человеком. А это возможно лишь при условии, что история вообще существует.

С чего начать

Вам не нужно перекраивать свой рабочий процесс, чтобы начать выстраивать память истории вашей работы с ИИ. Весь смысл фонового local-first-инструмента в том, что он растворяется из виду. Установите его, продолжайте работать ровно так, как работаете сейчас, и дайте хронологии накапливаться. В первый же раз, когда вы обратитесь к поиску, чтобы ответить на вопрос «какой промпт это написал», и получите мгновенный, точный ответ, ценность станет очевидной.

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