Стендап Сьогодні
📢
Канал в Telegram @stendap_sogodni
🦣
@stendap_sogodni@shevtsov.me в Федиверсі
Пости з тегом #ПомічникШІ
15.01.2026
Розширення можливостей помічника ШІ засобами MCP
Нарешті я дістався до MCP. Довгий час вІдкладав, бо це виглядало достатньо складно. Плюс, мені більш-менш вистачало того, що агент здатний досягнути з одними лише командами оболонки. Але, підійшов вдалий момент.
Для тих, хто не знає, MCP (Model Context Protocol) - це спосіб дати агенту ШІ нові інструменти. Типовий агент з коробки вміє редагувати файли, виконувати команди оболонки та шукати в інтернеті. А шляхом MCP до нього можна додати буквально будь-які функції.
Для того нам потрібний сервер MCP. Це допоміжна програма, яка спілкується з оболонкою агента пакетами JSON. Оболонка запускає сервер, забирає з нього набір доступних дій, та робить доступними для агентів. А коли агент звертається до певної дії, передає команди сервера MCP та той їх виконує. Сервер MCP є звичайною програмою та отримує доступ до локальних ресурсів — наприклад, може прочитати файл конфігурації. Також сервер запускається надовго, а значить, може мати власний стан — чи навіть підключення до інших сервісів.
Все це звучить помірно цікаво, якщо мова йде про загальні MCP. Ну може, такий, що вміє надсилати пошту. Ще й з чужим кодом всередині.
Але ось моя головна думка тут: не обовʼязково шукати чийсь незрозумілий MCP. Ти завжди можеш згенерувати собі свій, під конкретні обставини та задачі. Так, я відразу кажу “згенерувати”, а не “написати”, бо писати власноруч сенсу мало. А агент цілком здатний згенерувати MCP за твоїми вимогами.
Мій приклад такий: хотілося мати консоль Rails на стейджингу. Тоді значно спрощується перевірка невидимих частин логіки, бо агент може це робити власноруч. (Ба більше, оскільки він знає код проєкту, то що писати в консоль, теж добре розуміє.) Отже, згенерував MCP, який і знає, як на стейджинг потрапити, і де взяти ключі. Зручно надзвичайно.
23.01.2026
Як я робив MCP для Jira
ОК, ще більше заглиблююся в переконанні, що власні, доморощені MCP підіймають роботу з агентом до наступного рівня ефективності.
Вчора треба було почистити беклог в Jira. Я вже не раз писав про свої спроби щось там оптимізувати. Найкращим поки підходом був набір збережених запитів JQL - мої відкриті задачі, задачі, що очікують тощо. Мені залишалося пройтися по нім та опрацювати.
Але навіть так, робота з Jira залишалася нудним та неприємним обовʼязком. Тому (і це починає бути патерном), відкриваю Cursor і кажу: ось в мене є acli, давай, проаналізуй все що мене стосується.
Він поколупав документацію до acli всілякими викликами acli jira --help і так далі. Потім витягнув десь ті ж самі результати, що і я раніше. Але різниця в тому, що LLM на ходу може згрупувати ці результати, оформити, та робити над ними дії. Так, перше, що я зробив — це сказав “переведи все, що в Ready for Release понад місяць, у Closed”. (Інфраструктурні задачі самі не закриваються.) І оце вже дійсно потужно!
Поробив ще трохи, а потім кажу — ми тут розібралися, як працювати з Jira через acli, збережімо інструкцію в файл. (Це дуже корисний хід, часто так роблю.) А потім думаю… ну якщо вже інструкція є — зроби з неї кілька команд. То й зробив на кшталт /jira-my-tasks і так далі.
От сиджу сьогодні з тими командами, але річ у тім, що команди (наскільки я знаю) запускаються явно мною, а не агентом в процесі інших операцій. Тож, нарешті, кажу “а тепер — роби з команд MCP!” Ну то й він зробив малесенький MCP на Python, який вміє робити ті самі виклики acli.
І тепер, нарешті, я можу писати складні запити, як-от “створи для цього чату задачу у відповідному епіку”. Та агент здатний перелічити епіки, знайти той, що найбільше має сенс, та вкласти в нього задачу. Круть! А якщо мені щось не подобається, я можу швидко внести зміни простим текстом.
Ще тут висновок. LLM найкраще розкриваються там, де багато контексту, складна послідовність дій. Поки ти робиш одиничні зміни — може так виглядати, що LLM це зайве ускладнення, та, певно, так воно і є. Тому раджу пробувати задачі вищого порядку — сміливіше!
28.02.2026
Рівно два роки тому (навіть не знаю, як такі збіги відбуваються! магія!) я писав про керування водяним охолодженням — а саме, програму FanControl для Windows.
Досі нею користуюся, програма гарна. Я її запускаю як сервіс за допомогою іншої чудової програми - Non-Sucking Service Manager (NSSM). NSSM вміє будь-яку програму зробити системним сервісом — а значить, вона не буде маячити на робочому столі та буде надійно запускатися та перезапускатися.
От тільки змінювати конфігурацію такої загорнутої FanControl стало незручно. Треба зупинити сервіс, відкрити у звичайному режимі, відредагувати, закрити, запустити сервіс наново… А ще вона ж не під головним користувачем системи, а під адміністраторським. А Windows не дає одночасно зайти двома користувачами, тож потреба все зупинити перетворює навіть тривіальну зміну в справу хвилин на 20.
Звучить як ідеальна задача для агентів! В мене вже налаштований SSH, то й кажу “от комп, на ньому FanControl, збільш стартову швидкість помпи на 3%.” Хотів перевірити, чи воно зрозуміє стільки деталей.
З SSH проблем ніяких. Чудово, що агент розуміє командний рядок Windows та PowerShell значно краще за мене. (Окрім: SSH не мав authorized_keys. А для того, щоб агент зробив все, потрібний безпарольний доступ. та виправлення цього навіть з агентом зайняло значно більше часу, ніж решта справи. Як завжди. Але принаймні це разове покращення.)
Далі, на диво без жодних інструкцій LLM знайшла конфігураційний файл FanControl. Я сам не знав, де він є! Звісно, знайти можливо, та й програма має відкритий код, але ж сам би я витратив на це більше пари хвилин. Тут теж нюанс: виявилося, що в FanControl є чи то два місця з конфігурацією, чи то воно змінилося, а старий файл залишився, але з першої спроби ми відредагували не той файл та зміни не підтягнулися. Коли зрозумів, що помпа працює, як раніше — за допомогою того ж агента знайшов помилку.
Місце, яке треба змінити, агент теж знайшов серед багатьох профілів вентиляторів. Конфігурація у JSON, зате потрібний параметр є однією з двох координат ламаної функції на кшталт ["50,35", "70,100"] - що значить, до 50 градусів увімкнути помпу на 35 відсотків, до 70 поступово збільшувати до 100, та там і тримати. От, агент зрозумів, що перше значення потрібно замінити на 50,38. Ну, за тим він почав вигадувати скрипти PowerShell для часткової заміни рядка в файлі, що ніяк не виходило. Аж поки я не сказав “та скопіюй вже файл на нашу машину, виправ та поверни на місце”.
Ну й з перезапуском сервісу все зовсім просто та прямолінійно.
Чи заощадив я тут час? Якщо “чистого часу”, то, певно, так. Але також помічаю, що завжди знаходиться, на чому зачепитися. З агентами — зазвичай на дрібних з першого погляду недоліках виконання та особливо автоматизації.
12.03.2026
ШІ-вигоряння
Як почав використовувати агентів постійно, то в певний момент опинився в неприємному стані. Наче і працював весь тиждень, наче було продуктивно, але обʼєктивного просування по задачах не бачив.
Зʼясував, що перша причина в розпиленні зусиль. Широко відомий факт, що повільна збірка змусить інженерів відвертатися та втрачати контекст тут множиться на інший — агент дозволяє почати щось нове з мінімумом зусиль. Виходить, поки агент для однієї задачі думає, я можу почати іншу… Ну навіть не робити, а планувати чи досліджувати. А потім — третю… А як не в одному проєкті — то в кількох…
Таким чином швидко приходить стан, де я вже не памʼятаю, чим займався. Бо увага розсіяна! Та замість впевненого прогресу однієї задачі отримую трішки змін там, відкритий ПР тут, незавершений план ще десь — та головне, що потім навіть зібрати до купи всі початі задачі стає складно, не те що довести до кінця.
Отже, що я придумав з цим робити. Чітко визначати для себе задачі, над якими сьогодні працюю, та доводити їх до кінця, перш ніж починати нові. Якщо доводиться чекати на агента — краще я в цей час перевірю повідомлення, зроблю кави чи розімнуся.
Це веде до наступного пункту. Критично важливо дозволити агенту достатньо операцій, щоб він міг завершувати вагому частину роботи без втручання. Ну як мінімум — це запускати тести! Але про це я ще окремо напишу.
13.03.2026
Як не бути рабом ШІ
Коли я починав користуватися Курсором, в оточенні агенту не запускався Ruby. Тому кожний тест чи іншу команду я власноруч запускав в терміналі, а потім копіював в чат. (Ну, ще раніше я ще й команди сам писав та обирав, що саме скопіювати.)
Звісно, потім я це полагодив. Проте, оскільки я остерігався дозволити агенту запускати все підряд, то сидів та погоджував кожний rspec. А ще нагадував агентам проганяти rubocop - зазвичай вже після того, як на CI впало.
В такому режимі роботи виходить, що агент робить все цікаве, а на мене залишається брудна робота.Причому що більше використовуєш агентів, то це відчуття підсилюється. Проводити дні за запуском тестів — дико вимотує.
Щоб такого уникнути, вдався до кількох мір. Ні, я досі не збираюся дозволяти агентам повну свободу. Натомість опановую allowlist. Це перелік команд, які дозволено запускати автоматично, без погодження. Цікаво, що allowlist містить префікси кожної команди, тож можна туди додати комбінації на кшталт bundle exec rspec.
В allowlist критично важливо запхати всі команди, які не потребують справжнього рішення з мого боку. От, якщо будемо видаляти базу в продакшні — тут я краще подивлюся. А тести, лінтер, дрібні команди збірки та організації по типу git - усі роблю дозволеними.
(До речі, саме Ruby в мене не працює в sandbox, бо доступу до зовнішніх файлів. Тож це не вихід)
Як виявилося, в Cursor цей allowlist сидить в базі SQLite, тож його не так легко відредагувати напряму. А хотілося саме напряму, тому навайбкодив скрипт, який переганяє allowlist з простого текстового переліку в налаштування.
Та друга важлива міра — доповнювати скіли інструкціями про те, що повинно відбуватися завжди. Так я навчив Cursor проганяти й rspec, і rubocop для кожної зміни. Дехто хапає готові кілометрові скіли — мені вистачає прицільно описувати те, що потрібно саме мені.
І останнє тепер — увімкнути сповіщення від Cursor. Може, в когось завжди увімкнені всі сповіщення — а я до нових джерел відношуся максимально скептично та майже нічого не вмикаю. Втім тут той виняток, коли сповіщення спрощують життя — так саме, як і з довгим запуском тестів.
Тепер я можу залишати Cursor на довгі проміжки часу та отримувати вагомі результати. (Звісно, це після фази планування — про яку теж можна окремо.)

