- Дата публикации
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 авторы планируют, но ещё не выкатили.
Как это работает
Базовый сценарий выглядит так:
-
Вы описываете нужные креды в
.env.kontext:GITHUB_TOKEN={{kontext:github}} STRIPE_KEY={{kontext:stripe}} DATABASE_URL={{kontext:postgres/prod-readonly}} -
Запускаете агента командой:
kontext start --agent claude -
Дальше CLI делает всё сам:
- Аутентифицирует пользователя: открывает браузер для входа по OIDC, кладёт refresh‑токен в системный keyring. Очистить можно через
kontext logout. - Создаёт сессию: регистрирует её в бэкенде Kontext. Сессия появляется в дашборде.
- Разрешает креды: читает
.env.kontext, меняет плейсхолдеры вида{{kontext:...}}на короткоживущие токены через RFC 8693. - Запускает агента: стартует Claude Code с уже подставленными env‑переменными и governance‑хуками.
- Собирает телеметрию: хуки Claude отправляют события
PreToolUse,PostToolUseиUserPromptSubmitв сайдкар по Unix‑сокету (kontext.sock), а тот — в бэкенд. - Корректно завершает сессию: по выходу агента завершает сессию, даёт токенам истечь и удаляет временные файлы.
- Аутентифицирует пользователя: открывает браузер для входа по OIDC, кладёт refresh‑токен в системный keyring. Очистить можно через
Архитектура запуска 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 реально помогает
-
Команда активно использует AI‑агентов для работы с кодом (сейчас — Claude Code), а доступы разбросаны по
.env, Notion и устным договорённостям.Kontext позволяет:
- не раздавать разработчикам «боевые» ключи от GitHub, Stripe, продовой базы;
- ограничивать доступ сессионными токенами и быстро их отзывать;
- видеть, какие инструменты агент вызывал в рамках каждой сессии.
-
Жёсткие требования по безопасности и аудиту: финтех, крупные маркетплейсы, корпоративные команды.
Здесь важны:
- OIDC‑логин с хранением refresh‑токена в системном keyring;
- RFC 8693 token exchange вместо раздачи статических API‑ключей;
- AES‑256‑GCM для шифрования секретов «на диске»;
- телеметрия по каждому вызову инструмента и сессии для аудита.
-
Нужно выровнять dev‑окружения у всей команды.
Вы коммитите
.env.kontextв репозиторий. Все разработчики получают одну и ту же схему доступа без того, чтобы секреты попадали в git. Настраивать каждому свои.envс ключами больше не нужно. -
Не хочется поднимать локальные демоны и тянуть лишние рантаймы.
Kontext — это нативный бинарник на Go. Не нужен Node.js или Python, не нужен отдельный демон. CLI запускается напрямую, а сайдкар — как лёгкий подпроцесс.
Когда Kontext CLI может не зайти
-
Вы не используете Claude Code и не готовы под него переезжать.
На текущий момент поддерживается только
--agent claude. Автор проекта планирует поддержку Cursor и Codex, но их пока нет. -
Небольшие pet‑проекты без чувствительных данных.
Если вы просто экспериментируете с API и держите один тестовый ключ в
.env— дополнительный слой аутентификации и бэкенда может оказаться избыточным. -
Жёсткие ограничения на внешние SaaS‑сервисы.
Kontext CLI общается с удалённым бэкендом по ConnectRPC, хранит конфигурацию и телеметрию там. Если политика безопасности запрещает такой сценарий, придётся либо добиваться исключения, либо искать полностью self‑hosted решение.
-
Ограничения по доступу из России.
Проект живёт на 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‑сообщество, где можно обсудить сценарии использования и задать вопросы по безопасности.