Как отслеживать и восстанавливать сбои кодовой базы с помощью ИИ-агента
30 जुलाई 2026
0
Computing/SoftwareComments (0)
Log in to leave a comment
No posts yet
Log in to leave a comment
No posts yet
Если подключить к бэкенд-репозиторию размером более 100 000 строк кода ИИ-агента вроде Claude Code или Codex, сначала поражаешься скорости. Но в какой-то момент, из-за пары неверных строк в промпте, ИИ прорывает защитный периметр и начинает трогать общие утилиты или файлы конфигурации. Логи сеансов раздуваются до мегабайтов, сборка падает, а когда уже целый час перебираешь Git Diff в поисках файла-виновника, возникает стойкое желание написать всё с нуля самостоятельно.
Чтобы дать агенту автономность и при этом предотвратить повреждение ненужных файлов, необходимы четкая жесткая изоляция и визуализированная система отслеживания трассировок.
Файлы инструкций на естественном языке, такие как CLAUDE.md или .aiignore, по мере роста контекстного окна часто игнорируются агентом. Запросы на уровне промптов — это всего лишь рекомендации, и при потере контекста выполнение инструментов агентом легко перешагивает через любые границы.
Чтобы физически заблокировать доступ агента, необходимо напрямую разместить в корне проекта детерминированный механизм контроля прав .claude/settings.json.
`json
{
"permissions": {
"deny": [
"Edit(src/core/config/)",
"Edit(src/shared/utils/)",
"Read(./.env*)",
"Bash(rm -rf *)"
],
"ask": [
"Edit(src/api/v1/legacy/**)"
]
}
}
`
После установки явных правил блокировки безопаснее дополнительно защитить файлы на уровне файловой системы. Скрипты продакшн-сборки или файлы с секретами безопасности лучше лишить прав на запись на уровне ОС.
.claude/settings.json в корне проекта.permissions.deny.chmod 444 .env* в терминале.Такое управление правами позволяет в значительной степени избавиться от ошибок сборки, возникающих из-за того, что ИИ внезапно решил отредактировать общий модуль.
Если оставлять логи сеансов (.jsonl) только в локальной среде отдельного разработчика, при возникновении побочных эффектов будет сложно выявить первопричину. Настройте воркфлоу GitHub Actions так, чтобы трассировки сеансов сжимались и проверялись при создании Pull Request.
`yaml
name: AI Agent Session Audit & Risk Analysis
on:
pull_request:
types: [opened, synchronize]
jobs:
audit-session:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Mindwalk Telemetry Extractor
run: |
docker run --rm -v ${{ github.workspace }}:/workspace \
cosmtrek/mindwalk:v0.1.0 parse --log-dir=./.claude/sessions --out=telemetry.json
- name: Run Deterministic Repo Audit
id: repo_audit
run: |
curl -sSL https://github.com/aletheore/releases/download/v1.0/aletheore -o aletheore
chmod +x aletheore
./aletheore audit --telemetry=telemetry.json --max-allowed-depth=3
- name: Upload Mindwalk 3D Visual Artifact
uses: actions/upload-artifact@v4
with:
name: mindwalk-3d-trace-${{ github.event.pull_request.number }}
path: telemetry.json
`
Если связать анализ на базе Rust или Tree-sitter для проверки выхода агента за пределы разрешенной области, можно мгновенно прерывать CI-сборку при изменении родительских модулей вне допустимого диапазона.
Для оценки риска изменений полезно вычислять его не по количеству строк кода, а на основе связности графа узлов:
Здесь — количество измененных файлов, а — средняя 3D-связность измененных узлов. Если показатель превышает пороговое значение, можно настроить отправку ссылки на 3D-карту визуализации в Slack, чтобы ревьюер мог сразу оценить уровень риска.
Когда агент устроил хаос, вместо того чтобы полностью сбрасывать коммиты, следует проследить временную шкалу и выборочно восстановить только поврежденные файлы. Определив временной интервал, в который начался сбой, с помощью jq извлеките из JSONL-логов промпты и пути рассуждений для этого периода:
`bashjq -c 'select(.timestamp >= "2026-07-11T14:20:00Z" and .timestamp <= "2026-07-11T14:25:00Z") |
{timestamp: .timestamp, prompt: .payload.prompt, tool_use: .payload.tool_use, thinking: .payload.thinking}'
./.claude/sessions/session_abc123.jsonl
`
Установив причину, разделите процесс восстановления на 3 этапа:
git checkout <PRE_AI_COMMIT_SHA> -- src/legacy/broken_module.ts).git clean -fd -- src/unwanted_generated_dir/).Этот подход позволяет аккуратно вернуть поврежденные файлы без риска потерять код, который работал корректно.
В монорепозитории при росте числа узлов до десятков тысяч сам инструмент визуализации начинает зависать. Когда браузер тормозит, пропадает любое желание заниматься отладкой. Чтобы исключить лишние каталоги из процесса рендеринга, необходимо четко настроить фильтры исключения в mindwalk.config.json.
`json
{
"visualization": {
"excludePatterns": [
"/node_modules/",
"/vendor/",
"/.git/",
"/dist/",
"/coverage/",
"/*.log",
"/*.pb.go"
],
"maxDepth": 5,
"groupingStrategy": "directory-segmented"
}
}
`
Наконец, при запуске визуализационных пайплайнов или инструментов анализа в фоновых Docker-контейнерах необходимо ограничить выделение ресурсов, чтобы локальная IDE не зависала.
mindwalk.config.json, чтобы исключить узлы каталогов зависимостей из визуализации.--cpus="1.5" и --memory="2g" при запуске контейнера.--nice=19 в конец команды запуска фонового процесса, чтобы снизить приоритет процессора до минимального.