Дата публикации
ai_products

Kontext CLI: как запускать AI‑агентов без хранения ключей в коде

Что нового

Kontext CLI — это open source CLI‑утилита на Go, которая оборачивает AI‑код‑агентов (пока только Claude Code) в полноценный слой идентификации, управления ключами и аудита.

Главное изменение по сравнению с привычной работой через .env:

  • вместо «вечных» API‑ключей в .env проект получает короткоживущие, строго ограниченные токены, привязанные к одной сессии;
  • агент никогда не видит и не хранит настоящие секреты — только временные токены, которые истекают после завершения сессии;
  • каждый вызов инструмента логируется в бэкенд Kontext с привязкой к пользователю, сессии и организации;
  • конфигурация доступа описывается один раз в .env.kontext, который можно коммитить в репозиторий без риска утечки секретов.

Из коробки реализовано:

  • аутентификация через OIDC с хранением refresh‑токена в системном keyring;
  • обмен плейсхолдеров на реальные токены по RFC 8693 (token exchange);
  • шифрование данных «на диске» через AES‑256‑GCM;
  • общение CLI с бэкендом по ConnectRPC;
  • лёгкий сайдкар‑процесс, который общается с агентом по Unix‑сокету и пересылает телеметрию.

Сейчас Kontext CLI умеет запускать Claude Code через флаг --agent claude. Поддержку Cursor и Codex авторы планируют, но ещё не выкатили.

Как это работает

Базовый сценарий выглядит так:

  1. Вы описываете нужные креды в .env.kontext:

    GITHUB_TOKEN={{kontext:github}}
    STRIPE_KEY={{kontext:stripe}}
    DATABASE_URL={{kontext:postgres/prod-readonly}}
    
  2. Запускаете агента командой:

    kontext start --agent claude
    
  3. Дальше CLI делает всё сам:

    • Аутентифицирует пользователя: открывает браузер для входа по OIDC, кладёт refresh‑токен в системный keyring. Очистить можно через kontext logout.
    • Создаёт сессию: регистрирует её в бэкенде Kontext. Сессия появляется в дашборде.
    • Разрешает креды: читает .env.kontext, меняет плейсхолдеры вида {{kontext:...}} на короткоживущие токены через RFC 8693.
    • Запускает агента: стартует Claude Code с уже подставленными env‑переменными и governance‑хуками.
    • Собирает телеметрию: хуки Claude отправляют события PreToolUse, PostToolUse и UserPromptSubmit в сайдкар по Unix‑сокету (kontext.sock), а тот — в бэкенд.
    • Корректно завершает сессию: по выходу агента завершает сессию, даёт токенам истечь и удаляет временные файлы.

Архитектура запуска Claude Code через Kontext CLI в общих чертах:

kontext start --agent claude
│
├── Auth: OIDC refresh token из keyring
├── ConnectRPC: CreateSession → сессия в дашборде
├── Sidecar: Unix socket server (kontext.sock)
│   └── Heartbeat loop (30s)
├── Hooks: settings.json → Claude Code --settings
├── Agent: запуск claude с env‑переменными
│   ├── [PreToolUse] → kontext hook → sidecar → backend
│   ├── [PostToolUse] → kontext hook → sidecar → backend
│   └── [UserPromptSubmit] → kontext hook → sidecar → backend
└── On exit: EndSession → cleanup

Ключевой момент: CLI и сайдкар не трогают содержимое диалогов, reasoning LLM, токены и историю переписки. В телеметрию уходит только то, что агент пытался сделать (вызовы инструментов) и что в итоге произошло.

Что это значит для вас

Когда Kontext CLI реально помогает

  1. Команда активно использует AI‑агентов для работы с кодом (сейчас — Claude Code), а доступы разбросаны по .env, Notion и устным договорённостям.

    Kontext позволяет:

    • не раздавать разработчикам «боевые» ключи от GitHub, Stripe, продовой базы;
    • ограничивать доступ сессионными токенами и быстро их отзывать;
    • видеть, какие инструменты агент вызывал в рамках каждой сессии.
  2. Жёсткие требования по безопасности и аудиту: финтех, крупные маркетплейсы, корпоративные команды.

    Здесь важны:

    • OIDC‑логин с хранением refresh‑токена в системном keyring;
    • RFC 8693 token exchange вместо раздачи статических API‑ключей;
    • AES‑256‑GCM для шифрования секретов «на диске»;
    • телеметрия по каждому вызову инструмента и сессии для аудита.
  3. Нужно выровнять dev‑окружения у всей команды.

    Вы коммитите .env.kontext в репозиторий. Все разработчики получают одну и ту же схему доступа без того, чтобы секреты попадали в git. Настраивать каждому свои .env с ключами больше не нужно.

  4. Не хочется поднимать локальные демоны и тянуть лишние рантаймы.

    Kontext — это нативный бинарник на Go. Не нужен Node.js или Python, не нужен отдельный демон. CLI запускается напрямую, а сайдкар — как лёгкий подпроцесс.

Когда Kontext CLI может не зайти

  1. Вы не используете Claude Code и не готовы под него переезжать.

    На текущий момент поддерживается только --agent claude. Автор проекта планирует поддержку Cursor и Codex, но их пока нет.

  2. Небольшие pet‑проекты без чувствительных данных.

    Если вы просто экспериментируете с API и держите один тестовый ключ в .env — дополнительный слой аутентификации и бэкенда может оказаться избыточным.

  3. Жёсткие ограничения на внешние SaaS‑сервисы.

    Kontext CLI общается с удалённым бэкендом по ConnectRPC, хранит конфигурацию и телеметрию там. Если политика безопасности запрещает такой сценарий, придётся либо добиваться исключения, либо искать полностью self‑hosted решение.

  4. Ограничения по доступу из России.

    Проект живёт на GitHub и использует внешний OIDC‑провайдер и публичный API GitHub Releases для проверки обновлений. Для стабильной работы может потребоваться VPN, если доступ к этим сервисам ограничен.

Место на рынке

Kontext CLI закрывает довольно узкую, но болезненную задачу: как дать AI‑агенту реальные доступы к GitHub, Stripe, базам и при этом не раздать всем разработчикам продовые ключи.

Формальных бенчмарков производительности или сравнения скоростей с другими инструментами авторы не приводят. Есть несколько чётких отличий по архитектуре:

  • Подход к секретам: вместо классических .env с долгоживущими ключами Kontext использует сессионные токены и RFC 8693 token exchange.
  • Глубокая интеграция именно с AI‑агентом: хуки PreToolUse, PostToolUse, UserPromptSubmit встроены в Claude Code через settings.json и сайдкар.
  • Лёгкий рантайм: один Go‑бинарник, без контейнеров и дополнительных демонов.

С точки зрения конкуренции Kontext CLI ближе всего к корпоративным решениям по secret management и policy‑engine, но сфокусирован именно на AI‑код‑агентах. Если вы уже используете Vault, AWS Secrets Manager или аналоги, Kontext можно рассматривать как прослойку, которая делает эти секреты безопасно доступными для Claude Code и даёт аудит на уровне конкретных действий агента.

Установка

Через Homebrew

Для macOS с Homebrew установка минимальна:

brew install kontext-dev/tap/kontext

Прямая установка бинарника

Если Homebrew не подходит, можно скачать бинарник напрямую из GitHub Releases:

tmpdir="$(mktemp -d)" \
  && gh release download --repo kontext-dev/kontext-cli --pattern 'kontext_*_darwin_arm64.tar.gz' --dir "$tmpdir" \
  && archive="$(find "$tmpdir" -maxdepth 1 -name 'kontext_*_darwin_arm64.tar.gz' -print -quit)" \
  && tar -xzf "$archive" -C "$tmpdir" \
  && sudo install -m 0755 "$tmpdir/kontext" /usr/local/bin/kontext

Команда использует gh (GitHub CLI) и ставит бинарник kontext в /usr/local/bin.

Как запустить

Базовый запуск с Claude Code

После установки Kontext CLI и Claude Code достаточно одной команды:

kontext start --agent claude

При первом запуске CLI:

  • откроет браузер для входа по OIDC;
  • предложит подключить нужных провайдеров и разрешить доступы;
  • настроит разрешение кредов по вашему .env.kontext.

В любой момент можно разлогиниться и удалить OIDC‑сессию из системного keyring:

kontext logout

Объявление кредов в проекте

В корне проекта создайте .env.kontext:

GITHUB_TOKEN={{kontext:github}}
STRIPE_KEY={{kontext:stripe}}
DATABASE_URL={{kontext:postgres/prod-readonly}}

Этот файл можно спокойно коммитить в репозиторий. Он описывает шаблон доступа, а не реальные секреты. Настоящие токены живут в Kontext и подставляются только на время сессии.

Разработка и контрибуции

Проект открыт под лицензией MIT. Если вы хотите собрать CLI из исходников или доработать его, базовый набор команд такой:

# Сборка

go build -o bin/kontext ./cmd/kontext

# Генерация protobuf (нужен buf и плагины)

buf generate

# Тесты

go test ./...
go test -race ./...

go vet ./...

gofmt -w ./cmd ./internal

# Линк для локального использования

ln -sf $(pwd)/bin/kontext ~/.local/bin/kontext

CLI общается с бэкендом исключительно через ConnectRPC. Определения сервисов лежат в репозитории kontext-dev/proto, файл agent.proto.

Хуки агента общаются с сайдкаром по Unix‑сокету, формат — length‑prefixed JSON.

Поддержка

За актуальными каналами поддержки стоит идти в файл SUPPORT.md в репозитории Kontext CLI. Там описано, какой канал использовать для багов, вопросов по интеграции и фич‑реквестов.

Кроме того, у проекта есть сайт, документация и Discord‑сообщество, где можно обсудить сценарии использования и задать вопросы по безопасности.


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

Kontext CLI: как запускать AI‑агентов без хранения ключей в коде — VogueTech | VogueTech