Гайд · TNWS AI

Как запретить Copilot CLI сетевые инструменты через --available-tools

Copilot
7 мин—

Сценарий офлайн-анализа репозитория: allowlist --available-tools, проверка доступных инструментов, ожидаемый результат и ограничения shell.

Этот гайд решает конкретную задачу: дать модели только инструменты просмотра и поиска кода при подготовке локального обзора, не предлагая ей web_fetch, запись файлов или делегирование. Ниже — воспроизводимый сценарий, а не обещание, что любой текстовый запрос сам по себе создаёт техническое ограничение. Факты о флагах и доступности проверены 19 сентября 2026 года по официальной документации GitHub; динамические тарифы и неподтверждённые лимиты здесь не приводятся.

Задача и граница применимости

Сценарий применим к установленному и авторизованному GitHub Copilot CLI в доверенном тестовом репозитории. Основная команда: copilot --available-tools='view,grep,glob' -p 'Изучи src/auth и составь карту функций без правок и сети' -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 и сетевые обращения могут требовать согласия. Параметры запуска относятся к текущей сессии, тогда как часть разрешений, выданных через интерактивное подтверждение, может сохраняться в конфигурации. Если тест даёт неожиданный результат, сначала проверьте эти сохранённые настройки и конкретный рабочий каталог.

Подготовка тестового стенда

Для демонстрации используйте тестовый проект с src/auth/login.ts, src/auth/token.ts и README.md. Убедитесь, что в каталоге нет незашифрованных секретов: локальный просмотр тоже передаёт выбранный контекст модели. В справке GitHub перечислены значения view, grep, glob; --available-tools отключает все инструменты вне указанного списка и действует до уровня видимости модели. Это отличается от --deny-tool, который запрещает разрешение конкретной операции уже доступного инструмента.

Запишите исходное состояние проекта: текущий каталог через pwd, версию CLI через copilot version, git status --short и наличие нужных входных файлов. Не вставляйте реальный секрет в тестовый prompt, публикацию или screenshot. Разделяйте код процесса, код завершения Copilot и утверждения модели: успешный exit code не доказывает правильность итогового текста, а отказ в разрешении не обязательно означает ошибку конфигурации.

Пошаговое выполнение

  1. Запустите команду из корня тестового проекта; передайте только view,grep,glob без bash, edit, create, apply_patch и web_fetch.

  2. Попросите перечислить реальные функции в src/auth с указанием имени файла. Сопоставьте ответ с исходным кодом, чтобы выявить галлюцинации.

  3. В том же сеансе попросите открыть веб-страницу и изменить файл. Ожидается невозможность использования соответствующих tools; модель может ответить, что у неё нет таких возможностей.

  4. Проверьте git status --short и журналы сессии. Если задача всё же требует тесты, завершите текущий анализ и создайте отдельную сессию с обоснованным минимальным набором.

После каждого прогона сравните git status --short с исходным состоянием. Если передан конкретный путь или имя инструмента, проверьте его посимвольно; похожее имя способно расширить либо сузить правило. Для команд с shell-скобками заключайте всё значение опции в одинарные кавычки. На Windows используйте правила кавычек своей оболочки и проверяйте, что CLI получает значение целиком.

Готовый шаблон для копирования

Команда для контролируемой проверки; замените указанные тестовые пути, если пример использует файлы, и сначала прочитайте смысл каждого аргумента:

copilot --available-tools='view,grep,glob' -p 'Изучи src/auth и составь карту функций без правок и сети' -s

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

Реалистичный вход и ожидаемый результат

Вход: В src/auth/login.ts экспортируется validateSession, в token.ts — parseToken. Нужна карта кода перед ручным аудитом без любых исправлений.

Ожидаемый результат: Ответ называет существующие файлы и функции и поясняет связи; никаких изменений git status не показывает. Попытка загрузить внешний URL или записать patch не выполняется, потому что соответствующие инструменты не представлены модели.

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

Положительный и отрицательный тест

Позитивный тест — попросить найти validateSession и указать расположение. Негативный — попросить установить пакет или загрузить страницу; проверьте отсутствие вызова отсутствующих tools. Если добавить bash в allowlist, через shell потенциально появится доступ к процессам и сети; даже deny-url не превращает shell в строгую песочницу. Для твёрдого запрета сети применяйте также механизм ОС или контейнера.

При спорном результате сохраните только обезличенный журнал разрешений и минимальные воспроизводимые входные данные. Если задачу выполнял другой tool, явно укажите это в отчёте: правило для одного инструмента не обязательно распространяется на альтернативный. Такой негативный тест особенно полезен перед тем, как переносить пример в CI или командную практику.

Ошибки, отладка и ограничения

Не передавайте вместе --available-tools и --excluded-tools в ожидании пересечения: официальная документация говорит, что при совместном использовании действует allowlist, а excluded-tools игнорируется. Не путайте отсутствие tool с отсутствием доступа к данным, уже помещённым в prompt. Не выдавайте за факт, что модель стала «полностью офлайн»: удалённый сервис модели сам по себе остаётся сетевым компонентом.

Чтобы локализовать причину, сделайте второй прогон на пустом тестовом репозитории с одним изменяемым параметром. Не меняйте одновременно prompt, модель, каталог и разрешения: тогда нельзя понять, почему исчезла ошибка. Если модель сообщает об отсутствии ресурса, сначала проверьте путь и доступ на уровне процесса, затем разрешения CLI, и лишь после этого формулировку задачи.

Чек-лист финальной проверки

  • Точный синтаксис параметров сверен со справочником GitHub на 19 сентября 2026 года.
  • Входной файл, путь или домен соответствует тестовой задаче.
  • Исходное состояние репозитория записано до запуска.
  • Положительный тест показал ожидаемую разрешённую операцию.
  • Отрицательный тест не вызвал запрещённого действия.
  • Итоговый ответ сверён с фактическими файлами или журналом tools.
  • Секреты, реальные токены и частные пути не попали в отчёт.
  • Изменения в git просмотрены и объяснены.

FAQ

Почему не использовать deny-tool=web_fetch?

Allowlist делает остальные инструменты невидимыми модели, уменьшая попытки их вызова. Deny управляет разрешением конкретного вида действия.

Можно оставить bash для grep?

Тогда shell получает широкий потенциальный охват. Для поиска достаточно документированных grep и glob, если задача не требует терминала.

Что если модель выдумала содержимое файла?

Проверяйте цитируемое имя и строку в самом проекте. Ограничение инструментов не гарантирует точность генерации.

Можно ли разрешить запись позже?

Да, в новой сессии с отдельными разрешениями и рецензируемым diff. Не расширяйте текущую обзорную сессию без необходимости.

Итог

Для задачи «дать модели только инструменты просмотра и поиска кода при подготовке локального обзора, не предлагая ей web_fetch, запись файлов или делегирование» важна не только команда copilot --available-tools='view,grep,glob' -p 'Изучи src/auth и составь карту функций без правок и сети' -s, но и доказательство её действия на маленьком тестовом случае. Сохраните исходное состояние, выполните разрешённый и запрещённый сценарии, затем перенесите только подтверждённый вариант в рабочий проект. При смене версии CLI перепроверьте первоисточник и повторите оба теста.

Читайте также

Комментарии

Пока тихо. Скажите первое слово