Привет, хабр!
В последнее время тестил разные инструменты для вайб-кодинга и зашёл на 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 LocaleData100-процентов не то что мы хотим, ведь 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 минут формировать промт а потом ещё столько же пытаться понять, что тебе нагенерилось.
В заключение приложу довольно таки правдивый мем о том что такое вайб-кодинг:
Всем спасибо за внимание.
ссылка на оригинал статьи https://habr.com/ru/articles/931398/
Добавить комментарий