项目简介
你不记得文件名,但你记得文件里有什么内容。
- 关于数据库索引的 PDF,保存成了
notes-final-2.pdf。
- 部署失败的那一行日志,藏在某个日志文件夹里。
- 截了一张带 CUDA 错误的截图,文件名完全没意义。
输入你记得的内容。Kensaku 会同时搜索文件名、文件内文本和语义含义,并高亮匹配的词。按 Enter 即可打开。

其他工具做不到的事
文件名搜索工具到处都有。但本地、即时、免费地读取文件内部内容的,却不多。
| 对比项 |
Kensaku |
Everything |
Listary |
PowerToys Run |
| 文件名搜索(毫秒级) |
✅ |
✅ |
✅ |
✅ |
| PDF/DOCX/EPUB 等全文搜索 |
✅ |
❌ |
❌ |
❌ |
| 截图与图片内文字(OCR) |
✅ |
❌ |
❌ |
❌ |
| 多语言与中日韩文本(自动分词) |
✅ |
❌ |
❌ |
❌ |
| 按语义搜索(“关于索引的 PDF”) |
✅ |
❌ |
❌ |
❌ |
| 自然语言时间(“上周的截图”) |
✅ |
❌ |
部分支持 |
❌ |
| AI 代理可通过 MCP 搜索 |
✅ |
❌ |
❌ |
❌ |
| 启动器行为(呼出、输入、Enter) |
✅ |
❌ |
✅ |
✅ |
| 开源(MIT) |
✅ |
❌ |
❌ |
✅ |
Spotlight 和 Raycast 很优秀,但仅限 macOS;Alfred 的内容搜索和 AI 功能是付费层级。Kensaku 是一个应用、三个平台、免费且 MIT 许可。
第一天就值得试试的三件事:
- 截图考古。 你记得在某张截图里见过那个错误。Kensaku 已经读取了像素——直接搜索错误文本即可。
- 描述,而不是回忆。 “上个月的大视频”是有效查询。无需点击过滤器。
- 给你的 AI 代理一双眼睛。 Claude 或 Cursor 可以通过 MCP 搜索同一个本地索引——只读、本地、无云。
功能特性
快速
- 在暖缓存下,约 10 万个文件的文件名搜索可在毫秒内完成。具体方法、硬件和各平台数据见性能表现。
- 输入时实时更新结果。没有单独的搜索页面。
- 增量索引:变更的文件会被自动拾取,无需全盘重新扫描。
- 关闭窗口后索引仍保持热状态,重新打开几乎即时。
找得更多
- 文件名、全文、容忍拼写错误的模糊匹配以及语义,一次搜索搞定。
- 文档与办公文件:PDF、DOCX、PPTX、XLSX、EPUB、ODT/ODS/ODP、RTF、CSV/TSV、邮件(
.eml、.msg)以及纯文本。
- 默认支持多语言与中日韩:针对中文(汉字/注音)、日文(汉字/假名)、韩文(谚文)的自定义一元 + 二元分词器,以及混合脚本边界处理。详细说明见
docs/LANGUAGES.md。
- 50+ 代码与数据格式:Rust、Python、TypeScript、Go、C/C++、Java、Shell、SQL、JSON、YAML、TOML、Dockerfile 等。
- 图片与 OCR:默认使用 PP-OCRv6(内置运行时;约 6.1 MB 模型包只需下载一次)。更高质量的 Indra 引擎(去倾斜、多脚本拉丁/中日韩/RTL/世界识别,约 27 MB 包)以及经典 Tesseract 可在设置中选择。
- 可调内容深度:默认每文件最高 100 MB、提取 4 MB 文本、48 个语义块;提供
quick / balanced / deep 预设。
精准
- 过滤与排序:最佳匹配、最新、最旧、最大、名称。
- 时间穿越:“上周二”、“3 天前”、“上周”、“今天”、“昨天”。
- 需要时可使用查询语言(见下文)。
真正的启动器
- 从托盘启动,可通过快捷键呼出。最近打开的文件按实际使用频率排序,并跨重启持久保存。
- 也可切换到桌面应用模式:普通任务栏窗口。启动器是默认设置,桌面应用可在安装或设置中一键切换。
- 空格预览(Quick Look)支持 PDF、图片和文本。网格或列表布局。完整键盘导航。
Cmd/Ctrl+Shift+L 切换布局。
与 AI 代理协作
- 兼容的代理可通过 MCP 搜索同一本地索引。默认只读。详见连接 AI 代理。
- 还支持:
find_symbol(tree-sitter 定义)、有界正则搜索、作用域根目录以及游标分页。
查询语言
用于脚本和精确搜索:
type:pdf invoice ext:md in:"~/Notes" modified:7d
size:>10mb path:"client/2026" lang:rust
name:resume content:"timeout" re:"fn \w+_test"
-draft mode:exhaustive
完整参考:docs/USAGE.md · 语言与格式支持:docs/LANGUAGES.md。
安装
从最新发布下载对应系统的安装包。
| 平台 |
下载 |
| Windows(Intel/AMD) |
kensaku_<version>_x64-setup.exe 或 kensaku_<version>_x64_en-US.msi |
| Windows(ARM,Snapdragon) |
kensaku_<version>_arm64-setup.exe 或 kensaku_<version>_arm64_en-US.msi |
| Windows 便携版 |
kensaku-portable-<version>-x64.zip(或 -arm64.zip) |
| macOS(Apple Silicon 与 Intel) |
kensaku_<version>_universal.dmg |
| Linux |
kensaku_<version>_amd64.AppImage、.deb 或 .rpm |
| Agent CLI |
kensaku-cli-{linux,macos,windows}-* |
每个发布都附带 SHA256SUMS,可用于验证下载内容。1.0.16 Windows x64 的 NSIS 安装包约 14.3 MB,MSI 约 20.1 MB;安装后的应用二进制约 36 MB。
目前构建尚未代码签名,因此 macOS 和 Windows 首次打开时会显示警告。这是独立应用的正常现象,并非问题。
- Windows: 在 SmartScreen 提示中点击更多信息 → 仍要运行。
- macOS: 打开应用后,前往系统设置 → 隐私与安全性,点击仍要打开。
完整步骤见 docs/INSTALL.md。
首次运行: 选择要索引的文件夹、排除项、启动器或桌面模式,并可选择下载 OCR 或模型包。首次扫描进行时即可开始搜索。关闭窗口后 Kensaku 会在托盘中继续运行;从托盘退出。
命令行: 每个发布都附带 kensaku-cli。
kensaku-cli search "docker error"
kensaku-cli search "invoice" --ext pdf --since 30d
kensaku-cli search "resume" --json
kensaku-cli state
kensaku-cli mcp
kensaku-cli serve --port 8765
从源码构建
git clone https://github.com/yjid/kensaku
cd kensaku
bun install
bun run tauri build
需要 Rust(stable)、Bun 1.1 或更高版本,以及对应平台的 webview 库。详见 docs/INSTALL.md。Makefile 覆盖常见任务:make dev、make build、make test、make reset。
连接 AI 代理(MCP)
要让 AI 代理接入,只需把 MCP 客户端指向 CLI:
{
"mcpServers": {
"kensaku": {
"command": "kensaku-cli",
"args": [
"mcp"
]
}
}
}
对于通过 HTTP 连接的客户端,运行 kensaku-cli serve。它仅监听本地回环,并需要存储在配置目录中的 bearer token。
响应大小有预算限制,文件内容作为数据返回,绝不会作为指令。完整指南:docs/AGENTS.md。
性能表现
速度是 Kensaku 的核心。以下所有数据均为实测;完整方法、语料、硬件和注意事项见 docs/BENCHMARKS.md。
| 项目 |
结果 |
| 文件名搜索,10 万文件(Windows 11,1.0.16,默认线程) |
平均 18 ms(最佳 8.3 ms) |
| 文件名搜索,10 万文件(Windows 11,4 线程) |
平均 3.1 ms |
| 文件名搜索,10 万文件(Linux 参考,暖缓存) |
平均 1.3 ms(最佳 0.5 ms) |
| 10 万文件的元数据 |
12.2 MB(每条目 128 B) |
| 首次运行 10.1 万混合文件(早期 Linux 参考) |
184 秒,峰值 183 MB |
| 无变更时重新索引(同一语料) |
0.56 秒 |
Windows 与 Linux 行是同一工作负载在不同机器上的结果,并非性能回退:Windows NTFS 元数据读取和杀毒软件使遍历慢得多,而 16 线程 rayon 池在 char-bloom 预过滤已使扫描很便宜的情况下增加了调度开销。同一 10 万语料下,4–8 线程平均 3–5 ms。Linux 数字是历史暖缓存参考。两者都不是跨平台“最快”声明。
同一文件夹类别,文件名搜索,每次冷进程(Linux 参考):
| 工具 |
“invoice” |
“deploy_error” |
| Kensaku(内存中,无启动) |
平均 1.3 ms |
平均 1.3 ms |
| plocate |
34 ms |
6 ms |
| fd |
109 ms |
98 ms |
这两行并非完美对比:Kensaku 的搜索是模糊的,且运行在已启动的应用中,而 plocate 和 fd 每次搜索都启动新进程。Spotlight、Everything 和 Listary 尚未测量,这些数字来自 Linux,而非 macOS 或 Windows。
内存。 内存中元数据层每个 FileEntry 为 128 字节:100,201 条目共 12.2 MB。索引本身、Tantivy 以及可选的嵌入表是分开的。在 Windows 上,关闭窗口会销毁 webview 并保持 Rust 索引热状态,因此空闲占用是索引而非完整 UI。
索引是单次遍历:每个文件只读取一次,同时喂给文件名和文本索引。工作以有界批次排队,因此大文件夹上内存保持平坦。
项目地址
https://github.com/yjid/kensaku