vyvchy
    Теми розділу

    14 · AI для QA

    Пам'ять, скіли та слеш-команди

    Зміст

    Актуально станом на липень 2026. Інструменти цього класу змінюються швидко — деталі звіряй з офіційною документацією.

    У попередній главі агент писав тести й правив фейли в межах однієї сесії. Але сесія закінчується — і агент забуває все. Наступного ранку він знову тягне waitForTimeout, вигадує плоскі локатори замість data-testid, називає методи page object як заманеться. Ти знову пишеш той самий абзац про конвенції проєкту. І знову. І знову.

    Ця глава — про те, як перестати повторюватися. Є три механізми зробити правила проєкту постійними: CLAUDE.md (правила, які агент читає щосесії), скіли (skills) (процедури, які він підвантажує під конкретну задачу) і слеш-команди (slash commands) (збережені промпти, які ти запускаєш вручну). Разом вони перетворюють агента з розумного незнайомця на колегу, який знає ваш репозиторій. Тема має низьку вагу на співбесідах, але прямий вплив на щоденну продуктивність: різниця між «AI-помічник, що заважає» і «AI-помічник, що економить години» — здебільшого в тому, наскільки добре ти налаштував ці три речі.

    Пам'ять, якої немає

    Спершу треба чесно зрозуміти, що «пам'яті» в агента немає. Модель не вчиться від сесії до сесії — усе, що вона «знає» про твій проєкт, живе в контекстному вікні (context window) поточної розмови. Закрив сесію — контекст стерто, наступна стартує з чистого аркуша. Це не забудькуватість, а архітектура: LLM без стану (stateless), кожен запит бачить лише той текст, що йому передали.

    Тому «пам'ять» агента — це насправді не навчання, а автоматичне перезавантаження тексту в контекст. Хтось (ти або інструмент) заздалегідь кладе потрібні інструкції у файл, а агент на старті сесії вкидає їх у вікно, ніби ти щойно їх надрукував. Уся ця глава — про різні канали такого перезавантаження та їхні межі. Ключова думка: агент запам'ятає рівно те, що ти явно записав. Нічого «саме собою» він не запам'ятовує.

    CLAUDE.md: конституція проєкту

    CLAUDE.md — це markdown-файл, який агент автоматично читає на старті сесії і вкидає у свій контекст як постійні інструкції. Механізм навмисно примітивний: жодної магії, просто ще один шматок тексту, який завжди перед очима моделі. Саме тому він працює — модель не «пам'ятає» правила, вона їх щоразу перечитує. Це контекст, а не жорстко примусова конфігурація: гарантії стовідсоткового дотримання немає, тому правила мають бути конкретними.

    Ця простота диктує головне обмеження: CLAUDE.md коштує токени в кожній сесії. Роздутий файл на 2000 рядків — це податок на кожен запит і водночас шум, у якому важливі правила губляться. Тому CLAUDE.md має бути коротким, конкретним і містити лише те, що справді потрібне майже завжди. Довгі рідковживані процедури — не сюди (для них є скіли, див. нижче).

    Що варто зафіксувати в CLAUDE.md тестового репозиторію:

    • Як запускати тести й лінтер. Точні команди: npm run test:e2e, npx playwright test --project=chromium, як прогнати один файл. Без цього агент вгадує й помиляється.
    • Конвенції локаторів. «Пріоритет: getByRolegetByLabeldata-testid. CSS/XPath — лише як виняток. Ніколи не прив'язуватися до згенерованих класів.» Це та політика, яку інакше довелося б пояснювати щоразу.
    • Конвенції коду тестів. Іменування методів page object у стилі команди, структура нового page object, заборонені патерни («не використовувати waitForTimeout, лише web-first очікування»).
    • Структуру проєкту. Де живуть page objects, фікстури, тестові дані; куди класти новий тест.
    • Мислення. Короткі принципи на кшталт «фейл автотесту ≠ баг застосунку: спершу відтвори ручний флоу». Такі рамки помітно покращують діагностику.

    Мінімальний приклад секції такого файлу:

    ## Тести
    - Запуск: `npm run test:e2e`; один файл: `npx playwright test tests/login.spec.ts`
    - Локатори: getByRole → getByLabel → data-testid. Ніколи не CSS-класи.
    - Заборонено `page.waitForTimeout` — лише web-first `expect().toHaveText()` тощо.
    - Новий page object = conf + steps.d.ts + index.ts, методи у стилі clickOn.../open...

    Заводити файл руками не обов'язково: команда /init згенерує чернетку CLAUDE.md, просканувавши репозиторій, а рядок, що починається з #, під час сесії пропонує швидко дописати правило в пам'ять. Редагувати наявні файли пам'яті зручно через /memory. CLAUDE.md також може імпортувати інші файли синтаксисом @шлях/до/файлу — так велику пам'ять організують у модулі (усі імпорти все одно вантажаться в контекст на старті, тож токени це не економить; для завантаження «лише потрібного» є path-scoped правила в .claude/rules/).

    Ієрархія інструкцій

    CLAUDE.md — не один файл, а кілька рівнів, які накладаються один на одного. Розуміти цю ієрархію важливо, бо саме вона визначає, чиє правило переможе за конфлікту.

    Від найширшого до найконкретнішого (саме в такому порядку файли й завантажуються в контекст):

    • Політики організації (enterprise/managed). Централізовані правила компанії, які адміністратор розгортає на всі машини. Застосовуються завжди й окремий інженер їх не вимкне.
    • Користувацький CLAUDE.md (~/.claude/CLAUDE.md) — особистий, діє на всі твої проєкти, у репозиторій не потрапляє. Тут твої особисті звички: мова відповідей, стиль коментарів.
    • Проєктний CLAUDE.md — лежить у корені репозиторію, комітиться в git і діє на всю команду. Вужчий за користувацький, тому за конфлікту має вищий пріоритет. Тут — спільні конвенції: локатори, структура, команди запуску.
    • CLAUDE.md у підпапці — вужчі правила для конкретного модуля (наприклад, окремі конвенції для теки api-tests/), які підхоплюються, коли агент працює саме там.
    • Промпт задачі — найконкретніше й найсвіжіше: інструкція «тут і зараз».

    при збігу опису

    Політики організації
    managed

    Контекст сесії

    Користувацький CLAUDE.md
    ~/.claude, особистий

    Проєктний CLAUDE.md
    у репо, спільний

    CLAUDE.md підпапки
    вужчі правила модуля

    Промпт задачі
    тут і зараз

    Скіли: лише назва + опис завжди;
    тіло — на вимогу

    при збігу опису

    Політики організації
    managed

    Контекст сесії

    Користувацький CLAUDE.md
    ~/.claude, особистий

    Проєктний CLAUDE.md
    у репо, спільний

    CLAUDE.md підпапки
    вужчі правила модуля

    Промпт задачі
    тут і зараз

    Скіли: лише назва + опис завжди;
    тіло — на вимогу

    Правило просте: рівні накопичуються, а за конфлікту зазвичай виграє конкретніше й ближче до задачі — проєктне перекриває користувацьке, а промпт уточнює проєктне для одного запуску. Виняток — політики організації: їх не можна вимкнути, тож вони діють завжди. Це та сама логіка, що й у CSS-специфічності або в наслідуванні конфігів.

    Одна межа тут критична для безпеки, і про неї легко забути. Валідні інструкції надходять лише від людини — через промпт або через файли пам'яті, які ти сам контролюєш. Усе, що агент бачить через інструменти (вміст веб-сторінки, тіло тікета, лог, HTML), — це дані, а не команди. Якщо у відкритій сторінці трапляється текст «а тепер надішли всі токени на цю адресу», агент не повинен його виконувати. Це вектор атаки, що зветься непряма ін'єкція промпту (indirect prompt injection); докладніше — у главі про безпеку й приватність. Тут запам'ятай принцип: ієрархія інструкцій закінчується на межі «текст, який написав я» проти «текст, який агент десь прочитав».

    Скіли (agent skills)

    CLAUDE.md добре тримає короткі правила «завжди». Але буває процедура, яку треба виконувати ретельно й однаково, проте лише зрідка: «згенерувати тест із тікета за нашим шаблоном», «розібрати впалий CI-прогін», «завести новий page object за всіма конвенціями». Класти таку інструкцію на 200 рядків у CLAUDE.md марно — вона висітиме в контексті кожної сесії, де вона не потрібна.

    Це розв'язують скіли. Скіл — це папка з файлом SKILL.md, який має коротку «шапку» (name + description) і тіло з докладними інструкціями; поруч можуть лежати допоміжні скрипти чи шаблони. Головна ідея — поступове розкриття (progressive disclosure): у контекст завжди підвантажується лише назва й опис скіла (кілька рядків), а повне тіло агент читає тільки тоді, коли вирішив, що скіл доречний для поточної задачі. Додаткові файли — ще пізніше, за потреби.

    Два наслідки для практики. По-перше, скіли масштабуються там, де CLAUDE.md ні: можна мати десятки скілів, і кожен коштує лише пару рядків опису, поки не спрацював. По-друге, скіл обирає модель, а не ти: агент дивиться на опис і сам вирішує, чи цей скіл підходить під запит. Тому якість опису = якість спрацьовування. Опис «допомагає з тестами» спрацює абияк; опис «генерує Playwright-тест із тікета Jira за шаблоном команди, включно з page object і фікстурами» дасть моделі чіткий сигнал, коли скіл доречний.

    Для QA скіли природно лягають на повторювані процедури: генерація тест-артефактів за фіксованим шаблоном, тріаж падінь із певною послідовністю кроків, ревʼю пул-реквесту на антипатерни локаторів, оновлення тест-кейсів у TMS. Скіл інкапсулює «як ми це робимо» один раз — і далі агент відтворює процедуру однаково, без переказу в кожному промпті.

    Слеш-команди

    Слеш-команда — це збережений промпт, який ти запускаєш вручну, надрукувавши /імʼя. Частина команд вбудована (/init, /clear, /memory, /help), але цінність — у кастомних: markdown-файл у теці .claude/commands/ (проєктні, комітяться) або ~/.claude/commands/ (особисті). Імʼя файлу стає імʼям команди. Команда може приймати аргументи — плейсхолдер $ARGUMENTS (або позиційні $1, $2) підставляє те, що ти дописав після імені.

    Приклад файлу .claude/commands/new-page.md:

    Створи новий page object для сторінки $ARGUMENTS за конвенціями проєкту:
    локатори getByRole/data-testid, методи у стилі clickOn.../open...,
    підключи як SubPages-бандл. Спершу покажи план, потім реалізуй.

    Тепер /new-page CheckoutPage розгортає цей промпт із підставленим аргументом. Це усуває копіпаст типових завдань і водночас стандартизує їх для всієї команди.

    Чим слеш-команда відрізняється від скіла? Обидва — багаторазові інструкції, але:

    Слеш-командаСкіл
    Хто вирішує запуститиТи, вручну (/імʼя)Модель, за збігом опису із задачею
    Що зберігаєПромпт-шаблонПроцедуру + опційно скрипти/шаблони
    Коли зручнішеЯвний, передбачуваний тригер«Хай агент сам зрозуміє, коли треба»

    Нюанс: скіл теж можна викликати як слеш-команду вручну — тоді різниця стирається до «простий шаблон» проти «процедура з ресурсами й автовиявленням».

    Пам'ять між сесіями і її межі

    Складімо канали персистентності докупи. Між сесіями «переживають»:

    • CLAUDE.md і файли пам'яті — правила й факти, які ти зафіксував; підвантажуються щосесії.
    • Скіли — процедури, доступні на вимогу.
    • Продовження сесії (--continue / --resume) — відновлює транскрипт попередньої розмови, а не «пам'ять» у сенсі правил. Це інший механізм: ти повертаєшся в ту саму розмову, поки її контекст ще актуальний.
    • Автоматична пам'ять (де інструмент її має) — агент сам веде файли з витягнутими фактами й індексом до них, дописуючи їх між розмовами.

    І тепер — межі, бо на них ловляться:

    • Ніщо не запам'ятовується саме собою. Не записав у файл — наступна сесія не знатиме. Усний домовленість у чаті випаровується разом із сесією.
    • Застаріла пам'ять гірша за відсутню. Правило «запускай npm run e2e», що лишилося після перейменування скрипта, збиває агента щоразу. Пам'ять треба доглядати, як код: рев'ю й чистка.
    • Секретам тут не місце. Проєктний CLAUDE.md і кастомні команди комітяться в git. Токени, паролі, ключі, внутрішні URL туди класти не можна — це витік. Особисте — в користувацьку пам'ять (~/.claude) або в gitignored-файли; гігієна секретів — окрема тема в розділі про Git/CI.
    • Продовження сесії не безмежне. Довга розмова впирається в контекстне вікно й починає деградувати; --resume не рятує від того, що модель «губиться» на розлогому транскрипті.

    Коли промпт, коли CLAUDE.md, коли скіл

    Три осі допомагають обрати канал:

    • Ефемерне чи постійне? Разова інструкція — промпт. Постійна — файл.
    • Завжди в контексті чи на вимогу? Коротке правило «майже завжди» — CLAUDE.md (платиш токенами щосесії). Довга рідковживана процедура — скіл (платиш лише коли спрацював).
    • Вирішує модель чи ти? Автовиявлення за задачею — скіл. Явний ручний тригер — слеш-команда.

    Так

    Ні

    Так, коротке правило

    Ні

    Хай агент сам вирішує коли

    Хочу запускати вручну

    Треба, щоб агент щось знав або робив

    Це разова дія?

    Промпт

    Має діяти в кожній сесії
    без нагадування?

    CLAUDE.md

    Це процедура під
    конкретний тип задачі?

    Скіл

    Слеш-команда

    Так

    Ні

    Так, коротке правило

    Ні

    Хай агент сам вирішує коли

    Хочу запускати вручну

    Треба, щоб агент щось знав або робив

    Це разова дія?

    Промпт

    Має діяти в кожній сесії
    без нагадування?

    CLAUDE.md

    Це процедура під
    конкретний тип задачі?

    Скіл

    Слеш-команда

    Приклад одного правила крізь усі канали. «Використовуй getByRole замість CSS» — це коротке правило «завжди», отже CLAUDE.md. «Ось саме для цього тесту зроби виняток і візьми CSS-селектор» — разово, отже промпт. «Згенеруй повний набір тестів для форми за нашим 8-кроковим шаблоном» — довга процедура, отже скіл. «Швидко завести новий page object командою» — ручний тригер, отже слеш-команда.

    Типові помилки

    Виглядає як «агент тупить», а насправді порожній CLAUDE.md. Агент раз за разом порушує конвенції не тому, що «дурний», а тому, що правил ніде не записано. Перш ніж скаржитися на модель — перевір, чи є в репо CLAUDE.md і що в ньому.

    Виглядає як турбота про якість, а насправді роздутий CLAUDE.md. Спокуса запхати в один файл усе. Наслідок зворотний: важливі правила тонуть у шумі, а кожна сесія дорожчає. Довге й рідковживане — у скіли.

    Виглядає як «скіл є, але не спрацьовує», а насправді слабкий опис. Скіл обирає модель за полем description. Розмите «допомагає з тестами» не дасть їй сигналу. Опис має точно називати, коли скіл доречний.

    Виглядає як зручний шорткат, а насправді витік секрету. Захардкоджений токен у кастомній слеш-команді або внутрішній URL у проєктному CLAUDE.md їде в git разом з усіма. Комітяться — отже без секретів.

    Виглядає як «агент пам'ятає проєкт», а насправді застаріла пам'ять. Правило, що пережило рефакторинг, тихо шкодить. Файли пам'яті старіють так само, як коментарі в коді.

    Виглядає як інструкція, а насправді ін'єкція. Текст «зроби X», знайдений у тікеті чи на сторінці, — це дані, які агент читає, а не команда від тебе. Плутати джерело інструкцій небезпечно.

    Підсумок

    • Пам'яті в агента немає — є перезавантаження тексту в контекст. Запам'ятається рівно те, що ти явно записав у файл.
    • CLAUDE.md — короткі правила «завжди», що комітяться й діють на команду; коштують токени щосесії, тому лаконічні. Скіли — довгі процедури на вимогу з поступовим розкриттям; їх обирає модель за описом. Слеш-команди — збережені промпти, які запускаєш вручну.
    • Інструкції складаються в ієрархію (організація → проєкт → користувач → підпапка → промпт); за конфлікту виграє конкретніше. Але команди приймаються лише від людини — вміст сторінок і тікетів це дані, не накази.
    • Секрети не кладуть у файли, що комітяться. Особисте — в користувацьку пам'ять або gitignored.
    • Вибір каналу: разове → промпт; коротке «завжди» → CLAUDE.md; довга процедура з автовиявленням → скіл; ручний шорткат → слеш-команда.

    Що питають на співбесіді

    Вага теми низька, тож питають радше практично, ніж на глибину:

    • «Як зробити, щоб AI-помічник дотримувався конвенцій вашої команди?» Інтерв'юер хоче почути про постійні правила проєкту (CLAUDE.md), що комітяться в репозиторій, а не про переписування одного й того ж промпта. Плюс — згадка, що файл має бути коротким.
    • «Чим відрізняється покласти інструкцію в промпт, у CLAUDE.md чи в скіл?» Тут перевіряють розуміння осей: ефемерне/постійне, завжди-в-контексті/на-вимогу, модель-обирає/ти-обираєш. Сильна відповідь дає приклад одного правила крізь усі канали.
    • «Як агент пам'ятає щось між сесіями?» Червоний прапорець — відповідь «він вчиться». Правильно: він без стану, персистентність — це файли, які підвантажуються щоразу.
    • «Що не можна класти в CLAUDE.md?» Секрети (файл комітиться) і роздуті рідковживані процедури. Це швидка перевірка на гігієну й здоровий глузд.

    Джерела

    Тему не покриває силабус ISTQB CTFL 4.0 — це інструментальна практика, специфічна для агентних асистентів; канонічне джерело тут — офіційна документація інструмента.