Мод для Claude Code · открытый код · MIT · macOS

Wirepane: отладочный прокси, трафик которого читает Claude

Wirepane превращает Claude Code в отладочный HTTPS-прокси для браузера, симулятора iOS, iPhone, эмулятора Android и Android-телефонов. Он расшифровывает HTTP/2, gRPC, WebSocket и server-sent events, показывает их в панели рядом с диалогом и отдаёт Claude тот же трафик через 16 инструментов.

В строке ввода Claude Code /plugin install wirepane --marketplace legostin/wirepane
  • 16 инструментов для Claude
  • 3 навыка
  • 1 прокси на все сессии
  • 0 зависимостей из npm
127.0.0.1:8899 · 342 requests
  1. 401 POST https://api.example.com/v1/login 1.2KB 180ms
  2. 200 POST https://api.example.com/pkg.Cart/Checkout 41B 95ms
  3. 101 GET wss://api.example.com/chat ↑14 ↓52 …
  4. CERT CONNECT gateway.icloud.com:443 0B 0ms
Панель открывается рядом с диалогом: неудачный вход, gRPC-вызов, который изменило правило, живой WebSocket и клиент, не принявший сертификат прокси. Тот же список Claude читает через свои инструменты.

Спрашивайте, а не копируйте

Не нужно переносить запросы в чат — достаточно спросить:

  • Почему на телефоне оформление заказа отдаёт 402, а в браузере — нет?
  • Подожди, пока я нажму „Войти“, и расскажи, что отправило приложение.
  • Пусть лента грузится 3 секунды, а каждый пятый запрос падает.
  • Ответь на сокет с ценами моком, который шлёт тик на каждую подписку.
  • Из эмулятора ничего не приходит. Почини.

Claude находит запрос, читает только нужную часть, сравнивает работающий с упавшим, повторяет его с изменением, пишет правило и чинит ваш код. А если что-то мешает — нет CA, приложение пиннит сертификат, включён VPN или системный прокси держит Charles, — доктор называет причину и устраняет её.

16 инструментов для Claude

Всё, что показывает панель, — в виде инструментов, которые Claude вызывает сам.

  • list_requests

    ({ filter?, since?, limit? })

    Состояние прокси и по строке на запрос: id, метод, статус, URL (длинные обрезаны), размер, время, тип, число сообщений WebSocket и событий, правила, ошибка. С since — только новое.

  • get_request

    ({ id, part?, json_path?, max_chars?, from?, limit? })

    Один запрос по частям: сводка, заголовки, запрос, ответ, сообщения. Тела делят общий бюджет, а json_path достаёт одно поле. gRPC, protobuf, трейлеры, сообщения WebSocket и события — тоже здесь.

  • search_requests

    ({ text, where?, filter? })

    В каких запросах встречается текст — в URL, заголовках, телах, сообщениях или событиях, — с окружающим контекстом.

  • wait_for_request

    ({ filter, timeout_s?, until? })

    Ждёт запрос, который вы вот-вот вызовете, и отвечает, как только он завершится.

  • diff_requests

    ({ a, b })

    Чем различаются два запроса: метод, URL, параметры, заголовки, статус, JSON поле за полем.

  • replay_request

    ({ id, method?, url?, headers?, body?, json? })

    Отправляет запрос ещё раз — как был или с изменениями — через прокси, так что он записывается и к нему применяются правила.

  • resume_request

    ({ id, action?, changes?, respond? })

    Отпускает обмен, остановленный на точке останова: как был, с правками, с ответом вручную или обрывает его.

  • send_ws_message

    ({ id, to, text | json | b64 })

    Вставляет сообщение в живой WebSocket — клиенту или серверу.

  • close_websocket

    ({ id, code?, reason? })

    Закрывает живой WebSocket, чтобы проверить переподключение.

  • add_ruleupdate_ruleremove_rulelist_rules

    Файл правил; изменения действуют сразу.

  • track_domains

    ({ add?, remove?, set?, enabled? })

    Расшифровывает и записывает только хосты вашего приложения и показывает, что прошло мимо.

  • export_har

    ({ filter?, file? })

    HAR 1.2 с телами и сообщениями WebSocket — для коллеги или Chrome DevTools.

  • diagnose

    ()

    Доктор: все проверки, и у каждой находки — способ её исправить.

Все протоколы современного приложения

Расшифровано и разобрано: в панели — для вас, в инструментах — для Claude.

  • HTTP/2 в обе стороны

    Клиентам, которые его предлагают, и серверам, которые на нём говорят. Остальным — HTTP/1.1, каждой стороне отдельно. И открытый h2c — для gRPC к локальному сервису.

  • gRPC и gRPC-Web

    Трейлеры передаются дальше. Тела разбираются без схемы: номера полей, значения, вложенные сообщения. Упавший вызов показывает статус: gRPC NOT_FOUND: no such user.

  • Protobuf

    Тела application/x-protobuf разбираются так же.

  • WebSocket

    Сообщение за сообщением, в обе стороны, с таймингами и кодами закрытия. Сжатие убирается из предложения клиента, поэтому каждое сообщение остаётся читаемым.

  • Server-sent events

    Событие за событием по мере прихода, с точностью до миллисекунды. Сделано для потоковых API языковых моделей.

  • Сжатые тела

    gzip, brotli, deflate и zstd распаковываются.

Любой клиент — одним нажатием

Запустите /proxy, и пустой список сам предложит способы подключения, которые нашёл на этом Mac: браузер, запущенный симулятор, эмулятор, телефон.

  • Setup → Browser

    Отдельный браузер

    Chrome, Edge, Brave или Chromium запускается с собственным профилем и доверяет прокси по SPKI-хешу. Ставить сертификат не нужно, а localhost тоже перехватывается.

  • Setup → iOS

    Симулятор iOS

    Use (или Boot & use) загружает симулятор, добавляет CA и включает системный прокси Mac: своей настройки прокси у симулятора нет.

  • Setup → iOS → iPhone / iPad

    iPhone и iPad

    Включите Listen on LAN, отсканируйте QR-код, чтобы поставить профиль, включите полное доверие и укажите для Wi-Fi прокси по показанному адресу. Раздел подтвердит, когда пойдёт трафик.

  • Setup → Android → Emulator

    Эмулятор Android

    Start through the proxy запускает AVD за прокси и открывает страницу с CA. На образе Google APIs кнопка Trust in all apps делает CA системным до следующей перезагрузки.

  • Setup → Android → Phone

    Android-телефон

    По USB его направляет на прокси adb reverse, Wi-Fi не нужен. По Wi-Fi — Listen on LAN, QR-код и настройка прокси, которую останется ввести.

  • Setup → macOS · Setup → CLI

    Приложения Mac и командная строка

    Safari и нативные приложения получают системный прокси и CA — по одному нажатию, и оба возвращаются как было, когда прокси останавливается. Для curl, Node, Python, Go, Java и Docker копируются HTTPS_PROXY, NODE_EXTRA_CA_CERTS, SSL_CERT_FILE и REQUESTS_CA_BUNDLE.

Правила и моки

Wirepane не только показывает трафик, но и меняет его. Правила меняют запросы до отправки, ответы — до того, как их получит клиент, и сообщения WebSocket в обе стороны. Попросите Claude обычными словами, и он сам напишет правило.

Что умеет правило

  • Остановить запрос или ответ на точке останова, пока ты или Claude не отпустите его — с правками или без.
  • Подставить мок, добавить задержку, урезать скорость, вернуть ошибку или оборвать соединение.
  • Переписать заголовки, URL и JSON.
  • Отправить запросы на ваш локальный сервер.
  • Заменить WebSocket-сервер целиком: ответить на апгрейд кодом 101, отправить сообщения при открытии сокета и отвечать на подходящие.

Где они живут

  • В проекте, в .claude/proxy-rules.json, — их можно закоммитить. Файл перечитывается, как только меняется.
  • Вид Rules описывает их словами и считает срабатывания. Там же их включают и выключают, переставляют и удаляют.
  • Запрос, который изменило правило, помечен в списке, а в подробностях написано, что сделало каждое правило. Отфильтровать такие можно через is:modified или rule:<id>.
  • Скрипт запускается, только когда одобрен его SHA-256, так что файл правил из склонированного репозитория не выполнит код без спроса.
.claude/proxy-rules.json
{
  "rules": [
    {
      "id": "slow-feed",
      "description": "Лента на плохом 3G, время от времени падает",
      "match": { "methods": ["GET"], "host": "api.example.com", "path": "/v1/feed*" },
      "request": [{ "type": "delay", "ms": 800, "msMax": 2500 }],
      "response": [{ "type": "throttle", "bytesPerSecond": 50000 }]
    },
    {
      "id": "mock-prices-socket",
      "description": "Поток цен без всякого сервера",
      "match": { "path": "/ws/prices" },
      "request": [{ "type": "respond", "status": 101 }],
      "messages": [
        { "type": "send", "on": "open", "to": "client", "json": { "type": "hello" } },
        { "type": "reply", "when": "\"subscribe\"", "json": { "type": "price", "price": 42.5 } }
      ]
    }
  ]
}

Доктор, который убирает помехи

/proxy doctor, вид Health или инструмент diagnose проверяют сам прокси, системный прокси, VPN, другие прокси-приложения, CA на каждом клиенте, хосты с пиннингом, сбои связи с серверами и устройства Android. Для каждой находки сказано, как её исправить, а у многих есть кнопка.

Что он чинит сам

  • Хосты с пиннингом пропускаются

    Хост, дважды отвергший сертификат, дальше идёт туннелем нетронутым — приложение продолжает работать. Когда клиент начнёт доверять CA, его можно снова расшифровывать.

  • Забытый системный прокси возвращается

    Убитый прокси может оставить системный прокси Mac включённым, а сам Mac — без интернета. Сторожевой процесс возвращает настройку на место.

  • Самоподписанные dev-серверы

    Самоподписанный сертификат dev-сервера принимается одним нажатием — только для этого хоста.

  • Офисные сети

    Вышестоящий прокси ведёт все соединения к серверам: HTTP, HTTPS, HTTP/2, туннели и WebSocket. Это может быть HTTP-прокси со входом по Basic или по Windows-учётке (NTLM), SOCKS5 или PAC-файл, который выбирает маршрут для каждого адреса. Доктор сам предлагает прокси вашей сети.

Проверка Что находит Что делать
Прокси и его процесс Остановлен, упал, порт занят (и кем); pid, время работы, память, диск, сессии Start again, Restart
Системный прокси Остался включённым после упавшего прокси (интернета нет); его держит Charles или Proxyman Put back; Setup
VPN и другие прокси-приложения Маршрут по умолчанию через utun; запущены Charles, Proxyman, mitmproxy, HTTP Toolkit Что попробовать
CA на этом Mac Safari и приложения Mac не примут HTTPS Trust on this Mac
Отказы по клиентам Отказ на всех хостах — нет CA. Один хост среди работающих — он пиннит сертификат Setup для этого клиента или Never decrypt it
Хосты с пиннингом Пропущены после двух отказов (или закрытия соединения сразу после рукопожатия, как делает OkHttp) Снова расшифровывать, когда клиент начнёт доверять CA
Сбои связи с серверами DNS (ENOTFOUND), самоподписанные dev-серверы, закрытые порты, путаница с localhost, недоступные сети Accept its certificate; что проверить
Прокси самой сети Системный прокси до Wirepane указывал на прокси офиса или VPN Use it upstream
Отслеживаемые домены Список, под который не попало ничего из пришедшего, и что прошло вместо него Добавить настоящие хосты
Устройства Android Не направлены на прокси; приложения, которые не доверяют пользовательскому CA; образ, где доступен root Setup; Trust in all apps

Один прокси на все сессии

Один прокси обслуживает все сессии Claude Code на Mac. Первая сессия, которой он понадобился, запускает его в фоне, остальные подключаются.

  • Вторая сессия подключается и видит всё, что записала первая: запросы, отслеживаемые домены, хосты, прошедшие мимо.
  • Правила каждого проекта действуют, пока подключена его сессия.
  • /clear и --resume ничего не сбрасывают.
  • Вид Health показывает процесс, его память и сессии, которые им пользуются.
  • Закончившаяся сессия просто отпускает прокси, а последняя — останавливает его. Когда сессий не осталось, прокси ждёт 90 секунд, возвращает системный прокси и устройства Android как было и завершается.

Три навыка

С плагином идут три навыка; Claude подгружает их, когда этого требует задача.

  • wirepane-debugging

    Порядок, который работает: от фильтра к сводке и нужной части, затем поиск, сравнение, повтор и проверка. И как дёшево читать трафик gRPC, WebSocket и SSE.

  • wirepane-troubleshooting

    Симптом, проверка, решение — для всего, что знает доктор, включая правку в коде вашего приложения: network_security_config в Android, пиннинг в OkHttp и iOS для отладочных сборок, HttpOverrides во Flutter и настройки прокси для Node, Go, Python, Java, Docker и Unity.

  • wirepane-rules

    Рецепты моков, задержек, хаоса, правок JSON, операций GraphQL и моков WebSocket. Каждый рецепт проверен тестом на валидность.

Всё остаётся на вашем Mac

Wirepane ничего не отправляет от себя. Он соединяется только с теми серверами, к которым обратились ваши клиенты.

  • Ни аккаунта, ни телеметрии, ни проверки обновлений, ни загрузок.
  • Никаких зависимостей из npm: прокси — небольшой процесс Node.js.
  • CA создаётся на вашей машине.
  • Записи хранятся в ~/.claude/proxy-mod. Папка запуска удаляется через два дня после того, как ею пользовались в последний раз.
  • Запрос попадает к Claude, только когда Claude вызывает инструмент.
  • Собственный трафик Claude Code и команды, которые запускает Claude, не перехватываются.

Установка

Нужны macOS, Claude Code 2.1.292 или новее и openssl (он встроен в macOS). Прокси работает на Node.js 18 или новее и находит его сам: в PATH или там, куда его поставили Homebrew, Volta, nvm, fnm, mise, asdf, nodenv или MacPorts. Если Node нет совсем, панель предложит его установить.

  1. В строке ввода Claude Code:

    /plugin install wirepane --marketplace legostin/wirepane

    Или из терминала:

    claude plugin marketplace add legostin/wirepane
    claude plugin install wirepane@wirepane
  2. Затем запустите /proxy. Прокси поднимется на 127.0.0.1:8899, откроется панель, а пустой список предложит способы подключения, найденные на этом Mac.

Команды

/proxy
открыть панель и запустить прокси (или подключиться к уже запущенному)
/proxy setup
настроить браузер, iOS, Android, macOS или CLI
/proxy doctor
находки доктора и вид Health
/proxy rules
правила
/proxy track
записывать только перечисленные домены
/proxy export
сохранить HAR-файл
/proxy stop
остановить прокси и вернуть системный прокси и устройства Android как было

Ограничения

Чего он не умеет — коротко и честно.

  • HTTP/3 (QUIC) идёт поверх UDP и до HTTP-прокси не доходит. Chrome за прокси переходит на HTTP/2, а приложение, которое требует QUIC, видно не будет.
  • Protobuf разбирается без схемы: видны номера полей, а не имена.
  • Сжатие WebSocket убирается из предложения клиента. Сервер, который на нём настаивает, может отказать; сжатое сообщение проходит неразобранным.
  • Kerberos: вышестоящему прокси, который пускает только по билетам Kerberos, нужен помощник, который входит за вас, например Px. Basic и NTLM Wirepane проходит сам.
  • Системный CA на Android требует образа эмулятора с root (Google APIs, не Google Play) и держится до перезагрузки. Android 17 требует от системных CA Certificate Transparency, а у сертификатов Wirepane её нет. Chrome на Android и так доверяет пользовательскому CA.
  • Чужие приложения с пиннингом остаются зашифрованными: их трафик пропускается как есть.
  • Скрипты в правилах выполняются в модуле vm Node: одобряйте только код, который запустили бы сами.
  • Только macOS, на API Claude Code в раннем доступе (моды).

Вопросы

Это замена Proxyman, Charles, mitmproxy или HTTP Toolkit?

Для вопросов «что отправило приложение, что пришло в ответ и почему падает» — да, и не выходя из Claude Code: HTTP/2, gRPC, WebSocket и SSE, с правилами, моками, повторами и сравнением. У Proxyman и HTTP Toolkit тоже есть MCP-серверы, но Wirepane построен вокруг агента: доктор, ожидание запросов, поиск и сравнение, бюджет контекста и навыки, которые чинят код самого приложения. Чего в нём нет — в ограничениях выше.

Нужно ли ставить сертификат на Mac?

Для отдельного браузера — нет, он доверяет прокси по SPKI-хешу. Safari, нативным приложениям Mac и симулятору iOS нужен CA — по одному нажатию на каждое.

Из приложения на Flutter (или Go, или Unity) ничего не видно.

Некоторые рантаймы не смотрят на системный прокси. В навыке troubleshooting есть несколько строк, которые чинят это в отладочной сборке.