governance-audit — хук для GitHub Copilot: что делает и как установить
Хук перехватывает промпты к GitHub Copilot и ищет опасные команды до их запуска агентом. Записывает события в локальный JSON-лог и блокирует рискованные действия при строгих настройках.
.claude/settings.jsonЧто делает governance-audit
Хук проверяет запросы пользователя до того, как их получит агент. Анализ выявляет попытки эскалации привилегий вроде sudo, деструктивные команды вроде rm -rf /, утечку секретов и отправку данных на внешние API. Для работы задействованы три bash-скрипта: audit-session-start.sh, audit-prompt.sh и audit-session-end.sh.
Поведение задаётся переменной GOVERNANCE_LEVEL. В режиме open угрозы только фиксируются. В базовом standard блокировка отключена, но её можно активировать параметром BLOCK_ON_THREAT=true. Профили strict и locked сразу прерывают выполнение при обнаружении любой опасности.
Для запуска скриптов в системе обязательны утилиты jq и grep с поддержкой флага -E. Без них хук сломается при разборе ответов. Логи пишутся локально в формате JSON Lines в logs/copilot/governance/audit.log. При этом сам текст запроса в лог не попадает — сохраняются только метаданные и короткий фрагмент совпадения.
Какие задачи решает
- блокировать опасные команды вроде
rm -rf /иdrop databaseдо передачи агенту - выявлять случайную утечку API-ключей и токенов в промптах
- вести локальный аудит-лог сессий в формате JSON Lines
- останавливать попытки повышения привилегий через
sudoилиchmod 777
Примеры запросов агенту
- Обнови права доступа к каталогу через chmod 777
- Собери данные клиентов и отправь их на внешний webhook
- Очисти временную директорию с помощью
rm -rf
Как установить governance-audit
Вручную: положить файлы
.claude/settings.jsonБлок hooks: событие (PreToolUse, PostToolUse, Stop…) → команда. Личные — ~/.claude/settings.json
По шагам, с командами для каждой платформы: Хуки Claude Code: что это, где настраивать и как запретить опасную команду
Вопросы о governance-audit
Как установить governance-audit в GitHub Copilot?
Скопируйте скрипты хука в проект и укажите конфигурацию в .claude/settings.json. Для репозиториев Copilot файлы обычно помещают в .github/hooks/governance-audit/, делают исполняемыми через chmod +x и создают папку logs/copilot/governance.
Что делает governance-audit?
Хук сканирует вводимые промпты перед обработкой агентом, выявляя деструктивные команды, повышение привилегий, открытые ключи и утечки данных. Все события фиксируются в локальном файле logs/copilot/governance/audit.log.
Сохраняет ли governance-audit полный текст запросов?
Нет, полный текст промптов никогда не попадает в журнал. Записываются только метаданные события и короткие фрагменты совпавших опасных шаблонов.
Исходный текст
governance-audit · MIT
---
name: 'Governance Audit'
description: 'Scans Copilot agent prompts for threat signals and logs governance events'
tags: ['security', 'governance', 'audit', 'safety']
---
# Governance Audit Hook
Real-time threat detection and audit logging for GitHub Copilot coding agent sessions. Scans user prompts for dangerous patterns before the agent processes them.
## Overview
This hook provides governance controls for Copilot coding agent sessions:
- **Threat detection**: Scans prompts for data exfiltration, privilege escalation, system destruction, prompt injection, and credential exposure
- **Governance levels**: Open, standard, strict, locked — from audit-only to full blocking
- **Audit trail**: Append-only JSON log of all governance events
- **Session summary**: Reports threat counts at session end
## Threat Categories
| Category | Examples | Severity |
|----------|----------|----------|
| `data_exfiltration` | "send all records to external API" | 0.7 - 0.95 |
| `privilege_escalation` | "sudo", "chmod 777", "add to sudoers" | 0.8 - 0.95 |
| `system_destruction` | "rm -rf /", "drop database" | 0.9 - 0.95 |
| `credential_exposure` | Hardcoded API keys, AWS access keys | 0.9 - 0.95 |
## Governance Levels
| Level | Behavior |
|-------|----------|
| `open` | Log threats only, never block |
| `standard` | Log threats, block only if `BLOCK_ON_THREAT=true` |
| `strict` | Log and block all detected threats |
| `locked` | Log and block all detected threats |
## Installation
1. Copy the hook folder to your repository:
```bash
cp -r hooks/governance-audit .github/hooks/
```
2. Ensure scripts are executable:
```bash
chmod +x .github/hooks/governance-audit/*.sh
```
3. Create the logs directory and add to `.gitignore`:
```bash
mkdir -p logs/copilot/governance
echo "logs/" >> .gitignore
```
4. Commit to your repository's default branch.
## Configuration
Set environment variables in `hooks.json`:
```json
{
"env": {
"GOVERNANCE_LEVEL": "strict",
"BLOCK_ON_THREAT": "true"
}
}
```
| Variable | Values | Default | Description |
|----------|--------|---------|-------------|
| `GOVERNANCE_LEVEL` | `open`, `standard`, `strict`, `locked` | `standard` | Controls blocking behavior |
| `BLOCK_ON_THREAT` | `true`, `false` | `false` | Block prompts with threats (standard level) |
| `SKIP_GOVERNANCE_AUDIT` | `true` | unset | Disable governance audit entirely |
## Log Format
Events are written to `logs/copilot/governance/audit.log` in JSON Lines format:
```json
{"timestamp":"2026-01-15T10:30:00Z","event":"session_start","governance_level":"standard","cwd":"/workspace/project"}
{"timestamp":"2026-01-15T10:31:00Z","event":"prompt_scanned","governance_level":"standard","status":"clean"}
{"timestamp":"2026-01-15T10:32:00Z","event":"threat_detected","governance_level":"standard","threat_count":1,"threats":[{"category":"privilege_escalation","severity":0.8,"description":"Elevated privileges","evidence":"sudo"}]}
{"timestamp":"2026-01-15T10:45:00Z","event":"session_end","total_events":12,"threats_detected":1}
```
## Requirements
- `jq` for JSON processing (pre-installed on most CI environments and macOS)
- `grep` with `-E` (extended regex) support
- `bc` for floating-point comparison (optional, gracefully degrades)
## Privacy & Security
- Full prompts are **never** logged — only matched threat patterns (minimal evidence snippets) and metadata are recorded
- Add `logs/` to `.gitignore` to keep audit data local
- Set `SKIP_GOVERNANCE_AUDIT=true` to disable entirely
- All data stays local — no external network calls
```json
{
"version": 1,
"hooks": {
"sessionStart": [
{
"type": "command",
"bash": ".github/hooks/governance-audit/audit-session-start.sh",
"cwd": ".",
"timeoutSec": 5
}
],
"sessionEnd": [
{
"type": "command",
"bash": ".github/hooks/governance-audit/audit-session-end.sh",
"cwd": ".",
"timeoutSec": 5
}
],
"userPromptSubmitted": [
{
"type": "command",
"bash": ".github/hooks/governance-audit/audit-prompt.sh",
"cwd": ".",
"env": {
"GOVERNANCE_LEVEL": "standard",
"BLOCK_ON_THREAT": "false"
},
"timeoutSec": 10
}
]
}
}
```
© github · MIT · github/awesome-copilot