Попередній допис доводив, що CLAUDE.md — лише для інваріантів. Тоді що зберігати в memory? Я відкрив усі 5 memory-файлів, які зараз живі в цьому проєкті, і пройшовся по них по одному — що залишається, що треба видалити, і де насправді проходить межа між CLAUDE.md і memory.
Попередній допис доводив, що CLAUDE.md має містити лише те, чого Claude не бачить, читаючи код. Читач одразу запитав: а що з memory? Memory теж контекст — у чому реальна різниця?
Багато хто з часом починає ставитись до memory як до «резервного розширення» CLAUDE.md — пхає туди все, що спадає на думку. Поступово memory розпухає, Claude читає його на кожній сесії, і рішення ухвалюються на застарілій інформації.
Цей допис пропускає абстрактні визначення. Я відкрив усі 5 файлів memory, які наразі живуть у цьому проєкті, і провів аудит кожного окремо — що лишається, що йде, що взагалі не мало бути записаним. Попутно питання CLAUDE.md vs memory відповідає саме на себе.
Корисне питання — не «куди це покласти», а «скільки живе ця інформація і хто її оновлює».
feedback_commits — чекати, поки я скажу "commit", перш ніж комітити
feedback_article_authenticity — практичні статті не можна вигадувати
project_i18n_strategy — рішення «запустити всі мови одночасно»
project_howdev_plan — незавершений план для how2claude.dev
project_article_workflow — конвеєр публікації статей
Згрупую за типом.
Тіло коротке: "don't auto-commit, wait for user to confirm."
Найвищий ROI серед типів memory. Одне виправлення → назавжди в усіх майбутніх сесіях.
Чому не в CLAUDE.md? Це не правило проєкту — це моя особиста робоча звичка. Якщо до проєкту приєднається інший контриб'ютор, йому не обов'язково дотримуватись того самого правила. CLAUDE.md — рівень команди. Memory — «між мною і Claude».
Чому не повторювати на початку кожної розмови? Бо memory зберігається між сесіями. Коли Claude допоможе мені наступного тижня, він усе ще пам'ятатиме.
Тригер чистий: я виправив одного разу, і хочу, щоб виправлення лишалося назавжди.
Тіло цього memory незвично конкретне:
2026-04-16, коли я писав фінал серії multi-agent, я вигадав історію про «трьох Agent-ів, які будують webhook-фічу»... все вигадане. Користувач запитав «це реальне чи придумане?» — це інша планка, ніж у двох попередніх (методологічних) статей...
Суть: поле Why не абстрактний принцип — це конкретна подія + дата + що сталося.
Чому так написано? Через півроку «практичним статтям потрібен реальний матеріал» як абстрактне правило мене спантеличить — коли це встановили, чому? Але «4-16, вигадав історію про agent і попався» миттєво оживляє спогад і дозволяє на місці оцінити, чи правило ще чинне.
Це найважчий запис із моїх 5. Це не просто правило — це справа про інцидент, до якої можуть звертатись і Claude, і я.
Зміст: чому цей проєкт агресивно запустив усі мови одразу — вартість перекладу через Claude ~$0, а англомовна офіційна документація — головне вікно можливостей.
Цього не видно з коду. Код показує лише 19 файлів локалі. Чому 19, чому одночасно, чому японська й корейська в пріоритеті — усе це живе у мене в голові.
Memory відстоює це «рішення в голові» в щось стале, щоб коли Claude пізніше пропонуватиме фічу, він міг запитати: чи конфліктує це зі стратегією i18n?
Не операційне правило (не в CLAUDE.md). Стратегічний фон (у memory).
Найтимчасовіший: план імплементації з 9 файлів для сайту розробників how2claude.dev, завершується фразою «продовжимо в наступній сесії».
Найнебезпечніший тип memory — легко стає memory-зомбі. Закінчив роботу, забув видалити; наступного разу Claude вважає його активним і радить на основі застарілого плану («ти ще не зробив step 3»).
Таким memory потрібен явний механізм виходу: у мить, коли how2claude.dev запуститься, доведеться видалити цей запис вручну.
Щільність інформації тут найвища. Спершу я думав, що це найкорисніший запис — аж поки не перечитав уважно:
/write-article і /publish-article → подивитись у .claude/commands/, всеdocs/drafts/ робить це очевидним.claude/publish-config.jsonClaude може все це вивести, читаючи код.
Єдине, що memory реально дає, — останній блок: "Accounts (production): zh → @how2claude, en → @howtoclaude" — і це вже застаріло. У минулій сесії стало зрозуміло, що у продакшні насправді zh=@howtoclaude. Memory зафіксував знімок кількаденної давнини; він уже дрейфонув.
Висновок: 90 % цього memory має піти. Те, що варто зберегти («використати kamal, щоб опитати акаунти наживо»), краще пасує CLAUDE.md — або, ще краще, ніде, бо захардкоджені у memory акаунти знову дрейфонуть.
1. Справжня робота memory — відчиняти кімнати, в які Claude не може зайти.
2. Якщо Claude може прочитати це з коду — не клади це в memory.
Той самий принцип, що й у попередній статті про CLAUDE.md. Шляхи до файлів, URL API, структура каталогів — усе це питання, на які відповідає код. Пхати в memory, щоб не запускати grep, — це ставка, що ніщо ніколи не зміниться.
3. Memory псується.
project_article_workflow — доказ: написаний кілька днів тому, інформація про акаунти вже неправильна. Чим старший memory, тим менше йому можна довіряти. Регулярний аудит > нескінченне додавання.
4. Поле Why — те, що вас рятує.
Порівняйте мої два feedback-и:
feedback_article_authenticity: «4-16, я вигадав історію в статті multi-agent» → через півроку я можу миттєво оцінити, чи правило ще чинне.feedback_commits: лише «user wants to review» → через півроку я не впевнений, яке саме виправлення його породило.Другий суттєво слабший. Абстрактні принципи не виживають — ніхто не пам'ятає, нащо їх нав'язали.
Коли з'являється нова інформація, поставте три питання:
Третє питання — пастка. Більшість «незмінних» речей, які хочеться занотувати, насправді виводяться з коду — ви просто не хочете, щоб Claude знову робив grep.
Після одного проходу впадає в очі кілька речей:
project_article_workflow виводиться з коду. Цьому запису потрібна найсерйозніша хірургія.project_howdev_plan — тимчасова передача; теоретично йому потрібен механізм виходу.project_i18n_strategy — стратегічне рішення; варто переглянути за кілька місяців.feedback_commits слабкий; додати конкретну подію зробить його надійнішим.Побіжне спостереження: мій розподіл типів — feedback×2 + project×3, нуль типів user або reference. Тобто я ще не розповів Claude «хто я» чи «з яких зовнішніх систем я читаю стан». Імовірно, це наступна партія для написання.
Найбільша пастка memory — не «те, що я мав написати й не написав». А «те, що я написав, і воно вже застаріло». При 5 записах достатньо одного дрейфу — Claude тихо використовує старі дані для рішень і не повідомить вам про дрейф.
У моїх 5 я вже бачу кілька речей, які хочеться зрушити. А у ваших?