🇺🇦 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
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
🗣Дайджест тижня. Не новини заради новин - 5 речей, які можна застосувати в роботі вже зараз 👇

🛡 OWASP випустив Top 10 загроз для LLM

Окремий Top 10 для LLM (з 18.11.2024), у 2025-2026 став обов'язковим, як веб-Top 10. Prompt injection - на 1 місці другий рік поспіль.

Перед тим як пускати агента в робоче репо: постав human-approval на деструктивні команди (видалення, push у main) і обмеж доступ агента до прод-середовища.

💸 GitHub перевів Copilot на оплату за токени

З 1 червня всі плани Copilot рахують AI Credits за токенами (1 кредит = $0.01). Code completions лишились безкоштовними.

Розділи задачі за вартістю: дешеві моделі на рутину (тести, доки, рефакторинг), флагмани - лише на архітектуру. Інакше рахунок наприкінці місяця здивує.

📄 Формат правил проекту AGENTS.md підтримали OpenAI, Google (Jules), Cursor і Factory

Замість зоопарку (CLAUDE.md, .cursorrules, свій файл у Copilot) - один файл, який розуміють Codex, Gemini, Aider, opencode. 60k+ проєктів, курує Agentic AI Foundation (Linux Foundation).

Поклади в корінь репо AGENTS.md зі стандартами (naming, структура, патерни, тести). Claude Code поки не читає його нативно - роби симлінк CLAUDE.md на нього.

🐙 OpenCode - один із найпопулярніших open-source агентів (170k+ на GitHub)

Термінальний агент під MIT, 75+ провайдерів, LSP-діагностика повертається в модель після кожної правки.

Не хочеш залежати від одного вендора - постав OpenCode і підключи свої моделі (хоч локальні через Ollama).

🤖 GitHub відкрив Copilot SDK для всіх

2 червня. Агентний рушій можна вбудувати у свої тули: повний runtime (планування, тули, правки файлів, MCP), 6 мов, підписка не потрібна.

Робиш внутрішні тули - збери на ньому CI-асистента, генератор release notes чи review-бота, не пишучи власну оркестрацію.

Що з цього вже у твоєму процесі?

👍 - працюю так, не новина
👀 - забираю собі кілька пунктів
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥6👀6👍5👏1
9🔥4👀2
🍋jscpd має 1,5 млн завантажень на тиждень. І я не вгадую, що в ньому покращити. Я це вимірюю.

Сьогодні - про внутрішню кухню роботи над open-source проектом.


Як зрозуміти, чого вартий твій продукт порівняно з іншими?

‼️ Запустити бенчмарк 🚀

Я взяв 7 copy-paste детекторів і прогнав усі на одній базі: 547 файлів, 223 формати, однакові умови для всіх.

Результати показав тут:

⚡️ Швидкість
🪙 Токени
🧩 Формати - сьогодні, фінальна 👇

👀 Дуже часто Copy-Paste Detector каже, що «дублікатів немає». Але він просто не зазирнув всередину ваших Vue- та Svelte-файлів. Сучасний файл - це не суцільний текст: один .vue, .svelte чи .astro містить кілька мов одразу - скрипт, стилі, шаблон. У markdown - YAML і блоки коду. І те, як інструмент це читає, вирішує все.

Існує 2 види інструментів:

🔴 Flat-text - порівнюють усе з усім: CSS зі скриптом, шаблон зі стилями. Або шум, або сліпота: звіт каже «чисто», а копіпаст лишається в коді.

🟢 Section-aware - спершу парсить файл, ділить на мови, і лише потім порівнює CSS із CSS, скрипт зі скриптом. Це вміє лише движок jscpd.

👨🏻‍💻Окремо про markdown: код усередині .md jscpd дістає з блоку й порівнює як код, а не як текст документації. Дубль, схований у прикладі коду, більше не проходить повз.

Результат: знайти дублікати між різними форматами (наприклад, однаковий CSS у .svelte та .astro) здатні лише три інструменти. І всі - на jscpd.

💡 Висновок.

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

🔗 Бенчмарк форматів: jscpd.dev/benchmarks/cross-format
💻 GitHub:
github.com/kucherenko/jscpd
Підтримати:
opencollective.com/jscpd

А ваш CPD точно бачить дублікати у .vue і .svelte - чи просто каже «чисто»?

👍 Бачить, я перевіряв
👀 Не знаю - піду перевірю
😱 Тепер боюся дивитися
👍73😱3👀2