dumbtv
dumbtv takes the ads, screen tracking and update nags out of your Fire TV over ADB. No root, none of your apps touched, every step can be undone. Free and open source.
A guard for your computer. Claude, ChatGPT, Claude Code, OpenClaw and Hermes reach your browser and files only under your rules: allow, deny or ask you first.
SecurityGo · HTMLGitHub @gate4aiOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
The guard between AI agents and your computer: policies, approvals and an audit log for the browser, files and sites (MCP, CLI, skill)
Taken from the repository README
Loading the full README.
Read the full README ↗gate4.ai — страж для вашего компьютера: через него любой AI-агент (Claude.ai, ChatGPT, Claude Code, OpenClaw, Hermes) получает ограниченный и настраиваемый доступ к браузеру и файлам на вашем компьютере, а через коннекторы из магазина — к сайтам, у которых нет API. Браузер и Файлы встроены в gate4ai; коннекторы магазина работают только через этот браузер и файлы — своей сети у них нет.
Вы сами настраиваете, какие сайты и папки открыты каждому AI-ассистенту и как: что разрешено сразу, что запрещено, а что требует вашего подтверждения (уведомление, Telegram, Web UI). Ни AI-ассистент, ни коннекторы и скиллы не знают ваших паролей: учётки в формы сайтов вводит сам gate4ai, а каждое действие попадает в журнал с доказательством.
Одни правила работают для всех ваших агентов: локальных (через CLI или MCP по stdio) и облачных (через relay или ваш HTTPS-адрес). Подробное описание продукта — в спецификации.
macOS и Linux:
curl -fsSL https://gate4.ai/install.sh | sh
Windows (PowerShell):
irm https://gate4.ai/install.ps1 | iex
Установщик определяет ОС и архитектуру, скачивает последний релиз, сверяет контрольные суммы, проверяет, есть ли всё для браузера агентов (gate4ai browser setup: Chrome — системный, snap, flatpak или Chromium из кеша Playwright/Puppeteer, GATE4AI_CHROME — свой путь; его разделяемые библиотеки — недостающие называются пакетами дистрибутива, «To run Chrome, install: libnss3 …»; на Linux без графики ещё виртуальный экран Xvfb и шрифты. Недостающее ставит только с вашего согласия в терминале; без терминала — сам, если он root или sudo без пароля, а без root скачивает Chrome for Testing в каталог данных (gate4ai browser setup --user) и на Debian / Ubuntu кладёт туда же его библиотеки и шрифты (apt-get download, без root); на других дистрибутивах печатает пакеты библиотек, которым root всё же нужен; GATE4AI_INSTALL_DEPS=1 — без вопроса, GATE4AI_NO_BROWSER=1 — не проверять Chrome сейчас), и кладёт gate4ai и gate4ai-tray (значок в трее: статус, «Разрешить / Отклонить», открытие Web UI; изменения настроек gate4ai, которые просит агент, разрешаются только в Web UI, где видны все правки) в каталог из PATH. Проверка: gate4ai --version.
Вручную — архивы со страницы Releases (контрольные суммы подписаны cosign, у каждого архива — attestation: gh attestation verify <архив> -R gate4ai/gate4ai; проверка — SECURITY.md) или из исходников: go install github.com/gate4ai/gate4ai/cmd/gate4ai@latest (Go 1.27+). Homebrew: brew install gate4ai/tap/gate4ai; Windows: winget install gate4ai.gate4ai (после публикации в каталогах — docs/publishing.md). Docker для сервера без root: docker run -d --security-opt seccomp=unconfined -v gate4ai-data:/data ghcr.io/gate4ai/gate4ai:latest — в образе уже есть Chrome, Xvfb и шрифты (docs/headless-server.md). Агенту с shell, который ставит gate4ai для вас, — gate4.ai/install.md.
gate4ai ui # Web UI в браузере: адрес и пароль, затем мастер первого запуска
gate4ai ui --print # без браузера: строки «Web UI:», «Password:», «From the internet:» (--json — для программы)
Установщик сам включает автозапуск (daemon сейчас и при каждом входе в систему, трей — тоже; без него — GATE4AI_NO_START=1) и, если есть графическая сессия, открывает Web UI (GATE4AI_NO_OPEN=1 — не открывать). Вручную автозапуск — gate4ai service install.
Daemon держит политики, списки доступа, секреты, журнал, встроенные Браузер и Файлы и коннекторы магазина. Автозапуск: systemd --user (Linux; без systemd — автозапуск рабочего стола), LaunchAgent (macOS), ключ Run в реестре пользователя (Windows); убрать — gate4ai service uninstall, проверить — gate4ai service status.
Без автозапуска: gate4ai daemon start — в фоне до выхода из системы (gate4ai daemon stop — остановить), gate4ai daemon — в этом терминале (остальные команды — в другом). gate4ai ui, запущенный в терминале, сам поднимает daemon в фоне, если он не работает; gate4ai status — работает ли daemon и та ли у него версия (после обновления старый процесс — предупреждение); gate4ai daemon restart — перезапустить с теми же флагами. install.sh при обновлении перезапускает работающий daemon сам. Журнал фонового daemon — daemon.log в каталоге данных.
Пароль Web UI генерируется при установке: его печатает установщик и gate4ai ui (до первого входа), показывает трей — сохраните его. Установщик всегда доводит до пароля: если автозапуск не удался, он поднимает daemon на эту сессию и всё равно печатает в stdout строки Web UI: <адрес>, Password: <пароль> и From the internet: https://<id>.relay.gate4.ai/ui/ (адрес из интернета, ждёт его до GATE4AI_UI_WAIT, по умолчанию 3 минуты). Те же строки в любой момент — gate4ai ui --print (--json: url, password, remote_url, remote_cert); эта команда отвечает и агенту, поставившему gate4ai (остальные команды владельца агенту отказывают — agent_required): он пересказывает строки вам в чат — проброс порта по ssh не нужен. Если daemon перезапустился до первого входа, gate4ai ui --print печатает новый сгенерированный пароль вместо прежнего. Пока сертификат адреса не выпущен, адрес работает на временном самоподписанном (remote_cert: temporary, браузер предупредит), настоящий gate4ai выпускает сам. Под адресом из интернета — одна строка о том, что видит relay и как выключить доступ (см. «Что уходит с компьютера»). Пароль, который прочитал не человек в терминале, а скрипт или агент, прошёл через чат: после входа Web UI напоминает на каждой странице сменить его или включить подтверждение в Telegram, пока вы этого не сделаете (слова «Настройки → Вход» в напоминании — ссылка на этот раздел). Вход — всегда по адресу http://127.0.0.1:7431/ с этим паролем (закладка; сессия — 12 часов), gate4ai ui и трей просто открывают адрес. Пароль есть с первой секунды работы, поэтому ни агент на этом компьютере, ни кто-то из интернета не задаст его вместо вас; на диске хранится только хэш. В Настройки → Вход пароль меняется (с вводом текущего) и включается подтверждение входа в вашем Telegram-боте (на телефоне): после пароля нажмите «Разрешить вход» в боте; «Включить» без подключённого бота открывает мастер подключения бота, в конце которого подтверждение входа и включается. То же действует для входа с телефона: откройте сохранённую закладку https://<адрес устройства>/ui/ и введите пароль. После 5 неверных паролей подряд каждая попытка ждёт вдвое дольше (до 15 минут); у входа с телефона свой счётчик. Забыли пароль — gate4ai ui --reset-password на этом компьютере: напечатает новый сгенерированный пароль, выключит подтверждение в Telegram и закроет сессии (в Telegram придёт уведомление).
Данные лежат в ~/.local/state/gate4ai (Linux), ~/Library/Application Support/gate4ai (macOS), %LOCALAPPDATA%\gate4ai (Windows); ключи — в системном keychain. На сервере без keychain: gate4ai service install -- --keystore file (или gate4ai daemon --keystore file); чтобы служба работала без входа в систему — loginctl enable-linger $USER.
Дальше всё можно сделать в Web UI. Свежая установка открывает мастер первого запуска: выберите ассистента (найденные на компьютере — сверху: Claude Code, Claude Desktop, Cursor, VS Code / Copilot, Codex CLI, Gemini CLI; облачные Claude.ai и ChatGPT; скрипт), отметьте, что ему можно — папки для файлов, сайты для браузера и по каждой группе действий «разрешать / спрашивать / запрещать» (папки и сайты записываются в списки доступа Файлов и Браузера), — и gate4.ai сам впишет себя в настройки ассистента. На шаге «Проверка» — фраза, которую можно попросить ассистента, и живая лента: первое обращение, первое подтверждение. Разделы Web UI: Главная (запросы, которые ждут решения, агенты, сеансы браузера, последние действия), Агенты, Доступ (Браузер — сайты и режим доступа к каждому; Файлы — папки; коннекторы магазина; правила, готовые наборы правил; YAML — для технических пользователей), Браузер (сеансы агентов в браузере gate4ai: смотреть вживую, «Взять управление» — нажимать и печатать самим, агент ждёт, пока вы не вернёте сеанс; закрыть сеанс), Журнал, Настройки → Сервер (состояние компонентов установки — служба, ключи, адрес из интернета, вход, Telegram, браузер — и что сделать с каждым; видно и с телефона), Настройки (основные, уведомления — рабочий стол, Telegram с мастером, браузерный push; пароли и учётки; вход; доступ из интернета и магазин — в «Расширенных»). Интерфейс на английском и русском: переключатель — в шапке и в Настройках, по умолчанию — язык браузера. В запросе подтверждения по сайту или папке кнопки «Добавить в разрешённые / запрещённые» сразу меняют список доступа, в остальных — «Разрешать всегда в <папке> / на <сайте>» записывает правило по аргументам запроса. Агент может попросить изменить настройки (gate4ai.change_policy: сайты и папки, правила, учётки, коннекторы) — всегда с вашего подтверждения (правило «разрешать» на это не действует); запретить и спрашивать — в Настройках. Правило-шаблон browser.* → «разрешать» не покрывает запросы, меняющие данные на сайтах (browser.post / put / patch / delete), и вход учётками (browser.login, fill_secret): их разрешает только правило, где действие названо явно, — gate4ai policy set и Web UI об этом предупреждают. Ниже — то же из терминала.
Браузер и Файлы встроены в gate4ai. Что им открыто, задают списки доступа — общие для всех агентов строки с режимом: сайт (app.example.org, *.example.org — и сам домен, * — любой) или папка (она и всё ниже). Начальная конфигурация: любой сайт — «чтение» (read: читать без вопроса, менять — с подтверждением), ~/Documents — «спросить» (ask), скрытые файлы и папки, ключи и данные приложений закрыты всегда (открыть — allow_hidden, allow_paths в настройках Файлов).
gate4ai access # оба списка
gate4ai access sites set app.example.org read # читать без вопроса, менять — с подтверждением (allow — всё, deny — закрыть)
gate4ai access folders set ~/Documents/notes append # читать и дописывать без вопроса, перезаписывать — с подтверждением
gate4ai sites allow account.example.org # то же, что access sites set … read
То же в Web UI — Доступ → Браузер и Файлы. Побеждает самая конкретная строка; нет строки или deny — отказ; правило политики на действие побеждает строку. Режим connector открывает сайт только коннектору магазина, а не агенту напрямую.
Политика в YAML — агенты, профили, правила и списки доступа целиком. Пример заводит одного агента, открывает ему заметки в ~/Documents/notes на чтение и дописывание без вопросов и запрещает трогать один файл:
store:
registry: https://raw.githubusercontent.com/gate4ai/registry/main/index.json
registry_keys: ["ed25519:yDcbQuNCGqSqHSt08HdvW5/fNyWRW8FIXtKiL91hqtw="]
access:
sites:
- { domain: "*", access: read }
folders:
- { path: "~/Documents/notes", access: append }
agents:
my-agent: { profile: assistant }
profiles:
assistant:
connectors: [files, browser]
rules:
- id: notes-journal-protect
action: files.write
when: glob(path, "~/Documents/notes/journal.md")
effect: deny
gate4ai policy set config.yaml -m "первая политика"
gate4ai doctor
Коннекторы магазина — к сайтам без API; это WASM-модули без собственной сети: сайт им доступен только страницей встроенного браузера, файлы — папками из манифеста в пределах ваших списков. Магазин подключён в начальной конфигурации, из него ничего не ставится само. gate4ai connectors install <имя> показывает возможности коннектора (сайты, папки, учётки, классы действий) и спрашивает согласие; установленный коннектор daemon добавляет в профиль default с правилом ask на каждое его действие, включая чтение, — смотрите gate4ai policy show; ваши правила на те же действия не трогаются. Сайты и папки коннектора правятся на его странице в Web UI.
Свой коннектор ставится прямо из папки с исходниками: gate4ai connectors install ./my-connector --watch (путь — с ./: голое имя всегда означает коннектор из магазина) — собирает, ставит и пересобирает на каждое сохранение (подробнее — docs/quickstart.md). В Web UI то же — Доступ → Коннекторы → Поставить не из магазина: папка с исходниками, файл .g4c или адрес сборки https://…/*.g4c, дальше — обычный экран согласия на возможности. Коннектор к сайту можно начать с заготовки gate4ai connectors new <имя> --site <домен> и писать вместе с агентом: он открывает сайт в сеансе браузера (gate4ai browser open, observe --elements, act, network, close) и сразу видит ответы — docs/connector-authoring.md. После каждого сеанса браузера gate4ai сам дописывает рецепт сайта в вашу папку знаний (~/gate4ai-knowledge/gate4ai-<сайт>/RECIPE.md: шаги, запросы к API без личных данных, ловушки), а агенту в ответе close остаётся одна строка — gate4ai knowledge note <домен> --text "…"; когда задача повторяется, gate4ai connectors new <имя> --from-session <запись> --task <действие> делает из записи фикстуру и черновик коннектора; перед работой gate4ai sites lookup <домен> показывает, что о сайте уже известно. Поделиться папкой на GitHub можно руками — Доступ → Знания проверяет её на личные данные и показывает команды (docs/connector-sharing-ux.md). Входить на сайт агент и коннекторы могут сами, не видя пароля: учётка — в credentials политики, пароль — gate4ai vault set, вход — gate4ai browser login --account @имя (см. docs/quickstart.md).
Если политика уже была задана без раздела store, сначала добавьте в неё store из примера выше (gate4ai policy set), затем ставьте коннекторы.
Пароли и токены в конфигурацию не пишутся: там только алиасы вида "@site.password", а значения кладутся в хранилище (из stdin, в историю shell не попадают):
printf %s 'пароль' | gate4ai vault set site.password
Полная модель конфигурации — списки доступа, браузер (предел текста страницы, скрытые параметры), лимиты, Telegram, песочница — в docs/quickstart.md и разделе «Политики» спецификации.
Агент с shell (Claude Code, Codex, Hermes, OpenClaw) — CLI + skill. Токен вписывать не нужно: агент подключается сам. Первая же его команда gate4ai отвечает кодом подключения (выход 3, pairing_required), агент показывает код вам в чате, а вы сверяете его с запросом в Web UI (Агенты или Главная) или в Telegram-боте и нажимаете «Разрешить подключение». После этого агент сразу работает своим ключом, перезапускать его не нужно. Ключ лежит в каталоге данных gate4ai (agents/<агент>.json, права 0600), daemon хранит только его хэш.
gate4ai tools # первый вызов: код подключения; после подтверждения — что разрешено профилю
gate4ai pair --wait 5m # то же явно, с ожиданием решения
gate4ai pair --here # отдельный ключ только для агента из этой папки проекта (свой профиль)
gate4ai files read --path ~/Documents/notes/todo.md
gate4ai skill > SKILL.md # инструкция для агента
Агента CLI узнаёт по признакам, которые агент ставит своим процессам (CLAUDECODE=1 и т.п.), и по процессам-предкам; имя можно задать и явно — GATE4AI_AGENT=<агент>. По умолчанию все сессии одного агента — один агент (claude-code) с одним профилем. Ключ, выпущенный gate4ai pair --here, принимается только от агента, запущенного в этой папке (или вложенной): daemon сам смотрит каталог запуска агента, cd в его shell этого не меняет. В журнал пишется папка, из которой агент выполнял действие. Агенту, которого узнал gate4ai, сокет владельца отвечает agent_required: свои же запросы он не одобрит. Граница честная: процесс того же пользователя ОС, отвязанный от агента и без его признаков, так не опознаётся. Изоляцию даёт только gate4ai run (ниже).
Скрипт или CI работают с токеном: gate4ai agents token my-agent (показывается один раз), затем export GATE4AI_TOKEN=g4a_….
Коды выхода: 0 ok, 1 прочие ошибки, 2 запрещено политикой (denied_by_policy), 3 ждёт подтверждения (pending_approval), 4 проверка не прошла (verification_failed), 5 неверные аргументы или неизвестное действие, 6 daemon недоступен, 7 вызывающему нельзя: неверный или отозванный ключ / токен (unauthorized), команда владельца с ключом агента (owner_only), агент на сокете владельца или вызов владельца без --as (agent_required), владелец отклонил подключение (pairing_rejected). Код 3 — и ожидание подключения агента (pairing_required, в ответе — code). Агенты и скрипты получают JSON. Ответ — JSON в едином конверте: {"status": "ok" | "denied" | "pending" | "verification_failed" | "error", "result": …, "error": {"code", "message", "hint", "detail"}} — result при успехе, error в остальных случаях (у pending — что делать дальше). Длинный строковый аргумент — из файла: --<имя>_file путь (- — stdin), например gate4ai browser act … --method fill --value_file article.md; картинка или файл ответа (скриншот, скачанный PDF) — в файл: --out shot.png (в выводе вместо base64 — размер и sha256); действие ушло на подтверждение — gate4ai status <id> --wait 10m --out f сохранит файл после решения (команда — в hint ответа); --help действия показывает допустимые значения и пределы аргументов. Человеку в терминале (stdout — терминал) списки и состояние показываются таблицей, а ошибки — текстом; JSON и там — --json или GATE4AI_OUTPUT=json.
Claude Code. Подключите его в Web UI (Агенты → Claude Code): gate4.ai впишет MCP-сервер в ~/.claude.json, SKILL.md в ~/.claude/skills/gate4ai/, ключ агента — в свой каталог ключей (кода тогда сверять не нужно: подключаете вы сами), а в ~/.claude/settings.json — правило "Bash(gate4ai *)" в permissions.allow. Правило снимает второй вопрос о том же действии: решает политика gate4.ai, а Claude Code не спрашивает про каждую команду gate4ai отдельно. Токен в env больше не нужен: из Bash gate4ai сам находит ключ агента и работает с его правами, а не с правами владельца, — и в уже открытой сессии тоже. Прежний GATE4AI_TOKEN из env подключение убирает. Вручную — то же правило в ~/.claude/settings.json:
{"permissions": {"allow": ["Bash(gate4ai *)"]}}
gate4ai doctor проверяет это: подключён ли агент (Claude Code, Codex, Gemini CLI) своим ключом или его подключение ждёт подтверждения, есть ли правило в настройках Claude Code, не остался ли там прежний токен и не отстал ли SKILL.md от каталога действий (gate4ai skill > ~/.claude/skills/gate4ai/SKILL.md).
MCP по stdio (Claude Code, Claude Desktop и др.) — секрета в конфигурации нет, только имя агента:
{"mcpServers": {"gate4ai": {"command": "gate4ai", "args": ["mcp"], "env": {"GATE4AI_AGENT": "claude-code"}}}}
Изолированный локальный агент — сеть и файлы только через gate4ai:
gate4ai run claude-code --workspace ~/projects/app
Облачные агенты (Claude.ai, ChatGPT) — через relay, без открытых портов. Доступ из интернета включён по умолчанию: daemon при запуске сам регистрирует компьютер на relay.gate4.ai (при неудаче повторяет раз в час; состояние и кнопка «Выключить» — Настройки → Доступ из интернета; из терминала — gate4ai relay off / gate4ai relay on; при установке — GATE4AI_NO_RELAY=1):
gate4ai relay status # mcp_url: https://<device-id>.relay.gate4.ai
gate4ai agents connect my-agent # одноразовый код подключения
Добавьте mcp_url в агенте как custom connector и введите код на странице авторизации. Свой relay — gate4ai relay register --url https://relay.example.org; свой HTTPS-адрес вместо relay — gate4ai daemon --public …, см. docs/quickstart.md.
Только соединение с relay, и только то, что нужно туннелю. При регистрации relay выдаёт случайный id устройства и токен — о компьютере ничего не передаётся (ни имени, ни пользователя, ни версии). Сертификат на <id>.relay.gate4.ai Let's Encrypt выпускает этому компьютеру (relay лишь публикует TXT-запись), ключ его не покидает. Туннель — исходящий WebSocket, входящий TLS relay передаёт на компьютер по SNI и видит только шифротекст; в relay уходит ещё хэш чекпоинта журнала (без содержимого) — свидетель целостности. Телеметрии, проверки обновлений и аналитики нет; сколько людей пользуется программой, мы узнаём по регистрациям на relay — и больше ничего не собираем. Выключить в любой момент: gate4ai relay off (адрес сохраняется, gate4ai relay on вернёт тот же без нового сертификата), Настройки → Доступ из интернета или GATE4AI_NO_RELAY=1 при установке; без relay облачные ассистенты и телефон до компьютера не достучатся, локальные агенты работают как раньше. Relay открыт (AGPL-3.0, relay/) и ставится у себя: gate4ai relay register --url https://relay.example.org.
gate4ai approvals list # запросы, которые ждут вашего решения
gate4ai approvals approve <id> # или кнопки в трее, Telegram, Web UI
gate4ai ui # Web UI в браузере
gate4ai log # журнал действий
gate4ai journal verify # целостность журнала
Агент работает в браузере gate4ai сам, а вы видите его сеансы вживую: ответ browser.open несёт агенту ссылку view_url, которую он может прислать вам в чат, а раздел Браузер в Web UI (и с телефона, /ui/browser) показывает все сеансы. «Взять управление» — нажимайте и печатайте сами (капча, код из SMS, вход без учётки в gate4ai); агент ждёт, пока вы не вернёте сеанс. Ссылка без вашего входа в Web UI ничего не показывает. С другого устройства (по /ui/) всё то же самое: удалённый Web UI ничем не отличается от локального.
gate4ai browser sessions # сеансы агентов: кто, какая страница, ссылка
gate4ai browser watch s-… # открыть просмотр сеанса (на сервере без экрана — ссылка)
gate4ai browser setup # есть ли Chrome, виртуальный экран (Xvfb) и шрифты; поставить недостающее
На сервере без графики браузер запускается на виртуальном экране Xvfb, без Xvfb — без экрана (headless: сайты с защитой от ботов замечают его чаще; Web UI и gate4ai doctor предупреждают). Сервер рядом с OpenClaw — docs/headless-server.md.
AGPL-3.0-only: ядро (со встроенными Браузером и Файлами) и relay; SDK (sdk-go/) — Apache-2.0.