MikkoParkkola/nab

GitHub: MikkoParkkola/nab

nab 是一款基于 Rust 开发的 Token 优化网页抓取与多模态分析工具,为 LLM 智能体提供干净的 Markdown 输出、设备端音视频转录及 URL 变化监控。

Stars: 7 | Forks: 0

# nab [![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg)](https://github.com/MikkoParkkola/nab/actions/workflows/ci.yml) [![Crates.io](https://img.shields.io/crates/v/nab.svg)](https://crates.io/crates/nab) [![Downloads](https://img.shields.io/crates/d/nab.svg)](https://crates.io/crates/nab) [![docs.rs](https://img.shields.io/docsrs/nab)](https://docs.rs/nab) [![Rust](https://img.shields.io/badge/Rust-1.95+-orange.svg?logo=rust)](https://www.rust-lang.org) [![License: MIT + PolyForm NC](https://img.shields.io/badge/License-MIT%20%2B%20PolyForm%20NC-yellow.svg)](LICENSE.md) [![MCP Protocol](https://img.shields.io/badge/MCP-2025--11--25-blueviolet.svg)](https://modelcontextprotocol.io) [![nab MCP server](https://glama.ai/mcp/servers/MikkoParkkola/nab/badges/score.svg)](https://glama.ai/mcp/servers/MikkoParkkola/nab) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_MCP-0078d4?logo=visualstudiocode)](https://insiders.vscode.dev/redirect/mcp/install?name=nab&config=%7B%22command%22%3A%22nab-mcp%22%7D) [![Install in Cursor](https://img.shields.io/badge/Cursor-Install_MCP-black?logo=cursor)](cursor://anysphere.cursor-deeplink/mcp/install?name=nab&config=%7B%22command%22%3A%22nab-mcp%22%7D) Token 优化的 web 抓取器 + 多语言 ASR + URL 监视器。兼容 MCP 2025-11-25 标准。基于 Rust 开发。优先支持 macOS arm64,支持跨平台。 ![demo](https://static.pigsec.cn/wp-content/uploads/repos/cas/6e/6e22279e795bf685345a94ba1853438c42b7e43e0fe57996539cf8219a16be6f.gif) nab 是一个单一的 Rust 二进制程序,它在三个方面做得非常出色:它能将任何 URL **抓取**为干净的 markdown(使用你真实的浏览器 cookies 和反机器人规避机制),它能利用设备端的多语言 ASR 和说话人分离技术**分析**任何音视频文件,并且它能**监视**任何 URL 的变化,并在内容发生变动时推送通知。所有操作均在本地运行。默认情况下无需配置任何 API 密钥。输出格式专为 LLM 上下文窗口量身定制。 ## 为什么选择 nab - **设计上 Token 极简。** nab 只返回 LLM 真正需要的内容 —— 干净的 markdown,基于 BM25-lite 的查询聚焦提取,以及结构感知的 token 预算 —— 从而减少网络研究的 token 成本,而不是将原始 HTML 直接倾倒到你的上下文窗口中。 - **多模态,完全在设备端运行。** 转录并分离任何音视频文件(在 Apple Neural Engine 上运行 FluidAudio / Parakeet TDT v3 —— 在 2 小时的片段上达到 131 倍实时速度,支持 25 种欧盟语言,具备词级时间戳,可选 Qwen3-ASR 以支持 zh/ja/ko/vi),并通过 Apple Vision 进行图像 OCR(15 种语言,约 10–50 毫秒)。无云端,无需 API 密钥。 - **经认证的访问能力。** 真实的浏览器 cookies、支持 TOTP/MFA 的 1Password 自动登录、WebAuthn passkeys、指纹欺骗和 WAF 规避 —— 使用与访问公共 URL 相同的命令,即可访问内部仪表板、SaaS 应用程序和付费研究报告。 - **监视网络。** 通过 MCP 资源订阅任何 URL —— 条件 GET,语义 diff,自适应退避。相当于全网的 RSS。 - **提示注入防御,默认开启。** 隐藏的、针对你的 AI 的指令会展示给你,而不会被你的模型静默执行 —— 参见 [安全性](#security-prompt-injection-defense)。 所有这些都打包在一个单一的本地 Rust 二进制文件中。没有云端后端,默认无需 API 密钥,输出专为 LLM 上下文窗口设计。 ## 快速开始 **告诉你的 AI 助手**(推荐): 你的代理将自动安装二进制文件、完成自身配置并开始抓取。适用于 Claude Code、Cursor、Windsurf 以及任何拥有终端访问权限的 AI。 **或者手动安装并尝试:** ``` brew install MikkoParkkola/tap/nab # install nab fetch https://news.ycombinator.com # fetch as markdown nab models fetch fluidaudio # download ASR model nab analyze interview.mp4 --diarize # transcribe + identify speakers nab watch add https://status.openai.com --interval 5m # subscribe to changes ``` ## 功能 | 命令 | 功能描述 | |---------|--------------| | `nab fetch ` | 将任何 URL 抓取为干净的 markdown。支持 HTTP/3,浏览器 cookie 注入(Brave / Chrome / Firefox / Safari / Edge / Dia),1Password 自动登录,指纹欺骗,抓取时通过 YARA-X 脱敏处理提示注入/数据泄露签名,包含 12 个站点提供程序。MCP fetch 还支持查询聚焦提取、可读性处理和 token 预算。 | | `nab browser ` | 对于 JS 重度依赖的页面,通过配置的 Chrome DevTools Protocol WebSocket 端点进行显式选择的浏览器渲染。不内置 Chromium,且默认情况下 `nab fetch` 绝不自动启动浏览器或远程提供程序。 | | `nab analyze ` | 转录并进行说话人分离。在 Apple Neural Engine 上运行 FluidAudio (Parakeet TDT v3),在 2 小时的片段上达到 131 倍实时速度,具备词级时间戳,支持 25 种欧盟语言,可选 Qwen3-ASR 以支持 zh/ja/ko/vi,可通过 MCP sampling 进行可选的主动阅读。 | | `nab watch add ` | 监控 URL 并通过可订阅的 MCP 资源推送通知。相当于全网的 RSS。支持条件 GET,语义 diff,自适应退避。 | | `nab models fetch ` | 持久化安装推理模型二进制文件。支持 `fluidaudio`(macOS Apple Silicon 默认)、`sherpa-onnx`(跨平台 Parakeet TDT,CPU 上约 30 倍实时速度)和 `whisper`(通用回退方案,whisper-large-v3-turbo,99 种语言)。 | | `nab-mcp` | MCP 2025-11-25 服务器。支持 stdio + Streamable HTTP。具备 12 个工具、4 个提示词、2+N 个资源,包含结构化日志、sampling、roots 和 elicitation。 | | `nab::content::ocr` | Apple Vision OCR 引擎。支持 15 种语言。由 Apple Neural Engine 加速。每张图片约需 10-50 毫秒。仅限 macOS。 | ## 安全性:提示注入防御 网页 increasingly 携带**针对 AI 而非针对你**的指令 —— 隐藏在 HTML 注释、`display:none` / `aria-hidden` 文本、`data-ai` / `data-mcp` / `data-agent` 属性 payload 或 WebMCP 清单中。如果使用普通的工具抓取此类页面,这些隐藏指令将直接落入你模型的上下文中,并可能被执行。这就是 [提示注入即网络钓鱼](https://www.theregister.com/research/2026/05/29/chatgpt-prompt-injection-turns-web-pages-into-phishing-lures/5248137) (prompt-injection-as-phishing) 类别的攻击。 nab 将每个抓取的页面都视为恶意输入,并在**任何内容到达你的代理之前**运行两个本地、非联网的防护 —— 默认开启,无需 flag,无需设置: - **安全摄入 (Secure Ingestion) 防护** —— 检测并剥离人类不可见的、针对机器的标记(针对 AI 的注释、隐藏的 `display:none` / `aria-hidden` 文本、仅针对代理的 `data-*` payload、WebMCP 广告),并以 `Info` / `Warn` / `Block` 的严重程度**报告**每次检测,以便你看到页面*试图*告诉你的代理什么,而不是让其被静默执行。 - **YARA-X 签名防护** —— 扫描每个返回的主体,查找提示注入、数据泄露、秘密泄漏和混淆签名,默认情况下会脱敏匹配的部分。设置 `NAB_YARA_ACTION=refuse` 可直接阻止抓取(或使用 `NAB_YARA_BYPASS=1` 作为经过审计的紧急绕过选项)。 最终效果:隐藏指令对你变得**可见,而不是被你的模型执行** —— 这是让你将代理指向 `nab fetch` 而不是内置 web 抓取工具的有力理由。 ## 安装 ### Homebrew (macOS,推荐) ``` brew tap MikkoParkkola/tap brew install nab ``` ### 预编译二进制文件(无需 Rust 工具链) **大多数用户选择此方式** —— 这些是可直接运行的二进制文件;无需在你的机器上进行编译。 如果你有 `cargo-binstall`,它会自动获取正确的预编译二进制文件: ``` cargo binstall nab ``` 否则直接从 [GitHub Releases](https://github.com/MikkoParkkola/nab/releases/latest) 下载。下方每个平台均同时提供 `nab` CLI 和 `nab-mcp` 服务器,并附带 `checksums-sha256.txt`: | 平台 | CLI 二进制文件 | MCP 服务器二进制文件 | |----------|------------|-------------------| | macOS Apple Silicon | `nab-aarch64-apple-darwin` | `nab-mcp-aarch64-apple-darwin` | | macOS Intel | `nab-x86_64-apple-darwin` | `nab-mcp-x86_64-apple-darwin` | | Linux x86_64 (glibc) | `nab-x86_64-unknown-linux-gnu` | `nab-mcp-x86_64-unknown-linux-gnu` | | Linux x86_64 (静态 musl) | `nab-x86_64-unknown-linux-musl` | `nab-mcp-x86_64-unknown-linux-musl` | | Linux ARM64 (glibc) | `nab-aarch64-unknown-linux-gnu` | `nab-mcp-aarch64-unknown-linux-gnu` | | Linux ARM64 (静态 musl) | `nab-aarch64-unknown-linux-musl` | `nab-mcp-aarch64-unknown-linux-musl` | | Windows x64 | `nab-x86_64-pc-windows-msvc.exe` | `nab-mcp-x86_64-pc-windows-msvc.exe` | macOS Apple Silicon 的安装示例(请替换为你所使用平台的文件名): ``` shasum -a 256 -c checksums-sha256.txt --ignore-missing chmod +x nab-aarch64-apple-darwin mv nab-aarch64-apple-darwin /usr/local/bin/nab xattr -d com.apple.quarantine /usr/local/bin/nab 2>/dev/null || true ``` ### 从 crates.io 安装(从源码编译) 在本地构建 nab —— 需要 Rust 工具链(1.95 或更高版本),耗时几分钟: ``` cargo install nab ``` ### 从源码安装 ``` git clone https://github.com/MikkoParkkola/nab.git cd nab cargo install --path . ``` ### 避免重复安装 如果你通过多个渠道安装了 `nab`(例如同时使用了 Homebrew tap **和** `cargo install`),生效的副本取决于 `PATH` 的顺序。在许多 配置中,`/opt/homebrew/bin` 排在 `~/.cargo/bin` 之前,因此通过 Homebrew 安装的二进制文件可能会覆盖较新的、通过 cargo 安装的版本 —— 此时 `nab --version` 将报告较旧的版本。 运行内置诊断工具,查看你的 `PATH` 中的每个 `nab`、哪个生效,以及它们的版本: ``` nab doctor ``` 如果你 `PATH` 上的二进制文件是旧版本,其 `doctor` 命令可能早于此命令存在;请通过完整路径调用较新的安装版本进行诊断,例如 `~/.cargo/bin/nab doctor`。要解决此问题,请保留单一的安装渠道 (`brew uninstall nab` 或 `cargo uninstall nab`),或者重新排序 `PATH`,将你期望的安装目录放在最前面。 ## MCP 配置 添加到你的 MCP 客户端配置(Claude Desktop, Cursor, Windsurf 等)中: ``` { "mcpServers": { "nab": { "command": "nab-mcp" } } } ``` 或者使用自动安装程序: ``` nab mcp install # Claude Desktop (default) nab mcp install --client claude-code # Claude Code nab mcp install --client cursor # Cursor nab mcp install --client windsurf # Windsurf nab mcp install --client codex # OpenAI Codex CLI nab mcp install --client vscode # VS Code Copilot nab mcp install --client zed # Zed nab mcp install --dry-run # preview without writing ``` 还支持:`gemini`、`amazon-q`、`lm-studio`。 请参阅下方的 [MCP 集成](#mcp-integration) 以获取完整的工具、功能和 HTTP transport 列表。 ## Claude Code 插件 本代码库在 [plugin/](plugin/README.md) 中包含一个本地 Claude Code 插件。它将 nab MCP 自动注册与 Claude Elite 的 `research`、`url-insight`、`wayback`、`ia` 和 `oreilly` 技能捆绑在一起。 ``` claude --plugin-dir ./plugin ``` 该插件为 `fetch`、经过 Brave cookie 认证的抓取、存档检索和多来源研究公开了 `/nab` 工作流形态。它将 nab 注重认证的路径放在首位和中心位置:对于现有的浏览器会话使用 `nab fetch --cookies brave `,对于 1Password/TOTP 流程使用 `nab fetch --1password `。 ## 用法 ### 抓取 ``` # 基础 fetch — 自动检测浏览器,返回 markdown nab fetch https://example.com # 使用特定浏览器的 cookies nab fetch https://github.com/notifications --cookies brave # 1Password 自动登录(支持 TOTP/MFA) nab fetch https://internal.company.com --1password # Google Workspace (Docs, Sheets, Slides) 含评论 nab fetch --cookies brave "https://docs.google.com/document/d/DOCID/edit" # 输出带置信度分数的 JSON nab fetch https://example.com --format json # 带并行性的批量 fetch nab fetch --batch urls.txt --parallel 8 # 针对重 JS 页面的显式浏览器渲染 NAB_BROWSER_CDP_WS=wss://... nab browser https://example.com nab fetch https://example.com --render --browser-cdp-url wss://... ``` `fetch` 的常用 flags: | Flag | 描述 | |------|-------------| | `--cookies ` | `auto`, `brave`, `chrome`, `firefox`, `safari`, `edge`, `none` | | `--1password` / `--op` | 1Password 凭证查找 + 自动登录 | | `--proxy ` | HTTP 或 SOCKS5 代理 | | `--format ` | `full`(默认)、`compact`、`json` | | `--raw-html` | 跳过 markdown 转换 | | `--readability` | 强制对通用 HTML 页面进行可读性提取 | | `--max-output-t ` | 应用输出 token 封装;返回的 markdown 会保留 80% 的余量 | | `--remote-fallback` | 选择开启通过 `r.jina.ai` 的远程轻量内容恢复;避免用于内部、已认证或敏感的 URL | | `--render` / `--interactive` | 选择开启已配置的 CDP 浏览器渲染以处理 JS 重度依赖的页面;需要 `NAB_BROWSER_CDP_WS` 或 `--browser-cdp-url` | | `--diff` | 显示自上次抓取以来的变化 | | `-X ` `-d ` | HTTP 方法 + body | | `-o ` | 将 body 写入文件 | MCP `fetch` 额外支持 `focus`、`readability`、`max_tokens` 和 `session` 参数,用于查询聚焦提取、可读性提取、结构感知的 token 预算以及持久化加密 cookie 会话。 ### 分析 `nab analyze` 在本地转录音频和视频文件。macOS arm64 上的默认后端是 FluidAudio,它在 Apple Neural Engine 上运行 Parakeet TDT v3。 ``` # 下载 ASR 模型(约 600 MB,一次性) nab models fetch fluidaudio # 转录视频 nab analyze interview.mp4 # 添加说话人分离 (PyAnnote community-1) nab analyze interview.mp4 --diarize # 强制语言提示 (BCP-47) nab analyze podcast.mp3 --language fi # 词级时间戳 nab analyze talk.mp4 --word-timestamps # 主动阅读:nab 使用 MCP sampling 来查找音频中提到的引用 nab analyze interview.mp4 --active-reading # 暴露说话人 embeddings 以便与 hebb 的声纹数据库进行匹配 nab analyze interview.mp4 --diarize --include-embeddings # 输出 JSON nab analyze podcast.mp3 --format json ``` 来自时长为 2 小时 09 分的英语音频文件的真实数据(Karen Hao 采访,MacBook Pro M 系列): | 指标 | 数值 | |--------|-------| | 挂钟时间 | 59.6 秒 | | 实时倍率 | 131 倍 | | FluidAudio 平均置信度 | 97.18 % | | 音频提取 (ffmpeg) | 约 650 倍实时速度 | | 后端 | 平台 | 语言 | 说话人分离 | |---------|----------|-----------|-------------| | `fluidaudio`(macOS arm64 默认) | macOS arm64 | 25 种欧盟语言,可通过 Qwen3-ASR 添加 zh/ja/ko/vi (可选) | PyAnnote community-1 | | `sherpa-onnx` | Linux/x86, macOS, Windows | Parakeet ONNX, 25+ 种语言 | sherpa-onnx pyannote-seg-3.0 | | `whisper-rs` | 通用回退 | whisper-large-v3-turbo, 99 种语言 | 无 | ### 监视 `nab watch` 将任何 URL 转换为可订阅的资源。当内容发生变化时,MCP 客户端会收到 `notifications/resources/updated` 通知。 ``` nab watch add https://news.ycombinator.com --interval 10m nab watch add https://example.com/pricing --interval 1h --selector "table.pricing" nab watch add https://api.openai.com/status --interval 5m --notify-on regression nab watch list nab watch logs nab watch remove ``` 每个监视的选项: | Flag | 默认值 | 描述 | |------|---------|-------------| | `--interval ` | 1 小时 | 轮询间隔(`5m`, `1h`, `24h`) | | `--selector ` | 无 | 用于将 diff 限定在单个元素的 CSS 选择器 | | `--notify-on ` | `any` | `any`, `regression`, `semantic` | | `--diff ` | `semantic` | `text`, `semantic`, `dom` | 轮询器使用条件 GET(`If-None-Match`, `If-Modified-Since`),因此 304 响应实际上没有成本。连续失败五次的监视会自动静音。自适应退避适用于 429 和 503 状态码。 ### 模型 ``` nab models list # show installed model versions nab models fetch fluidaudio # download FluidAudio binary + Parakeet weights nab models update fluidaudio # check for upstream updates nab models verify fluidaudio # checksum + smoke test ``` `whisper` 和 `sherpa-onnx` 均作为跨平台回退方案,与 macOS 默认的 `fluidaudio` 后端一起提供。 ## MCP 集成 `nab-mcp` 是一个原生 Rust MCP 服务器。它通过 stdio(默认)或 Streamable HTTP 运行。完全兼容 `2025-11-25` 版本的 MCP 协议。 ### 快速设置(推荐) ``` nab mcp install # Claude Desktop (default) nab mcp install --client claude-code # Claude Code nab mcp install --client cursor # Cursor nab mcp install --client windsurf # Windsurf nab mcp install --client codex # OpenAI Codex CLI nab mcp install --client vscode # VS Code Copilot nab mcp install --client zed # Zed nab mcp install --dry-run # preview what would change ``` 还支持:`gemini`、`amazon-q`、`lm-studio`。这会自动检测 `nab-mcp` 的二进制路径,备份你现有的配置,并添加 `nab` 条目。安装后请重启你的客户端。 ### 手动设置 添加到你的 MCP 客户端配置中(`~/.config/claude/mcp.json` 或等效文件): ``` { "mcpServers": { "nab": { "command": "nab-mcp" } } } ``` ### HTTP transport ``` nab mcp serve --http 127.0.0.1:8765 # 或直接: nab-mcp --http 127.0.0.1:8765 ``` 默认绑定到 localhost。根据规范强制执行 Origin 检查和 `MCP-Protocol-Version` 标头验证。 ### MCP 功能 | 功能 | 状态 | |-----------|--------| | 工具 | 12 个工具,带有结构化输出 schema、annotations、校验错误 | | 提示词 | 4 个提示词(`fetch-and-extract`, `multi-page-research`, `authenticated-fetch`, `match-speakers-with-hebb`) | | 资源 | 2 个静态 + N 个动态监视资源,均可订阅 | | 日志 | 带有 RFC 5424 级别的 `notifications/message` | | Sampling | nab 回调到宿主 LLM 进行主动阅读、焦点提取、表单自动填充 | | Roots | 查询 `roots/list` 用于工作区范围的保存 | | Elicitation | 用于 OAuth/SSO 的表单模式 + URL 模式 | | 参数补全 | 用于工具参数的 `completion/complete` | | 服务器图标 | 明亮 + 暗黑模式 SVG | | Transports | stdio + Streamable HTTP(可恢复,会话范围) | 12 个 MCP 工具: | 工具 | 描述 | |------|-------------| | `fetch` | 抓取 URL → markdown,带有 cookies, focus, token 预算, 会话 | | `fetch_batch` | 具有任务增强异步执行能力的并行多 URL 抓取 | | `submit` | 提交带有 CSRF + 智能字段提取的表单 | | `login` | 1Password 自动登录,支持 TOTP | | `auth_lookup` | 查找 URL 对应的 1Password 凭证 | | `fingerprint` | 生成浏览器指纹配置 | | `validate` | 运行验证测试套件 | | `benchmark` | 对 URL 抓取进行计时并统计 | | `analyze` | 转录并进行音视频说话人分离 | | `watch_create` | 创建 URL 监视并订阅 | | `watch_list` / `watch_remove` | 管理监视 | ## 站点提供程序 nab 可检测 12 个平台的 URL,并使用 API 或稳定的结构化页面数据,而不是大规模的 HTML 抓取。 | 提供程序 | URL 模式 | 方法 | |----------|-------------|--------| | Twitter / X | `x.com/*/status/*` | FxTwitter API | | Reddit | `reddit.com/r/*/comments/*` | JSON API | | Hacker News | `news.ycombinator.com/item?id=*` | Firebase API | | GitHub | `github.com/*/*/issues/*`, `*/pull/*` | REST API | | Google Workspace | Docs, Sheets, Slides | Export API + OOXML | | YouTube | `youtube.com/watch?v=*`, `youtu.be/*` | oEmbed | | Wikipedia | `*.wikipedia.org/wiki/*` | REST API | | StackOverflow | `stackoverflow.com/questions/*` | API | | Mastodon | `*/users/*/statuses/*` | ActivityPub | | LinkedIn | `linkedin.com/posts/*` | oEmbed | | Instagram | `instagram.com/p/*`, `*/reel/*` | oEmbed | | Substack | `*.substack.com/p/*`, `substack.com/*/p/*` | 文章 DOM (`.available-content`) | 如果没有提供程序匹配,nab 会回退到标准的 HTML 抓取 + markdown 转换。 ## 架构 nab 围绕一小组正交的子系统构建:`cmd/` (CLI)、`bin/mcp_server/` (MCP server)、`content/` (HTML / PDF / OCR pipeline)、`analyze/` (ASR + diarization + vision)、`watch/` (URL 监视 + 订阅)、`auth/` (cookies + 1Password + WebAuthn)、`site/`(特定站点提供程序),以及共享的 `AcceleratedClient` (HTTP/3 + 连接池 + 指纹存储)。 参见: - [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) —— 完整的模块图和数据流 - [docs/sovereign-stack.md](docs/sovereign-stack.md) —— nab 如何与 hebb 结合,组成一个本地优先的多模态技术栈 - [docs/getting-started.md](docs/getting-started.md) —— 新手入门 ### 设计说明 `docs/design/` 目录跟踪了最近的设计提案: - [analyze-v2.md](docs/design/analyze-v2.md) —— 多语言 ASR + 说话人分离 + 视觉 pipeline - [url-watch-resources.md](docs/design/url-watch-resources.md) —— URL 监视作为 MCP 可订阅资源 - [active-reading.md](docs/design/active-reading.md) —— 通过 MCP sampling 进行主动阅读 - [mcp-spec-closure.md](docs/design/mcp-spec-closure.md) —— 弥合最后的 MCP 2025-11-25 规范差距 ## 配套工具 nab 是主权多模态技术栈的一半。另一半是 [hebb](https://github.com/MikkoParkkola/hebb),一个受神经科学启发的记忆 MCP 服务器。组合示例: - `nab analyze --diarize --include-embeddings` → `hebb voice_match` → 用名字标记说话人 - `nab fetch URL` → `hebb kv_set` → 个人主权网络记忆 - `nab watch add URL` → `hebb kv_set` (更新时) → 任何网页变化的时间序列 有关完整的组合故事,请参见 [docs/sovereign-stack.md](docs/sovereign-stack.md)。 ## 配置 nab 无需配置文件。它使用智能默认值:自动检测浏览器 cookies、随机化指纹,并输出 markdown。 持久化状态位于 `~/.nab/`: | 路径 | 用途 | |------|---------| | `~/.nab/snapshots/` | 用于 `--diff` 变化检测的内容快照 | | `~/.nab/sessions/` | AES-256-GCM 加密的命名会话 jar (非 Windows) | | `~/.nab/session-key` | 用于会话加密的本地生成主密钥 (非 Windows) | | `~/.nab/fingerprint_versions.json` | 缓存的浏览器版本(每 14 天自动更新) | | `~/.local/share/nab/watches/` | URL 监视状态 | | `~/.local/share/nab/models/` | 已安装的推理模型二进制文件 | 可选的插件配置位于 `~/.config/nab/plugins.toml`。插件示例请参见 [docs/getting-started.md](docs/getting-started.md)。 ### 环境变量 | 变量 | 用途 | |----------|---------| | `HTTPS_PROXY` / `https_proxy` | HTTPS 代理 URL | | `HTTP_PROXY` / `http_proxy` | HTTP 代理 URL | | `ALL_PROXY` / `all_proxy` | 用于所有协议的代理 | | `RUST_LOG` | 日志级别(例如 `nab=debug`) | | `PUSHOVER_USER` / `PUSHOVER_TOKEN` | 用于 MFA 的 Pushover 通知 | | `TELEGRAM_BOT_TOKEN` / `TELEGRAM_CHAT_ID` | 用于 MFA 的 Telegram 通知 | ## 库用法 ``` use nab::AcceleratedClient; #[tokio::main] async fn main() -> anyhow::Result<()> { let client = AcceleratedClient::new()?; let html = client.fetch_text("https://example.com").await?; println!("Fetched {} bytes", html.len()); Ok(()) } ``` ## 要求 - **Rust 1.95+**,用于从源码构建 - **ffmpeg**,用于 `analyze` 和 `stream` 命令:`brew install ffmpeg` - **1Password CLI**(可选,用于凭证集成):参见 [1Password 文档](https://developer.1password.com/docs/cli/get-started/) ## 贡献 有关开发设置、代码风格指南、测试说明和 pull request 流程,请参见 [CONTRIBUTING.md](CONTRIBUTING.md)。 ## 负责任地使用 此工具包含浏览器 cookie 提取和指纹欺骗功能。这些功能旨在用于合法用例 —— 访问你自己的认证内容、自动化测试、以及你已获得授权的网站。请负责任地使用。 ## 故障排除 **MCP 服务器无法连接?** 在终端中直接运行 `nab-mcp` 以查看错误。使用 `which nab-mcp` 验证二进制文件是否存在。如果通过 `cargo install nab` 安装,`nab` 和 `nab-mcp` 都应该在你的 `$PATH` 中。 **Cookie 提取失败?** 在 macOS 的 **系统设置 > 隐私与安全性 > 完全磁盘访问权限** 中,授予你的终端“完全磁盘访问”权限。浏览器 cookies 存储在受保护的目录中。使用 `--cookies brave` 指定特定的浏览器。 **找不到 ASR 模型?** 运行 `nab models fetch fluidaudio` 下载模型(约 542 MB)。模型目录是 `~/.nab/models/`。使用 `nab models list` 查看已安装的内容。 **抓取返回 HTML 而不是 markdown?** 某网站会阻止自动访问。尝试使用 `nab fetch URL --cookies brave` 来使用你的浏览器会话,或者对于需要登录的网站使用 `nab fetch URL --1password`。 **从 JavaScript 应用中抓取返回的内容过少?** 默认情况下 `nab fetch` 保持本地优先且仅支持 HTTP。对于需要 DOM 执行的页面,请使用 `NAB_BROWSER_CDP_WS` 或 `--browser-cdp-url` 配置外部 CDP 端点,然后运行 `nab browser URL` 或 `nab fetch URL --render`。远程浏览器提供程序可能会接收到 URL 和渲染后的页面内容;本地浏览器 cookies 不会自动提供给远程浏览器。 **YARA-X 防护脱敏了抓取内容?** `nab fetch` 和 MCP `fetch` 默认情况下会在保存或返回内容之前扫描返回的 body。`NAB_YARA_ACTION=refuse` 会阻止抓取而不是脱敏。`NAB_YARA_BYPASS=1` 是一个经过审计的紧急退出选项。 **在 watch 时出现 "too many open files"?** 增加 ulimit:`ulimit -n 4096`。macOS 的默认限制 (256) 对于许多并发监视来说太低了。 ## 生态系统 nab 是一整套 MCP 工具的一部分: | 工具 | 描述 | |------|-------------| | [mcp-gateway](https://github.com/MikkoParkkola/mcp-gateway) | 通用 MCP 网关 —— 紧凑的 12-15 个工具表面可替换 100 多个注册 | | [trvl](https://github.com/MikkoParkkola/trvl) | AI 旅行代理 —— 36 个用于航班、酒店、地面交通的 MCP 工具 | | **[nab](https://github.com/MikkoParkkola/nab)** | **Web 内容提取 —— 通过 cookies + 反机器人绕过抓取任何 URL** | | [axterminator](https://github.com/MikkoParkkola/axterminator) | macOS GUI 自动化 —— 通过 Accessibility API 提供 34 个 MCP 工具 | ## 许可证 自 v0.9.0 起,nab 采用**双重许可**: | 范围 | 许可证 | 文件 | |-------|---------|------| | 核心抓取 / 分析 / 监视 / MCP 服务器 / 公共 web 抓取 | MIT | [LICENSE](LICENSE) | | 指定的企业版模块(认证访问 + 反机器人) | PolyForm Noncommercial 1.0.0 | [LICENSE-EE.md](LICENSE-EE.md) | EE 指定的路径(每个文件都带有 `// SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0`): - `src/auth/` —— 1Password、WebAuthn 和浏览器 cookie 注入(高级认证访问) - `src/fingerprint/` —— 浏览器指纹欺骗(反机器人规避) - `src/waf/` —— WAF 挑战处理 - `src/site/` —— 特定站点提供程序集成(专有领域知识) - `src/security/` —— 安全摄入防护,用于剥离针对机器的 HTML 指令和隐藏的元数据 - `crates/nab-yara-engine/` —— 抓取时的 YARA-X 签名防护,用于处理提示注入、数据泄露、密钥和混淆 **实践中的意义**: - 对于非商业用途,可免费使用、修改和再分发。 - EE 模块的商业用途需要单独的商业许可证。 - 公司可以通过 [GitHub Sponsors](https://github.com/sponsors/MikkoParkkola) 购买标准的商业使用许可证,价格为每个命名项目每月 500 欧元。 - 有关商业用途、fork、封装器、共享服务和托管服务部署,请参见 [COMMERCIAL.md](COMMERCIAL.md)。 - v0.9.0 之前的所有版本均完全保留 MIT 许可证,并永远保持 MIT 许可。
标签:LLM上下文处理, Markdown, MCP, Rust, 可视化界面, 网络流量审计, 语音识别, 通知系统