🇺🇦 Math.random(): community of engineers
1.14K subscribers
401 photos
8 videos
558 links
AI-tools без хайпу, spec-driven development, розбори агентів (Claude Code, Cursor, Copilot), open-source кухня зсередини. Автор — Андрій Кучеренко.

Admin: @andrey_pk, @StartupEmulatorAdmin
YouTube: https://bit.ly/3cdY6HV
Download Telegram
🏗 Як виглядає проект, де AI-агенти не імпровізують

Money Tracker - PWA для трекінгу фінансів.

⚒️Svelte 5 + Bun + Hono + SQLite. Multi-user auth, multi-currency, OCR чеків. Збудовано через Gangsta Agents:

🟢 Кожна фіча - окремий Heist із 6 фаз. Артефакти лежать у docs/gangsta/. Видно ВСЕ - не тільки код, а й чому саме так

🟢 First-run setup: 2 раунди Grilling до коду. Адвокат знайшов TOCTOU race condition. Don викинув env-змінні. До імплементації не дійшло - ідея була не готова

🟢 Auth-Heist: 59 тестів, 0 фейлів. 12 Work Packages, кожен трасується до пункту контракту

🟢 Ledger зберігає Commandments: "Never delete refresh tokens on first use". Уроки виплачені кров'ю - наступний агент їх читає до коду

🟢 Negative Constraints - гейт, який Devils-Advocate перевіряє автоматично

Часто AI-фреймворки показують теорію без коду або код-приклади без реальної історії розробки.

Money Tracker - живий продукт. Всі рішення задокументовані. Всі відкинуті альтернативи зафіксовані.
👍4🔥43👏1
The Grilling: чому без adversarial review AI агент реалізує першу згенеровану ідею

Подивився 4 фреймворки spec-driven development:

• Spec Kit (88k)
• OpenSpec (37k)
• BMad (44k)
• Gangsta Agents (new)

У трьох з чотирьох немає головного: механізму, який ламає погану ідею ДО коду.

Як це працює в реальності:

🤖Агент пропонує рішення.
🧠Воно виглядає логічно.
Тести зелені.
🧑🏼‍💻Code review проходить.

Через тиждень виявляється, що архітектурно це глухий кут. Або security діра. Або переписувати все…

Чому? Бо ніхто не атакував ідею, поки була змога її дешево змінити.

The Grilling - це формалізована суперечка трьох ролей:

🟡Proposer - пропонує архітектуру
⚫️Devils-Advocate - зобов'язаний атакувати: вразливості, regression risks, порушення constitution
🔵Synthesizer - інтегрує валідні атаки і фідбек Don-а
🔴 Don (ти - User) - найвища інстанція. Жоден етап не проходить перевірку без твого прямого схвалення.

Мінімум 2 раунди. Максимум 7. Вихід тільки за Nash Equilibrium - коли Devils-Advocate не може підняти жодне нове валідне заперечення.

Це не "ну подебатили і досить". Це математичний критерій зупинки. Без критерію зупинки суперечка триває, поки всі не втомились.

🚨І перемагає не найкраща ідея, а найгучніший голос.

У BMad є свій reviewer, але без Nash. У Spec Kit і OpenSpec немає взагалі - тільки через розширення.

Чому це важливо в епоху AI 👇

Агент без атаки на ідею пише ту, яка прийшла першою.

Це не баг моделі.
Це властивість процесу.

Агент - не архітектор.
Він виконавець.


Питання до вас 💬

У вашій команді хтось ОБОВ'ЯЗКОВО шукає проблеми в пропозиції до того, як її імплементують? Чи це робить ваш лід на ретро - коли вже пізно?

А завтра поясню, чому «Правильний код» ≠ «правильна система»
9👍3🔥2😁1
Vibe coding vs Spec-Driven Development (SDD)
👍72🔥1
Vibe coding vs Spec-Driven Development (SDD)

Різниця не в швидкості.
Різниця в тому, хто головний.

🤖У vibe coding головний - агент:

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

Бо "правильний код" - властивість тексту. Тести зелені, лінтер мовчить.

А "правильна система" - властивість сенсу. Робити те, що треба, у тому контексті, що є, не ламаючи сусіднє.

Між ними прірва.

Туди провалюються проекти, які стартували з "та тут на тиждень роботи" і закінчились "давайте перепишемо з нуля". Код був ідеальний. Задум - ніколи не зафіксований.

⚖️У SDD головна - специфікація. The Spec is Law:

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

Що це міняє на практиці 👇

🤖Vibe coding: вимоги живуть в історії чату.

⚖️SDD: у документі, який є джерелом правди.
———
🤖Vibe coding: агент вирішує архітектуру на ходу.

⚖️SDD: архітектура зафіксована до першого рядка.
———
🤖Vibe coding: помилку знаходиш на проді.

⚖️SDD: погана ідея вмирає на етапі рев'ю спеки.
———
🤖Vibe coding: кожна сесія - чистий аркуш.
⚖️SDD: рішення і відмови зберігаються між сесіями.
———
🤖Vibe coding швидкий рівно до моменту, коли треба зрозуміти, що там відбувається.

⚖️SDD повільний на старті - і швидкий усе інше життя проекту.


Це не про "більше документації". Це про те, хто диктує: твій задум чи імпровізація агента🥊
👍94🔥2
42% дублів. Не в коді від AI - у файлах, що вчать AI не дублювати‼️

Я просканував 49 AI-згенерованих проектів на GitHub

🍋У 7.24 млн рядків коду:

🔁 25 612 дубльованих блоків
📊 7,98% середнє дублювання
⚠️ 45 із 49 проектів - з дублями

Думав, найгірші — «vibe-coded» застосунки, зліплені за вихідні з AI. Виявилось - ні. 6–9%. Вище норми, але не критично.

А далі - головний парадокс.

Найвищий рівень дублювання спостерігався в інфраструктурі, створеній для того, щоб AI-агенти генерували чистий код

Skill-бібліотеки - markdown-інструкції, що вчать Claude, Cursor, Gemini й Codex поводитись правильно - дали 30–42% дублів

Я підтримую jscpd 13 років. Бачив багато дублів. Але це нова форма: шар, що вчить машини дисципліни, - найменш дисциплінований у стеку

Повна методологія, топ-10 і застереження 👇

🔗https://hackernoon.com/what-49-vibe-coded-github-projects-revealed-about-ai-code-duplication
6👍5🔥3
Історія про те, як AI-агенти нескінченно повторюють одні й ті самі помилки - бо система не вміє їх запам’ятовувати

На прикладі Money Tracker. Це не теоретичний edge case - це 1-2% мобільних сесій у поганій мережі.

У нас є Ledger - файл колективної пам’яті проекту. Туди потрапляють уроки, «виплачені» попередніми Heist-ами. Наступний агент читає їх ДО того, як писати код.

Один з найдорожчих рядків там:

«Never delete refresh tokens on first use; mark them as consumed.»

Звідки він з'явився 👇

Auth-Heist.

Реєстрація + логін + refresh-token rotation.

Класична схема: при оновленні access-token-у refresh теж ротується. Старий стає недійсним. Виглядає безпечно.

Перша імплементація виглядала логічно:

🔺 клієнт приходить з refresh-token;
🔺 сервер одразу видаляє його з БД
🔺 видає новий;
🔺 повертає клієнту.

Проблема знайшлась у тестах race condition.

Сценарій:

🔴 Клієнт надсилає запит А з refresh-токеном.
🔴 Сервер видаляє токен, видає новий, відповідає.
🔴 Відповідь губиться у мережі - timeout або обрив.
🔴 Клієнт ретраїть з тим самим refresh-токеном.
🔴 Сервер: "Цього токена немає в БД"
😡Logout. Юзер злий.

Що означає: погана ідея пройшла гейт. Дорого виправляли.

Рішення: не видаляти токени. Маркувати як consumed. У БД лишається запис, при ретраї сервер бачить consumed=true і повертає кеш попередньої відповіді або новий refresh, якщо вікно ретраю активне.

І найважливіше 👇

Цей рядок тепер у Ledger, у файлі, який Reconnaissance ОБОВ'ЯЗКОВО читає до кожного нового Heist-у з auth-тематикою.

Тобто наступний агент, який торкатиметься токенів, отримає це як ввідні. Без шансу пропустити.

❗️Чому це важливо

Більшість команд "вчаться на своїх помилках" неформально:

🚩Це означає - не вчаться.
🚩Урок живе в голові того, хто помилився.
🚩Звільнився - урок зник.
🚩Прийшов новий розробник - повторив помилку.

Ledger - це механізм, який робить інституційну пам'ять примусовою❗️

Не "було б добре пам'ятати", а "наступний агент не зможе працювати, не прочитавши".

Скільки коштує ваше “ми це вже проходили, але я забув”?
7👍3👏2
0 токенів = 100% тато. Математика, яку зрозуміє кожен розробник😁
😁12👍43
🎮 «Додати лідерборд у Tetris». Тривіально?

Прогнали цю «просту» фічу через adversarial review ДО специфікації.

Один раунд.
Devil's Advocate знайшов три діри:

1) Порушення constitution - буфер імені в чистому state machine, від якого залежать 261 тест.

2) Race condition - game-over через events-масив, який renderer спорожнить першим. Тригер губиться.

3) Stored XSS — імена з localStorage в DOM через innerHTML.

3️⃣ діри.
1️⃣ раунд.
0️⃣ рядків коду.

Найдешевший момент: вбити погане рішення поки воно ще не записане як істина.

Стаття 👉 https://dev.to/kucherenko/the-grilling-29d1
👍53👏3
1. 🌐 WebMCP - MCP приходить у браузер.
Google представив стандарт, де сайт сам повідомляє агенту свої можливості. Агент не вгадує інтерфейс наосліп.
Цінність: час освоювати AEO (Agent Engine Optimization) - оптимізацію сайту під AI-агентів, що заходять замість юзера.

2. 🎯 Claude Opus 4.8 (28.05)
Головна фіча - чесність: модель у 4 рази рідше пропускає власні баги без позначки. Додали effort control - самі вирішуєте, скільки токенів витрачати.
Цінність: Anthropic визнав те, через що болить spec-driven - агент впевнено бреше про прогрес. Тепер борються на рівні моделі.

3. 🪱 Атака на TanStack (11.05)
Скомпрометували 42 пакети через дірку в GitHub Actions. Версії пушнув легітимний процес, не крадені токени.
Цінність: ставили того дня - оновіть секрети, перевірте GitHub Actions.

4. 🔄 Remix 3 у беті
Фреймворк
, народжений у React-екосистемі, відвʼязався від React зовсім. Розворот для тих, хто знав його як альтернативу Next.js.
Цінність: будуєте на Remix - розберіться, на чому він тепер стоїть.
👍95👏2
10 топових безкоштовних AI-курсів, які я б рекомендував кожному розробнику 🚀

Частина 1: Для інженерів. 

Якщо ви тільки починаєте свій шлях в AI - наступний допис буде для новачків

🥷 Екосистема Anthropic & Claude

Практичні навчальні модулі та гайди з розробки AI-агентів та інтеграції Claude

1) Claude Code in Action
2) Introduction to MCP
3) MCP: Advanced Topics
4) Introduction to Agent Skills
5) Building with the Claude API

🎓 Фундаментальна база (LLM & ML)

Курси, які дадуть глибоке розуміння того, що відбувається "під капотом" нейромереж

1) Harvard CS50: Intro to AI with Python
2) DeepLearning: Finetuning LLMs
3) Building Language Models on AWS

🛠️ Практичні інструменти: Microsoft & Google

Готові рішення для щоденного прискорення розробки

1) GitHub Copilot for VS
2) GenAI for Developers

Зберігайте в закладки та прокачуйте скіли на практиці!

Не проблема розпочати курс - проблема не кинути його 😅

Як у вас?

👍 - доводив(ла) хоча б один курс до кінця
👎 - кидав(ла) майже одразу
👍147👎3
14👍3🕊3😁22
Найдорожча помилка з потужним інструментом - застосовувати його скрізь.

The Grilling - фаза, де ідея проходить структуровану атаку, перш ніж стати специфікацією. Proposer захищає рішення, Devil's Advocate шукає діри, Synthesizer переписує після кожного раунду.

Сесія завершується, коли Devil's Advocate не має валідних заперечень і Don не має питань - обидва тиски вичерпані одночасно. Nash Equilibrium.

Але є зміни, де цей процес завдає більше шкоди, ніж користі:

▪️ Тайпо, бамп залежностей - агенти вигадують заперечення, щоб заповнити раунди. Система переходить в театр.
▪️ Чистий рефактор із зеленим baseline - потрібна перевірка збереження поведінки, не атака ідеї.
▪️ Прототипування - adversarial review вбиває дослідження.
▪️ Прод горить, фікс малий - пропусти, задокументуй, рухайся.

Правило: скільки коштуватиме відкотити це, якщо ти помиляєшся?
Більше за review → гриль. Менше → ні.

Rigor -
це не ганяти всі гейти щоразу. Це розуміти, який гейт важливий у конкретний момент

Part 2 серії про Gangsta Agents
👍72🔥2👏1
Multi-agent debate ≠ The Grilling.

Виглядають однаково: два агенти сперечаються, третій синтезує. Але вирішують різні задачі.

🤔 Три відмінності:

1. Grounding. Дебати працюють на тому, що в промпті - дві LLM ввічливо галюцинують одна одній. Grilling не стартує, поки ground truth не перевірено.

2. Ціль. Дебати шукають найкращу версію позиції. Grilling питає - чи варто її тримати взагалі. Легітимний результат включає «вбити ідею повністю».

3. Зупинка. Дебати - за розкладом, фіксовані раунди. Grilling — на рівновазі: жодного нового валідного заперечення І жодної залишкової тривоги у Don.

Дебати зупиняються на «досить сперечатися». Grilling - на «нема що валідного атакувати». Маєш вердикт, що пережив атаку.

Однакова обгортка. Зовсім різний механізм усередині.

Part 2 👉
https://dev.to/kucherenko/the-grilling-29d1
👍10🔥43
jscpd v5: 83 секунди → 3.4 секунди

Copy-paste detector для коду тепер у 24–37 разів швидший - повне переписування engine на Rust.

Реальні цифри (10 прогонів, Apple Silicon, v4 Node.js проти v5):

→ 548 файлів: 1.03с → 0.03с (34x)
→ 9K файлів, 164 MB: 15.8с → 0.43с (37x)
→ 17K файлів, 902 MB: 83с → 3.4с (24x)

Чому різниця така велика:

Зник startup overhead - на малому репозиторії майже весь 1.03с був запуском Node.js, ще до
сканування. Нативний бінарник стартує миттєво.
Тепер усі ядра - старий engine був однопотоковий, новий спалює 7.3с CPU за 3.4с реального часу.

І головне: drop-in заміна. Ті самі прапорці, конфіг, 223 формати.

Встановлення те саме - npm install -g jscpd.

Запустіть на своєму найбільшому репозиторії і напишіть результат у коментарях)

github.com/kucherenko/jscpd
🔥9👍72👏2
AI-агенти швидкі, але некеровані? Gangsta Agents повертає контроль: кожен агент знає роль, кожен код починається зі специфікації 🎯

Як це влаштовано:

🔸 Spec Before Code — фаза Sit-Down завершується підписаним Contract. Без нього жоден Worker не пише код.

🔸 Battle-Tested Skills — розвідка, TDD-дрили, дебаг через допит, стратегії виходу. Кожна навичка — чистий markdown-файл.

🔸 Правило 1% — якщо є хоча б 1% шансу, що скіл застосовний, ти його викликаєш. Без раціоналізацій. Без скорочень.

🔸 Мультиагентна оркестрація — Underboss декомпозує, Crew Leads оркеструють, Workers виконують паралельно. Gangsta Agents Family масштабується.

🔸 Мультиплатформність — нативні інтеграції: Claude Code, GitHub Copilot, Gemini CLI, OpenCode, Codex. Cursor — через npx skills add.

І кожен phase gate проходить лише зі схваленням Don (user) 🤝

👉 https://gangsta.page
👍62🔥2👏1
А ви знали, що більше знайдених дублікатів не означає кращий пошук? Іноді це лише більше… помилок.

Я постійно вдосконалюю свій jscpd, тож вирішив перевірити, як справляються інші. Зібрав сім інструментів і прогнав на одній базі: 547 файлів, 150+ форматів, для всіх однакові умови.

І ось що показали цифри.

Багато клонів, мало сенсу:

⚠️ Duplo - 162 мс, 518 клонів, найбільше з усіх. Зіставляє сирий текст без токенізації, реагує на відмінності у форматуванні - тому більшість збігів false positives.

Майже нічого не бачить:

⚠️ Fallow dupes - 164 мс, 10 клонів. Аналізує лише JS/TS, решту 513 файлів із 547 не опрацьовує - непридатний для багатомовних баз.

Повільні й обмежені в покритті:

⚠️ Simian - 964 мс, 424 клони. Звітує агрегованими блоками, без поділу на мови - не зрозуміти, у якій секції коду дублікат.
⚠️ PMD CPD - 36 с, 56 клонів. Ретельний у межах однієї мови, але повільний: опрацював лише 71 файл із 547.

Один клон різниці - і 32 рази у швидкості. Переписування на Rust дало приріст, зберігши якість виявлення:

jscpd v5 (Rust) - 84 мс, 212 клонів.
jscpd v4 (JavaScript) - 2.7 с, 211 клонів.

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

Це перший із трьох розборів цього бенчмарку. Далі - як інструменти розпізнають дублікати між різними форматами файлів, і скільки токенів з'їдає звіт кожного з них під час роботи з LLM (частина 2)

🔗 Повний бенчмарк: jscpd.dev/benchmarks/detection-speed
💻 GitHub: github.com/kucherenko/jscpd
Підтримати: opencollective.com/jscpd
👍5🔥41👏1
⌨️Найдорожча помилка розробника у 2026 — вчити те, що вже вміє AI.

AI не замінить розробників.

Але він уже замінює тих, хто не розуміє, як будуються AI-системи. Питання лише в тому, чи встигнете ви адаптуватися.

За останні пів року вимоги до Senior+ рівня змінилися радикально. Ось мій roadmap на карті вище — орієнтир, куди вкладати час, поки вікно можливостей відкрите, а конкуренції в цих темах ще мало.

Svelte, який рахує токени.
Python, що втрачає агентів.
Аудит, якого ще не було.

Повний розбір — на DOU
🔗 https://dou.ua/forums/topic/60053/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍86🔥3👀1
👀Як взагалі можна спалити 158 000 токенів там, де вистачає 2 800?

Дуже легко. Показую.

Той самий код, ті самі 212 дублікатів. Один інструмент пошуку копіпасту віддає AI звіт на 2 800 токенів, інший — на 158 000.

Різниця — це ваші гроші, спалені на токенах.

Проблема:
Більшість інструментів видають «важкі» звіти, не оптимізовані для LLM — величезні JSON або неструктуровані дані. Вони забивають контекстне вікно, сповільнюють відповідь і роздувають вартість кожного запиту.

А тепер наочно. Ефективність на 212 клонах:

🔴 Гроші на вітер — не для LLM:

• Duplo — 158 000 токенів, величезний JSON із купою false positives
• PMD CPD — 21 000 токенів, розкидані по 34 файлах

🟡 Частково придатні:

• Simian — 15 000 токенів, без структурованих метаданих
• Fallow — 400 токенів, та це не економія: він просто бачить мізерну частину коду

🟢 Готові до роботи з AI — економно:
• jscpd@5 — 2 800 токенів
• jscpd@4 — 2 700 токенів
• jscpd-rs — 3 000 токенів

У jscpd є окремий флаг --reporters ai — компактний звіт без зайвого шуму, створений саме для AI-пайплайнів.

⚠️ Важлива ремарка:
Токени на клон не можна порівнювати між інструментами напряму — кожен визначає «клон» по-своєму. Порівнюйте лише всередині однієї групи.

Висновок:
Коли звіт іде в LLM, його розмір — це прямі витрати вашого часу й бюджету. Той самий результат можна віддати економно або спалити на ньому гроші. Обирайте інструменти, які поважають ваш токен-ліміт.

Це друга з трьох частин про порівняння Copy-Paste Detector (CPD) інструментів. Частина 1 — про швидкість. Далі — як інструменти бачать дублікати між різними форматами файлів.

🔗 Бенчмарк токенів: jscpd.dev/benchmarks/ai-token-efficiency
💻 GitHub: github.com/kucherenko/jscpd
Підтримати: opencollective.com/jscpd
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👏21🔥1
🔴38% зайвих токенів і втрачених грошей на кожному запиті до AI — через ваш фреймворк. Саме стільки коштує вибір «не того».

Я перевірив ті самі компоненти — від hello до таблиці з фільтром — і написав їх на кожному фреймворку. Однакова функціональність, один токенізатор:

🟢 Svelte — 598 токенів
🟡 React — +25%
🔴 Angular — +38%

+38% — це не про стиль коду. Це рядок у вашому рахунку за API. Бо код тепер читають не люди, а агенти — тисячі разів на місяць. На кожному рев'ю, кожному «полагодь оце», кожному прогоні ви платите за зайве знову і знову.

А тепер парадокс, який ламає інтуїцію. У Svelte НАЙГІРШЕ стиснення у всій групі — його синтаксис погано лягає в токенізатор. І він однаково виграє. Чому? Бо коду треба менше: ти пишеш count++ — решту добудовує компілятор. У React ти пишеш ту саму сантехніку руками. І платиш за кожен символ.

Висновок простий: усе, що ви пишете явно — має ціну. Усе, що виводить компілятор — безкоштовне.

Повне дослідження — таблиці в доларах по 10 моделях 👀у статті на Hacker Noon

Це частина 1 з 5. Далі — мови, де анотації типів у TypeScript додають +63% до ціни за ту саму логіку 👀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥3👀3