关于 auditreach
auditreach 是面向合规研究和 AI Agent 的 Reddit、YouTube 搜索命令行工具,使用自有 API 凭据访问官方 API。每次查询都会写入可验证的哈希链审计日志,支持 npm 和 Python 包。
主要功能
- 01通过官方 API 搜索 Reddit 和 YouTube
- 02使用自有凭据并安全保存
- 03为查询记录哈希链审计日志
- 04验证本地日志是否被篡改
- 05提供结构化 JSON 搜索结果
适用场景
- 01为研究 Agent 搜集 Reddit 或 YouTube 内容
- 02追溯数据查询的平台、范围和依据
- 03验证本地审计记录完整性
- 04在脚本中处理结构化搜索结果
MCP 相关
MCP 服务公开 `search`、`auth_status` 和 `verify_log` 三个工具,分别用于搜索、验证凭据状态和检查审计日志。凭据设置与清除不通过 MCP 提供。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| after | any | 否 | |
| query | any | 否 | |
| since | any | 否 | |
| before | any | 否 | |
| output | any | 否 | |
| channel | any | 否 | |
| platform | string | 是 | |
| subreddit | any | 否 | |
| max_results | any | 否 |
详细介绍
auditreach
安装 • 功能介绍 • 快速开始 • 命令 • 安全性 • 常见问题
让你的 AI Agent 仅使用官方 API 和你自己的密钥来研究 Reddit 和 YouTube,并记录日志,准确证明你查询了什么,以及查询为何获准。

安装
auditreach 提供两个独立且同等重要的一等公民包:一个 npm
包(本仓库,JavaScript/TypeScript),以及一个
PyPI 包(python/,
Python)。两者都针对相同的官方 Reddit/YouTube API,采用相同的哈希链算法和 BYOK 模式。选择适合你工具链的包,也可以两个都安装。
npm:
npx auditreach-cli search --platform reddit --query "your query"
也可以全局安装:
npm install -g auditreach-cli
auditreach search --platform reddit --query "your query"
pip:
pip install auditreach-cli
auditreach search --platform reddit --query "your query"
请参阅 python/README.md 了解 Python 专属用法, 包括此发行版新增的通过环境变量提供 BYOK 凭据的方式(适用于无头 CI/Agent 沙盒)——npm 包只会将凭据存储在 操作系统密钥链中。
如果你想先阅读或修改代码,也可以按相同方式从源代码构建:
git clone https://github.com/RudrenduPaul/auditreach.git
cd auditreach
npm install
npm run build
node dist/cli.js search --platform reddit --query "your query"
功能介绍
node dist/cli.js search --platform reddit --query "agent memory poisoning" --subreddit MachineLearning
AuditReach — 官方 API 研究命令行工具
平台:Reddit | 认证:OAuth script-app 授权,只读,公开 subreddit 范围
正在获取……(官方 API,支持速率限制)
✓ 返回 14 条结果(Reddit API 条款——公开内容、官方 API、只读 script-app 凭据)
结果(14)
[1] “人们如何测试长期运行的 Agent 是否存在记忆投毒?”
u/some_researcher · 2026-07-05T14:22:00.000Z
https://reddit.com/r/MachineLearning/comments/...
...
已写入审计日志条目:ar_2026-07-12_9f3c2a
同意依据:Reddit API 条款——公开内容、官方 API、只读 script-app 凭据
完整结果:./auditreach-results-2026-07-12.json
完整审计轨迹:./auditreach.log.jsonl
auditreach.log.jsonl 中的每条记录都采用哈希链进行链接——每条记录的哈希根据其自身内容计算,下一条记录会引用该哈希。编辑、删除或重新排序记录都会破坏哈希链:
$ node dist/cli.js verify-log
正在验证 ./auditreach.log.jsonl...
✓ 哈希链完整:14 条记录,无缺失,未检测到篡改。
# 有人手动编辑日志文件中的一行后:
$ node dist/cli.js verify-log
正在验证 ./auditreach.log.jsonl...
✗ 哈希链在第 3 条记录(ar_2026-07-12_9f3c2a)处断裂:记录 ar_2026-07-12_9f3c2a 的哈希与其自身内容不
匹配——该记录写入后曾被编辑

对比
| auditreach | Agent-Reach | snoowrap | |
|---|---|---|---|
| 访问模式 | 仅官方 API,自备密钥 | 导入 Cookie/会话,“零 API 费用” | 官方 API,自备密钥 |
| 平台覆盖范围 | Reddit、YouTube | Twitter、Reddit、YouTube、GitHub、Bilibili、XiaoHongShu | 仅 Reddit |
| 同意/审计日志 | 哈希链式、逐查询、本地 | 无 | 无 |
| 维护状态 | 活跃(此版本) | 活跃,65k+ 星标 | 自 2023 年 2 月起已归档 |
| 许可证 | Apache 2.0 | MIT | MIT |
| 运行时依赖(Reddit 客户端) | 0——原生 fetch | 不适用(基于 Python 和浏览器会话) | request、request-promise、ws(均已弃用) |
数据直接根据各仓库公开的 GitHub 元数据测得;依赖对比则根据本文撰写时 snoowrap 自己发布的 package.json 测得。任何人都可以通过 gh api repos/<owner>/<repo> 复现。
我们最初基于 Node 生态中使用最广泛的 Reddit API 封装库 snoowrap 来构建 auditreach 的 Reddit 客户端。安装它会引入 request、request-promise、form-data 和 har-validator,而这条依赖链目前带有 2 个严重、2 个高危和 5 个中危安全公告(共 9 个,根据 npm audit),snoowrap 无法修复其中任何一个,因为该项目自 2023 年起已归档。我们将 Reddit 客户端重写为直接基于 fetch 的 OAuth2 客户端,使用 Reddit 自己文档化的 REST 端点:功能相同,不含这些 CVE,且该客户端没有额外的运行时依赖。请参阅安全性,了解 auditreach 当前自身的 npm audit 状态。
auditreach 的存在意义
我们曾与一家咨询公司交流,他们有一个 AI 研究 Agent,会提取社交媒体情绪信息,用于客户报告。它一直运行良好,直到客户的法务团队书面询问,这些数据收集行为依据的是什么授权。坦诚的回答是“浏览器 Cookie 会话”,因为他们使用的工具通过导入已登录的会话进行身份验证,并像真实用户一样抓取数据。这确实可行。但这个回答无法写进合规备忘录,而且这正是 Reddit 于 2025 年起诉 Anthropic 和 SerpApi 的模式,也正是 Pushshift 的公共 API 访问权限早在 2024 年就被 Reddit 关闭的原因。
Agent-Reach 并不是一款糟糕的工具。它确实很受欢迎(65k+ stars),因为基于 Cookie 的抓取确实能覆盖比任何官方 API 都更广的范围,而且 API 成本为零。但“覆盖范围更广”和“某家代理机构的客户能通过合规审查”是两道不同的门槛,而专门为跨过第二道门槛而打造的工具还不存在。
auditreach 就是我们希望能有的 CLI。它只通过 Reddit 和 YouTube 的官方文档化 API 与它们通信,使用你自己的 API 密钥——绝不使用共享密钥池;而且每次查询都会在本地审计日志中写入一条哈希链记录:使用了哪个平台、哪个端点、哪个权限范围,以及一条通俗易懂的说明,解释这次调用所依据的同意或服务条款。没有 Cookie 导入,没有会话令牌复用,也没有任何可能伪装成已登录真人的代码路径。
我们并不打算在覆盖的平台数量上超过 Agent-Reach 的六个平台。auditreach 有意缩小范围,面向那些在结构上根本无法使用基于 Cookie 的工具的客户。
开始使用
**1. 安装:**参见上文的 安装——使用 npx auditreach-cli、npm install -g auditreach-cli,或克隆并从源代码构建。
2. 为要搜索的平台设置凭据(自带密钥——使用你自己的,绝不用我们的):
node dist/cli.js auth --platform reddit
# 提示输入 Client ID、Client secret、用户名和密码。
# 请先在 https://www.reddit.com/prefs/apps 创建一个 script-app。
node dist/cli.js auth --platform youtube
# 提示输入 API 密钥。
# 请在 https://console.cloud.google.com/apis/credentials 创建一个。
所有凭据都存储在你的操作系统密钥链(@napi-rs/keyring)中,不会存入配置文件,也不会发送到平台官方身份验证端点以外的任何地方。设置好凭据后,可以先验证它们,而不执行实际搜索:
node dist/cli.js auth --platform reddit --verify
3. 搜索:
node dist/cli.js search --platform reddit --query "your query" --subreddit some_subreddit
node dist/cli.js search --platform youtube --query "your query" --channel @SomeChannel
关于设置耗时的说明:首次从 Reddit 和 Google 获取自己的 API 凭据需要几分钟——这是有意为之,比 Agent-Reach 的 Cookie 导入流程(该流程只需复用你已有的浏览器会话)慢。BYOK 意味着设置成本确实存在,而不是被隐藏起来。
命令
auditreach 有四个子命令。以下所有标志都直接摘自 CLI 自身的 --help 输出,而不是凭记忆列出它过去支持的内容。
auditreach search
仅使用平台的官方 API 进行搜索。
| Flag | Description |
|---|---|
--platform <platform> | reddit | youtube(必填) |
--query <query> | 搜索查询(必填) |
--subreddit <subreddit> | 将搜索范围限定为一个 subreddit(仅限 Reddit) |
--channel <handle> | 将搜索范围限定为一个频道,例如 @AnthropicAI(仅限 YouTube) |
--since <date> | 仅返回此日期之后发布的结果,例如 2026-06-01(仅限 YouTube) |
--max-results <n> | 返回结果的上限(默认值:25;平台上限:Reddit 为 100,YouTube 为 50) |
--before <fullname> | 翻页至此 Reddit fullname 游标之前的结果,例如 t3_abc123(仅限 Reddit) |
--after <fullname> | 翻页至此 Reddit fullname 游标之后的结果,例如 t3_abc123(仅限 Reddit) |
--output <path> | 将完整结果 JSON 写入此路径 |
--json | 将结构化 JSON 输出到 stdout,而非人类可读的内容,供脚本和 Agent 调用方使用 |
node dist/cli.js search --platform reddit --query "agent memory poisoning" --subreddit MachineLearning --max-results 50
node dist/cli.js search --platform reddit --query "agent memory poisoning" --json | jq '.results | length'
auditreach auth
为平台设置、验证或清除 BYOK 凭据(存储在你的操作系统密钥链中)。
| Flag | Description |
|---|---|
--platform <platform> | reddit | youtube(必填) |
--clear | 删除此平台已存储的凭据 |
--verify | 验证已存储的凭据是否有效,而不运行搜索(不会生成结果文件或审计日志条目) |
--json | 与 --verify 一起使用时,输出结构化 JSON 结果,而非人类可读文本 |
node dist/cli.js auth --platform reddit --verify
auditreach verify-log
验证本地哈希链审计日志是否未被篡改。
| Flag | Description |
|---|---|
--path <path> | 审计日志文件的路径(若省略,默认为 ./auditreach.log.jsonl) |
node dist/cli.js verify-log --path ./auditreach.log.jsonl
auditreach mcp
通过标准输入/输出运行 Model Context Protocol 服务(基于官方 @modelcontextprotocol/sdk 构建),仅开放 3 个工具,让 AI Agent 可以直接调用此 CLI,而不必通过 Shell 调用并解析标准输出:
| 工具 | 等效命令 | 备注 |
|---|---|---|
search | auditreach search --json | 参数相同:platform、query、subreddit/channel、since、maxResults、before/after |
auth_status | auditreach auth --platform <p> --verify --json | **只读。**检查已存储的凭据是否有效——无法设置或清除凭据 |
verify_log | auditreach verify-log --json | 参数相同:path |
node dist/cli.js mcp
# or, once published: npx auditreach-cli mcp
将其添加到 MCP 客户端的配置中(对于 Claude Desktop,使用 claude_desktop_config.json)。两种发行方式均可,因为它们都包含相同的 mcp 子命令:
{
"mcpServers": {
"auditreach": {
"command": "npx",
"args": ["-y", "auditreach-cli", "mcp"]
}
}
}
或者,使用 PyPI 软件包:
{
"mcpServers": {
"auditreach": {
"command": "uvx",
"args": ["--from", "auditreach-cli", "auditreach", "mcp"]
}
}
}
通过 MCP 设置或清除 BYOK 凭据(auditreach auth --platform <p> / --clear)是刻意不开放的——这些操作只能通过本地 CLI 由人工执行,因此调用此服务的 Agent 可以检查凭据是否有效,但绝不能自行配置或清除凭据。参见 .well-known/agent.json,其中包含机器可读清单(身份验证要求、工具架构、调用命令),供 Agent 或 Agent 注册表读取,以便在无需人工先阅读 README 的情况下发现此服务。

随时运行 auditreach <command> --help,查看已安装版本支持的准确标志。
库 API 参考
auditreach-cli 也可作为可导入的库使用。以下所有导出项都直接来自已发布软件包中的 dist/index.d.ts。
import {
RedditClient,
YoutubeClient,
getCredential,
setCredential,
deleteCredential,
getRedditCredentials,
getYoutubeCredentials,
appendAuditLogEntry,
getLastEntryHash,
computeEntryHash,
verifyAuditLogChain,
credentialFingerprint,
canonicalJson,
sha256Hex,
DEFAULT_AUDIT_LOG_PATH,
executeSearch,
SearchCommandError,
checkAuthStatus,
executeVerifyLog,
buildMcpServer,
runMcpServerCommand,
} from "auditreach-cli";
客户端
new RedditClient(credentials: RedditCredentials)—— 仅使用密码授权(“script app”流程)与 Reddit 官方 OAuth API 通信。.search(options: RedditSearchOptions): Promise<SearchOutcome>、.verifyCredentials(): Promise<void>。new YoutubeClient(credentials: YoutubeCredentials)—— 封装官方 YouTube Data API v3。.search(options: YoutubeSearchOptions): Promise<SearchOutcome>、.verifyCredentials(): Promise<void>(调用消耗 1 个配额单位,无需查询)。
const credentials = getRedditCredentials();
if (!credentials) throw new Error("run `auditreach auth --platform reddit` first");
const client = new RedditClient(credentials);
const outcome = await client.search({
query: "agent memory poisoning",
subreddit: "MachineLearning",
});
凭据(setCredential / getCredential / deleteCredential / getRedditCredentials / getYoutubeCredentials)——所有凭据 I/O 都通过此模块进行。只有此处允许接触原始密钥;值只会返回给客户端构造函数直接使用,绝不会记录或打印。
审计日志
appendAuditLogEntry(entryWithoutHash: UnhashedAuditLogEntry, logPath?: string): Promise<AuditLogEntry>——写入日志的唯一途径;条目绝不会被就地修改或删除。getLastEntryHash(logPath?: string): Promise<string | null>computeEntryHash(entry: UnhashedAuditLogEntry): stringverifyAuditLogChain(logPath?: string): Promise<ChainVerificationResult>——重新计算每个条目的哈希,并端到端检查哈希链。DEFAULT_AUDIT_LOG_PATH——"./auditreach.log.jsonl"
const result = await verifyAuditLogChain();
if (!result.valid) {
console.error(`Chain broken at entry ${result.brokenAtIndex}: ${result.reason}`);
}
加密工具
canonicalJson(value: unknown): string——递归排序对象键,确保相同逻辑条目始终序列化为相同字节,这是哈希链能够确定性验证的基础。sha256Hex(input: string): stringcredentialFingerprint(secret: string): string——仅保留 scrypt 派生哈希的最后 6 个十六进制字符(在审计日志中写为scrypt:<6 hex>),足以在本地审计日志中区分轮换后的密钥,但不足以泄露部分凭据。
命令核心和 MCP
executeSearch(args)、checkAuthStatus(platform)、executeVerifyLog(path?)——search/auth --verify/verify-logCLI 命令和 MCP 工具都会调用的同一组程序化核心;它们都不会写入 console/stdout,因此可安全地从任何宿主调用,包括与 MCP 传输共享 stdout 的宿主。SearchCommandError——executeSearch在出现预期且可由用户处理的失败时抛出的错误类:尚未为目标平台存储 BYOK 凭据,或调用 Reddit 搜索时未提供--query。请专门捕获此错误,以区分“调用方式有误”和实际网络/API 故障。buildMcpServer({ version }): McpServer——构造 MCP 服务(来自@modelcontextprotocol/sdk),并注册search/auth_status/verify_log工具,但不启动传输;适用于测试或嵌入到更大的 MCP 服务中。runMcpServerCommand({ version })——auditreach mcp运行的命令:构建服务并通过 stdio 连接。服务运行期间不会返回。
目前尚无生成的 API 文档网站(CI 尚未接入 TypeDoc 构建);以上导出项就是完整的公共 API。请查看已发布软件包中的 dist/index.d.ts,了解确切类型。
Python 软件包(PyPI 上的 auditreach-cli)提供相同的 API,并使用 snake_case 命名——from auditreach import RedditClient, YoutubeClient, get_reddit_credentials, verify_audit_log_chain, ...——完整的 Python API 参考请参见 python/README.md。
平台覆盖情况
| 平台 | 使用的 API | 状态 | 已知限制 |
|---|---|---|---|
| Reddit API(OAuth2 密码授权,直接 REST) | 已发布 | 对于实际研究所需的用量,速率限制通常可以应对 | |
| YouTube | YouTube Data API v3(googleapis) | 已发布 | 受配额限制(默认每天 10,000 个单位),通常可以应对 |
| X(Twitter) | X API v2 | 尚未发布 | 自 2023 年调整定价以来,已有大量报道指出,对于需要开展有意义研究的小型团队,X 官方 API 的定价和发帖量上限高得难以承受。暂缓支持此平台,直到有用户确实需要它,并愿意为绕过这一限制提供资金支持——发布一个只能勉强运行的版本,会违背本工具赖以建立的“如实说明官方 API 能做什么、不能做什么”这一前提。 |
结果数量限制
--max-results <n> 控制单次 search 调用返回的条目数。如果不设置该参数,auditreach 会静默应用默认值 25——这种令人意外的行为与 PRAW 多年来 get_comments() 的情况类似(praw#119):调用者若不知道需要传入该标志,就会在毫无察觉的情况下得到截断的结果集。
说明
如果搜索返回的条目数恰好达到应用的上限(默认值为 25,或你指定的
--max-results值),结果集可能并不完整。出现这种情况时,auditreach 会向 stderr 输出警告,但只解析 stdout/--json输出的脚本看不到该警告——如果结果完整性很重要,请留意警告或显式传入--max-results。
| 平台 | 默认值(未设置标志) | 最大值(--max-results) |
|---|---|---|
| 25 | 100 | |
| YouTube | 25 | 50 |
超过上限的值会被静默截为上限。对于 Reddit,--before/--after 可以使用 Reddit 自身响应返回的实际游标,对搜索结果进行分页,最多可达到 Reddit 自身约 1,000 条的搜索上限(参见成功案例,了解为何仅靠游标分页无法突破该上限);YouTube 目前没有类似功能。无论是静默应用的默认值,还是显式指定的 --max-results 值,只要返回的条目数等于实际应用的上限,auditreach 就会向 stderr 输出警告,告知你可能还有更多结果,以及如何调高 --max-results(最高不超过平台上限)。
说实话,什么是“同意依据”
每条审计日志记录中的 consent_basis 字段都会注明该查询所使用的平台 API 条款和身份验证机制。它证明请求是在你提供的凭据下,通过平台官方且有文档说明的 API 接口发出的。但它不能证明你的具体用例在你所在的司法管辖区或合同下符合法律要求——这需要你自行判断,并以准确、完整且可防篡改的实际操作记录为依据。
默认自托管/仅限本地
使用 auditreach 不需要托管账户或服务。每条命令都完全在你的计算机上运行;审计日志是由你持有的普通文件。流程与上文的安装相同:
git clone https://github.com/RudrenduPaul/auditreach.git
cd auditreach
npm install
npm run build
node dist/cli.js search --platform reddit --query "..."
开发
TypeScript(此包):
npm install
npm run lint # ESLint
npm run format # Prettier 检查
npm run typecheck # tsc --noEmit --strict
npm run test:coverage # vitest,91 项测试,语句覆盖率 95.1%
Python(python/):
cd python
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest # 95 项测试
添加新平台客户端的规则请参阅 CONTRIBUTING.md——简而言之:仅使用官方 API,如实披露速率限制,测试时模拟网络边界;绝不在 src/auth/credential-store.ts(Python 部分则为 python/src/auditreach/auth/credential_store.py)以外读取或写入原始凭据。
安全
漏洞披露政策请参阅 SECURITY.md。上线前的 OWASP/STRIDE 审查发现,auditreach 自身代码中没有 CRITICAL/HIGH 级问题。ip-address 和 hono——这两个依赖由官方 @modelcontextprotocol/sdk 的 HTTP 传输代码间接引入,而 auditreach mcp 不会运行这段代码(它只会启动 SDK 的标准输入/输出传输 StdioServerTransport)——此前存在安全公告;现在 package.json 的 overrides 字段已将两者固定到修复后的版本。截至撰写本文时,全新安装后运行 npm audit --audit-level=high 会报告 0 个漏洞。此仓库已启用 GitHub 密钥扫描和推送保护。
成功案例
针对 praw-dev/praw 报告的 4 个真实问题——PRAW 是 Reddit 官方的 Python API 封装,也是本项目最接近先例的项目——我们以 auditreach 自身的代码为依据找到了根因,并在本工具还没有任何外部用户时,就用这些问题弥补了真实存在的缺陷。下面每一条都对应于引发改进的实际报告。
- praw#614 (@mananwason)——询问如何翻页,突破 Reddit 搜索约 1,000 条结果的上限。实际解决方案的范围更窄:超过这一上限后,Reddit 自身的 API 根本不会返回 before/after 游标,无论是否采用基于游标的翻页——这一点已在问题讨论串中直接确认。现在的
search()会从 Reddit 的响应中提取真实游标(SearchOutcome.nextCursor),并提供--before/--after标记,让你可以在单次搜索的结果上限内翻阅结果,而不是始终只能看到第一页。要突破 1,000 条结果的上限本身,需要按时间戳窗口重新查询 cloudsearch,目前尚未实现。 - praw#1939 (@Auditormadness9)——遇到一个未查明原因的 400 错误,根因是 subreddit 名称仍带有
r/前缀。现在,如果这很可能是原因,搜索错误会明确指出这一点:以前 CLI 只会返回一个裸状态码,让你自己猜原因。 - praw#984 (@MaxMatti)——希望能简单地检查 Reddit 机器人凭据是否仍然有效,而不必使用 PRAW 那个令人困惑的
getMe()递归变通方法。现在,auditreach auth --platform reddit --verify正好可以做到这一点:只需一次轻量检查,无需搜索,也不会写入磁盘。 - praw#119 (@nsp)——遇到了 PRAW 历来默认静默限制为 25 条结果的问题,只有阅读一个无关基类的文档字符串才能发现;PRAW 的维护者本人也承认,他“不确定怎样才能把这一点说明白”。现在,
--help和本 README 都会说明实际默认值和各平台的上限,而且只要搜索结果确实被截断,就会触发运行时警告。
常见问题
auditreach 是什么?它与其他 Reddit/YouTube 研究工具有何不同? 它是一款 BYOK CLI(也是 MCP 服务),只通过 Reddit 和 YouTube 的官方文档化 API 进行交互,使用你自己的 API 密钥,并为每次查询写入一条哈希链审计日志记录——包括平台、端点、范围,以及该次调用所依据的具体同意/服务条款(ToS)依据。它的独特之处在于它拒绝做什么:不导入 Cookie,不抓取共享会话,也没有任何假装成已登录用户的代码路径。完整原因请参阅为什么要创建 auditreach,与具名替代方案的对比表请参阅比较情况。
auditreach 支持哪些平台和版本?
npm 包(auditreach-cli)要求 Node.js 20 或更高版本(package.json 中的 engines 字段)。PyPI 包(同样名为 auditreach-cli)要求 Python 3.10 及以上版本(python/pyproject.toml 中的 requires-python),并带有 Operating System :: OS Independent 分类标记。凭据通过 @napi-rs/keyring(npm)或 keyring(PyPI)存入你的操作系统密钥链,而不是配置文件,因此除了安装 Node 或 Python 外,无需进行平台特定的设置。
auditreach 会将我的 Reddit 或 YouTube 凭据存储在任何地方吗?
不会。凭据会直接通过 @napi-rs/keyring(src/auth/credential-store.ts)存入你的操作系统密钥链。没有配置文件,没有环境变量,也没有任何会将原始凭据写入磁盘的代码路径。
搜索默认返回多少个结果?可以获取更多吗?
默认返回 25 个,且不会提示,除非你传入 --max-results——请参阅结果数量限制。Reddit 的硬性上限是 100 个,YouTube 的是 50 个。每当搜索实际达到所应用的限制时,无论是默认的静默限制还是你传入的显式值,都会触发 stderr 警告。
如何在不执行实际搜索的情况下检查凭据是否仍然有效?
运行 node dist/cli.js auth --platform reddit --verify(或 --platform youtube)。它会执行最简的身份验证检查并报告通过或失败,无需 --query,不会写入结果文件,也不会追加审计日志条目。
审计日志真的能防篡改,还是只是一个日志文件?
它能防篡改:每个条目的哈希都根据其自身内容计算,下一个条目会引用该哈希,因此 verify-log 可以指出手动编辑破坏的确切条目。请参阅功能介绍中的演示。
auditreach 目前有哪些局限?
有两点值得提前了解。第一,目前未提供 X(Twitter)支持——自 2023 年的变更以来,X API v2 的定价和帖子数量上限,对于进行实际研究的小团队来说一直高得难以承受;请参阅平台覆盖范围。第二,Reddit 分页:search() 会从 Reddit 自身的响应中读取真实的 after/before 游标,并提供 --before/--after 标志来翻阅单次搜索的结果集,但这无法突破 Reddit 自身约 1,000 条结果的搜索上限——请参阅praw#614 成功案例,了解修复涵盖和未涵盖的内容。
MCP 服务模式如何工作?
auditreach mcp(npm)或 pipx run auditreach-cli mcp(PyPI)会启动一个通过 stdio 通信的 Model Context Protocol 服务,基于官方的 @modelcontextprotocol/sdk / mcp SDK 构建。它恰好提供 3 个工具——search、auth_status(只读,无法设置或清除凭据)和 verify_log——每个工具都只是对 CLI 命令所用同一编程核心的轻量封装,因此 Agent 使用路径不会重复实现功能。完整工具表请参阅上文的 auditreach mcp,机器可读清单请参阅 .well-known/agent.json,Agent 注册表可以直接读取该清单。
具体来说,auditreach 与 Agent-Reach 有何不同? Agent-Reach 支持的平台更多(6 个,而 auditreach 支持 2 个),它通过导入已登录的浏览器会话并以该用户身份抓取内容,实现零 API 成本。auditreach 只使用你自己的密钥调用官方、文档齐全的 API,并为每次查询写入一条哈希链式同意/审计记录;它完全没有导入会话的代码路径。两种方式都没有绝对优势——它们面向不同的用户。完整对比请参阅对比方式。
auditreach 可以免费用于商业用途吗?许可证具体要求什么?
可以。auditreach 采用 Apache 2.0 许可证(请参阅 LICENSE),允许商业使用、修改和再分发,包括作为闭源产品的一部分。条件是:再分发任何内容时附上许可证副本,标明你修改过的文件,并保留现有的版权/归属声明。该许可证不授予使用 auditreach 名称或商标的权利。
贡献
有关添加新平台客户端的规则,请参阅 CONTRIBUTING.md。简而言之:仅使用官方 API,如实说明速率限制,编写模拟网络边界的测试,绝不在 src/auth/credential-store.ts 之外读取或写入原始凭据。
许可证
Apache 2.0。请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。