This media is not supported in your browser
VIEW IN TELEGRAM
Бачити, що агент робить всередині - нарешті реально
VoltAgent - open-source TypeScript-фреймворк для агентів.
Головна ставка тут не на те, як їх будувати, а на те, як їх дебажити.
🔴 Проблема, яку знають усі: агент мовчки обрав не той тул чи пішов не туди - і ти сидиш у логах, вгадуючи, що сталося.
Засновники прямо кажуть, що надихались n8n: виконання агента показане як канвас із кроками. Видно, які тули викликались, що вирішив, де впав.
⏺ Що дає фреймворк
Memory, RAG, tools, MCP, voice, workflow, guardrails, evals. Мультиагентність: supervisor координує спеціалізованих sub-агентів. Провайдер міняється в конфігу, а не в логіці агента - OpenAI, Anthropic, Google та інші.
⏺ VoltOps - обсервабіліті окремим продуктом
Реалтайм-трейси, логи, метрики, інспекція памʼяті й контексту, білдер промптів. Важлива деталь: VoltOps framework-agnostic, працює через OpenTelemetry і з LangChain, LlamaIndex, Autogen. Дивитись можна, навіть якщо фреймворк ви не міняєте.
⏺ Старт за секунди
npm create voltagent-app@latest - CLI збирає проект і дає стартовий агент разом із прикладом воркфлоу.
Що варто розуміти одразу: MIT - це фреймворк. VoltOps - окремий продукт компанії. І це не візуальний конструктор агентів: код пишете ви, канвас лише показує, що з нього вийшло.
Тренд той самий: TS-екосистема для агентів дорослішає. Але VoltAgent б'є в конкретну біль - не "як зробити агента", а "як зрозуміти, чому він зламався".
👀 Гляньте самі: https://github.com/voltagent/voltagent
Чого тобі найбільше бракує в роботі з агентами?
🔥 - саме нормального дебагу
👀 - поки розбираюсь із базою
#ai_tools #agents
VoltAgent - open-source TypeScript-фреймворк для агентів.
Головна ставка тут не на те, як їх будувати, а на те, як їх дебажити.
Засновники прямо кажуть, що надихались n8n: виконання агента показане як канвас із кроками. Видно, які тули викликались, що вирішив, де впав.
Memory, RAG, tools, MCP, voice, workflow, guardrails, evals. Мультиагентність: supervisor координує спеціалізованих sub-агентів. Провайдер міняється в конфігу, а не в логіці агента - OpenAI, Anthropic, Google та інші.
Реалтайм-трейси, логи, метрики, інспекція памʼяті й контексту, білдер промптів. Важлива деталь: VoltOps framework-agnostic, працює через OpenTelemetry і з LangChain, LlamaIndex, Autogen. Дивитись можна, навіть якщо фреймворк ви не міняєте.
npm create voltagent-app@latest - CLI збирає проект і дає стартовий агент разом із прикладом воркфлоу.
Що варто розуміти одразу: MIT - це фреймворк. VoltOps - окремий продукт компанії. І це не візуальний конструктор агентів: код пишете ви, канвас лише показує, що з нього вийшло.
Тренд той самий: TS-екосистема для агентів дорослішає. Але VoltAgent б'є в конкретну біль - не "як зробити агента", а "як зрозуміти, чому він зламався".
Чого тобі найбільше бракує в роботі з агентами?
🔥 - саме нормального дебагу
👀 - поки розбираюсь із базою
#ai_tools #agents
Please open Telegram to view this post
VIEW IN TELEGRAM
👀6👍4🔥4
This media is not supported in your browser
VIEW IN TELEGRAM
Вайб-кодинг.
Питань більше немає.
😄 - смішно, бо правда
😱 - страшно, бо правда
Під #SpecDrivenDevelopment є що почитати))
Питань більше немає.
😄 - смішно, бо правда
😱 - страшно, бо правда
Під #SpecDrivenDevelopment є що почитати))
😁18😱9🔥2❤1
jscpd виріс з 2,37M до 3,21M завантажень на тиждень. За три тижні.
Я не запускав ніякого просування. Не потрапляв у розсилки. П'ята версія вийшла давно.
Моя здогадка: це агенти. Щось, що читає код за гроші, тепер запускає детектор дублів, перш ніж почати писати.
І в цьому є сенс. Агент, який збирається додати функцію, має привід перевірити, чи немає такої вже десь у репозиторії. Людина зазвичай вважає, що згадала б. Агент не має пам'яті про кодову базу, яку вперше побачив тридцять секунд тому.
Але npm не відрізняє людину від агента. І те, й інше виглядає як завантаження. Тож це лишається здогадкою, і мені простіше сказати це вголос, ніж видавати її за висновок.
👍 — у мене статичний аналіз уже стоїть в агентному пайплайні
👀 — читаю і думаю, що варто поставити
npmjs.com/package/jscpd
Я не запускав ніякого просування. Не потрапляв у розсилки. П'ята версія вийшла давно.
Моя здогадка: це агенти. Щось, що читає код за гроші, тепер запускає детектор дублів, перш ніж почати писати.
І в цьому є сенс. Агент, який збирається додати функцію, має привід перевірити, чи немає такої вже десь у репозиторії. Людина зазвичай вважає, що згадала б. Агент не має пам'яті про кодову базу, яку вперше побачив тридцять секунд тому.
Але npm не відрізняє людину від агента. І те, й інше виглядає як завантаження. Тож це лишається здогадкою, і мені простіше сказати це вголос, ніж видавати її за висновок.
👍 — у мене статичний аналіз уже стоїть в агентному пайплайні
👀 — читаю і думаю, що варто поставити
npmjs.com/package/jscpd
👀10👍7🔥4
Щоб побудувати продакшн-агента, не треба переходити на Python.
LangGraph знають як Python-інструмент. Але є LangGraph.js - TypeScript/JavaScript-версія LangGraph: StateGraph, checkpointers, human-in-the-loop, стрімінг, субграфи.
⏺ 3.4M завантажень npm на тиждень.
👀 Чому граф, а не ланцюжок
prompt → LLM → output працює рівно доти, доки агенту не треба ретраїти, чекати підтвердження чи координувати кількох агентів.
⏺ У графі вузли - це дії (виклик LLM, тул, трансформація), ребра - маршрутизація між станами.
⏺ Агент крутить цикли, гілкується, паузиться на людину, а після збою відновлюється зі збереженого стану. Потік явний, нічого не сховано за абстракцією.
💬 Що дає TypeScript
Стан описується через StateSchema, який приймає Standard Schema - Zod 4, Valibot, ArkType на вибір, без прив'язки до однієї бібліотеки.
Annotation.Root у доках позначений як legacy, але продовжує працювати.
Типи ловлять частину багів зі станом ще на етапі компіляції.
💬 Де крутиться
Node.js, Deno, Cloudflare Workers, Vercel Edge, браузер.
Для browser- і edge-сценаріїв LangGraph.js дає окремий web entry point (langchain/langgraph/web) і добре лягає в JS/TS-runtime.
За README проекту, на LangGraph будують агентів Uber, LinkedIn, Replit і GitLab.
🔴 Гляньте самі: github.com/langchain-ai/langgraphjs
Використовували LangGraph у TS?
🔥 - так, будую графи
👀 - поки на простіших тулах
LangGraph знають як Python-інструмент. Але є LangGraph.js - TypeScript/JavaScript-версія LangGraph: StateGraph, checkpointers, human-in-the-loop, стрімінг, субграфи.
prompt → LLM → output працює рівно доти, доки агенту не треба ретраїти, чекати підтвердження чи координувати кількох агентів.
Стан описується через StateSchema, який приймає Standard Schema - Zod 4, Valibot, ArkType на вибір, без прив'язки до однієї бібліотеки.
Annotation.Root у доках позначений як legacy, але продовжує працювати.
Типи ловлять частину багів зі станом ще на етапі компіляції.
Node.js, Deno, Cloudflare Workers, Vercel Edge, браузер.
Для browser- і edge-сценаріїв LangGraph.js дає окремий web entry point (langchain/langgraph/web) і добре лягає в JS/TS-runtime.
За README проекту, на LangGraph будують агентів Uber, LinkedIn, Replit і GitLab.
Використовували LangGraph у TS?
🔥 - так, будую графи
👀 - поки на простіших тулах
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - langchain-ai/langgraphjs: Framework to build resilient language agents as graphs.
Framework to build resilient language agents as graphs. - langchain-ai/langgraphjs
2👀7👍4🔥4
JS/TS опинилися на
😉 місці за часткою коду, який пише агент. Разом з Go
JetBrains опитав понад 15 000 інженерів у травні-липні. Питання було просте: скільки коду за минулий місяць написав агент, скільки ви з підказками AI, а скільки руками.
🗂 Розклад по стеках
У тих, чия основна мова JavaScript, TypeScript або Go, частка повністю згенерованого агентом коду найвища - 54-55% у середньому.
Java і Python посередині, 48-51%.
C і C++ найконсервативніші: 38% коду там досі пишуть руками.
👩💻 Що це означає на практиці
Понад половина інженерів пишуть руками менше 20% коду. Кожен п'ятий не пише без AI взагалі нічого.
Але тих, хто віддав агенту понад 80% коду, лише 22%. Більшість сидить посередині.
Ще одна деталь: першими віддали кодування агентам сеньйори, не джуни. Приблизно чверть сеньйорів генерує понад 80% коду.
❔ Чому це важливо саме нам
Якщо половину коду в репозиторії написав агент, вузьке місце змістилося. Питання вже не «як швидше написати», а «як зрозуміти, що саме тут з'явилось і навіщо».
JS/TS-екосистема попереду за швидкістю генерації. Відкрите питання - чи попереду вона за дисципліною рев'ю.
🗂 Дані й методологія тут
Скільки коду ти зараз пишеш руками, без агента?
🔥 - менше 20%
👀 - більше
JetBrains опитав понад 15 000 інженерів у травні-липні. Питання було просте: скільки коду за минулий місяць написав агент, скільки ви з підказками AI, а скільки руками.
У тих, чия основна мова JavaScript, TypeScript або Go, частка повністю згенерованого агентом коду найвища - 54-55% у середньому.
Java і Python посередині, 48-51%.
C і C++ найконсервативніші: 38% коду там досі пишуть руками.
Понад половина інженерів пишуть руками менше 20% коду. Кожен п'ятий не пише без AI взагалі нічого.
Але тих, хто віддав агенту понад 80% коду, лише 22%. Більшість сидить посередині.
Ще одна деталь: першими віддали кодування агентам сеньйори, не джуни. Приблизно чверть сеньйорів генерує понад 80% коду.
Якщо половину коду в репозиторії написав агент, вузьке місце змістилося. Питання вже не «як швидше написати», а «як зрозуміти, що саме тут з'явилось і навіщо».
JS/TS-екосистема попереду за швидкістю генерації. Відкрите питання - чи попереду вона за дисципліною рев'ю.
Скільки коду ти зараз пишеш руками, без агента?
🔥 - менше 20%
👀 - більше
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👀6👍5
This media is not supported in your browser
VIEW IN TELEGRAM
Нас роками вчили дробити компоненти. AI-агенти зробили цю пораду платною.
Кожен окремий файл коштує вашому агенту 11 токенів — не за код усередині, а за те, що це окремий файл. Ставка однакова, хоч би що там: два рядки чи двісті. У кодовій базі зі 200 компонентів це близько 2200 токенів самої лише церемонії, ще до того, як модель побачила перший елемент. І платите ви не один раз: кожен цикл рев'ю надсилає файли наново, кожна повторна спроба — знову.
Знаю заперечення, бо сам його мав: це ж, напевно, className, camelCase, htmlFor.
Ні.
class="card-img" — 5 токенів.
className="card-img" — теж 5.
Для всіх дванадцяти атрибутів класу в моїх семплах вийшло 53 і 53.
Тоді я зняв обгортку з кожного JSX-файлу й порахував саму розмітку — проти того самого коду на чистому HTML.
list: 36 проти 36
form: 76 проти 76
card: 88 проти 88
Токен у токен. На цих трьох семплах розмітка не додала жодного токена — уся надбавка припала на функцію навколо неї.
Якби плата була за атрибут, її зменшували б меншою кількістю класів. Але плата — за межу. Отже, її зменшує менша кількість компонентів, але більших.
Це не заклик писати файли на 800 рядків. Це заперечення проти компонента на 12 рядків, який зʼявився лише тому, що батьківський виглядав перевантаженим.
Чотири формати розмітки, п'ять однакових семплів, один токенізатор.
Pug — 232
HTML — 373
JSX — 436
TSX — 451
TSX виходить на 94% дорожчим за Pug.
Частина 3 «The Tokenomics of Web Development»: https://hackernoon.com/we-measured-the-llm-token-cost-of-4-markup-formats-tsx-costs-94percent-more-than-pug
Кожен окремий файл коштує вашому агенту 11 токенів — не за код усередині, а за те, що це окремий файл. Ставка однакова, хоч би що там: два рядки чи двісті. У кодовій базі зі 200 компонентів це близько 2200 токенів самої лише церемонії, ще до того, як модель побачила перший елемент. І платите ви не один раз: кожен цикл рев'ю надсилає файли наново, кожна повторна спроба — знову.
Знаю заперечення, бо сам його мав: це ж, напевно, className, camelCase, htmlFor.
Ні.
class="card-img" — 5 токенів.
className="card-img" — теж 5.
Для всіх дванадцяти атрибутів класу в моїх семплах вийшло 53 і 53.
Тоді я зняв обгортку з кожного JSX-файлу й порахував саму розмітку — проти того самого коду на чистому HTML.
list: 36 проти 36
form: 76 проти 76
card: 88 проти 88
Токен у токен. На цих трьох семплах розмітка не додала жодного токена — уся надбавка припала на функцію навколо неї.
Якби плата була за атрибут, її зменшували б меншою кількістю класів. Але плата — за межу. Отже, її зменшує менша кількість компонентів, але більших.
Це не заклик писати файли на 800 рядків. Це заперечення проти компонента на 12 рядків, який зʼявився лише тому, що батьківський виглядав перевантаженим.
Чотири формати розмітки, п'ять однакових семплів, один токенізатор.
Pug — 232
HTML — 373
JSX — 436
TSX — 451
TSX виходить на 94% дорожчим за Pug.
Частина 3 «The Tokenomics of Web Development»: https://hackernoon.com/we-measured-the-llm-token-cost-of-4-markup-formats-tsx-costs-94percent-more-than-pug
👍10🔥4👀2
This media is not supported in your browser
VIEW IN TELEGRAM
97% вашого коду - «унікальні». Так каже інструмент, який не бачить дубль, якщо змінну просто назвали інакше.
👀 jscpd 5.2.0 бачить.
Три класи копій, які раніше не потрапляли у звіт: перейменовані, зі вставленим рядком і переписані по всій функції.
Половину цього коду написав агент, а він не робить Ctrl+C: генерує заново і рідко тими самими іменами. Тому дірка у звіті - не крайній випадок, а норма.
1. Перейменовані копії
--ignore-identifiers, --ignore-literals, --ignore-annotations
Нормалізують класи токенів перед хешуванням: усі ідентифікатори стають одним класом, ключові слова зберігають своє значення, рядки і числа лишаються різними класами, анотації @Name(...) відкидаються. Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JS, TS. Копія з іншими іменами тепер має kind: renamed.
2. Копії з розривом
--max-gap-lines N
Копія, куди вставили рядок посередині, раніше показувалась як два коротких клони. Тепер фрагменти однієї пари файлів, між якими не більше N незіставлених рядків, зливаються в один клон kind: similar зі значенням similarity. Схожість нижче 0.5 - злиття не відбувається.
3. Схожість функцій, JS/TS
--similarity RATIO
Правки, розмазані по всій функції, не ловить жодне вікно токенів. jscpd порівнює кожну функцію, метод і стрілкову функцію за набором 4-грам по типах вузлів AST та індексує через MinHash. Імена і літерали участі не беруть: перейменована копія дає 1.0, один вставлений рядок - близько 0.9, дві вставлені інструкції плюс перейменування - близько 0.75.
Кожен клон тепер несе kind: exact, renamed або similar - у консолі, JSON, XML і HTML. У SARIF і Code Climate додались правила jscpd/renamed-code та jscpd/similar-code.
На npm зараз 5 156 441 М завантаження за тиждень. Саме тому все нове - opt-in: жоден з цих пайплайнів не змінить поведінку після оновлення. Без прапорців результат той самий, плюс поле "kind": "exact".
Реліз v5.2.0
Яка у вас цифра дублювання у CI і скільки їй років?
👀 - зараз перевірю
🔥 - вже перевірив
#jscpd #CopyPasteDetector
Три класи копій, які раніше не потрапляли у звіт: перейменовані, зі вставленим рядком і переписані по всій функції.
Половину цього коду написав агент, а він не робить Ctrl+C: генерує заново і рідко тими самими іменами. Тому дірка у звіті - не крайній випадок, а норма.
1. Перейменовані копії
--ignore-identifiers, --ignore-literals, --ignore-annotations
Нормалізують класи токенів перед хешуванням: усі ідентифікатори стають одним класом, ключові слова зберігають своє значення, рядки і числа лишаються різними класами, анотації @Name(...) відкидаються. Java, Kotlin, Scala, Groovy, Python, Dart, Swift, JS, TS. Копія з іншими іменами тепер має kind: renamed.
2. Копії з розривом
--max-gap-lines N
Копія, куди вставили рядок посередині, раніше показувалась як два коротких клони. Тепер фрагменти однієї пари файлів, між якими не більше N незіставлених рядків, зливаються в один клон kind: similar зі значенням similarity. Схожість нижче 0.5 - злиття не відбувається.
3. Схожість функцій, JS/TS
--similarity RATIO
Правки, розмазані по всій функції, не ловить жодне вікно токенів. jscpd порівнює кожну функцію, метод і стрілкову функцію за набором 4-грам по типах вузлів AST та індексує через MinHash. Імена і літерали участі не беруть: перейменована копія дає 1.0, один вставлений рядок - близько 0.9, дві вставлені інструкції плюс перейменування - близько 0.75.
Кожен клон тепер несе kind: exact, renamed або similar - у консолі, JSON, XML і HTML. У SARIF і Code Climate додались правила jscpd/renamed-code та jscpd/similar-code.
На npm зараз 5 156 441 М завантаження за тиждень. Саме тому все нове - opt-in: жоден з цих пайплайнів не змінить поведінку після оновлення. Без прапорців результат той самий, плюс поле "kind": "exact".
Реліз v5.2.0
Яка у вас цифра дублювання у CI і скільки їй років?
👀 - зараз перевірю
🔥 - вже перевірив
#jscpd #CopyPasteDetector
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥5👀3👏2
Агент пише швидше, ніж ти встигаєш читати? Ось 10 перевірок, які зменшують обсяг коду для ручного рев'ю.
Evil Martians зібрали десять перевірок для фронтенду на TypeScript і React. Все конкретно, з інструментами і причинами.
⏺ Не дати написати зайве
Генеруйте типи з OpenAPI-специфікації. Найтиповіший дефект AI-коду - поле, якого не існує. Модель бачить поруч user і пише user.fullName, хоча бекенд віддає firstName і lastName. Якщо типи живуть окремо від специфікації, TypeScript це пропустить. Один опис API на два боки прибирає цілий клас багів ще на старті.
Опишіть межі шарів у лінтері. Модель не тримає в голові вашу архітектуру між сесіями і тягне код до середнього по GitHub. eslint-plugin-boundaries задає напрямок залежностей: сервіс не може імпортувати компонент.
⏺ Знайти те, що вже написано
Запустіть mutation testing. Покриття показує лише те, що рядок виконався - навіть якщо тест перевіряє мок і завжди зелений. Stryker навмисно ламає код і дивиться, чи впаде тест. Так видно, чи ваші тести взагалі щось ловлять.
Пошукайте дублікати. Дев'ятим у списку йде jscpd - мій інструмент, тому скажу відверто і про плюси, і про ліміти.
Порада авторів слушна: ставте різні пороги для JSX і для бізнес-логіки. Повторення розмітки часто є нормою, повторення логіки майже завжди стає проблемою. У Evil Martians дві копії розійшлися, і той самий підсумок зарплати показував 23 години 30 хвилин в одному місці та 0 годин 00 хвилин в іншому.
Межа, яку вони назвали, тримається на тому, що jscpd шукає текстову схожість. На днях вийшов 5.2.0, і саме її я і закривав.
--ignore-identifiers і --ignore-literals нормалізують токени перед хешуванням: копія, що відрізняється лише іменами, тепер знаходиться і позначається як renamed.
--max-gap-lines зшиває копію зі вставленим рядком посередині в один клон замість двох коротких.
А для JS і TS з'явився --similarity: кожна функція порівнюється за мішком 4-грам типів вузлів синтаксичного дерева.
⏺ Зробити перевірки обов'язковими
Заблокуйте мердж у CI. Перевірка працює тільки тоді, коли гілка не йде далі: формат, лінтер, tsc, юніт-тести, mutation testing на дифі. Деплой стартує лише після зеленого світла.
Вмикайте поступово. Спочатку правила як warnings і тільки на змінених файлах. Зловило реальний баг - підвищуйте до error, і аж потім ставте жорсткий гейт. Інакше команда почне шукати обхідні шляхи.
⏺ Де закінчується автоматика
Зелений статус усіх десяти перевірок не означає, що код хороший. Він означає лише те, що перевірки не знайшли того, що вміють шукати.
Жоден інструмент не скаже, що ви зробили не ту фічу або що ця абстракція тут зайва. Смак та архітектура залишаються на нас.
💬 Повний список: evilmartians.com/chronicles/ten-anti-ai-slop-moves-for-frontend-projects-going-faster-than-humans-can-review
Скільки з цих перевірок уже стоїть у вашому CI?
🔥 - більшість, і вони блокують мердж
👀 - поки що тільки лінтер
Evil Martians зібрали десять перевірок для фронтенду на TypeScript і React. Все конкретно, з інструментами і причинами.
Генеруйте типи з OpenAPI-специфікації. Найтиповіший дефект AI-коду - поле, якого не існує. Модель бачить поруч user і пише user.fullName, хоча бекенд віддає firstName і lastName. Якщо типи живуть окремо від специфікації, TypeScript це пропустить. Один опис API на два боки прибирає цілий клас багів ще на старті.
Опишіть межі шарів у лінтері. Модель не тримає в голові вашу архітектуру між сесіями і тягне код до середнього по GitHub. eslint-plugin-boundaries задає напрямок залежностей: сервіс не може імпортувати компонент.
Запустіть mutation testing. Покриття показує лише те, що рядок виконався - навіть якщо тест перевіряє мок і завжди зелений. Stryker навмисно ламає код і дивиться, чи впаде тест. Так видно, чи ваші тести взагалі щось ловлять.
Пошукайте дублікати. Дев'ятим у списку йде jscpd - мій інструмент, тому скажу відверто і про плюси, і про ліміти.
Порада авторів слушна: ставте різні пороги для JSX і для бізнес-логіки. Повторення розмітки часто є нормою, повторення логіки майже завжди стає проблемою. У Evil Martians дві копії розійшлися, і той самий підсумок зарплати показував 23 години 30 хвилин в одному місці та 0 годин 00 хвилин в іншому.
Межа, яку вони назвали, тримається на тому, що jscpd шукає текстову схожість. На днях вийшов 5.2.0, і саме її я і закривав.
--ignore-identifiers і --ignore-literals нормалізують токени перед хешуванням: копія, що відрізняється лише іменами, тепер знаходиться і позначається як renamed.
--max-gap-lines зшиває копію зі вставленим рядком посередині в один клон замість двох коротких.
А для JS і TS з'явився --similarity: кожна функція порівнюється за мішком 4-грам типів вузлів синтаксичного дерева.
Заблокуйте мердж у CI. Перевірка працює тільки тоді, коли гілка не йде далі: формат, лінтер, tsc, юніт-тести, mutation testing на дифі. Деплой стартує лише після зеленого світла.
Вмикайте поступово. Спочатку правила як warnings і тільки на змінених файлах. Зловило реальний баг - підвищуйте до error, і аж потім ставте жорсткий гейт. Інакше команда почне шукати обхідні шляхи.
Зелений статус усіх десяти перевірок не означає, що код хороший. Він означає лише те, що перевірки не знайшли того, що вміють шукати.
Жоден інструмент не скаже, що ви зробили не ту фічу або що ця абстракція тут зайва. Смак та архітектура залишаються на нас.
Скільки з цих перевірок уже стоїть у вашому CI?
🔥 - більшість, і вони блокують мердж
👀 - поки що тільки лінтер
Please open Telegram to view this post
VIEW IN TELEGRAM
evilmartians.com
10 anti-AI slop moves for frontend projects going faster than humans can review—Martian Chronicles, Evil Martians’ team blog
Ten checks that catch what AI-written frontend code hides: contract codegen, boundary linting, mutation testing, and dead-code detectors.
👍6🔥5👀5❤3
This media is not supported in your browser
VIEW IN TELEGRAM
Ти написав скіл для агента. Але як дізнатись, що він працює?
11 вересня Claude Code отримав claude plugin eval: команда проганяє eval-набір плагіна проти самого Claude Code і повертає скорований результат, який можна відтворити. На виході - JSON і HTML-звіт.
⏺ Чому це важливо
Скіл - не код. Це інструкція природною мовою, яку модель виконає трохи інакше сьогодні і зовсім інакше після оновлення. Компілятор її не перевірить. Лінтер теж.
Досі єдиним способом зрозуміти, що скіл працює, було запустити його руками кілька разів. Це не перевірка. Це враження.
⏺ Що класти в eval-набір
Моя думка, не документація. Без цих трьох кейсів набір мало що доводить:
Скіл спрацював - найочевидніший і найменш цінний, майже завжди зелений.
Скіл не спрацював там, де не мав. Скіл, який вмикається не там, гірший за відсутній: з'їдає контекст і збиває агента із задачі.
Межа: формулювання схоже, намір інший. Саме тут скіли розсипаються після зміни моделі.
⏺ Друга половина картини
4 вересня з'явився /skill-doctor: показує, які скіли жодного разу не використовувалися і скільки контексту коштують.
eval → чи працює те, що я підключив
skill-doctor → чи потрібне воно взагалі
Якщо підключено десяток скілів, є ненульовий шанс, що половина просто займає вікно.
⏺ Чесно про межі
Формат набору в changelog не описаний, тільки сама команда - дивись
І головне: скорований прогін не робить скіл правильним. Він робить його вимірюваним. Що міряти - вирішуєш ти, і ця частина поки що не автоматизується.
🟡 Changelog: github.com/anthropics/claude-code/releases/tag/v2.1.269
Скільки скілів у тебе зараз підключено?
🔥 - знаю точно і кожен використовую
👀 - треба піти подивитися
11 вересня Claude Code отримав claude plugin eval: команда проганяє eval-набір плагіна проти самого Claude Code і повертає скорований результат, який можна відтворити. На виході - JSON і HTML-звіт.
Скіл - не код. Це інструкція природною мовою, яку модель виконає трохи інакше сьогодні і зовсім інакше після оновлення. Компілятор її не перевірить. Лінтер теж.
Досі єдиним способом зрозуміти, що скіл працює, було запустити його руками кілька разів. Це не перевірка. Це враження.
Моя думка, не документація. Без цих трьох кейсів набір мало що доводить:
Скіл спрацював - найочевидніший і найменш цінний, майже завжди зелений.
Скіл не спрацював там, де не мав. Скіл, який вмикається не там, гірший за відсутній: з'їдає контекст і збиває агента із задачі.
Межа: формулювання схоже, намір інший. Саме тут скіли розсипаються після зміни моделі.
4 вересня з'явився /skill-doctor: показує, які скіли жодного разу не використовувалися і скільки контексту коштують.
eval → чи працює те, що я підключив
skill-doctor → чи потрібне воно взагалі
Якщо підключено десяток скілів, є ненульовий шанс, що половина просто займає вікно.
Формат набору в changelog не описаний, тільки сама команда - дивись
claude plugin eval --help.
І головне: скорований прогін не робить скіл правильним. Він робить його вимірюваним. Що міряти - вирішуєш ти, і ця частина поки що не автоматизується.
Скільки скілів у тебе зараз підключено?
🔥 - знаю точно і кожен використовую
👀 - треба піти подивитися
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👀5🔥4❤1
This media is not supported in your browser
VIEW IN TELEGRAM
jscpd 5.2.1: куди рухається дублювання
Один запуск jscpd показує, скільки дублювання в коді сьогодні. Куди воно рухається, з одного запуску не видно.
У 5.2.1 зʼявився прапорець --history. jscpd бере кожен коміт у git-діапазоні, чекаутить його в тимчасовий detached worktree (той самий механізм, що й у --baseline-from-ref), сканує з конфігурацією поточного запуску і друкує серію прямо в терміналі: графік і таблицю зі зміною між точками. Остання точка — working, тобто поточний стан разом із незакоміченими змінами.
Що дає --history:
— вісь Y графіка йде від мінімуму до максимуму серії, тому дрейф з 2.0% до 2.4% видно, а не губиться в пласкій лінії на шкалі від нуля
— з --threshold, коли поточне значення нижче порогу, jscpd показує, на скільки поріг можна підтягнути. Це ручна форма ratchet: цифру дає jscpd, рішення за вами. Якщо значення вище порогу, спрацьовує звичайна помилка і запуск завершується з кодом 1
— json-репортер додає обʼєкт history з масивом points[], ai-репортер друкує один компактний рядок на точку
— у GitHub Action це інпут history, з fetch-depth: 0, бо діапазон має бути в checkout
Хостований дашборд не потрібен: достатньо git у PATH і комітів локально. Кожна точка — окремий скан, тому для scheduled job на великому репозиторії --history-every і --history-limit тримають прогін коротким. За замовчуванням серія обмежена 30 точками.
Детальніше в документації: https://jscpd.dev/guides/history
jscpd безкоштовний і тримається на спільноті. Якщо він економить час вашій команді, підтримайте: https://opencollective.com/jscpd
Один запуск jscpd показує, скільки дублювання в коді сьогодні. Куди воно рухається, з одного запуску не видно.
У 5.2.1 зʼявився прапорець --history. jscpd бере кожен коміт у git-діапазоні, чекаутить його в тимчасовий detached worktree (той самий механізм, що й у --baseline-from-ref), сканує з конфігурацією поточного запуску і друкує серію прямо в терміналі: графік і таблицю зі зміною між точками. Остання точка — working, тобто поточний стан разом із незакоміченими змінами.
jscpd src --history v5.0.0..HEAD
jscpd src --history-since 2026-01-01
jscpd src --history main --history-since 2026-06-01 --history-every 5 --history-limit 12
Що дає --history:
— вісь Y графіка йде від мінімуму до максимуму серії, тому дрейф з 2.0% до 2.4% видно, а не губиться в пласкій лінії на шкалі від нуля
— з --threshold, коли поточне значення нижче порогу, jscpd показує, на скільки поріг можна підтягнути. Це ручна форма ratchet: цифру дає jscpd, рішення за вами. Якщо значення вище порогу, спрацьовує звичайна помилка і запуск завершується з кодом 1
— json-репортер додає обʼєкт history з масивом points[], ai-репортер друкує один компактний рядок на точку
— у GitHub Action це інпут history, з fetch-depth: 0, бо діапазон має бути в checkout
Хостований дашборд не потрібен: достатньо git у PATH і комітів локально. Кожна точка — окремий скан, тому для scheduled job на великому репозиторії --history-every і --history-limit тримають прогін коротким. За замовчуванням серія обмежена 30 точками.
Детальніше в документації: https://jscpd.dev/guides/history
jscpd безкоштовний і тримається на спільноті. Якщо він економить час вашій команді, підтримайте: https://opencollective.com/jscpd
👍6🔥6❤3
Ваш агент платить за генерацію тексту там, де йому потрібна відповідь «так» або «ні». Таке рішення можна віддати моделі, яка тексту не генерує взагалі.
15 вересня TypeSafe AI відкрила ранній доступ до Jev. Засновник - Diogo Almeida, який в OpenAI працював над методами, що лягли в основу ChatGPT. Jev - перша модель класу, який вони називають System One: неструктурований стан на вході, типізовані рішення з імовірностями на виході.
У Jev немає генерації рядків. Натомість:
⏺ відповідь завжди відповідає схемі, заданій наперед - помилок типів немає за побудовою;
⏺ кожна відповідь іде з каліброваною імовірністю: вища впевненість - вища точність;
⏺ усі відповіді рахуються паралельно одним запитом, а не токен за токеном.
Відповідь: "noul": 0.999.
Типи питань: choice - вибір із варіантів, до 255; score - оцінка за шкалою; noul - так чи ні.
Цифри, які можна перевірити самому: 70-500 мс на відповідь, вхід $0.042 за мільйон токенів, вихід безкоштовний. Вхід у LLM коштує від $0.20 до $10 за мільйон.
Цифри із застереженнями від самої TypeSafe: 193.6x швидше і 444.6x дешевше - це їхні workflow-evals. Складала їх власна команда, еталон - середнє GPT-6 Astra і Fable 5.1, і за їхніми ж словами це верхня межа реального виграшу. Що ціна не субсидована, вони теж довести не можуть і пишуть про це прямо.
Де Jev стає в циклі агента: роутинг між дешевою і сильною моделлю і гейт на ризиковані виклики інструментів. Для обох сценаріїв у LangChain уже є експериментальні middleware.
Jev не замінює LLM. Генеративна модель лишається на відкритих задачах, класифікатор бере рішення всередині циклу.
Скільки викликів моделі у вашому агенті насправді потребують генерації тексту?
👀 - ніколи не рахував
🔥 - вже маю класифікатор у циклі
#agents #Jev
15 вересня TypeSafe AI відкрила ранній доступ до Jev. Засновник - Diogo Almeida, який в OpenAI працював над методами, що лягли в основу ChatGPT. Jev - перша модель класу, який вони називають System One: неструктурований стан на вході, типізовані рішення з імовірностями на виході.
У Jev немає генерації рядків. Натомість:
{
"model": "jev-latest",
"state": "Третій день не можу підключити Stripe, втрачаю продажі.",
"questions": {
"is_urgent": {"type": "noul", "instructions": "Повідомлення термінове"}
}
}Відповідь: "noul": 0.999.
Типи питань: choice - вибір із варіантів, до 255; score - оцінка за шкалою; noul - так чи ні.
Цифри, які можна перевірити самому: 70-500 мс на відповідь, вхід $0.042 за мільйон токенів, вихід безкоштовний. Вхід у LLM коштує від $0.20 до $10 за мільйон.
Цифри із застереженнями від самої TypeSafe: 193.6x швидше і 444.6x дешевше - це їхні workflow-evals. Складала їх власна команда, еталон - середнє GPT-6 Astra і Fable 5.1, і за їхніми ж словами це верхня межа реального виграшу. Що ціна не субсидована, вони теж довести не можуть і пишуть про це прямо.
Де Jev стає в циклі агента: роутинг між дешевою і сильною моделлю і гейт на ризиковані виклики інструментів. Для обох сценаріїв у LangChain уже є експериментальні middleware.
Jev не замінює LLM. Генеративна модель лишається на відкритих задачах, класифікатор бере рішення всередині циклу.
Скільки викликів моделі у вашому агенті насправді потребують генерації тексту?
👀 - ніколи не рахував
🔥 - вже маю класифікатор у циклі
#agents #Jev
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4👀3
Нова модель Jev від TypeSafe AI стала однією з найпомітніших новинок останнього тижня 🆕
Якщо вам також цікаво, що стоїть за цим хайпом і на що насправді здатен Jev, - у @devshive вийшов ґрунтовний розбір із практичними прикладами.
У відео - як працює Jev, які задачі може вирішувати, наочний приклад із чатботом і порівняння вартості з LLM. Плюс відповідь на головне питання: чи справді це «вбивця LLM» і де такий підхід має сенс.
Коротко й по суті. Раджу подивитися👀
🎬 https://www.youtube.com/watch?v=Q-1Gf4E5olo
🚀 https://t.me/devshive/266
Якщо вам також цікаво, що стоїть за цим хайпом і на що насправді здатен Jev, - у @devshive вийшов ґрунтовний розбір із практичними прикладами.
У відео - як працює Jev, які задачі може вирішувати, наочний приклад із чатботом і порівняння вартості з LLM. Плюс відповідь на головне питання: чи справді це «вбивця LLM» і де такий підхід має сенс.
Коротко й по суті. Раджу подивитися
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Jev — вбивця LLM чи черговий AI-хайп?
TypeSafe AI представила Jev — і знову заговорили про революцію у світі АІ. Але чи справді це «вбивця LLM» чи черговий хайп?
У відео розбираємо, що таке Jev, чим він відрізняється від LLM і які проблеми вирішує. Покажу приклад на простому AI ChatBot, порівняємо…
У відео розбираємо, що таке Jev, чим він відрізняється від LLM і які проблеми вирішує. Покажу приклад на простому AI ChatBot, порівняємо…
1❤2👍2🔥2👏2