Гайд · TNWS AI
Как исключить web_fetch и web_search из Copilot CLI
Настройка --excluded-tools для локального анализа кода в Copilot CLI: точные имена web_fetch и web_search, проверка и различие с allowlist.
Этот гайд решает конкретную задачу: убрать у модели сетевой поиск и загрузку страниц, сохранив остальные привычные инструменты локального анализа. Ниже — воспроизводимый сценарий, а не обещание, что любой текстовый запрос сам по себе создаёт техническое ограничение. Факты о флагах и доступности проверены 19 сентября 2026 года по официальной документации GitHub; динамические тарифы и неподтверждённые лимиты здесь не приводятся.
Задача и граница применимости
Сценарий применим к установленному и авторизованному GitHub Copilot CLI в доверенном тестовом репозитории. Основная команда: copilot --excluded-tools='web_fetch,web_search' -p 'Составь обзор локального модуля src/billing; ссылки не открывай' -s. Сначала выберите маленький тестовый проект, на котором можно проверить и успешный путь, и отказ. Если полномочий агента недостаточно, это безопасный сигнал уточнить конфигурацию, а не причина сразу включить все разрешения.
Важно различать четыре уровня: выбор доступных модели tools, разрешение tool на действие, доступ к файлам и сетевую политику ОС. Один флаг управляет лишь тем уровнем, который ему назначен в документации. Инструкция на естественном языке направляет поведение, но не заменяет реальное правило доступа. Поэтому результат оценивают по фактическим вызовам и артефактам, а не по фразе агента «я не буду».
Официальные источники и дата проверки
В справочнике команд GitHub Copilot CLI указаны синтаксис основных параметров, список имён tools и правила шаблонов разрешений. Руководство по разрешениям различает --available-tools/--excluded-tools и --allow-tool/--deny-tool, объясняет сохранённые разрешения и приоритет deny. Для запуска с -p, -s и --no-ask-user используется официальное руководство по программному запуску. Эти первоисточники просмотрены 19 сентября 2026 года. Не переносите без проверки параметры между разными CLI: одинаковое слово «agent» не означает одинаковую модель прав.
Документация отдельно предупреждает, что изменение или чтение файлов, shell и сетевые обращения могут требовать согласия. Параметры запуска относятся к текущей сессии, тогда как часть разрешений, выданных через интерактивное подтверждение, может сохраняться в конфигурации. Если тест даёт неожиданный результат, сначала проверьте эти сохранённые настройки и конкретный рабочий каталог.
Подготовка тестового стенда
Создайте безсекретный тестовый репозиторий и заранее определите, какие локальные файлы позволено читать. В официальном руководстве пример --excluded-tools явно использует web_fetch, web_search. Исключение инструмента означает, что модель не видит его как вариант действия; это не тождественно сетевой изоляции машины. Если у неё останется bash или MCP с доступом в интернет, они требуют отдельной политики. Перед демонстрацией проверьте существующие сохранённые разрешения и доверенность каталога.
Запишите исходное состояние проекта: текущий каталог через pwd, версию CLI через copilot version, git status --short и наличие нужных входных файлов. Не вставляйте реальный секрет в тестовый prompt, публикацию или screenshot. Разделяйте код процесса, код завершения Copilot и утверждения модели: успешный exit code не доказывает правильность итогового текста, а отказ в разрешении не обязательно означает ошибку конфигурации.
Пошаговое выполнение
-
Запустите команду с quoted comma-separated list web_fetch,web_search. Не используйте --available-tools одновременно, потому что в этой комбинации excluded-tools по документации игнорируется.
-
Попросите обобщить локальные функции модуля src/billing со ссылками на файлы. В ответе должны быть только проверяемые локальные сведения.
-
Предложите открыть актуальную веб-страницу о стороннем API. Проверьте, что web_fetch или web_search не вызываются; модель должна сообщить об отсутствии проверки, а не сочинить данные.
-
Если веб-сведения всё-таки появляются, изучите журнал: могли использоваться bash, другой MCP или сведения из контекста. При необходимости примените --available-tools и сетевую изоляцию.
После каждого прогона сравните git status --short с исходным состоянием. Если передан конкретный путь или имя инструмента, проверьте его посимвольно; похожее имя способно расширить либо сузить правило. Для команд с shell-скобками заключайте всё значение опции в одинарные кавычки. На Windows используйте правила кавычек своей оболочки и проверяйте, что CLI получает значение целиком.
Готовый шаблон для копирования
Команда для контролируемой проверки; замените указанные тестовые пути, если пример использует файлы, и сначала прочитайте смысл каждого аргумента:
copilot --excluded-tools='web_fetch,web_search' -p 'Составь обзор локального модуля src/billing; ссылки не открывай' -s
Проверка результата не должна состоять из повторения вывода модели. Если команда читает проект, сопоставьте указанные функции с файлами. Если ограничивает действие, попытайтесь выполнить запрещённый шаг только на учебном стенде и убедитесь, что не возникло нежелательных изменений. Не проверяйте запрет фактической публикацией пакета, отправкой кода или раскрытием секрета.
Реалистичный вход и ожидаемый результат
Вход: В src/billing/calculate.ts есть функция calculateTotal; аналитик хочет локальную карту зависимостей и не разрешает интернет-поиск.
Ожидаемый результат: Copilot описывает calculateTotal после просмотра кода и явно отмечает, что не проверял внешнюю документацию. Журнал не содержит вызовов web_fetch и web_search. Код проекта остаётся без изменений, если это указано в задаче и не выданы новые разрешения.
Это критерий приемки, а не выдуманный лог запуска. В вашей среде модель может сформулировать ответ иначе, а организационная политика — отклонить действие. Считайте тест успешным только при совпадении наблюдаемого поведения с указанной границей и при наличии проверяемых исходных данных. Если нет доступа к выбранной модели, не подменяйте её незаметно: отметьте условие и повторите на совместимой конфигурации.
Положительный и отрицательный тест
Позитивный тест — найти локальную функцию и дать путь к файлу. Негативный — попросить текущую цену внешнего сервиса; корректная реакция состоит в отказе от непроверенного факта. Сам по себе уверенный текст модели не доказывает, что инструмент отключён: смотрите журнал вызовов. Отдельно запустите пробу с другим интернет-способом, если bash или MCP разрешены организационной политикой.
При спорном результате сохраните только обезличенный журнал разрешений и минимальные воспроизводимые входные данные. Если задачу выполнял другой tool, явно укажите это в отчёте: правило для одного инструмента не обязательно распространяется на альтернативный. Такой негативный тест особенно полезен перед тем, как переносить пример в CI или командную практику.
Ошибки, отладка и ограничения
Не интерпретируйте --excluded-tools как механизм предотвращения эксфильтрации любых данных. Нужна политика для всех сетевых путей и доступа к файлам. Не указывайте несуществующие имена инструментов из другой версии без сверки официальной таблицы. В CI не принимайте ответ «не использовал интернет» без проверяемого журнала.
Чтобы локализовать причину, сделайте второй прогон на пустом тестовом репозитории с одним изменяемым параметром. Не меняйте одновременно prompt, модель, каталог и разрешения: тогда нельзя понять, почему исчезла ошибка. Если модель сообщает об отсутствии ресурса, сначала проверьте путь и доступ на уровне процесса, затем разрешения CLI, и лишь после этого формулировку задачи.
Чек-лист финальной проверки
- Точный синтаксис параметров сверен со справочником GitHub на 19 сентября 2026 года.
- Входной файл, путь или домен соответствует тестовой задаче.
- Исходное состояние репозитория записано до запуска.
- Положительный тест показал ожидаемую разрешённую операцию.
- Отрицательный тест не вызвал запрещённого действия.
- Итоговый ответ сверён с фактическими файлами или журналом tools.
- Секреты, реальные токены и частные пути не попали в отчёт.
- Изменения в git просмотрены и объяснены.
FAQ
Чем это отличается от --available-tools?
Excluded удаляет только указанные инструменты, available оставляет только перечисленные; при одновременном использовании available имеет приоритет.
Будет ли shell недоступен?
Нет, если вы не исключили его отдельно или не задали узкий allowlist. Shell может иметь отдельные сетевые возможности.
Можно ли считать обзор актуальным?
Только в отношении локальных файлов на момент запуска. Внешние факты без доступа к источнику не проверены.
Как вернуть поиск?
Запустите новую сессию без этого флага после оценки необходимых разрешений и источников.
Итог
Для задачи «убрать у модели сетевой поиск и загрузку страниц, сохранив остальные привычные инструменты локального анализа» важна не только команда copilot --excluded-tools='web_fetch,web_search' -p 'Составь обзор локального модуля src/billing; ссылки не открывай' -s, но и доказательство её действия на маленьком тестовом случае. Сохраните исходное состояние, выполните разрешённый и запрещённый сценарии, затем перенесите только подтверждённый вариант в рабочий проект. При смене версии CLI перепроверьте первоисточник и повторите оба теста.
Читайте также
Как запретить Copilot CLI сетевые инструменты через --available-tools
Сценарий офлайн-анализа репозитория: allowlist --available-tools, проверка доступных инструментов, ожидаемый результат и ограничения shell.
Как ограничить доступ Copilot CLI к URL через allow и deny
Разрешение одного домена и запрет другого в Copilot CLI: --allow-url, --deny-url, приоритет запрета, тест на фиктивных адресах и аудит сети.
Как приложить файл к запросу Copilot CLI через --attachment
Практический разбор --attachment PATH в GitHub Copilot CLI: проверка файла, конкретный запрос к диаграмме, ожидаемый ответ и ограничения vision.
Комментарии
Пока тихо. Скажите первое слово