А что, если сломать код пользователей сегодня — и тем самым избежать бунта завтра?
Именно на такой риск пошёл создатель Charlotte. Проект набрал 111 звёзд — не прорва народу, но уже достаточно реальных юзеров. Он переименовал все 43 инструмента в своём MCP-сервере. Двоеточия долой: charlotte:navigate. Подчёркивания внутрь: charlotte_navigate. Один коммит. Бум.
MCP — это Model Context Protocol, удобный мостик между ИИ-агентами и внешними инструментами — требует строгих имён: буквы, цифры, подчёркивания, точки, дефисы. Двоеточия? Ни в коем случае. Ранние SDKы это пропускали. А в v1.26.0 ввели предупреждения при каждой регистрации. Чинить сейчас, когда пользователей кот наплакал? Или потом, когда накопятся доки, мышечная память и вилами махать начнут?
Он выбрал сейчас. Умно.
Зачем ломать на 111 звёздах?
Те, кого заденет, — это те, кто жёстко прописал имена инструментов в промптах или конфигах строками. Пока таких мало. Через полгода их будет тьма.
Гениальность MCP как раз в этом. Клиенты вроде Claude Desktop или Cursor динамически обнаруживают инструменты при подключении. Агент спрашивает: «Что у тебя есть?» Charlotte выдаёт свежий список. Старые имена? Пшик. Исчезли. Для большинства апгрейд проходит гладко.
Только жёстко закодированные строки кусают. Пока редкость. Завтра — эпидемия.
Моё мнение, которого не было в оригинале: это повторяет великий сдвиг в модели устройств Linux kernel 2.6. Ранние последователи ворчали — а потом благодарили Торвальдса, когда экосистема окрепла. Charlotte делает то же самое. Ломай грубо, пока молодой; куй сталь потом. Смелый прогноз: MCP-серверы, игнорирующие это, развалятся под натиском агентов к 2025-му.
А пиар? Никакого. Чистая логика девелопера, без хайпа. Освежает.
Но v0.6.0 — это не только переименование. Ещё батчинг форм. Конец эре пожирателей токенов.
Почему батчинг форм рубит расходы на токены для ИИ-агентов?
Представьте: форма контакта на 10 полей. До 0.6.0? Десять вызовов инструментов. charlotte_type тут, charlotte_select там. Каждый тянет за собой ~4000 токенов схемы. На десять — 40 тысяч на ветер, ещё до ввода «Джейн Смит».
Теперь? charlotte_fill_form жрёт массив:
{ “fields”: [ { “element_id”: “inp-a3f1”, “value”: “Jane Smith” }, { “element_id”: “inp-b7c2”, “value”: “[email protected]” }, // и т.д. ] }
Один вызов. Обрабатывает инпуты, селекты, чекбоксы, даты, цвета. Типы угадывает сам. Для тестера, штурмующего 50 страниц? 500 вызовов сжимаются до 50. Токены накапливаются — экономия взлетает на масштабе.
Это архитектурно: туда-обратно в MCP убивают контекстные окна. Батчинг — и агентам дышать легче. Почему так долго? Слепота к токенам, видимо. Агенты были игрушками; теперь — рабочие лошадки.
Ленивый Chromium. Жёсткое лекарство.
Серверы запускали браузер при старте. Для игрушек сойдёт. А Cursor? Claude Desktop? Они грузят всё из конфига. Холостой браузер? Пожар в RAM — ради сессий кода, где браузер не нужен.
Теперь? Запуск по первому вызову инструмента. Холостой? Молчит. Нет браузера — нет пожара.
Далее — медленный ввод. charlotte_type добавил character_delay. Зачем? Сайты с поиском на лету, автокомплитом, валидацией — пасту игнорят. Нужны события от нажатий клавиш. Мелочь? Расскажите это вашим падающим тестам агентов.
Поддержка Node 20. Требование 22 сняли — ни к чему. Массы на LTS ликуют.
Как один хитрый баг JS преследовал три файла
А потом привидения: new Function(‘return ’ + expr). ASI — Automatic Semicolon Insertion — превращал многострочку в null. Зацепило evaluate.ts в v0.4.1. Починили.
wait-for.ts? Тот же яд, v0.5.0.
pollUntilCondition? Третий удар, v0.6.0. Все перекинули на CDP Runtime.evaluate.
Урок вбит: grepь паттерн. Копи-паст убивает. Надо было сделать с первого раза.
Састейнабельность отметили рано — 97% коммитов соло, счёт 2/5. За шесть недель? Семь чужих PR слиты. Фикс вьюпорта (800x600? Смешно). Устаревшие co— (контент обрезан, но идея ясна).
Charlotte стартовала в феврале. Соло. Теперь? Разгон.
Зачем следить? M