
kontext-cli v1.8.1
在数秒内保护代理安全,并在运行时强制执行权限。
在 AI 代理执行高风险操作之前将其阻止
AI 代理不仅仅提供代码建议。它们会运行 shell 命令、读取文件、调用服务、更改基础设施,并与生产系统交互。
Kontext 在 AI 代理与其调用的工具之间放置本地策略。 它观察受支持的操作,在具有后果的操作运行之前评估策略,并将决策和结果记录到授权账本中。
从观察模式开始。查看策略会阻止哪些操作。当你准备好时,将受支持的边界转为强制执行。
策略评估错误会允许工具调用,包括在强制执行模式下,并会作为失败记录在活动记录中可见。已完成的策略拒绝和不可用的必需审批仍会阻止操作。当守护进程不可用或强制执行没有可用策略时,此错误回退不会改变行为。
- 本地决策: 策略评估与代理并行进行。
- 操作前强制执行: 匹配的操作可以在受支持的同步钩子处被拒绝。
- 无需包装命令: 安装一次 Kontext,然后照常继续使用你的代理。
- 可归因证据: 保留代理、会话、操作、策略决策和结果。
- 托管式部署: 在整个组织中分发策略并审查脱敏记录。
Kontext 目前支持 Claude Code、Claude Cowork 和 Codex。确切的事件和强制执行覆盖范围因代理而异——请参阅代理支持矩阵。
托管式 Claude 钩子可识别完整或缩短会话目录名称的 Cowork 会话,并在活动记录中保留其 Cowork 身份。
快速开始
安装 Kontext
brew install kontext-security/tap/kontext
连接此 Mac
在 Kontext 控制面板中创建安装令牌,然后运行:
kontext setup
安装程序会:
- 将安装令牌存储在 macOS 登录钥匙串中;
- 为受支持的代理安装钩子;
- 启动本地 Kontext 守护进程;
- 将安装连接到你的 Kontext 组织。
验证安装:
kontext doctor
然后照常继续使用 Claude Code 或 Codex。你无需通过单独的包装器启动代理。
自助式安装目前支持 macOS。托管和云环境在提供受支持的钩子契约、存储和守护进程生命周期时,可以运行相同的本地运行时。
安装后有什么变化?
如果没有操作前策略,代理操作会在安全团队审查其日志之前执行:
agent requests an action
|
v
action executes
|
v
activity appears in a log
使用 Kontext 后:
agent requests an action
|
v
Kontext receives it through a supported hook
|
v
local policy evaluates the action
|
+---- allow ----------> action continues
|
+---- would deny -----> action continues and evidence is recorded
| (observe mode)
|
+---- deny -----------> action is stopped before execution
(enforce mode)
|
v
decision and outcome enter the authorization ledger
这在操作之前创建了一个决策点,而不仅仅是操作之后的记录。
先观察。准备好后再强制执行。
在第一天就阻止所有不熟悉的操作会产生噪音并打断开发者。无限期地允许所有操作则会使策略沦为被动监控。
Kontext 将部署分为两种模式:
观察模式
观察模式记录策略决策,但不打断代理。
用它来回答:
- 代理正在调用哪些工具?
- 当前策略会拒绝哪些操作?
- 涉及哪些仓库、文件和系统?
- 强制执行会在哪里打断合法工作?
- 哪些事件表面实际上可以阻止操作?
强制执行模式
当确定性策略在受支持的同步操作前钩子处匹配时,强制执行模式会返回真正的拒绝。
策略可以围绕以下操作定义边界:
- 破坏性命令;
- 敏感文件访问;
- 生产系统操作;
- 凭据访问;
- 数据导出。
强制执行有意限制在代理会等待 Kontext 后再继续的事件表面上。Kontext 并不声称接收事件就意味着它可以阻止来自该代理的每一个操作。
了解发生了什么——以及为什么
每个到达 Kontext 的受支持事件都可以为本地授权账本贡献证据。
一条记录可以包括:
- 代理和会话;
- 生命周期或工具事件;
- 工具名称和可用输入;
- 本地策略决策;
- 负责该决策的策略;
- 可用的操作结果;
- 供后续审查的脱敏证据。
Kontext 记录工具活动和决策证据。它不会捕获模型推理或重建完整对话历史。
托管部署可以将脱敏记录导出到 Kontext 控制面板,以便进行组织范围的审查、保留和调查。
策略位于代理运行的位置
决策路径保持在本地:
Claude Code / Cowork / Codex
|
v
supported hook
|
v
local Kontext runtime
|
+-----+------+
| |
v v
policy decision local ledger
|
v
allow / would deny / deny
托管服务无需响应每一次工具调用。
托管部署会增加组织配置、策略部署、记录导出、身份和保留。它们不会将同步决策路径移出代理环境。
受支持的代理
“受支持”不仅仅意味着接受事件。Kontext 记录了它接收哪些事件、哪些事件可以阻止,以及每个集成如何安装。
| 代理 | Kontext 记录的内容 | 操作前阻止 | 安装 |
|---|---|---|---|
| Claude Code | 会话生命周期、工具使用前、工具使用成功和失败后 | 工具使用前 | 由 kontext setup 安装 |
| Codex | 会话开始、工具使用前、工具使用后、提示提交、停止 | 工具使用前 | 由 kontext setup 安装;钩子必须在 Codex 中被信任 |
| Claude Cowork | 与 Claude Code 兼容的会话和工具事件 | 工具使用前 | 在 Cowork 环境中配置钩子 |
有关确切行为、部署范围和已知缺口,请参阅代理支持矩阵。它是强制执行覆盖范围的权威来源。
Kontext 和沙箱解决的是不同的问题
进程沙箱会问:
此进程可以访问哪些文件、网络目标、凭据和操作系统资源?
Kontext 会问:
哪个代理正在尝试哪个操作,适用什么策略,该操作是否应继续,以及什么证据可以证明该决策?
内核沙箱是强大的隔离边界。Kontext 在受支持的代理和工具钩子处提供语义策略和归因。
它们是互补的:
Kontext
decides whether the action is authorized
|
v
sandbox
constrains what the process can physically access
Kontext 并不声称提供内核级隔离。当威胁模型需要进程、文件系统或网络隔离时,请使用适当的沙箱。
为什么不直接收集代理日志?
日志告诉你代理在事件之后报告了什么。
Kontext 在受支持的具有后果的操作执行之前创建授权决策,然后将该决策与可用的结果关联起来。
这种区别在以下情况下很重要:
- 策略部署;
- 事件调查;
- 生产访问审查;
- 开发者例外处理;
- 合规和审计审查。
结果不仅仅是“代理调用了一个工具”。它是关于请求了什么、适用了哪个策略、是否被允许以及接下来发生了什么的证据。
在整个组织中运行 Kontext
托管部署会增加:
- 集中管理的确定性策略;
- 企业身份和组织控制;
- 从观察到强制执行的部署;
- 托管式代理和云部署支持;
- 脱敏证据导出;
- 审计保留;
- 部署健康和积压监控;
- 面向安全和平台团队的入门引导。
有关部署规划和组织入门引导,请联系 [email protected] 或 预约交流。
诊断安装
kontext doctor
doctor 会检查:
- 已安装的代理钩子;
- 守护进程健康和版本;
- 托管导出健康;
- 待处理的导出积压。
当已配置的安装不健康时,它会以非零状态退出。
当自助式守护进程过期时:
kontext doctor --fix
通过再次运行 setup 来轮换安装令牌:
kontext setup
移除自助式安装:
kontext setup --uninstall
数据处理
- 策略决策在本地进行。
- 工具活动和决策证据存储在本地。
- 敏感值在本地存储和托管导出之前会被脱敏。
- Kontext 不存储模型推理或完整对话历史。
- 托管部署可以将脱敏记录导出到组织控制面板。
有关运行时和数据边界,请参阅 Guard 文档。
开发
go build -o bin/kontext ./cmd/kontext
go test ./...
go test -race ./...
go vet ./...
社区
- 阅读 SUPPORT.md 了解支持渠道。
- 在提交贡献之前阅读 CONTRIBUTING.md。
- 通过我们的安全策略报告漏洞。
- Kontext 在 MIT 许可证下发布。
权限报告
kontext report 会显示云上次接受的已发现代理和权限。使用 kontext report --json 获取原始负载。在首次成功发送之前,它报告无数据。
在守护进程环境中设置 KONTEXT_AUTHORITY_SCAN=off,以在此 Mac 上禁用权限收集和传输。