内容
# Search Everything (pts)
**毫秒级的 Windows 本地文件搜索 —— 为人和 AI Agent 同时设计。**
一个用 Rust 写的桌面文件搜索工具:像 Everything 一样快,但**不需要管理员权限**;像 Spotlight 一样好看;并且自带 **CLI + MCP 接口**,让 Claude Code / Cursor 等 AI Agent 直接调用你的本地文件索引。
## 下载
**[👉 Releases 页面](https://github.com/GG-hmg/search-everything/releases/latest)** 直接下载 exe,无需安装、无需管理员权限、无运行库依赖:
- `pts-app.exe`(约 6MB)— 桌面应用,双击即用,首次启动自动建立索引
- `pts.exe`(约 2MB)— 命令行 + MCP 服务器
> 首次运行如遇 Windows SmartScreen 提示,点「更多信息 → 仍要运行」(个人项目未做代码签名)。
## 为什么值得一试
| | 实测数据 |
|---|---|
| 🔍 搜索延迟 | 百万级文件索引,查询 **< 20ms** |
| 🧠 内存占用 | 每 100 万文件约 **60 MB**,GUI 整体常驻 **~36 MB** |
| ⚡ 索引速度 | 并行扫描,2.4 万文件 **0.1 秒**(NVMe 全盘约 1-2 分钟,仅首次) |
| 🔐 权限 | **无需管理员**,普通用户直接运行(不读 MFT,不装服务) |
| 📦 体积 | 单个 exe,约 5 MB,无运行时依赖(UI 用 Windows 自带 WebView2) |
索引持久化到磁盘,启动秒开;文件系统实时监听(新建/删除/改名自动更新),不用反复重扫。
## 功能
- **即时搜索** — 输入即搜,虚拟列表流畅滚动十万条结果
- **查询语言** — 子串、通配符、正则、大小、日期、类型、路径、排除,全部可组合
- **内容搜索** — `content:TODO` 直接搜文件内容(自动跳过二进制)
- **快速预览** — 按 `空格` Quick Look 式预览图片和文本,不用打开应用
- **键盘优先** — `↑↓` 选择,`Enter` 打开,`Ctrl+Enter` 在资源管理器中显示,`Ctrl+C` 复制路径
- **一键定位** — 鼠标悬停结果行尾出现定位按钮,点击(或直接右键该行)即在资源管理器中打开文件所在位置
- **过滤芯片** — 一键筛选 文档 / 图片 / 视频 / 音频 / 代码 / 压缩包
- **三种形态** — 同一个索引引擎:GUI 桌面应用 + `pts` 命令行 + MCP 服务器
## 查询语言
空格分隔的条件之间是 **AND** 关系:
| 语法 | 含义 |
|---|---|
| `report` | 文件名包含 report(不区分大小写) |
| `*.pdf` `foo?.txt` | 通配符 |
| `re:^log\d+` | 正则表达式 |
| `-draft` | 排除:文件名不含 draft |
| `ext:pdf,docx` | 扩展名过滤 |
| `size:>10mb` `size:1mb..100mb` | 大小过滤 |
| `modified:today` `modified:>2024-01-01` | 修改日期(支持 today/week/month/year/区间) |
| `kind:file` / `kind:folder` | 只要文件 / 只要文件夹 |
| `path:src` `-path:node_modules` | 路径包含 / 排除 |
| `content:关键字` | 文件内容包含 |
| `hidden:yes` | 包含隐藏文件 |
| `"two words"` | 引号保留空格 |
**组合示例**:`发票 ext:pdf modified:month size:>100kb` — 最近一个月修改的、大于 100KB 的 PDF 发票。
## 使用方式
### 1. 桌面应用
运行 `pts-app.exe`。首次启动自动索引所有本地磁盘(可在设置中改为指定目录)。
### 2. 命令行
```bash
pts 发票 ext:pdf modified:month # 人类可读输出
pts q "*.rs path:src" --json --limit 20 # JSON 输出,管道友好
pts grep "fn main" ext:rs # 内容搜索,带行号
pts index status # 索引统计
pts index rebuild # 全量重建
```
### 3. AI Agent(MCP)
`pts mcp` 是一个标准 MCP stdio 服务器,索引常驻内存、文件变化实时同步,agent 每次查询都是毫秒级。
**Claude Code 一行接入:**
```bash
claude mcp add pts -- C:\path\to\pts.exe mcp
```
**其他 MCP 客户端(Cursor、Cline 等):**
```json
{
"mcpServers": {
"pts": { "command": "C:\\path\\to\\pts.exe", "args": ["mcp"] }
}
}
```
Agent 拿到 4 个工具:
| 工具 | 用途 |
|---|---|
| `search` | 完整查询语言搜索,返回 JSON(路径/大小/时间/类型) |
| `content_matches` | 查看某个文件里匹配的行(带行号) |
| `index_status` | 索引统计 |
| `rebuild_index` | 强制重建 |
从此 agent 不用再 `dir /s` 或递归 `ls` 烧 token —— 一次工具调用直达结果。
**给 Agent 的典型任务**:
> “帮我找出 D 盘里所有超过 500MB 且半年没动过的视频文件” → `search("kind:file ext:mp4,mkv size:>500mb -modified:month path:d:\\")`
## 构建
需要 Rust(MSVC 工具链):
```bash
cargo build --release
# 产物:
# target/release/pts.exe CLI + MCP 服务器
# target/release/pts-app.exe 桌面应用
```
## 架构
```
crates/pts-core 索引 + 搜索引擎(库)
├─ 文件名统一存进连续字节 arena(原始 + ASCII 小写两份),
│ 搜索时 memchr SIMD 子串匹配,零分配、缓存友好
├─ 列式元数据(parent/size/mtime/flags),每条目 ~45 字节
├─ rayon 并行目录扫描(每目录一次锁,DirEntry 元数据零额外 syscall)
├─ notify 文件监听增量更新
└─ bincode 持久化,原子替换写入
crates/pts-cli pts.exe:CLI 子命令 + 手写 MCP JSON-RPC 服务器
src-tauri Tauri 2 桌面应用(系统 WebView2)
ui 原生 HTML/CSS/JS,零框架零构建步骤
```
## English
**Millisecond file search for Windows, built for humans and AI agents.**
- Everything-class speed without admin rights (parallel walker, no MFT reading)
- Compact arena index: ~60 MB per million files, queries < 20 ms
- Full query language: substring / glob / regex / size / date / kind / path / `content:` grep
- Quick Look-style preview (Space), keyboard-first UI
- Same engine, three faces: **GUI** (Tauri 2) + **CLI** (`pts`, `--json` for scripts) + **MCP server** (`pts mcp`) so agents like Claude Code query your disk in one tool call instead of burning tokens on recursive `ls`
```bash
claude mcp add pts -- C:\path\to\pts.exe mcp
```
## License
MIT