Перейти к содержимому

Интеграция Claude Code

Эта интеграция подключает Claude Code к control plane управления, не превращая Olivares AI в обязательный прокси. Коннектор claude получает телеметрию OTLP и события хуков, сопоставляет сессии и записывает доступ R/RW, затраты и находки. Когда нужен превентивный контроль, управляемый хук olivares claude-hook запрашивает локальный PEP Olivares перед каждым применением инструмента. Эти два контура независимы: получение телеметрии не означает, что политика принудительно применяется.

  • Бинарный файл Olivares AI, включающий собственный коннектор claude.
  • UUID enterprise-тенанта, которому будут приписаны наблюдения.
  • Claude Code, установленный на управляемых конечных устройствах. Локальному приёмнику не нужен ключ API Anthropic.
  • Локальное соединение Claude Code с приёмником Olivares. Значения по умолчанию: 127.0.0.1:4317 для OTLP/gRPC и 127.0.0.1:4318 для OTLP/HTTP и кооперативных хуков.
  • Исполняемый временный путь для сервиса Olivares. claude запускается как изолированный плагин; в системах, где /tmp смонтирован с noexec, задайте TMPDIR в unit-файле сервиса как отдельный каталог, принадлежащий сервисной учётной записи Olivares.

Не открывайте приёмники OTLP и кооперативный эндпоинт за пределами loopback. Они не аутентифицируют отправителя, поэтому любой доступный им хост может сфабриковать телеметрию. Управляемый PEP — отдельная поверхность: он использует собственный локальный сокет, аутентифицирует каждый запрос и записывает каждое решение.

  1. Откройте Control console (/console) и выберите вкладку Connectors. Реестр коннекторов глобальный: необходима учётная запись superadmin. Сохранение, тестирование и перезагрузка следуют политике дополнительной административной аутентификации (admin_step_up, по умолчанию none).
  2. Добавьте источник типа claude со стабильным рабочим именем, например claude-code-prod, нужным тенантом, режимом live, интервалом 0 и включённым состоянием. Нулевой интервал корректен: этот коннектор поддерживает приёмники, а не опрашивает их пакетами.
  3. Сохраните источник и выберите Reload. Строка подтверждает имя, тип, режим и состояние. Тест в консоли недоступен для claude, поскольку это внепроцессный коннектор; проверка выполняется при сохранении, а полный тест открытия использует olivares sources test, который запускает плагин.
Настройте, кто получает доступ и чем может администрировать: подключайте пользователей, настраивайте SSO и формируйте рабочие области и группы агентов. Настройте, кто получает доступ и чем может администрировать: подключайте пользователей, настраивайте SSO и формируйте рабочие области и группы агентов.

Распространяйте вместе две конфигурации: источник наблюдений и управляемую политику агента.

Безопасная начальная конфигурация совпадает со значениями по умолчанию:

Настройка источника Начальное значение Результат
enable_grpc true Обслуживает OTLP/gRPC на grpc_addr (127.0.0.1:4317).
enable_http true Обслуживает OTLP/HTTP и кооперативный хук на http_addr (127.0.0.1:4318).
hook_path /hooks Путь кооперативного хука внутри HTTP-приёмника.
content_capture пусто Сохраняет структуру, но не промпты, тела инструментов или API. Расширенное рассуждение всегда скрывается.
enforcement пусто Наблюдает хуки; этот источник не возвращает превентивных решений.
allow_public_bind false Запрещает bind за пределами loopback.

Если на хосте работают несколько приёмников OTLP, назначьте каждому отдельный loopback-адрес и используйте то же значение в конфигурации агента. Claude, Codex и Grok в некоторых режимах по умолчанию используют 4318 и не могут одновременно занять один сокет.

Создайте системный файл Claude Code бинарным файлом Olivares:

Окно терминала
olivares agent managed-settings \
--otel-endpoint http://127.0.0.1:4317 \
--out /etc/claude-code/managed-settings.json

Генератор устанавливает allowManagedHooksOnly: true, хук PreToolUse, запускающий olivares claude-hook, и хук маскирования данных PostToolUse. Он также включает OTLP с протоколом grpc, поэтому указанный выше эндпоинт использует приёмник 4317, а не HTTP-приёмник 4318. Файл относится к управляемому системному уровню, а не к HOME сессии.

Сервер PEP включается, когда Olivares запускается с файлом, указанным в OLIVARES_HOOK_PEP_CONFIG. Ниже приведён корректный пример политики для одного тенанта:

{
"listen": "127.0.0.1:8447",
"tenants": [
{
"tenant": "11111111-1111-4111-8111-111111111111",
"require_firm_identity": true,
"enforcement": "enforce",
"policy": {
"version": "claude-prod-v1",
"default": "allow",
"rules": [
{
"tool": "Bash",
"decision": "ask",
"reason": "Shell commands require human confirmation"
}
]
}
}
]
}

Запущенные Olivares сессии получают краткоживущие значения для OLIVARES_HOOK_PEP_URL, OLIVARES_HOOK_PEP_TOKEN, OLIVARES_HOOK_PEP_TENANT и атрибуции агента. Для независимо запущенной сессии оператор должен передать эти значения через канал секретов; не записывайте их в managed-settings.json. Если эндпоинт отсутствует или недоступен, olivares claude-hook возвращает deny.

Для начального неблокирующего развёртывания используйте режим observe с будущим временем RFC3339 в observe_until. Это временное разрешение: отсутствующее, неверное или истёкшее время приводит к enforce. Инварианты платформы — включая идентичность, тенант, kill switch, firewall и ошибки fail-closed — продолжают принудительно применяться, пока бизнес-правила наблюдаются.

Сессия, которой постоянно отказывают, передаётся человеку. Когда один запуск получает 3 отказа подряд или 20 в сумме по политике, firewall или правилам платформы, Olivares прерывает его ход, если за ним кто-то наблюдает, и останавливает запуск, если никто не наблюдает. После этого запуск показывает needs_person с последними причинами, а в журнал записывается одна запись sessions.run.denial_budget. Отклонение проверки человеком не учитывается, а разрешённый вызов инструмента перезапускает счёт отказов подряд. Ввод от человека начинает новый бюджет. Меняйте лимиты для каждого тенанта с помощью "denial_budget": {"consecutive": 3, "total": 20}; пропущенное поле сохраняет значение по умолчанию.

Требуется усиленная аутентификация — AAL3 (аппаратная, устойчивая к фишингу) Требуется усиленная аутентификация — AAL3 (аппаратная, устойчивая к фишингу)

Следующие фрагменты вывода измерены 30 августа 2026 года с бинарным файлом, собранным из этого worktree. Общие сообщения запуска движка опущены.

При использовании SQLite остановите движок перед изменением реестра из CLI, поскольку применяется профиль с одним писателем. С PostgreSQL операция может выполняться параллельно с движком. Для изменений SQLite на ходу используйте консоль.

Окно терминала
olivares sources set \
--data-dir /var/lib/olivares \
--name claude-code-prod \
--kind claude \
--tenant 11111111-1111-4111-8111-111111111111 \
--poll-seconds 0 \
--config mode=live \
--actor platform-operator \
--reason integration-guide-rollout
created source "claude-code-prod" (kind "claude", tenant "11111111-1111-4111-8111-111111111111", enabled true)
kind: - → claude
tenant: - → 11111111-1111-4111-8111-111111111111
poll_seconds: - → 0
enabled: - → true
config.mode: - → live
→ reload a running engine to apply: POST /v1/console/runtime/reload, or `kill -HUP <pid>` (it also applies at next boot)

--actor и --reason обязательны, поскольку это изменение влияет на происхождение данных и записывается в журнал аудита.

Окно терминала
olivares sources validate \
--data-dir /var/lib/olivares \
--name claude-code-prod
olivares sources test \
--data-dir /var/lib/olivares \
--name claude-code-prod \
--timeout 20s
source "claude-code-prod"
configuration: VALID (everything that can be decided without the network)
? not checked here: the "claude" connector runs out-of-process, so its connector identity is only known once the binary is launched (`olivares sources test` launches it)
configuration: VALID (everything that can be decided without the network)
? not checked here: the "claude" connector runs out-of-process, so its connector identity is only known once the binary is launched (`olivares sources test` launches it)
source "claude-code-prod" (claude): ANSWERED — the connector opened with this configuration and was closed again
NO SOURCE ROW WAS WRITTEN and nothing was wired into a running engine.

validate не открывает сокеты. test вызывает Open и Close, но не вызывает Gather, не подключает источник к движку и не доказывает, что Claude Code отправляет телеметрию. Если плагин завершается с permission denied, хотя бит исполнения установлен, проверьте, не расположен ли TMPDIR процесса на томе noexec.

Если намеренно не настраивать эндпоинт, клиент возвращает отказ в формате, ожидаемом Claude Code:

Окно терминала
printf '%s\n' '{"hook_event_name":"PreToolUse","tool_name":"Read","tool_input":{"file_path":"/repo/README.md"}}' | olivares claude-hook
{"hookSpecificOutput":{"hookEventName":"PreToolUse","permissionDecision":"deny","permissionDecisionReason":"governed PEP endpoint not configured (deny-closed)"}}

Эта проба проверяет локальный клиент, а не удалённое решение политики. В production также проверьте разрешающее правило, запрещающее правило и запрос ask с твёрдой идентичностью до расширения развёртывания.

Добавление источника не создаёт исторические данные. После перезагрузки реестра и получения первого события операторам доступны следующие представления:

Расположение Что показано Как понимать состояние
Control console > Connectors (/console) Имя, тип claude, режим, несекретная конфигурация, состояние реестра и действия сохранения/перезагрузки. «Сохранено» доказывает персистентность. Это не доказывает получение события.
Health > Connectors (/health) Состояние коннектора, рабочее сообщение, тренд и последний известный опрос или активность. Открытый приёмник может быть исправен, пока агент молчит.
Observability > Ingestion (/observability) Записи по источнику, типы edge, cost и finding, сигнал, первое и последнее событие. Это общепроцессные счётчики с момента запуска; они сбрасываются при перезапуске и не относятся к отдельному тенанту.
Sessions (/sessions) Сессия, состояние, действие, модель, токены, стоимость, последняя активность и поза enforced или observed. Поза суммирует свидетельства событий; она не выводится из регистрации коннектора.
Access map (/access-map) Рёбра R/RW, атрибутированные по наблюдаемым инструментам, MCP и ресурсам. Наблюдаемое ребро описывает активность и не равнозначно предварительной авторизации.
Budgets (/stored-budgets) Расход относительно каждого сохранённого лимита бюджета, рассчитанный по образцам стоимости и токенов, выведенным из полученной телеметрии. Покрытие ограничено тем, что экспортирует парк; вызовы, не отправившие OTLP, восстановить нельзя.
Security (/security) Пробелы телеметрии, поза sandbox/MCP и другие выданные находки. Отсутствующая находка не делает ненаблюдаемую поверхность соответствующей требованиям.
Claude Policy (/claude-policy) Проверка и предпросмотр управляемых поверхностей Claude Code; Business добавляет публикацию, распространение, версии и состояние check-in. Распространение и проверка дрейфа — разные факты, показанные отдельно.
Оперативная работа агентов — что каждая сессия делает прямо сейчас, её токены, стоимость и ритм, обновляемые по живому потоку. Оперативная работа агентов — что каждая сессия делает прямо сейчас, её токены, стоимость и ритм, обновляемые по живому потоку. Находки ограничителей, состояние принуждения, очередь аномалий и форензика инцидентов с защитой от подделки. По умолчанию плоскость работает в детективном режиме — она фиксирует, но сама по себе ничего не блокирует, пока принуждение не включено и не поставлено под управление. Находки ограничителей, состояние принуждения, очередь аномалий и форензика инцидентов с защитой от подделки. По умолчанию плоскость работает в детективном режиме — она фиксирует, но сама по себе ничего не блокирует, пока принуждение не включено и не поставлено под управление.
  • Поэтапное развёртывание: начните со структурного содержимого и правил в наблюдаемом режиме со сроком действия. Проверьте ложные срабатывания, затем переведите каждый тенант в enforce.
  • Администрирование парка: распространяйте /etc/claude-code/managed-settings.json через RPM, неизменяемый образ, Ansible, Salt или эквивалентный корпоративный менеджер конфигурации. Проверяйте активный файл вторым источником managed-settings, чтобы обнаруживать отсутствие или дрейф.
  • Разделение обязанностей: команда платформы поддерживает приёмники и доступность; команда безопасности версионирует правила; владельцы тенантов рассматривают запросы ask и находки. Каждое привилегированное изменение остаётся атрибутированным.
  • Минимизация данных: оставляйте content_capture пустым, если нет утверждённой форензической потребности с заданными местом хранения и сроком. Структурных данных обычно достаточно для анализа внедрения и затрат.
  • Укреплённые хосты: оставляйте приёмники на loopback, предоставьте плагину минимальный исполняемый временный каталог и сделайте политику доступной только для чтения. Не ослабляйте noexec глобально ради запуска коннектора.

Что принудительно применяется, а что только наблюдается

Заголовок раздела «Что принудительно применяется, а что только наблюдается»
Поверхность Фактическое поведение
Телеметрия OTLP и кооперативный хук коннектора claude Наблюдаются. Отправитель сотрудничает; loopback-приёмник не аутентифицирует, и локальный процесс может пропустить или сфабриковать сигнал.
Пустая настройка enforcement источника Наблюдается. Это значение по умолчанию, и оно не блокирует инструменты.
olivares claude-hook + PEP + managed settings Принудительно применяет allow, ask или deny к событиям, которые Claude Code может запретить, и записывает решение. Сбой эндпоинта приводит к отказу по принципу deny-closed.
allowManagedHooksOnly на управляемом уровне Укрепляет установку против пользовательских или проектных хуков, способных конкурировать с PEP.
PostToolUse Наблюдает и маскирует данные после действия. Не может отменить уже произведённые инструментом эффекты.
Действия вне процесса и хука Claude Code Не охвачены этим подключением. Используйте средства ОС, нативный аудит и сетевые политики как дополнительные барьеры.

Для операционной проверки нужны четыре независимых контроля: сохранённый реестр, открытый коннектор, видимое в Ingestion событие и инструмент, действительно заблокированный PEP. Ни один из них не заменяет остальные три.