---
name: electron_proxy_loopback_gotcha
description: "Форсирование Electron-приложения (ottermind, Antigravity) через локальный SOCKS/HTTP-прокси — гочи с --proxy-bypass-list и entitlements при пересборке подписи"
metadata: 
  node_type: memory
  type: project
  originSessionId: b8aa01c1-a779-42f2-9369-ddff9dc2a0cd
  modified: 2026-08-03T12:07:37.557Z
---

Схема: подменить `Contents/MacOS/<Bin>` враппером (переименовать оригинал в `<Bin>-bin`), враппер экспортирует `HTTP_PROXY`/`HTTPS_PROXY`/`ALL_PROXY` и добавляет Chromium-флаг `--proxy-server=socks5://127.0.0.1:<port>`, затем `codesign --force --deep --sign -` (ad-hoc, т.к. модификация бинаря ломает оригинальную подпись).

**Гоча 1: `--proxy-bypass-list="<-loopback>"` — не «обходить localhost», а НАОБОРОТ.** Синтаксис Chromium: `<-loopback>` убирает дефолтный автобайпас localhost и заворачивает 127.0.0.1-трафик В прокси. Если приложение рисует UI через собственный локальный HTTPS-сервер (как Antigravity — Electron грузит окно с `https://127.0.0.1:<port>/`), этот флаг рвёт загрузку интерфейса → белый экран, в логе `ERR_CONNECTION_CLOSED` / SSL handshake failed на localhost-порт.

**Why:** потратили сессию на диагностику белого экрана Antigravity — думали на entitlements, а второй (более прямой) баг был именно этот флаг. Не все Electron-приложения грузят UI через localhost-сервер (ottermind — нет, поэтому у него флаг не мешал), так что баг не универсален, но всегда стоит проверить первым при белом экране.

**How to apply:** НЕ добавлять `--proxy-bypass-list` вообще (дефолт Chromium и так не проксирует loopback, а всё внешнее уходит через `--proxy-server`). Если White screen после патча — сначала смотреть лог Electron (`~/Library/Logs/<App>/main.log`) на `Failed to load URL ... 127.0.0.1` прежде чем чинить entitlements.

**Гоча 2: пересборка подписи по частям ломает cross-binary dyld validation.** Если подписывать helper'ы/фреймворки отдельными вызовами `codesign` (даже все ad-hoc), а не одним `--deep` проходом с одинаковыми entitlements — dyld может отказаться грузить `Electron Framework` в главный бинарь с ошибкой «different Team IDs» (обе ad-hoc, но из разных подписей). Фикс: ОДИН `codesign --force --deep --sign - --options runtime --entitlements <plist>` на весь бандл сразу, entitlements извлечены из оригинала (`codesign -d --entitlements :- --xml <path>`) — обычно нужны `allow-jit` (V8 JIT) + `allow-unsigned-executable-memory` + `disable-library-validation`. Оригинальные entitlements удобно достать из чистого установщика (.dmg/.pkg), если он ещё лежит в Downloads — быстрее, чем гадать стандартный набор electron-builder.

Связано: настройка ottermind/Antigravity на xray (2080/2081) и на личный hy2-туннель (2091/2092 через `~/Services/singbox-hy2-client`) — [[us_vps_amnezia_access]].
