关于 Klarion
Klarion 是用于代码库的机密扫描工具,先用本地规则筛选候选项,再由 AI 模型判断是否为真实密钥,适合开发者和 CI 流程。它提供命令行、提交拦截、Claude Code 钩子及 MCP 服务等使用方式。
主要功能
- 01本地扫描密钥格式、凭据文件及编码内容
- 02由 AI 模型判定候选项是否为机密
- 03提供扫描与提交保护命令
- 04支持 Claude Code 写入拦截钩子
- 05提供 CI 扫描与 MCP 服务
适用场景
- 01在代码提交前拦截新增密钥
- 02在 pull request 中扫描新增代码
- 03让编码 Agent 写入代码前检查潜在密钥
MCP 相关
MCP 服务向客户端提供 scan_text 和 scan_file 工具,供 Agent 在写入代码或提交前扫描。未配置模型时由 Agent 根据候选项和规则进行判断;配置模型后由 Klarion 执行判断。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
Klarion 可在代码中发现密钥:API 密钥、密码和令牌。
它分两步运行:
- 发现。 快速的本地检查会标记所有看起来像密钥的内容。
- 检查。 AI 模型会结合周围的代码读取每个候选项,并判断它是否是真正的密钥。
模式扫描器只做到第 1 步,因此也会标记测试值、ID 和哈希。Klarion 会为你找出 真正泄露的内容。
在泄露发生时运行
这是一个 Claude Code 钩子,会在文件创建前阻止写入。Agent 无法绕过它, 无论是通过文件工具还是 Bash 都不行。

$ klarion scan .
services/billing/client.py
[critical] stripe-secret-key 39:18 sk_l****4bQx
verdict: secret (confidence 0.96)
| stripe.api_key = "sk_l****4bQx"
Summary: 1 finding(s) across 1 file(s), 198 suppressed [1204 files scanned in 612ms]
安装
macOS:
brew install 0x1Adi/tap/klarion
其他平台需要 Go 1.25 或更高版本:
go install github.com/0x1Adi/Klarion/cmd/klarion@latest
或者从发布页面下载二进制文件。
Klarion 需要 AI 模型。请选择一个:
| 模型 | 设置 |
|---|---|
| Anthropic(默认) | export ANTHROPIC_API_KEY=... |
| OpenAI 或兼容模型 | export OPENAI_API_KEY=... 并设置 provider = "openai" |
| 本地模型,所有内容都留在你的设备上 | 运行 Ollama 并设置 provider = "ollama" |
| 你的 Claude Code 登录 | 设置 provider = "claude-cli" |
设置写入 .klarion.toml 中的 [ai] 部分。所有选项请参阅参考文档。
使用方法
| 目标 | 方法 |
|---|---|
| 扫描文件夹 | klarion scan . |
| 阻止提交包含密钥的更改 | klarion protect |
| 使用 pre-commit 框架阻止提交 | 使用下方的 .pre-commit-config.yaml |
| 阻止 Claude Code 写入密钥 | /plugin marketplace add 0x1Adi/Klarion、/plugin install klarion@klarion,然后重启 Claude Code |
| 阻止 Cline、Cursor 或任何 MCP Agent 写入密钥 | 使用下方的 MCP 服务 |
| 让添加密钥的拉取请求检查失败 | 使用下方的 GitHub Action |
| 在已有扫描结果的仓库中开始使用 | 执行 klarion baseline create,这样只有新密钥才会导致失败 |
# .github/workflows/secrets.yml
name: secret-scan
on: [push, pull_request]
jobs:
klarion:
runs-on: ubuntu-latest
permissions:
contents: read
security-events: write
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: 0x1Adi/[email protected]
with:
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
对于拉取请求,它只扫描 PR 新增的内容。它会缓存 AI 的回答,因此未更改的代码
不会产生费用。扫描结果会显示在作业日志中。对于未启用 GitHub Code Security 的私有仓库,
添加 upload-sarif: "false" 以跳过上传到 Security 标签页。GitLab CI 和所有选项请参阅
参考文档。
# .pre-commit-config.yaml
repos:
- repo: https://github.com/0x1Adi/Klarion
rev: v0.4.3
hooks:
- id: klarion
stages: [pre-commit]
如果没有 stages 行,钩子就处于关闭状态,只有在你执行
pre-commit run --hook-stage manual klarion 时才会运行。klarion 钩子首次运行时会使用 Go
构建 Klarion;如果已安装 klarion,请使用 id: klarion-system。所有提交者都需要配置模型。
// ~/.cline/mcp.json, or the MCP settings of any other client
{
"mcpServers": {
"klarion": {
"command": "klarion",
"args": ["mcp"]
}
}
}
Agent 会在写入代码前调用 scan_text,并在提交前调用 scan_file。请逐次批准
调用,而不要自动批准该服务:scan_file 会读取传入的任意路径。如果未配置模型,服务会将每个
候选项及其判断规则交给该 Agent 进行判断,因此无需 API 密钥。配置模型后,则由 Klarion 进行判断。
完整步骤包括工具和验证安装的方法,请参阅:llms-install.md。
结果
Klarion 找到的真实密钥约为 gitleaks 的 1.7 倍,其告警中有 89% 属实 (gitleaks:91%)。
我们在 CredData 上测试了 Klarion v0.3.0:该数据集包含 337 个真实的开源仓库,Samsung 标注了其中包含密钥的代码行。以下数据不包括测试文件夹中的代码。
| Klarion | gitleaks | detect-secrets | |
|---|---|---|---|
| 找到的真实密钥 | 35% | 21% | 35% |
| 属实的告警 | 89% | 91% | 34% |
| 在 flask 和 rails 中的误报 | 9 | 33 | 247 |
需要了解:
- Klarion 会有意跳过测试夹具和文档示例。 CredData 将这些也计为真实密钥。 按这种方式计算,Klarion 找到了 9%,gitleaks 找到了 46%。
- Klarion 的数据来自一个样本:使用一个模型(Claude Haiku)进行的 612 次 AI 检查。预计找到率为 30% 到 40%,真实性为 82% 到 97%。
- **CredData 的标签来自其他扫描器发现的内容,**这对那些扫描器有利。
完整方法和数据:benchmark/REPORT.md。
工作原理
- 步骤 1 在你的机器上运行。 它会查找已知密钥格式、
password = value形式的代码行、.pgpass等凭据文件,以及隐藏在 base64 或十六进制中的密钥。它还会检查字符串看起来有多随机。 - 步骤 2 交由模型判断。 每个候选项都会连同几行代码一起发送。模型会将其判定为密钥、误报或不确定。不确定的情况按密钥处理。
- 你可以查看哪些内容被隐藏。 运行
klarion scan . --show-suppressed。 - 你的代码只会发送给你选择的模型。 设置
send_secret = false,改为发送掩码后的值。这样准确性会降低。
限制
- 它需要模型。 如果没有模型,
klarion scan和提交钩子会报错并停止。 Claude Code 钩子仍会拦截 AWS、GitHub 和 Stripe 等服务的密钥,而 MCP 服务会将候选项及其规则交给你的 Agent 判断。 - 没有 API 密钥? 无需设置即可使用的托管判定服务即将推出。加入列表。
- 模型可能会判断错误。 使用
--show-suppressed查看它隐藏的内容。 - 它能找到密钥,但不会修复密钥。 轮换它发现的任何密钥。
- 可以使用
git commit --no-verify跳过本地钩子。 也要通过 Action 在 CI 中运行 Klarion。pre-commit 钩子只检查已暂存的更改,因此在 CI 中没有内容可检查。
更多
参考文档 · 基准测试 · 设计 · 更新日志 · 贡献指南 · 安全
MIT © Klarion 作者
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。