dumbtv
dumbtv가 ADB로 Fire TV에서 광고·추적·업데이트 알림을 제거, 루트·앱 변경 없이, 무료 오픈소스
The guard between AI agents and your computer: policies, approvals and an audit log for the browser, files and sites (MCP, CLI, skill)
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
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.