
После выхода первой части прошло 2 месяца, и наши многоуважаемые американские партнёры из Anthropic и Google что-то подхимичили, и новые версии Claude Code и Antigravity перестали работать.
И нам придётся осваивать новые хитрости для настройки VPS, чтобы быть на острие прогресса. В статье будут настройки для VPS и Linux-десктопа.
Предыстория
В прошлой части статьи с помощью заграничного VPS, ssh и privoxy мы успешно настроили запуск Claude Code. Но время идёт, и прошлая схема почти перестала работать.
В новых версиях Claude Code и Antigravity встроили какую-то дополнительную защиту, и они перестали запускаться. Claude Code ясно говорит, что проблема в стране, а Antigravity падает с неясной ошибкой «Agent terminated due to error».
Когда впервые стали появляться такие проблемы, то я нашёл обходной путь. Дело в том, что вначале Claude Code существовал в виде модуля для Node.JS. То есть, фактически, это был такой исполняемый JavaScript-модуль. Он работал через типовые способы доступа к сети и прекрасно проксировался через privoxy.
Через некоторое время Anthropic сделали его в виде уже нативного бинарника, который умеет самообновляться.
Я подумал, что для меня не так важны какие-то мелкие нововведения и сочетания клавиш и что мне хватит старой версии программы. Я поставил Node.JS и последнюю версию Claude Code v2.1.112, которая умеет работать как модуль Node.JS. В свою пользовательскую папку ~/bin положил скрипт-обёртку claude, а в переменной PATH своего пользователя поставил этот путь первым.
Для перехвата всех запросов из программы Claude Code я использовал программу proxychains. Из-под неё можно запустить что угодно и она будет перехватывать https-запросы.
#!/bin/bash # Запускаем целевую программу # "$@" передаёт все аргументы командной строки "как есть" (с сохранением кавычек) # exec заменяет процесс оболочки процессом программы, экономя ресурсы DISABLE_AUTOUPDATER=1 exec proxychains -q /usr/bin/claude
И всё заработало. Я подумал, ладно — живём дальше. Но не тут-то было.
Квантизация и запланированное устаревание
Через некоторое время Opus 4.7, который воспринимался как откровение богов, как Deus ex Machina, который решал сложнейшие задачи с пары попыток, стал подтупливать. И чем дальше, тем сильнее.
Он стал предлагать какие-то халявные лёгкие пути вместо решения проблем, маскировку проблем, а не их решение. Или стал говорить: «Программа зависает всего в 3% случаев, это хороший показатель, давай двигаться дальше». Требования, записанные в CLAUDE.md, стали выполняться не все. Дошло даже до галлюцинаций.
То, что каждый запрос занимает минуты, — с этим я ещё как-то смирился, ведь у Anthropic не хватает вычислительных мощностей, они даже у Маска арендуют Colossus в Мемфисе.
Я понял, что всякие меняющиеся строчки с красивыми формами глаголов типа Frosting…, Blanching…, Schlepping…, переливающиеся всеми оттенками цветов, это просто мишура, создающая видимость работы, пока запрос стоит в очереди к нейросети.
Но, видимо, им очень нужно переводить клиентов на новые версии программ и новые модели, поэтому старые модели они стали квантизировать. Некоторые авторы на Хабре считают, что они идут на прямой обман и подсовывают Sonnet вместо Opus. Я не думаю, что они идут на прямой обман. Зачем? Ведь есть же квантизация! Достаточно умную модель пропустить через её мясорубку — уменьшить точность каждого параметра с 4 байт до 4-8 бит и она будет запускаться на более дешёвом железе.
Это не является обманом. Opus остаётся Opus`ом. Но просто более тупым. И чем нужнее переход на новые модели, тем можно сильнее квантизировать. Вплоть до 4 бит, что для Opus уже что-то лоботомии.
Конечно, всё это мои домыслы. Но выглядит как весьма правдоподобное объяснение.
Итак, я пользовался Opus 4.7. Всё было нормально. Но появился Opus 4.8. В моей старой версии Claude Code по какой-то причине его не было. И я думал, что ничего страшного. Но он стал работать хуже, и я стал задумываться, как заставить свежие версии Claude Code работать.
Суть проблемы
Очевидно, что разработчики встроили дополнительные механизмы проверки географических ограничений. Скорее всего, используется какой-то нестандартный запрос, что-то типа ping.
Встала задача запуска программы в некотором изолированном пузыре, в котором будет полностью свой сетевой стек. Я не хочу абсолютно весь трафик пускать через VPS, мне нужно чтобы конкретная программа, находясь в пузыре, могла слать UDP, ICMP, HTTP и HTTPS-запросы с заграничного IP.
Самое простое решение
В прошлой части мы тщательно выбирали VPS для максимально быстрой работы с Claude Code. И даже было видно, что у него есть серверы в Северной Европе. Скорее всего, в дата-центрах Nebius в Финляндии.
Поэтому мы можем просто запускать Claude Code внутри VPS. И работать удалённо через SSH. Это прекрасная опция, если всё, что нам нужно, можно поставить на VPS.
Для такого стиля работы достаточно выбирать сервер с оплатой «За ресурсы», а не помесячной. Выбрать побольше ядер. Когда вам потребуются дополнительные ядра для быстрой компиляции программ, то они у вас будут.
Но как быть, если вы хотите работать со своей файловой системой или пишете ядра CUDA, которые можно протестировать только локально? Хотелось бы, чтобы и локально всё работало.
Делаем изолированный сетевой пузырь для Claude
Скажу сразу, хоть я и пишу для блога RUVDS, у меня есть разные VPS. В том числе американских провайдеров. И настроить виртуальный сервер от RUVDS оказалось настолько проще, что в итоге я пользуюсь именно им, несмотря на имеющийся выбор.
Для начала обновим и установим curl на VPS:
apt update apt install curl -y curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh
1. Быстрая установка WireGuard на сервер
На удалённом сервере выполняем скрипт автоустановки от angristan, который сам сгенерирует ключи и конфиг для клиента. Я на все вопросы отвечал Yes или Enter. Там предложат ввести имя — введите что-то короткое в нижнем регистре без цифр до 15 символов.
curl -O https://raw.githubusercontent.com/angristan/wireguard-install/master/wireguard-install.sh chmod +x wireguard-install.sh ./wireguard-install.sh
Копируем полученный клиентский конфиг (например, wg0-ruvds.conf) на локальный ПК в папку /home/$USER/conf. Имя пользователя своё подставляем.
В конфиге смотрим порт, на котором будет висеть WireGuard. Этот порт нужно открыть на VPS и разрешить его использовать как NAT. Например, порт 55555.
iptables-legacy -I INPUT -p udp --dport 55555 -j ACCEPT # Это менять не придётся. Типовой ip iptables-legacy -I FORWARD -s 10.66.66.0/24 -j ACCEPT iptables-legacy -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables-legacy -t nat -I POSTROUTING -o eth0 -j MASQUERADE
2. Запуск Claude в изолированном сетевом пространстве
Ставим локально пакет wireguard-tools. На моём Calculate Linux это команда:
emerge -av net-vpn/wireguard-tools
Вместо использования стандартной команды wg-quick up, так как она завернёт в туннель трафик всего ПК, мы создадим скрипт, который поднимет интерфейс в изолированном «пузыре» специально для Claude.
Я сохранил следующий скрипт в папке /usr/local/bin/claude, подставив свой IP из конфига wg0.conf:
#!/bin/bash USER="Ваш линукс пользователь" # Имя сетевого пространства nbb (network bubble) SPACE="nbb" # Конфигурация WG_CONF="/home/$USER/conf/wg0-ruvds.conf" # Важно: имя файла (wg0-ruvds) не должно превышать 15 символов! # 0. Очистка "хвостов" от предыдущих неудачных запусков ip netns del $SPACE 2>/dev/null # 1. Создаем сетевое пространство (namespace) с именем "vpn" ip netns add $SPACE ip -n vpn link set lo up # 2. Изолируем DNS (чтобы приложение использовало DNS туннеля) mkdir -p /etc/netns/$SPACE echo "nameserver 1.1.1.1" > /etc/netns/$SPACE/resolv.conf # Или DNS из вашего wg0.conf echo "nameserver 1.0.0.1" >> /etc/netns/$SPACE/resolv.conf # 3. Создаем интерфейс WireGuard и закидываем его в namespace ip link add wg1 type wireguard ip link set wg1 netns $SPACE # 4. Применяем конфигурацию ключей wg-quick strip "$WG_CONF" | ip netns exec $SPACE wg setconf wg1 /dev/stdin # 5. ВАЖНО: Укажите здесь Address= из вашего wg0.conf ip -n $SPACE addr add 10.66.66.2/32 dev wg1 # 6. Включаем интерфейс и маршрутизацию внутри "пузыря" ip -n $SPACE link set wg1 up ip -n $SPACE route add default dev wg1 echo "Туннель изолированно запущен! Запускаем shell внутри туннеля..." # 7. Открываем bash от имени обычного пользователя внутри VPN-пространства cd /home/$USER ip netns exec $SPACE sudo -u $USER bash # /home/$USER/.local/bin/claude — это оригинальный исполняемый файл #ip netns exec $SPACE sudo -u $USER bash -c /home/$USER/.local/bin/claude # 8. Корректное завершение (выполнится только после закрытия bash) echo "Закрытие сессии. Очистка сетевого пространства..." ip netns del $SPACE ip link del wg1 2>/dev/null echo "Готово."
Запускаем из под root: claude
Мы оказываемся внутри пузыря. Проверка работы:
ping 8.8.8.8 curl https://ifconfig.me
Видим пинги и IP-адрес VPS.
Далее в скрипте комментируем bash и раскомментируем claude:
#ip netns exec vpn sudo -u $USER bash ip netns exec vpn sudo -u $USER bash -c /home/$USER/.local/bin/claude
That’s all, folks!
3. Адаптация пузыря под Antigravity
Меняем одну строку в скрипте:
ip netns exec vpn sudo -u $USER bash -c "/home/$USER/Programs/Antigravity\ IDE/bin/antigravity-ide"
Запускаем любую программу в пузыре
Поскольку иногда нужно запускать в сетевом пузыре разные программы, я придумал универсальный скрипт nbb — от «network bubble».
Идея такая:
Запускаем пузырь при старте компьютера
Запускаем любую программу в пузыре командой
sudo nbb program_name argsУничтожаем пузырь при выключении компьютера (необязательно)
Скрипт старта пузыря /etc/local.d/nbb.start
#!/bin/bash SPACE=nbb # Конфигурация WG_CONF="/home/inetstar/conf/wg0-ruvds.conf" # Важно: имя файла (wg0-veter) не должно превышать 15 символов! # 0. Очистка "хвостов" от предыдущих неудачных запусков ip netns del $SPACE 2>/dev/null # 1. Создаем сетевое пространство (namespace) с именем "vpn" ip netns add $SPACE ip -n $SPACE link set lo up # 2. Изолируем DNS (чтобы приложение использовало DNS туннеля) mkdir -p /etc/netns/nbb echo "nameserver 1.1.1.1" > /etc/netns/nbb/resolv.conf # Или DNS из вашего wg0.conf echo "nameserver 1.0.0.1" >> /etc/netns/nbb/resolv.conf # 3. Создаем интерфейс WireGuard и закидываем его в namespace ip link add wg1 type wireguard ip link set wg1 netns nbb # 4. Применяем конфигурацию ключей wg-quick strip "$WG_CONF" | ip netns exec nbb wg setconf wg1 /dev/stdin # 5. ВАЖНО: Укажите здесь Address= из вашего wg0.conf ip -n $SPACE addr add 10.66.66.2/32 dev wg1 # 6. Включаем интерфейс и маршрутизацию внутри "пузыря" ip -n $SPACE link set wg1 up ip -n $SPACE route add default dev wg1
Скрипт уничтожения пузыря /etc/local.d/nbb.start
#!/bin/bash SPACE=nbb ip netns del $SPACE ip link del wg1 2>/dev/null
Даём права утилите nbb в файле /etc/sudoers.d/nbb:
your_linux_user_name ALL=(ALL) NOPASSWD: /usr/local/bin/nbb
Утилита nbb в файле /usr/local/bin/nbb:
#!/bin/bash ip netns exec nbb sudo -i -u your_linux_user_name "$@"
Теперь для запуска любой программы в сетевом иностранном пузыре нужно набрать:
sudo nbb program_name arguments_of_program
Заставляем claude работать как родного
Берём подход из предыдущей части статьи. В файле ~/.bashrc прописываем приоритет пользовательской папки ~/bin и путь к папке с claude:
export PATH="$HOME/bin:$PATH:$HOME/.local/bin"
В файле /home/username/bin/claude пишем:
#!/bin/bash sudo nbb ~/.local/bin/claude "$@"
Теперь для нас использование claude в терминале из любой папки ничем не отличается от родного использования.
claude --resume "Поехали!"
Заключение
Хоть и не хотелось повышать свою грамотность в области сетевых технологий, но пришлось. И успешно!
На удивление, RUVDS продают очень хорошие VPS, на которых с первой попытки у меня завелось всё что нужно, в отличие от одного именитого американского провайдера.
Вообще VPS — отличная вещь в наше время, я их использую для многих целей.
Ну что же, я пошёл осваивать Fable 5.
Всех благ и хорошего вайбкодинга!
© 2026 ООО «МТ ФИНАНС»
Комментарии (26)

Dhwtj
11.06.2026 13:29И нам придётся осваивать новые хитрости
Для агентнозависимых
Как-то не прикольно проходить регулярные квесты

pavel_kudinov
11.06.2026 13:29А Вы, простите, планируете в обозримой перспективе сохранять занятость делая импакт в 1/10 от типичного импакта агентозависимых?
Или не верите, что современные агенты в умелых руках в разы ускоряют разработку, при этом как минимум не ухудшая, а чаще значительно улучшая качество, продуманность сайд эффектов, покрытие тестами и т.п.?
Dhwtj
11.06.2026 13:29делая импакт в 1/10 от типичного импакта агентозависимых
Возбуждение ненависти либо вражды, а равно унижение человеческого достоинства.
Лол. Ну попробуй, догони, агентозависимый!
Или не верите, что современные агенты в умелых руках в разы ускоряют разработку
Очень узкий сектор где это действительно так

pavel_kudinov
11.06.2026 13:29Возбуждение ненависти либо вражды, а равно унижение человеческого достоинства.
простите, а калькулятор тоже унизил в своё время человеческое достоинство?
я же не говорю, что агенты работают лучше ВМЕСТО человека, я говорю агенты лучше работают В УМЕЛЫХ РУКАХ. железный конь идёт на смену крестьянской лошадке

pavel_kudinov
11.06.2026 13:29Очень узкий сектор где это действительно так
Ваши сведения устарели

Dhwtj
11.06.2026 13:29Хотите, почитайте как я сегодня поставил троечку LLM за разбор легаси кода. Самая крутая фубля 5 накосячила. Код как бы работает, но он ужасен.
Вот её признания без купюр:
---
Давай честно и без самобичевания — разделю, где реально мой промах, а где структурное ограничение.
Согласен по двум пунктам — но с уточнением степени вины
1. Контракты апфронт — да, чистый промах. Это не зависело ни от кода, ни от intents. Проектировать контракты до реализации — методологически правильно всегда, независимо от того, готова ли команда к DDD, какой PHP и т.д. Я выдал «план этапов рефакторинга» вместо «контрактного слоя» — выбрал не тот уровень артефакта. Это исправляемо инструкцией, и это должно быть дефолтом. Тут оправданий нет.
2. DDD/parse-don’t-validate — промах частичный, и вот тут важный нюанс. Я не не распознал паттерн — я применил его слабую, процедурную версию (единый пайплайн + guard’ы + ревалидация перед записью). Это «валидация в одном месте», а не «невалидное состояние непредставимо». Разница как раз в том самом сдвиге, который ты внёс. То есть распознавание было, а вот выбор силы гарантии — нет. Я сел на консервативный приор: легаси с
eval, «ответственная система, не сломать» → минимально-инвазивный рефакторинг. Ошибка в том, что я не предъявил тебе развилку: «вот процедурный путь (дёшево, дрейфует), вот структурный always-valid (дороже, гарантия по построению) — выбирай». Я молча выбрал за тебя консервативный, не показав второй.Это и есть корень: не дефицит знания паттерна, а необозначенный выбор под неопределённость.
Теперь твой вопрос: пофиксят в новых моделях или не хватало кода?
Раскладываю по трём разным причинам — у них разная судьба:
(а) Контракты апфронт — да, это «пофиксят», и это даже не про размер модели. Это вопрос пост-тренинга / дефолтных привычек: более новые модели тяготеют выдавать контракты раньше, потому что их так калибруют на инженерных задачах. Информации в коде хватало с избытком. Чистый методологический дефолт.
(б) Сила гарантии (always-valid) — частично пофиксят, частично нет. Более способная модель с большей вероятностью сама предъявит развилку «процедурно vs структурно» вместо тихого консервативного выбора — потому что лучше держит в голове несколько архитектурных альтернатив одновременно и охотнее их явно противопоставляет. Но «какую силу выбрать» — это всё равно функция от твоего аппетита к риску и готовности команды, чего в коде физически нет. Так что улучшение будет в том, что модель спросит или предложит опции, а не в том, что угадает. Угадать тут нельзя — это не задача с одним ответом.
(в) Вкусовые границы (typestate — перебор) — не пофиксят никогда, и не должны. «Идиоматично ли это для нашей команды/языка» не выводится ни из какого объёма кода. Это калибруется только обратной связью. Тут больше данных не помогает в принципе.
Сухой остаток
Кода хватало для (а) и для распознавания (б). Не хватало intents для выбора в (б) и полностью для (в).
Мой главный системный дефект в этой сессии — не «не знал паттерн», а тихо выбирал консервативный вариант под неопределённость вместо того, чтобы вынести развилку наверх. Контракты — частный случай того же: я выбрал формат «план» вместо «контракт», не спросив.
Что новые модели улучшат: раньше выдавать контракты, чаще явно показывать архитектурные развилки и их трейдоффы. Чего не улучшат: угадывание твоего вкуса и аппетита к риску — это останется зоной обязательной обратной связи.
То есть формула «плотный бриф + 1–2 коррекции на уровне контрактов» — это не костыль под слабость модели, это останется оптимумом и для сильных моделей, просто остаточных коррекций станет меньше, а развилки модель будет выносить сама.

pavel_kudinov
11.06.2026 13:29у вас агент итеративно автономно отлаживал до успеха или вы просто попросили с первого раза сгенерировать правильный код?
насколько скиллами и доками покрыт для ии проект, это его первое погружение или в проекте уже накатан конвеер решения задач с помощью ии и он уже с вами задокументировал наиболее частые косяки и как правильно делать?
у меня буст пошел именно по выполнении обоих этих условий, до этого я месяца 3 адаптировал ии под проект постепенно улучшая mcp экспиренс агентный (делаю игру gpgpu симуляцию эволюции)

pavel_kudinov
11.06.2026 13:29чтобы получить x10 буст нужно дойти до многогагентной автономности и решать параллельно 10 тасок переключаясь между агентами как лид над разрабами

Dhwtj
11.06.2026 13:29Понятно, я не пытался с первого раза всё получить. Это примерно после 10 вопроса с нуля. Ошибки на стадии проектирования. На входе примерно 3-4.000 строк, 4 файла. Я раза 4 пробовал по 10-15 итераций чисто проектирования (дальше уходило в детали и проектировать уже нельзя) и раза 3 агентский режим по 4 часа - одинаково криво. То есть формально может и работать, но кода раза в 2 больше чем нужно и криво (он и сам признал что качество плохое - см выше), а значит ревью сильно затруднено, качество за счёт вычитки не проверить, а тестам я не доверяю.
Скиллы не настроены. А смысл? Это уникальная задача в проекте, она уже решена мной. В других местах другие задачи.
Если бы у меня были повторяемые задачи (или хотя бы задачи одного узкого скилла) то да, это ускорило бы, тут не спорю. Но я такие задачи джунам скидываю.
Паттерн проблем LLM в принципе одинаковый для всех моих задач: не предлагает альтернативы, не фокусируется на важном - потому не может написать высокоуровневый дизайн и план - план расползается в 3-5 раз его невозможно читать. Не предложил начать с контрактов это частности.
Но даже зная такие недостатки очень сложно их скорректировать. По существу начальные стадии полностью самому. А это часто больше половины времени.

DreamC
11.06.2026 13:29Я некоторое время уже использую ИИ инструменты, но никак не пойму как получают эти "х10" цифры. Я трачу очень много времени на чтение и переработку планов и полировку результатов. Да, работа ускоряется, но не на те дикие величины что везде пишут.
У меня складывается впечатление, что я как-то неправильно использую их...

hren_sobachiy
11.06.2026 13:29А Вы, простите, планируете в обозримой перспективе сохранять занятость делая импакт в 1/10 от типичного импакта агентозависимых?
Выиграли там, а всё выигранное потратили на квесты обхода очередных блокировок. А в один прекрасный момент это может тупо не получиться вообще. Строить серьёзный бизнес на этом - такое себе.

sergeym69
11.06.2026 13:29И зачем вам этот Opus, в нем ведь нет наших скреп и гойды! Надо пользоваться посконным ГигаЧадом !

Diamon33
11.06.2026 13:29Вот и я думаю, тем более первым же пунктом
и наши многоуважаемые американские партнёры
Зачем так страдать, взяли бы китайцев-братушек, да с ними код писали.

Snoopyman
11.06.2026 13:29Попробовал я Антигравити запустить пару месяцев назад, так у меня годовая подписка Pro слетела.

Diamon33
11.06.2026 13:29Ну что же, я пошёл осваивать Fable 5
On June 23, we’ll remove Fable 5 from those plans. Using it after that will require usage credits. If capacity allows, we’ll extend the included window.
Успеете освоить? Или там уже расчехлены тысячи долларов на API costs?

inetstar Автор
11.06.2026 13:29If capacity allows, we’ll extend the included window.
Честно говоря, боюсь даже осваивать. Не нравится идея, что данные хранить будут. Поэтому с осторожностью. Но Opus 4.8 очень хорош, по сранению со своими квантизированными предшественниками. За 1 запрос нашёл проблему, которую 4.7 не мог решить 3 дня.

Dhwtj
11.06.2026 13:29Opus 4.8 очень хорош, по сранению со своими квантизированными предшественниками
Щас его самого обрежут, чтобы фублю брали

Diamon33
11.06.2026 13:29Не нравится идея, что данные хранить будут.
Никто Вашу идею стартапа не украдет. А вот если вы корп данные подаете в личный акк - тут мои соболезнования изначально.

Ai_Paradox
11.06.2026 13:29Fable хорош. Я использую это время что бы привести в порядок свои проекты и зафиксировать.
Дал ему задание пройтись по коду на предмет багов. У меня подписка макс, так он думал 50 мин, сожрал лимит (одним запросом) и я 4 часа ждал откат. Потом я ему сказал что ответа не дождался, на что он мне ответил что да это из за того что он паралельно запустил ещё 9 агентов.
Но прогресс ревью не потерялся, он нашел 114 багов одним запросом. Опус так не сможет.
D1JEXX
Пока вообще с проблемой не сталкивался, просто warp включаешь на это всё и работает
inetstar Автор
Проблема возникает, когда для всего остального варп не нужен. И у многих сейчас варпы не работают вообще.
Kenya-West
Сети Cloudflare в России на ладан дышат.