Токен opencode в access.log — не типичный анонимный скрапер, который методично вычитывает сайт по расписанию. За этим именем стоит реальный опенсорсный AI-агент для разработчиков, который умеет запрашивать веб-страницы в рамках конкретной задачи по коду — и, что важно, далеко не всегда честно представляется в заголовке запроса. В каталоге TrafficVeil бот помечен как нежелательный — но прежде чем полагаться только на UA для решения allow/deny, стоит понимать эту специфику.
Что такое OpenCode на самом деле
OpenCode — open-source AI-агент для разработки, предназначенный для задач с кодом, репозиториями и рабочими процессами разработчика — по своему классу это аналог инструментов вроде Claude Code или Cursor. У агента есть встроенный инструмент WebFetch, который умеет забирать содержимое веб-страниц в процессе выполнения задачи — например, чтобы свериться с документацией API или проверить актуальность какого-то технического факта, о котором его попросил разработчик.
Здесь есть важная оговорка, зафиксированная в открытом баг-трекере самого проекта: по умолчанию инструмент WebFetch отправляет полноценную строку User-Agent обычного Chrome-браузера на Windows, а не честно идентифицирует себя как агента — в отличие, например, от ChatGPT-User у OpenAI, который прямо называет себя в заголовке. Это значит, что часть реального трафика OpenCode в принципе не попадёт в лог с узнаваемым токеном opencode и будет неотличима от обычного браузерного визита по UA.
| Параметр | Значение |
| Название | OpenCode |
| User-Agent / паттерн | opencode (только для случаев, когда агент себя идентифицирует; часть трафика может маскироваться под обычный Chrome-браузер) |
| Оператор | Open-source проект OpenCode; не привязан к одной коммерческой компании — используется независимыми разработчиками |
| Роль | Инструмент WebFetch забирает страницы по запросу конкретного разработчика в рамках его задачи с кодом — реактивный fetch, а не системный обход по расписанию |
| Документация / ориентир | Открытый репозиторий проекта на GitHub; отдельной страницы про поведение бота для веб-мастеров не публикуется |
| Список IP | ❌ Публичного списка IP нет — трафик идёт с машин отдельных разработчиков, а не из единой инфраструктуры оператора |
| robots.txt | Поведение зависит от версии и настроек конкретного разработчика; гарантий соблюдения нет |
| Пометка TrafficVeil | Нежелательный / Прочие краулеры и сервисы |
Зачем OpenCode приходит на сайт
В отличие от систематических краулеров, которые методично проходят по каталогу, OpenCode обращается к конкретному URL потому, что какой-то разработчик в моменте попросил своего AI-агента свериться с этой страницей — например, прочитать документацию, проверить факт для статьи или технической заметки. Это делает трафик скорее единичным и непредсказуемым по времени, чем регулярным фоновым обходом.
Практическое следствие для владельца сайта: если контент страницы важен для разработчиков как справочный материал (документация, технические гайды), такие визиты — это, по сути, разовое использование сайта как источника информации в конкретной рабочей задаче, а не попытка собрать данные впрок.
Нагрузка и риски именно для OpenCode
Отдельной строки в публичной сводке топ-ботов TrafficVeil у opencode может не быть, но стоит учитывать саму природу трафика: раз запросы идут с машин отдельных разработчиков, а не из единой инфраструктуры, классические метрики вроде «повторяемый path-паттерн» или «стабильные интервалы» здесь работают слабее, чем для системных краулеров. Смотрите не столько на объём, сколько на контекст:
- единичность запроса — один-два URL за раз, а не систематический проход по разделам;
- отсутствие cookie и признаков полноценной сессии — как и у любого автоматизированного fetcher-а;
- то, что часть похожего трафика может вообще не нести токен
opencodeиз-за маскировки под браузер — это стоит держать в уме при интерпретации общей картины по логам.
Как найти OpenCode в логах
Ищите конкретный токен opencode, но помните: он покажет только ту часть трафика, где агент честно представился.
# Базовый поиск
grep -i "opencode" /var/log/nginx/access.log
# Топ URL, которые вычитывает бот
grep -i "opencode" /var/log/nginx/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head
# Топ IP за этим UA
grep -i "opencode" /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head
# Суточная активность
grep -i "opencode" /var/log/nginx/access.log | awk '{print $4}' | cut -d: -f1 | sort | uniq -c
Верификация здесь особенно ограничена: поскольку трафик идёт не из единой инфраструктуры оператора, а с множества разных машин разработчиков, связка UA + ASN малоинформативна сама по себе — IP будут разбросаны по случайным провайдерам и датацентрам без единого паттерна.
IP="1.2.3.4" whois -h whois.cymru.com " -v $IP" dig +short -x "$IP"
robots.txt для OpenCode
# Жёсткий запрет User-agent: opencode Disallow: / # Разрешить всё User-agent: opencode Allow: / # Компромисс: закрыть деньги/кабинет, оставить публичную часть User-agent: opencode Disallow: /admin/ Disallow: /cart/ Disallow: /checkout/ Disallow: /account/ Disallow: /api/ Allow: /
Важно понимать ограничение: даже жёсткий Disallow остановит только ту часть трафика, где агент прислал честный UA. Часть запросов, замаскированных под обычный браузер, robots.txt в принципе не увидит и не сможет ограничить — единственный надёжный рубеж для них в этом случае на уровне сервера или через TrafficVeil, да и то по поведенческим признакам, а не по UA.
Блокировка вручную и через TrafficVeil
Nginx
if ($http_user_agent ~* "opencode") {
return 403;
}
limit_req_zone $binary_remote_addr zone=opencode:10m rate=10r/m;
location / {
if ($http_user_agent ~* "opencode") {
limit_req zone=opencode burst=20 nodelay;
}
}
Apache (.htaccess)
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} opencode [NC]
RewriteRule ^ - [F,L]
TrafficVeil
- найдите opencode / OpenCode в ботах домена или в
/system/bots; - для нежелательного сценария — категория «запретить»; для мягкого — rate-limit;
- allow оставляйте, только если для вас важно, чтобы разработчики через AI-агентов могли свободно обращаться к вашей публичной документации или контенту;
- после изменения сверьте логи: хиты с токеном OpenCode должны уйти в блок/лимит, а нужные поисковики остаться нетронутыми — учитывая, что часть похожего трафика правило всё равно не увидит.
С кем не путать OpenCode
| Бот / сосед | Кластер | UA | Комментарий |
| 360Spider | Прочие краулеры и сервисы | 360spider | нежелательный |
| A360-Search | Прочие краулеры и сервисы | a360-search | нежелательный |
| AASA-Bot | Прочие краулеры и сервисы | aasa-bot | нежелательный |
| ABEvalBot | Прочие краулеры и сервисы | abevalbot | нежелательный |
| ActiveComply | Прочие краулеры и сервисы | activecomply | нежелательный |
Стратегия allow/deny для OpenCode
| Ситуация | Действие |
| Важно, чтобы разработчики через AI-агентов могли обращаться к документации сайта | Allow + закрыть /admin /cart /api |
| Единичные fetch-запросы нежелательны в принципе | Disallow + запрет в TrafficVeil, с пониманием, что часть трафика правило не увидит |
| Нагрузка от честно идентифицированных запросов раздражает | Rate-limit на nginx/TrafficVeil |
| Нежелательный по базе TrafficVeil | Deny по умолчанию, исключения — точечно |
| Подозрение, что похожий трафик маскируется под браузер | Полагаться на поведенческие признаки (единичность запроса, отсутствие сессии), а не только на UA |
Главное, что стоит помнить про OpenCode: это не масштабный автоматический краулер, а инструмент отдельных разработчиков для точечных задач — и решение allow/deny здесь стоит принимать с поправкой на то, что UA-фильтр в принципе не видит всю картину целиком.