Курс із розробки ШІ-агентів, де відповідь студента перевіряє код, а не модель

Agent Hub — навчальний застосунок українською на відкритих матеріалах Anthropic. 79 уроків, 158 практичних завдань і 400 перевірок, які виконуються прямо в браузері: без сервера, без ключів і без ризику, що перевірка щось вигадає.

Без реєстрації. Прогрес лежить у браузері. Працює офлайн.

Екран програми курсу: бічне меню, модулі з описом і списки уроків із тривалістю
Програма: 12 модулів, кожен із прив'язкою до конкретного курсу Claude Academy.
Екран уроку: серифний текст, таблиця, приклад коду і врізка з поясненням
Урок: серифний текст, таблиці, код і врізки — формат статті, а не панелі приладів.

Справжні знімки застосунку, зняті димовим тестом у браузері, а не мальовані макети.

Одинадцять режимів роботи, а не одна стрічка уроків

Курс однаково придатний для послідовного проходження і як довідник, у який заходять із чужого коду зі словом, якого не знаєш.

Вхідний тест

Двадцять питань по десятьох темах. За результатом курс підсвічує, де затриматись, а що вже знаєш.

Програма

12 модулів, 79 уроків по 12–18 хвилин. Кожен модуль прив'язаний до конкретного курсу Claude Academy.

Урок

Теорія, код, фрагмент зі справжнього репозиторію Anthropic, практичне завдання з перевіркою і вікторина.

Трек «перший агент»

Цільовий маршрут на 26 кроків: лише ті уроки, без яких не зібрати робочого агента. Шість із половиною годин замість двадцяти однієї.

Пісочниця

Три робочі місця: конструктор схеми інструмента з розбором, покроковий прохід справжнього циклу tool use і живий режим на власному ключі.

Карта патернів

Сім патернів від одного виклику до автономного агента, кожен зі шкалою вартості й умовою, за якої він доречний.

Розбір артефакта

Вставляєш свій SKILL.md, схему інструмента, блок хуків або конфіг MCP — отримуєш перелік зауважень за правилами документації.

Повторення

158 карток з інтервальним повторенням за SM-2: терміни не вилітають з голови між сесіями.

Словник і конспект

Сто термінів і довідник із чотирнадцяти розділів. Відкриваються під час роботи, не замість неї.

Пошук

Одна палітра на Cmd+K по чотирьох джерелах одразу: уроки, терміни, пункти конспекту, патерни.

Помічник

ШІ-репетитор, який бачить відкритий урок і відповідає «чому саме так» у його межах.

Обсяг, порахований із файлів курсу

79уроків у 12 модулях
158практичних завдань семи видів
400тверджень, якими перевіряються відповіді
236питань вікторин в уроках
22фрагменти коду зі справжніх репозиторіїв
34першоджерела в п'ятьох групах
21година повного курсу
0залежностей у фронтенді

Кожна цифра порахована з файлів у public/content/ і public/js/ — це обсяг роботи, а не показники користувачів. Показників користувачів тут немає взагалі: у застосунку немає ні входу, ні аналітики, ні жодного лічильника.

Спробуйте розбір просто тут

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

tool.json
Нічого не надсилається — розбір рахується у вашому браузері.

Як влаштовано всередині

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

01

Перевірка, яка вимірює, а не оцінює

У курсі про SQL перевірка була простою: виконай запит, звір таблицю. Тут виконувати нема чого — студент пише не запит, а артефакт: схему інструмента, SKILL.md, блок хуків, конфіг MCP або сам промпт. Тому «виконання» замінене на розбір артефакта і набір декларативних тверджень про нього, які лежать прямо в JSON уроку.

Словник тверджень навмисно вузький — одинадцять операторів: type, equals, oneOf, setEquals, contains, minLength, maxLength, minItems, regex, notRegex, absent. Кожне твердження несе власне повідомлення, тому студент бачить не «невірно», а причину — і бачить її навіть тоді, коли все зійшлося.

158завдань 400тверджень 7видів завдань 0звернень до моделі

Найкорисніша перевірка — не в браузері, а в валідаторі: він проганяє авторський solution через його ж checks тим самим рушієм, що працює у студента. Урок, де правильна відповідь не проходить власну перевірку, виглядає бездоганно і водночас непрохідний.

02

Дві моделі різних компаній і межа між ними

У пісочниці працює Claude — і це принципово: предмет вивчення там сам формат tool_use, stop_reason й input_schema, тож підміна провайдера означала б учити не тому. Запит іде з браузера ключем самого користувача, режим виділений в окрему вкладку з попередженням, а ключ лежить лише в localStorage і не потрапляє ні на сервер, ні в хмарну синхронізацію.

Помічник — інша роль: він пояснює урок. Його запит іде на Cloud Function, яка авторизується у Vertex службовим акаунтом, тож ключа в сторінці немає взагалі. Звідси головне обмеження, зашите в системну інструкцію на сервері: помічникові заборонено називати імена полів і параметрів API Anthropic, яких немає в тексті переданого уроку. Модель іншої компанії знає чужий API неповно, і впевнено названий неіснуючий параметр гірший за відмову відповісти.

браузер api.anthropic.com Cloud Function Vertex AI пісочниця й помічник ключ користувача службовий акаунт Gemini власний ключ без ключа у сторінці
03

Публічна кнопка «спитати» і чужий рахунок

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

60питань на пристрій за добу 400питань на застосунок за добу 2 000символів на питання 14 000символів контексту

Лічильники живуть у Firestore і скидаються за київським часом, а не за UTC: інакше квота оновлювалася б серед робочого дня. Колекція в них своя, окрема від сусіднього курсу в тому ж проєкті, — спільний лічильник означав би, що активний день в одному курсі з'їдає добу другого.

04

Офлайн, прогрес і синхронізація без входу

Прогрес зберігається в localStorage: працює без мережі й без реєстрації. Синхронізація між пристроями опційна — вмикається в налаштуваннях і кладе знімок у Firestore під випадковим двадцятисимвольним ключем, який достатньо ввести на другому пристрої. Алфавіт ключа без l, o, 0 і 1, щоб його можна було продиктувати. Ключ Anthropic у хмару не їде ніколи.

Service worker кешує різне по-різному: шрифти назавжди, код і контент — мережа першою з кешем як запасним варіантом. Окремо доводиться захищатись від власного хостингу: він налаштований як SPA і на невідомий шлях повертає сторінку з кодом 200, тож відсутній файл контенту приходить не як помилка, а як цілком успішна відповідь.

// якщо просили дані, а прийшла сторінка — не кешуємо
const wantsData = /\.json$/i.test(new URL(req.url).pathname);
const head = (await res.clone().text()).slice(0, 40).trimStart();
return head.startsWith('<!doctype') || head.startsWith('<html');
05

Жодного фреймворка — і жодного складання

Фронтенд — дев'ять ES-модулів, близько 4 800 рядків, які браузер вантажить напряму: немає ні складальника, ні кроку збірки, ні node_modules. Усе, що зазвичай приносить фреймворк, тут написане рівно в потрібному обсязі: хеш-роутер, власний помічник для DOM, рендер markdown, підсвічувач коду шести мов (JSON, YAML, Python, TypeScript, bash і окремо XML — бо в модулі про промптинг теги не ілюстрація, а предмет), єдиний індекс пошуку по чотирьох джерелах і алгоритм інтервального повторення SM-2.

9ES-модулів ≈4 800рядків JS 2 040рядків CSS 0пакетів у фронтенді
06

Типографіка, розрахована на двадцять хвилин щодня

Тіло уроку набирається серифом, а інтерфейс лишається на гротеску, і межа між ними проходить по одному класу. Причина проста: урок — це 700–1300 слів суцільного тексту, і саме він займає майже весь час людини в застосунку, тоді як кнопки й чипи сканують, а не читають. Довжина рядка обмежена 74 знаками, тож праворуч лишається порожнє поле — навмисно: рядок на всю ширину екрана втомлює око раніше, ніж закінчується абзац. Таблиці й блоки коду з обмеження виведені.

Акцент навмисно приглушений. Насиченіша теракота виглядала ефектніше на скріншоті, але у застосунку, де сидять щодня, вона втомлює: акцент потрібен, щоб показати, куди натиснути, а не щоб привертати увагу. Усі поєднання перевірені на контраст — від 4.6:1 у світлій темі до 9.3:1 у темній.

07

Що ловить помилки замість читача

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

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

node tools/validate_lessons.mjs   # контент
node tools/smoke.mjs              # екрани й консоль

Чого застосунок не робить

Перелік меж корисніший за перелік можливостей: він показує, де закінчується зроблене і починається припущення.

Не питає модель про правильність відповіді.

Уся перевірка завдань і весь розбір артефактів — детерміновані правила з документації. Це дешевше, працює офлайн і, головне, не вигадує.

Не збирає жодних даних про користувача.

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

Не тримає чужих ключів.

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

Не переказує джерела дослівно.

Матеріал переставлений під формат «двадцять хвилин із завданням», а практики такого виду в оригіналах немає. Кожен урок несе поле з першоджерелами, і вони перелічені в самому застосунку.

Не дає помічникові говорити за межами уроку.

Системна інструкція забороняє йому називати параметри API Anthropic, яких немає в переданому тексті. Відмова відповісти тут дешевша за впевнену вигадку.

Стек

Фронтенд

JavaScript, ES-модулі без фреймворка без кроку збірки CSS custom properties Service Worker PWA localStorage

Бекенд і моделі

Cloud Functions v2 Node 20 Vertex AI Gemini Anthropic Messages API Firestore CORS allowlist денні квоти

Інструменти проєкту

Firebase Hosting валідатор контенту димовий тест у браузері генератор іконок

Найкоротший шлях — відкрити й почати

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

Відкрити курс →