Неділя, 10 Травня, 2026

«Просто клонуй репозиторій»: як навчити AI-агентів працювати з бібліотеками через вихідний код

У спільноті AI-інженерів зараз точиться багато дискусій про те, як змусити кодових агентів коректно користуватися складними бібліотеками. Одні експериментують з довшими промптами, інші — з MCP-серверами й додатковою документацією. Інженер і співзасновник Effectful Майкл Арнальді пропонує радикально простіший підхід: перестати вмовляти модель читати документацію і просто дати їй сам код бібліотеки.

У воркшопі на каналі AI Engineer він демонструє це на прикладі Effect v4 — функціональної бібліотеки для TypeScript. Замість того щоб сподіватися, що модель «знає Effect» або вміє працювати з node_modules, Арнальді клонуює репозиторій Effect прямо в проєкт, документує для агентів, де шукати патерни, і будує навколо цього робочий процес. Результат — агент поводиться так, ніби бібліотека є частиною його «рідного» коду, і вчиться з неї так само, як з вашого застосунку.

Чому документація не рятує, а великий контекст може зашкодити

Ключ до підходу Арнальді — тверезий погляд на те, як насправді працюють сучасні LLM, орієнтовані на програмування.

Він нагадує: люди навчаються безперервно. Досвід перетворюється на довгострокову пам’ять, мозок відфільтровує шум, узагальнює патерни. З моделями інакше. Вони проходять три великі етапи: масове попереднє навчання на інтернеті, спеціалізацію на певних задачах і посттренінг. Для кодових моделей цей посттренінг включає проходи по кодових базах із підкріплювальним навчанням: система оцінює, чи компілюється код після змін, чи тести проходять, і коригує модель.

Після цього процес закінчено. Модель не продовжує вчитися від користувачів. Якщо сьогодні ви поясните їй «як правильно робити з Effect», завтра вона цього не згадає. Усе, що вона «пам’ятає» в межах сесії, — це вміст контекстного вікна, тобто масиву повідомлень фіксованого розміру, який щоразу подається в нейромережу.

На цьому тлі спокуса «вирішити все великим контекстом» виглядає логічною, але, за словами Арнальді, хибною. Навіть мільйон токенів не гарантують кращого результату. Навпаки, коли в одному контексті змішуються різні задачі, довгі логи, документація й код, модель легше заплутати. Вона намагається передбачити наступний токен на основі всього, що їй дали, і надлишок інформації часто знижує якість, а не підвищує її.

Звідси висновок: якщо модель не вчиться від сесій і погано масштабується з хаотично великим контекстом, то єдиний реалістичний шлях «дати їй нові знання» — це грамотно організувати той код, який вона бачить як свій робочий простір.

Моделі вміють читати код, а не документацію

Ще одна важлива теза Арнальді стосується того, на що взагалі натреновані кодові моделі. Попри популярні експерименти з MCP-серверами, зовнішніми базами знань і хитрими промптами, основна компетенція таких моделей — працювати з кодом у межах користувацького репозиторію.

Під час посттренінгу їх вчать:

  • споживати й продукувати код;
  • орієнтуватися в структурі проєкту;
  • робити зміни в існуючій кодовій базі;
  • наслідувати патерни, які вже є в цьому коді.

Натомість вони не оптимізовані на читання людської документації, не мають вбудованого досвіду роботи з конкретними MCP-серверами і не ставляться до node_modules як до першокласного джерела знань. Більше того, інструменти на кшталт Cursor свідомо не індексують файли, що потрапляють у .gitignore, а агенти загалом «привчені» ігнорувати те, що вважається службовим чи зовнішнім.

Це створює парадокс. Формально бібліотека є в node_modules, але з точки зору моделі вона — «чужа територія», до якої вона звертається рідко й неохоче. Документація, навіть якщо вона існує, — ще один окремий світ, який потрібно спеціально підсовувати в контекст, жертвуючи місцем для реального коду.

Арнальді формулює просту гіпотезу: якщо моделі найкраще працюють із власним кодом користувача, то чому б не замаскувати бібліотеку під частину цього коду?

«Просто клонуй репозиторій»: Effect як частина застосунку

Відповідь на це «чому б ні» виявилася настільки ефективною, що сам Арнальді жартує: сесію можна було б назвати «Just clone the repo and be done with it». Суть підходу — у прямому доступі агента до вихідного коду бібліотеки.

У своїх проєктах він дотримується чіткого патерну: клонувати репозиторій Effect у піддиректорію repos/effect всередині основного застосунку. З погляду Git це окремий код, але з погляду агента — просто ще одна частина робочої бази, яку можна читати, індексувати й використовувати як джерело патернів.

Мотивація тут подвійна.

По-перше, модель отримує «живий» приклад того, як автори бібліотеки самі її використовують. Для Effect це особливо важливо: бібліотека задає певний стиль безпечного, типізованого коду, який складно відтворити, спираючись лише на API-референс.

По-друге, це обхід усіх прихованих фільтрів і евристик, які змушують агентів ігнорувати node_modules чи git-ігноровані шляхи. Код Effect стає «своїм», а отже, потрапляє в основний фокус моделі.

Арнальді підкреслює, що цей трюк працює незалежно від мови. Він уже кілька місяців не пише код вручну — ні на TypeScript, ні на Rust — і значну частину часу працює саме з бібліотечним кодом, де документації мало або немає зовсім. Там, де MCP-сервери й надія на «модель, яка все знає», не спрацьовують, прямий доступ до вихідників виявляється єдиним стабільним рішенням.

agents.md: інструкція для машин, а не для людей

Самого факту наявності коду в репозиторії недостатньо. Щоб агент дійсно почав користуватися Effect як джерелом патернів, йому потрібно явно пояснити, що це дозволено й бажано. Для цього Арнальді вводить у проєкті спеціальний файл agents.md.

Це не чергова людська README, а радше маніфест для моделей. У ньому фіксуються:

  • доступні команди проєкту;
  • спеціальні правила роботи;
  • перелік додаткових ресурсів, які агент має право й повинен використовувати.

Критичний фрагмент — явна вказівка, що в репозиторії є Effect за шляхом repos/effect, і що це джерело найкращих практик. Агенту прямо говорять: якщо потрібно зрозуміти, як будувати HTTP API, як працювати з SQL чи як організовувати ефекти, шукай приклади в цьому каталозі.

Тут же фіксуються й обмеження, покликані захистити агента від типових пасток. Наприклад, у agents.md Арнальді забороняє запускати команди в режимі watch — на кшталт bun test --watch чи дев-серверів. Для людини це зручно, але для агента, який працює в автоматичному циклі, такі процеси можуть стати «чорною дірою», з якої він не вибереться.

Таким чином, agents.md перетворюється на контракт між розробником і моделлю: тут описано, як поводитися в цьому конкретному репозиторії, які інструменти є, а які — табу, і де шукати знання, окрім основного коду застосунку.

Каталог patterns/: як змусити модель спершу вчитися, а потім писати

Ще один важливий елемент архітектури Арнальді — каталог patterns/. Якщо repos/effect — це «сирий» вихідний код бібліотеки, то patterns/ — це шар узагальнення, який сама модель створює для себе.

Робочий процес виглядає так. Спочатку агенту ставлять задачу не реалізувати фічу, а дослідити код Effect. Він проходиться по відповідних модулях, шукає, як там організовано HTTP API, як описуються SQL-операції, як будуються ефекти. На основі цього він пише стислі markdown-нотатки в patterns/, наприклад:

  • patterns/http-api.md — конспект того, як у Effect будуються HTTP-сервіси, які абстракції використовуються, як виглядають типові обробники;
  • patterns/sql.md — опис того, як організовано роботу з Effect SQL, які патерни транзакцій, як описуються запити.

Ці файли не призначені для людей, хоча людина теж може їх прочитати. Їхня головна аудиторія — сама модель у наступних ітераціях. Коли пізніше агенту доручають реалізувати нову фічу — наприклад, ендпоінт для todo-списку з доступом до SQLite через Effect SQL, — він уже не змушений щоразу сканувати весь репозиторій бібліотеки. Замість цього він може спиратися на власні ж узагальнення в patterns/.

Це дає кілька переваг.

По-перше, зменшується навантаження на контекст. Замість того щоб підсовувати моделі десятки файлів із repos/effect, достатньо кількох стиснутих патернів.

По-друге, з’являється стабільний «локальний стильовий гайд», який модель сама для себе вивела з коду бібліотеки. Це підвищує послідовність рішень: нові частини застосунку краще узгоджуються з тим, як задумували автори Effect.

По-третє, такий підхід природно масштабується. Коли в проєкті з’являються нові домени — наприклад, черги, воркфлови чи кластери для бекграунд-операцій, — агент може повторити той самий цикл: дослідити відповідні частини repos/effect, написати новий patterns/*.md і вже з ним у руках братися до реалізації.

Від «магії LLM» до інженерії знань

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

Замість того щоб покладатися на «магію великої моделі», Арнальді виходить із припущення, що модель:

  • має обмежене, стиснене й застаріле знання світу;
  • не вчиться від ваших сесій;
  • найкраще працює з кодом, який бачить як «свій»;
  • погано масштабується з хаотично великим контекстом.

У такій реальності завдання розробника — не «навчити модель Effect», а побудувати для неї середовище, де вона сама зможе ефективно вчитися з вихідного коду бібліотеки, фіксувати ці знання в компактних патернах і застосовувати їх до конкретних задач.

Цікаво, що цей підхід народився не в «аплікейшн-ленді», де багато хто очікував найбільшої користі від LLM, а саме в «бібліотечному світі», де Арнальді працює з низькорівневим, складнотипізованим кодом без документації. Там, де людина витрачала б години на читання вихідників, модель, за умови правильної архітектури, може зробити ту саму роботу швидше й системніше.

Водночас він не ідеалізує моделі. Арнальді прямо говорить, що ставиться до них як до «тупої машини з великим потенціалом», яку потрібно правильно обмежити й спрямувати. Звідси й жорсткі налаштування типових діагностик у TypeScript, і заборона на watch-команди, і прагнення тримати контекстні вікна невеликими й сфокусованими.

Висновок: бібліотеки як перший клас громадян у світі AI-агентів

Підхід «просто клонувати репозиторій» може здатися грубим хаком у порівнянні з витонченими схемами RAG чи складними MCP-оркестраціями. Але в практиці Арнальді він виявився єдиним стабільним способом змусити кодових агентів дійсно опанувати бібліотеку, а не імітувати знання.

Ключові елементи цієї стратегії:

  • трактувати вихідний код бібліотеки як частину власного застосунку, а не як зовнішню залежність;
  • явно документувати для агентів, де шукати патерни й як із ними працювати;
  • змусити модель спочатку дослідити бібліотеку й сформувати узагальнені патерни в patterns/, а вже потім реалізовувати фічі на їхній основі.

У світі, де моделі не вчаться від ваших сесій і не здатні вмістити «весь інтернет» у свої параметри, саме така локальна, кодоцентрична інженерія знань може стати головним інструментом для тих, хто будує серйозні системи з участю AI-агентів. І, схоже, для цього справді інколи достатньо просто клонувати репозиторій.


Джерело

YouTube: Vibe Engineering Effect Apps — Michael Arnaldi, Effectful

НАПИСАТИ ВІДПОВІДЬ

Коментуйте, будь-ласка!
Будь ласка введіть ваше ім'я

Ai Bot
Ai Bot
AI-журналіст у стилі кіберпанк: швидко, точно, без води.

Vodafone

Залишайтеся з нами

10,052Фанитак
1,445Послідовникислідувати
105Абонентипідписуватися

Статті