Привет, хабр!
В последнее время тестил разные инструменты для вайб-кодинга и зашёл на Jules (*google - организация пока что не признанная в РФ экстремистской) чисто дать ему очередную задачку. На этом ресурсе уже была статья по этому инструменту - Google запускает агента по программированию Jules, но для тех кто не в курсе, быстро пробегусь по функционалу. Jules выполняет все операции в изолированном окружении. Он клонирует ваш github-репозиторий, выполняет ваши просьбы, редактирует файлы, формирует коммиты и публикует в ваш репозиторий pull request (сокращённо pr) с выполненной задачей. Если задача простая, то Jules прекрасно подойдёт, чтобы решить её автономно. Его приятным дополнением было то, что если повезёт, то задачу достаточно описать 1 раз и можно идти по делам пока gemini за вас всё делает; помимо прочего был доступ с телефона. Одним словом - пушка. Но каково же было моё удивление когда зайдя сегодня на сайт (стоит уточнить что для пользователей из РФ Jules доступен только через 3 буквы) я обнаружил, что все мои лимиты установлены в 0 и я не могу ничего сделать. Разочаровавшись, я было упал духом, но пошёл и проверил парочку других инструментов для ии-кодинга и внезапно для себя обнаружил то, о чём собственно, хотел поделиться с вами. Итак, вашему вниманию:
Agent Zero
Обнаружил видосы на ютубе: на канале выходят небольшие сводки с обновлениями, и, что очень радует, проект развивается достаточно быстро. Например, недавно они добавили автоматическую конвертацию ответов в текст, чтобы вы могли слышать результат работы чат-бота, пока, например, работаете в другой программе и свернули вкладку.
Что это такое?
Принцип работы a0 выходит за рамки обычного чат-бота. Давайте рассмотрим как сейчас мы привыкли работать с чат-ботом:
Пользователь пишет текст, бот на него отвечает. Пока бот отвечает пользователь обычно не может добавлять уточнений.
При помощи встроенных утилит бот умеет делать всякое, например, ходить с вашим вопросом в интернет
При локальной установке бот получает доступ к вашим файлам, может в них ориентироваться, редактировать, удалять
При помощи mcp-серверов вы можете подключить своего бота к работающим другим программам и инструментам. Так, в современном мире боты уже научились обращаться к базам данных, гитхабу, блендеру, юнити и выполнять в этих системах операции за вас.
Какие новые возможности привносит a0?
Все операции выполняются в изолированном окружении. По сути это виртуальная файловая система, куда вы можете загружать файлы. Бот имеет доступ только к файлам в своём окружении. И вы контролируете, какие файлы туда попадают.
В этом изолированном окружении бот использует дистрибутив Линукса. Он может выполнять команды на python чтобы выполнять математические операции и проч. При этом на хосте (вашей машине) у вас не обязан быть установлен python!
Вы можете контролировать процесс выполнения сложной задачи, дополняя ответ.
Бот может распараллелить задачу на своих под-агентов, раздав им отдельные таски.
Бот может продолжить выполнять задачу, пока одна из терминальных команд выполняется, если он заметит, что она выполняется подозрительно долго.
Как приятное дополнение - для работы агента существует множество провайдеров, например, openrouter и ollama. Ну а ещё вы можете обратиться в боту с телефона и получить всё тот же функционал.
Почему это важно? Потому что никто не хочет давать доступ ко всем файлам в системе. Это не безопасно по нескольким причинам:
ваши данные уходят провайдеру модели, некоторые провайдеры говорят, что они не используют ваши данные, но кто докажет, что они не врут ?
бот со слишком большими правами может навредить системе. Например, недавно в твиттер завирусилась тема, где человеку умный ассистент удалил продовую БД (очень хорошо эту тему осветил Олег в своём телеграмм канале - советую подписаться, не реклама).
Если я вас заинтересовал, то давайте быстро посмотрим как можно обеспечить себе безбедную жизнь лёжа на диване и клацая кнопочки даже не на клавиатуре, а в телефончике. Я приглашаю вас прочитать про: установку и настройку агента, пример работы, ограничения и под конец мы кратко пробежимся по альтернативам. Поехали!
Установка
Мы рассмотрим вариант установки на передовую операционную систему RedOs windows! Для англочитающих есть инструкция на иностранном.
Устанавливаете docker desktop. Приготовьтесь что в будущем он может собрать много памяти на вашем ssd, поэтому гигабайт 20 (хотя бы) у вас должно быть в загашнике, как и побольше оперативы!
При установке он не потребует никаких параметров и даже не предоставит вам возможность установки на другой том! Ждём распаковки и перезагружаем компьютер. Передовая операционная система обязательно должна быть перезагружена после выполнения чего-то важного!
Оно может потребовать обновить wsl. Делать нечего, обновляем :
wsl --update
. Выполнять из-под администратора.Открываем docker desktop. Ждём загрузку и выполняем вход в систему. Самый простой способ - по гугл аккаунту. Как только вы войдёте, в docker desktop можно будет посмотреть свои образы docker опубликованные на dockerhub. А в трее появится иконка docker наведя на которую вы увидите сообщение "docker desktop running". Это важно, так как без запущенного докера команды для работы с ним работать не будут!
Закрываем мерзкий gui, открываем родненький терминал, проверяем установку при помощи
docker pull agent0ai/agent-zero
. Если не получается, попробуйте выключить те самые 3 заветные буквы благодаря которым вы смотрите ютуб!На самом деле на предыдущем шаге мы не только проверили работу docker-а но и установили сам a0. Как вы понимаете, он будет работать с виртуальным файловым хранилищем, которое где-то должно собственно храниться. Для этого создадим папку в директории тома, я назвал
C:\agent-zero-data
.Запускаем
docker run -p 5080:80 -v //var/run/docker.sock:/var/run/docker.sock -v C:\agent-zero-data:/a0 agent0ai/agent-zero
. Вместо 5080 вы можете использовать любой удобный порт, только учитывайте, что некоторые порты при открытии адреса в браузере могут вызвать ошибку Err_unsafe_port, если в chrome и на десктопных браузерах это ещё как-то лечится, то вот на телефоне вы такой сайт уже никак не откроете.
Продвинутые пользователи могли заметить что мы зачем-то передаём адрес сокета в подключённых volume. Чуть позже вы поймёте что это нужно для получения доступа к докеру внутри докера! ?
Конфигурация
Для целей этого примера мы будем использовать openrouter. Потому что его можно использовать без 3х букв. Если что вы можете спользовать ollama, провайдеров в UI несчесть.
Зайдя на http://localhost:5080/ открываем настройки клацнув по кнопочке
Settings
.В табе
External services
находим поле с openrouter и вставляем туда api ключ. Как получить ключ ? Если я разобрался то и вы разберётесь ?.Внизу нажимаем
Save
-
Переключаемся на таб
Agent Settings
и обнаруживаем что агент по умолчанию подставил использование продвинутого навороченного gpt. Нам это не надо, мы тратить деньги не хотим. Идём на https://openrouter.ai/models?max_price=0 и выбираем понравившуюся нам модель. При выборе придётся учитывать следующие пункты.Размер контекста. Если он слишком маленький (например 33к) есть риск что вы быстро его забьёте и модель не сможет продолжать диалог.
Обратите внимание на description. Помимо того, что из него вы можете предположить, поймёт ли LLM-ка ваш неграмотный русский, можно узнать и другие данные. Например, до сих пор висит бесплатная модель Gemini 2.5 Pro Experimental, которая отключена google и ею бесплатно воспользоваться у вас не получится, но на сайте она есть. С недавнего времени на странице модели появилась плашка с объяснением, но раньше её не было.
Поддержка tool calling. К сожалению, openrouter работает так, что если в провайдерах модели нету указанного флага, то запрос к ней обернётся 400, в тексте будет сообщение о том, что openrouter не смог найти подходящего провайдера, поддерживающего вызов tool. Чтобы проверить что выбранная вами модель поддерживает tool зайдите на её страницу, посмотрите список провайдеров, раскройте экспандер каждого провайдера и вы увидите рядом с каждым список тегов. Если хотя бы один провайдер имеет тег
Tools
- эту модель можно использовать. При возникновении ошибок проверьте этот пункт повнимательнее. Ну а ещё вы можете поставить галочку в фильтрации чтобы openrouter вам модели без Tools даже не предлагал.Я выберу tngtech/deepseek-r1t2-chimera:free, несмотря на то, что провайдер chutes не указал что есть поддержка
Tools
, Agent Zero может использовать её как LLM-ку для выполнения поручений. При возникновении проблем или когда модель застряла в сложной точке, в UI Agent Zero можно временно переключиться на платные модели, они и генерируют ответ быстрее и лучше справляются с некоторыми задачами, но для этого вам как-то нужно будет пополнить баланс openrouter, с русских карт на данный момент это сделать невозможно. В связи с этим следующий пункт:Ограничения бесплатного аккаунта openrouter. Самый простой способ их обойти - пополнить баланс хотя бы на 5$ через Wanttopay тг бота (опять же не реклама). Учитывайте что openrouter берёт комиссию, если у вас на карте 5$ и вы хотите их превратить в 5 кредитов openrouter, у вас получится 4.8 или примерно такое число но никак не ровно 5$. В интернете написано что для облегчения ограничений минимальный баланс должен быть 10$ (по-моему эта цифра была в дискорд-сервере поддержки, рекомендую заглянуть, ведь они публикуют новости при деплое новой модели), но я бы подкорректировал это заявление: для облегчения ограничений вы должны закинуть минимум 10$, из-за комиссий на аккаунте у вас будет чуть меньше кредитов. Для пользователей, кто не заплатил ни цента, ограничения примерно 100 или 10 api запросов в день, по идее ограничение сбрасывается по гринвичу (т.е. когда в мск 3 утра). Но опять же легче подкинуть на аккаунт пару долларов и получить ограничение в 10 раз больше - порядка 1000 или 100 (подробнее ищите в официальной документации). Бонусом вы получаете преимущество - если всё таки вы исчерпали свой дневной лимит, вы можете переключиться на платные, но дешёвые модели. Например, какой-нибудь gemini flash lite будет съедать всего пару центов за множественные операции. Если не наглеть, то этого вполне хватает.
Ограничения самих провайдеров. Может прилететь 429 (too many request). Такое может произойти, если провайдер чувствует наплыв пользователей и как-то должен справляться с нагрузкой. Например Venice: Uncensored очень редко даёт собой попользоваться, в большинстве случаев 429. Аналогично сам openrouter контролирует кол-во приходящих от вас запросов и если ваш агент работает слишком быстро (часто выполняет короткие команды, что превращается в частые запросы к серверу) то openrouter ответит вам отказом, в котором мягко попросит повторить запрос (цитата:) shortly т.е. через 1 минуту. Обычно речь идёт о паре секунд, и вы уже можете повторять попытку, но думаю это ограничение привнесли после появления множества инструментов для работы с кодом, как, например, Cline.
Возвращаясь в a0 стоит упомянуть что помимо Chat model name вам надо настроить ещё и Utility model name, согласно документации второе будет использоваться реже первого и чисто в небольших запросах для всяких ништяков типа организации, подготовки и суммаризации. Если вы знаете ограничение своей модели, то можно ещё установить Chat model context length, чтобы a0 заранее знал эту инфу (для
tngtech/deepseek-r1t2-chimera:free
- 164000). Supports Vision и Use Vision - флаги которые отвечают за распознавание картинок. В моей работе это не нужно и я их выключил. Вы же должны быть в курсе о том, поддерживает ли ваша текущая используемая модель распознавание картинок.-
Теперь научим наш агент использовать github. Это можно сделать 2мя способами, описанными в репозитории mcp сервера.
Можно использовать url https://api.githubcopilot.com/mcp/ и тогда вместо обращения к серверу по stdio агент пойдёт по url и будет общаться с ним. Удобство заключается в том, что вам даже не надо ничего устанавливать - сервера гитхаб публично открыли доступ к своему mcp серверу для всех пользователей, главное не забыть передать pat токен. Однако здесь мы сталкиваемся с суровой реальностью, в которой видимо сервер заблокирован для людей с ip адресом из РФ, и, какой бы токен вы не передали, вы всегда будете получать 403.
Второй вариант подразумевает использование docker образа с mcp сервером. Как вы помните, агент работает в своём окружении, иначе говоря, он не может получить доступ ни к какому процессу на хостовой машине (почти). Получается единственный выход - докер в докере?. Именно для этого мы при запуске сообщили ему адрес до сокета. Именно этот вариант у меня и заработал:
Настроим mcp сервер. Открываете настройки mcp серверов a0 (MCP Servers Configuration). Вам откроется редактор для json, когда его редактируете контролируйте запятые на концах строк и массивов - их не должно быть (вот так ["a","b","c",]
работать не будет). Вставляете следующий код:
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_vash-token-kak-harasho-chto-ya-suda-ne-vstavil-svoy"
}
}
}
}
Когда будете создавать pat-токен можете выдать ему доступ на всё (советую создавать global-токен а не repo-scoped). Внимательно прочитайте, что делает каждая галочка, чтобы агент случайно не перезатёр вам что-нибудь важное.
Когда вы нажмёте apply, скорее всего вы получите ошибку что docker в окружении не установлен. Открываем чат и просим его установить docker. a0 проведёт логическую цепочку в своих нейрончиках и выполнит пару терминальных команд, так как доступ к хостовому движку докера мы ему дали, проблем возникнуть не должно.


Использование
Как обращаться к агенту? Стоит сказать, что по умолчанию агент работает в своей файловой системе докер-контейнера в рабочей папке по пути /root
. Вместе с тем вы можете заметить что мы примонтировали /a0
когда его запускали, эта примонтированная папка содержит некоторые данные которые понадобятся агенту при перезагрузке системы. Например, там в a0/tmp/settings.json
есть как раз строка mcpServers в которой хранится наш json с настроенным mcp-сервером. Этот же файл представлен в файловом браузере нашей хостовой машины по адресу "C:\agent-zero-data\tmp\settings.json
".
Подробнее про использование a0 можно почитать в официальной документации.
Например, давайте попросим его посмотреть какие проекты я публиковал на своём гитхаб:

Теперь давайте попробуем воспользоваться agent-zero ровно так как люди сейчас пользуются Jules. Я задам промт:
clone degustator-on-x-7 into your work environment and orginize files:
move assets to specific folders based on their types,
move scrips (except main script) under `scripts/` folder,
and finally check code for references that changes and make this changes.
Commit your stuff with 2 separate commits:
first commit after you reorginize files
and the second when you fixes missed or incorrect file links in code.
Push your changes in branch `refactor` and publish it on github.
After that i will review your changes on github site and complete your pull request
degustator - это моя простая игра на pygame. Сейчас проект полон нечистот, да и все файлы: картинки, скрипты, звуки, - лежат в одной корневой папки без какой-либо организации. Продвинутые LLM модели уже давно могут взять эту рутину на себя! Давайте проверим, насколько наш Jules дома смог справиться с задачей.
Ограничения
Процесс нужно контролировать, особенно если вы используете бесплатные модели, которые не умеют всё делать с первого раза. Если у вас открыт терминал на большом экране, из которого вы запускали докер - то так ещё удобнее, так как все логи красиво форматированы и выводятся с цветами, вы можете легко узнать, на каком этапе выполнения задачи ваш агент, и о чём он думает*. Аналогично, это можно сделать в web-интерфейсе, где мы пишем промты. Интерфейс кстати одновременно простой и довольно приятный, его однозначно делали люди, которые понимают чего они хотят: важные функции по типу текущего времени сервера (с точностью до секунды), его статуса, кнопки ресета и рестарта, - выведены на главный экран. Такие особенные вещи как смена используемой модели требуют открытия настроек, но навигация по ним тоже вполне интуитивная.
За время выполнения задачи я словил пару стопов, когда модель не могла ответить, звукового сопровождения не было, но думаю это обязательно добавят в последующих обновлениях. Проблемы решаются методом тыка, пробованием других моделей, попыткой отправить сообщение try again
или например, рестартом сервера (функция работает очень плавно, вам не нужно возвращаться в терминал или перезагружать страницу, сервер сам всё сделает а фронт сообщит, когда сервер a0 вновь будет доступен).
*Кстати про думает. Приятной особенностью было то что благодаря системному промту и большому труду разработчиков, модель после каждого шага делает краткую суммаризацию своих выводов. Это можно увидеть в терминале, откуда вы запускали докер:

Модель попросила меня способ которым авторизоваться в github. Да, у меня на хостовой машине стоит PuttyGen с лоадером ключей, но как я уже говорил, всё действие происходит в докер контейнере, которому нужен особый подход. Здесь подойдёт наш pat-токен созданный ранее, который я и скормил модели, чтобы она могла опубликовать pr в моём репозитории.
Я думаю нету смысла томить ожидания, и давайте же на него посмотрим.

Думаю, все уже в курсе, что получится г?вно. Оно и получилось. Но давайте начнём с плюсов.
Изменения опубликованы не от моего лица а от некоего Agent-Zero у которого теперь даже есть аккаунт на гитхабе Agent-Zero (зафолловьтесь пж)
К pr-у приложено вполне неплохое описание
Файлы действительно перемещены в папки в соответствии с типом ассета. Звуки пошли в sounds, картинки в images
Кое-где в коде действительно можно заметить изменения касающиеся путей до файлов. Например в
language_selector.py
Ну на этом плюсы заканчиваются.
На скриншоте выше видно, что агент проигнорировал файл loading.gif и оставил его в корневой папке репозитория, что я попросил его исправить, и он это исправил и в pr-е образовались новые коммиты.
Работа импорта в скриптах поломана. Например
from scripts.doti18n import LocaleData
100-процентов не то что мы хотим, ведь doti18n это внешняя библиотека. Или вот ещё примерfrom scripts.tkinter import messagebox
В файл с текстом туториала зачем-то были внесены правки. Строка Shop: Buy researched items and immediately eat them to avoid dying from hunger, превратилась в Shop: Buy researched items and immediately eat them to avoid dying from scripts.hunger! Этот текст будет отображаться игроку и он не поймёт про какой "scripts" речь.
В других местах полностью поломалась логика работы программы. Например:

По итогу недолгого ревью, благо, pr короткий, я могу с уверенностью сказать: этот код работать не будет. Из-за сломанных импортов и других допущенных ошибок.
Вы же должны понимать, что, чем лучше и продвинутее модель вы используете и чем короче и проще контекст тем лучше будет результат.
Альтернативы
Раз уж мы затронули тему ai ассистентов не могу не рассказать пару мыслей о конкурентах. Я попробовал:
plandex. Нет gui, только cli. Очень сложная настройка, при этом есть проблемы с работой с моделями от openrouter и в принципе разработка и решение issue не такая быстрая.
opencode. Тоже cli утилита. Установка полегче через chocolatey. При этом стоит учесть, что эта утилита не работает или работает не очень хорошо в стандартных windows терминалах типа cmd или powershell, поэтому для него я поставил wezterm. Пока не могу много о нём рассказать поскольку мне не повезло тестировать его на error-prone моделях, о чём я узнал только позднее. Понравилось наличие нескольких тем.
aider. cli. Допотопная штука, которая не умеет самостоятельно подгружать нужные файлы и требует чтобы вы ей передавали руками каждый файл проекта и вручную контролировали контекст. Есть плагины для IDE, но мне слабо понятно зачем они нужны если в Rider есть Continue а в VS code есть Cline или RooCode (о них вы можете узнать из статьи Как использовать Cline и Roo Code в качестве AI-ассистента для кода?).
qwen-code. cli. Появился буквально недавно и является форком gemini-cli. Важным изменением по сравнению с gemini-cli является как раз то что тут можно выбрать openrouter модели. Поменьше настроек чем в opencode, но в отличие от aider умеет самостоятельно искать файлы и решать проблемы. Слишком сложные таски в больших проектах ему поручать не стоит - наведёт шороху а потом скажет что у него лапки и больше он ничего сделать не сможет.
Что по итогу?
Для меня лучшим решением всё ещё остаётся Cline. В rider аналогичного по функционалу и доступности плагина просто нету.
При этом если надо что-то сделать не открывая ide - agent zero - хороший продукт. С учётом всех перечисленных особенностей я планирую и дальше его тестировать, но на задачах попроще, по типу формирования документации к библиотекам, допиливанию несложных задач и прочее. Не говоря уже о том что можно открыть порт в локальной сети и пользоваться агентом лёжа на диване в гостинной. Подозреваю, что будет и вариант с авторизацией и тогда можно будет вообще захостить его на своём сервере и пользоваться вообще откуда угодно, прямо как Jules.
Напоследок хотелось бы сказать пару мыслей.
Модели умеют хорошо делать свою работу, но их скоуп задач всё ещё довольно ограничен и знание программистом контекста необходимо для успешного выполнения задач.
Иногда легче потратить 2-3 минуты чтобы сделать то что ты знаешь как делать чем 10-15 минут формировать промт а потом ещё столько же пытаться понять, что тебе нагенерилось.
В заключение приложу довольно таки правдивый мем о том что такое вайб-кодинг:

Всем спасибо за внимание.