# Dopusk Saytov Do Tsikla

> «Вооружи браузер перед целью или автономным циклом», «проверь разрешения сайтов», «агент опять спрашивает разрешение». Разрешённые сайты расширения, тишина окон согласия.

- Skill: `kir-kopylov/dopusk-saytov-do-tsikla` (Agent Skill, multi-file: 7 files)
- Install (CLI): `npx skillmds@latest add kir-kopylov/dopusk-saytov-do-tsikla`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kir-kopylov/dopusk-saytov-do-tsikla/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: kir-kopylov (https://skillmd.com/u/kir-kopylov)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/kir-kopylov/dopusk-saytov-do-tsikla

---


# Browser Preflight

## Запуск Навыка

При явном вызове или однозначном смысловом совпадении применяйте навык сразу. Перед первым шагом покажите ровно одну короткую контекстную строку (не более 30 слов) и продолжайте работу в том же ответе, не ожидая реакции:

Применяю экспериментальный навык **«Проверка разрешений браузера»** (обратная связь — @kir-kopylov): <кратко назовите конкретную пользу для текущего запроса>; продолжаю без ожидания.

Не включайте в строку `author_github`, внутреннее имя папки или пересказ всего запроса. Не спрашивайте, применять ли навык.

Если одновременно подходят совместимые навыки, выберите минимальный набор и покажите одну общую строку. Если подходы ведут к несовместимым результатам и запрос не позволяет выбрать, спросите только о желаемом результате, не о разрешении применить навык.

Запуск навыка не расширяет полномочия. Выполните всю безопасную и уже разрешённую часть; запросите подтверждение только непосредственно перед ещё не разрешённым внешним или изменяющим действием. Не запрашивайте повторно уже данное разрешение и не дублируйте системное окно подтверждения.

## Обзор

Автономная браузерная цель рушится, если разрешения на сайты вооружаются реактивно: каждое окно согласия останавливает цикл и зовёт человека. Этот skill закрывает предпосылку заранее — он исполнитель «шага вооружения» из `kontrakt-tseli-do-starta`: тот формулирует требование, этот его выполняет реальными грантами и пробой.

Ключевое правило — **грант это след, а не жест**: разрешение считается выданным не когда нажата кнопка, а когда домен ВИДЕН в списке разрешённых сайтов расширения. Кнопка может молча лгать: кнопка `Always allow` в `Claude-in-Chrome` (наблюдалось на версии `1.0.79`) записывала разовый грант вместо вечного, список оставался пустым при десятках нажатий (баг `anthropics/claude-code#74715`).

Источник правды в этом skill — страница расширения `Permissions` → «Your approved sites». Агент сначала пытается прочитать её доступным браузерным или экранным инструментом. Скрипт `check_grants.py` — только быстрая подсказка для одной конфигурации (`Chrome` на `Windows`); при расхождении со страницей верить странице.

## Естественные Входы

- «вооружи браузер перед целью …»;
- «проверь разрешения для `avito.ru` / списка сайтов»;
- «подготовь браузер к автономному запуску»;
- «агент опять спрашивает разрешение на каждый клик — почини»;
- перед стартом любой `/goal`-цели, где контракт требует вооружить браузерные гранты.

## Роли: Агент И Человек

Этот skill становится сопровождаемым циклом только после фактически обнаруженного барьера, который доступные инструменты агента не позволяют наблюдать или пройти безопасно.

- **Агент делает сам**: инвентаризацию доменов; проверку страницы расширения и окон согласия через доступный внутренний браузер, `Chrome control`, `computer-use`, DOM, Playwright или журналы; запуск `check_grants.py` как подсказки; формулировку вердикта.
- **Человек подключается только при барьере**: пароль, код подтверждения, капча, физическое действие, недоступное агенту разрешение или безопасно неавтоматизируемая вставка снипета в консоль `service worker`.
- **Нет заранее заданной невидимости**: расположение окна внутри приложения или расширения само по себе не доказывает, что агент его не видит. Нужна не догадка, а неуспешная проба доступными инструментами.

## Гейт Перед Вовлечением Человека

До любой просьбы человеку открыть страницу, прочитать список, описать окно или сообщить результат:

1. Проверьте, можно ли получить наблюдение внутренним браузером или `Chrome control`.
2. Если нет, попробуйте `computer-use` либо другой доступный инструмент управления экраном.
3. Затем используйте DOM, Playwright, журналы или `check_grants.py`, если они отвечают на тот же вопрос.
4. Если безопасный способ доступен, выполните наблюдение сами и не просите человека подтверждать увиденное.
5. Только после фактически наблюдавшегося барьера назовите уже проверенные способы, точную причину участия человека, одно минимальное действие и признак завершения.

Фразы «я не вижу экран» и «окно находится в приложении» без выполненных проб не являются доказательством человеческого барьера.

## Контрфактический Гейт Рабочего Вопроса

Проверку проводи внутренне; пользователю не показывай вероятные ответы и карту изменений.

Перед любым вопросом проведи контрфактическую проверку:
Представь наиболее вероятные ответы пользователя.
Назови, какое решение, действие или часть результата изменит каждый ответ.
Если следующий шаг при всех ответах одинаков — вопрос запрещён.
Если пользователь уже зафиксировал выбор — запиши его, не открывай заново.
Если неизвестное техническое и его можно проверить самостоятельно — проверь, не спрашивай.
Задавай только ближайший вопрос, ответ на который реально меняет результат.

Если после гейта наблюдение действительно осталось недоступным, агент получает от человека только это одно наблюдение и продолжает остальные проверки самостоятельно.

## Жёсткие Правила

- Не выполнять целевую задачу и не запускать `/goal` — только подготовка разрешений.
- Грант это след: после каждого жеста вооружения — сверка по «Your approved sites». Жест без следа = сломанный орган выдачи → известный обход или честный `BLOCKED` c одной инструкцией человеку.
- Судья — страница расширения, не диск. `check_grants.py` — подсказка; при расхождении со страницей верить обновлённой странице.
- Хранилище расширения скрипт читает только на чтение; НИКОГДА не править файлы базы руками.
- Снипет в консоль вставляет ТОЛЬКО человек; агент готовит текст под нужные домены и проверяет результат.
- Пробу засчитывать только по наблюдаемому свидетельству: собственному через доступный инструмент либо человеческому после доказанного барьера. Всплыло — вернуться к вооружению, не кликать «разрешить» и ехать дальше.
- Вооружать минимально необходимый набор доменов цели, не «всё подряд про запас».
- Не трогать переключатель `Ask before acting` в боковой панели — это режим панели, на сессии `Claude Code` он не влияет.
- Домены входа в аккаунт вооружать только с отдельным явным согласием человека (см. «Обход»).

## Алгоритм

1. **Инвентаризация доменов.** Из цели составить список: основной сайт, `www`-вариант, домены входа в аккаунт (например `id.vk.com` для `avito.ru`). Если пользователь уже зафиксировал периметр, не подтверждать его повторно. Иначе спросить одним вопросом: «Какие домены в этом списке нужно добавить или убрать?»
2. **Сверка следа.** Агент обновляет и читает страницу расширения → `Permissions` → «Your approved sites» доступным браузерным или экранным инструментом. Для скорости можно запустить `check_grants.py --domains <список>` как подсказку. Источник правды — страница; если она недоступна после гейта, запросить у человека только чтение обновлённого списка.
3. **Вооружение недостающих.** Сначала проверить, не починена ли кнопка (см. ниже). Если починена — нажать `Always allow` доступным инструментом в подтверждённом периметре и СВЕРИТЬ след. Если штатное действие или страница недоступны агенту, передать человеку один точный шаг. Если кнопка не работает — выдать безопасный обход со снипетом под нужные домены.
4. **Повторная сверка следа.** Снова шаг 2. Каждый домен списка должен быть виден в «Your approved sites». Нет следа после обхода — не изображать успех: перейти в `BLOCKED`.
5. **Проба тишины.** По одному лёгкому действию на каждом домене (открыть вкладку, прочитать страницу). Агент сам наблюдает окно доступным браузерным или экранным инструментом. Только если конкретное окно осталось недоступным после гейта, человек сообщает один факт: всплыло оно или нет. Критерий — ни одного окна. Всплыло → см. «Ветка: разрешение есть, а окно всплывает».
6. **Вердикт.** Отчёт: какие домены вооружены (со следом на странице), какие ушли в `BLOCKED` и почему, пройдена ли тишина. Только при полном зелёном — «цикл можно отпускать».

## Проверка «Кнопка Починена?»

Баг `anthropics/claude-code#74715` со временем закроют; тогда обход не нужен и даже вреден. Прежде чем переходить к обходу, сделать лёгкую пробу: один раз нажать `Always allow` доступным инструментом и сверить, появился ли домен в «Your approved sites». Если окно или кнопка недоступны агенту после гейта, передать человеку только этот шаг. Появился — кнопка починена, вести штатным путём. Не появился — кнопка всё ещё сломана, идти в обход. Версию, с которой баг закрыт, занести в `known-exceptions.yaml`.

## Обход Сломанной Кнопки

Выдаётся человеку как пошаговая инструкция — эти клики агент выполнить не может.

**Предупреждение о безопасности (обязательно проговорить человеку).** Дальше вы наберёте `allow pasting` и вставите код в консоль расширения. `Chrome` блокирует вставку не зря: подсунутый чужой код может украсть токены и захватить ваши сессии. Набирая `allow pasting`, вы снимаете эту защиту. Поэтому вставляйте ТОЛЬКО код из этого skill, который вы прочитали и понимаете, и никогда — код из письма, чата или с форума. Снипет ниже делает ровно одно: добавляет перечисленные домены в список разрешённых. Он ничего не читает со страниц и никуда ничего не отправляет.

**Предупреждение про домены входа.** Вооружая домен входа в аккаунт (например `id.vk.com`) навсегда, вы разрешаете агенту действовать на странице вашего аккаунта без спроса. Добавляйте такие домены только если цель без них не работает, и подтвердите это отдельно.

1. Открыть `chrome://extensions`, включить «Режим разработчика».
2. На карточке `Claude` нажать ссылку `service worker` — откроется консоль.
3. Кликнуть в строку ввода внизу. Если браузер блокирует вставку — набрать `allow pasting`, `Enter`.
4. Вставить снипет (подставить домены цели) и нажать `Enter`:

```js
chrome.storage.local.get('permissionStorage', d => {
  const s = d.permissionStorage || { permissions: [] };
  const have = new Set(
    s.permissions
      .filter(p => p.action === 'allow' && p.duration === 'always')
      .map(p => p.scope && p.scope.netloc)
  );
  for (const host of ['SITE.ru', 'www.SITE.ru']) {
    if (have.has(host)) continue;
    s.permissions.push({
      id: crypto.randomUUID(),
      scope: { type: 'netloc', netloc: host },
      action: 'allow', duration: 'always', createdAt: Date.now()
    });
  }
  chrome.storage.local.set({ permissionStorage: s }, () => console.log('ГОТОВО', s.permissions));
});
```

5. Дождаться `ГОТОВО` в консоли, закрыть панель разработчика.
6. Сверить след: страница расширения → `Permissions` → «Your approved sites» (обновить страницу). Отзыв гранта — кнопка `Revoke` там же.

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

## Ветка: Разрешение Есть, А Окно Всплывает

Отдельный случай: домен виден в «Your approved sites» (след есть), но при пробе окно согласия всё равно всплывает. Это не «домен не вооружён» — повторный обход бессмыслен и лишь плодит записи. Причина обычно в устаревшем состоянии расширения. Действия: перезапустить `service worker` расширения доступным безопасным инструментом либо передать этот один шаг человеку после гейта, затем повторить пробу. Если окно всплывает устойчиво при наличии следа — не выдавать зелёный вердикт и не крутить обход: перейти в `BLOCKED` с диагнозом «грант записан, но не применяется» и записать карточку в `known-exceptions.yaml`.

## Проверки Перед Вердиктом

1. Каждый домен списка подтверждён на странице «Your approved sites» агентом либо человеком после доказанного барьера.
2. Проба на каждом домене прошла без единого окна согласия по наблюдаемому свидетельству.
3. Человек видел итоговый список вооружённых доменов и знает про `Revoke`.

Провал любой проверки — вердикт «НЕ готово» с названными причинами, а не «почти готово».

## Состояние BLOCKED

`BLOCKED` — штатное состояние покоя, отдельное от успеха и провала. Вход в него только после гейта: для продвижения действительно нужен человек, а минимальное действие ещё не выполнено, либо след есть, а окно всплывает устойчиво. Формат: одна строка статуса + уже проверенные агентом способы + ровно одна инструкция человеку + условие возобновления. Не выдавать вместо `BLOCKED` ложный зелёный вердикт и не продолжать молча.

## Границы

Не используйте skill для: выполнения самой цели; покупок и отправки сообщений; обхода капчи, входа в аккаунты и платежей (это защита, а не разрешения сайтов); правки файлов базы напрямую; поддержки браузеров кроме `Chrome` и систем кроме `Windows` в скрипте-подсказке (источник правды — страница расширения, она кросс-платформенная).

## Опрос После Использования

Опрос задаётся один раз — после выдачи вердикта о готовности браузера к автономному циклу, не посреди рабочего цикла. Если пользователь уже ответил «пропустить» в этой сессии, не переспрашивайте.

```text
Опрос по skill:
1. Что в этом использовании dopusk-saytov-do-tsikla было полезно?
2. Что стоит доработать в skill или его формате?
Можно ответить коротко или написать "пропустить".
```

Если пользователь ответил, сохраните санированную карточку в `~/.codex/skill-runs/dopusk-saytov-do-tsikla/usage-feedback.jsonl` — лучше через bundled script:

```bash
python3 scripts/log_usage_feedback.py --liked "..." --improve "..." --outcome "..."
```

Script перед записью редактирует приватные пути, контакты и token-like строки и сохраняет `redaction_applied` и `redaction_types`. Если запись невозможна из-за sandbox, прав или отсутствия tools, не делайте вид, что лог сохранён: скажите об этом и покажите короткую JSONL-карточку для ручного сохранения. Raw-ответы, контакты, пути и секреты не коммитить.

## Логирование Сбоев

Перед выполнением прочитайте локальный `known-exceptions.yaml` и применяйте подходящее `do_next_time` без нового поиска. Если обход не сработал, след не появился, расширение обновилось и поведение сменилось, или человек поправил процесс — запишите приватную карточку в:

```text
~/.codex/skill-runs/dopusk-saytov-do-tsikla/exception-log.jsonl
```

Пишите факты: что хотели, что сделали, где сломалось, какая предпосылка была ложной и что делать в следующий раз. Если поле неизвестно, пишите `unknown`. Raw logs не коммитить.

