auditreach

CLI de investigación de Reddit/YouTube con BYOK, registro de auditoría a prueba de manipulaciones y servidor MCP.

Documentación

auditreach

CI npm version PyPI version License: Apache 2.0 Node

Instalación • Qué hace • Primeros pasos • Comandos • Seguridad • Preguntas frecuentes

Investiga Reddit y YouTube desde tu agente de IA usando solo APIs oficiales, tus propias claves y un registro que demuestra exactamente qué consultaste y por qué estaba permitido.

auditreach demo: running --help and a first-run auth --verify check with no credentials configured yet

Instalación

auditreach se distribuye como dos paquetes independientes e igualmente de primera clase: un paquete npm (este repositorio, JavaScript/TypeScript) y un paquete PyPI (python/, Python). Ambos implementan el mismo algoritmo de cadena hash y el modelo BYOK contra las mismas APIs oficiales de Reddit/YouTube. Elige el que se adapte a tu cadena de herramientas, o instala ambos.

npm:

npx auditreach-cli search --platform reddit --query "your query"

O instálalo globalmente:

npm install -g auditreach-cli
auditreach search --platform reddit --query "your query"

pip:

pip install auditreach-cli
auditreach search --platform reddit --query "your query"

Consulta python/README.md para el uso específico de Python, incluida la ruta de credenciales BYOK mediante variables de entorno añadida en esta distribución (útil para entornos CI/agentes sin interfaz gráfica): el paquete npm almacena credenciales solo en el llavero del sistema operativo.

Compilar desde el código fuente funciona de la misma manera, si quieres leer o modificar el código primero:

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"

Qué hace

node dist/cli.js search --platform reddit --query "agent memory poisoning" --subreddit MachineLearning

AuditReach -- CLI de investigación con API oficial
Plataforma: Reddit  |  Autenticación: concesión de aplicación de script OAuth, solo lectura, ámbito de subreddit público

Obteniendo... (API oficial, consciente de límites de tasa)
✓ 14 resultados devueltos (Términos de la API de Reddit -- contenido público, API oficial, credenciales de aplicación de script de solo lectura)

RESULTADOS (14)
[1] "¿Cómo está probando la gente el envenenamiento de memoria en agentes de larga duración?"
    u/some_researcher · 2026-07-05T14:22:00.000Z
    https://reddit.com/r/MachineLearning/comments/...
...

Entrada de registro de auditoría escrita: ar_2026-07-12_9f3c2a
Base de consentimiento: Términos de la API de Reddit -- contenido público, API oficial, credenciales de aplicación de script de solo lectura
Resultados completos: ./auditreach-results-2026-07-12.json
Rastro de auditoría completo: ./auditreach.log.jsonl

Cada entrada en auditreach.log.jsonl está encadenada por hash: el hash de cada entrada se calcula a partir de su propio contenido, y la siguiente entrada lo referencia. Editar, eliminar o reordenar una entrada rompe la cadena:

$ node dist/cli.js verify-log
Verificando ./auditreach.log.jsonl...
✓ Cadena intacta: 14 entradas, sin huecos, sin manipulación detectada.

# después de que alguien edite manualmente una línea en el archivo de registro:
$ node dist/cli.js verify-log
Verificando ./auditreach.log.jsonl...
✗ Cadena rota en la entrada 3 (ar_2026-07-12_9f3c2a): el hash de la entrada ar_2026-07-12_9f3c2a no
  coincide con su propio contenido -- la entrada fue editada después de escribirse

auditreach demo: hand-editing an entry in auditreach.log.jsonl, then running verify-log and watching it catch the broken hash chain

Cómo se compara

auditreachAgent-Reachsnoowrap
Modelo de accesoSolo API oficial, clave propiaImportación de cookies/sesión, "cero tarifas de API"API oficial, clave propia
Cobertura de plataformasReddit, YouTubeTwitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShuSolo Reddit
Registro de consentimiento/auditoríaEncadenado por hash, por consulta, localNingunoNinguno
Estado de mantenimientoActivo (esta versión)Activo, más de 65k estrellasArchivado desde febrero de 2023
LicenciaApache 2.0MITMIT
Dependencias de ejecución (cliente Reddit)0 -- fetch nativon/a (Python, basado en sesión de navegador)request, request-promise, ws (todas obsoletas)

Los números se midieron directamente contra los metadatos públicos de GitHub de cada repositorio y, para la comparación de dependencias, contra los package.json publicados por el propio snoowrap al momento de escribir esto: reproducible por cualquiera con gh api repos/<owner>/<repo>.

Empezamos a construir el cliente de Reddit de auditreach sobre snoowrap, el envoltorio de API de Reddit más utilizado en el ecosistema Node. Instalarlo arrastra request, request-promise, form-data y har-validator: una cadena de dependencias que actualmente lleva 2 avisos de severidad CRÍTICA, 2 ALTA y 5 moderada (9 en total, según npm audit), ninguno de los cuales snoowrap puede corregir porque el proyecto está archivado desde 2023. Reescribimos el cliente de Reddit como un cliente OAuth2 directo basado en fetch contra los propios endpoints REST documentados de Reddit: misma funcionalidad, ninguno de esos CVE, cero dependencias de ejecución adicionales para ese cliente. Consulta Seguridad para conocer el estado actual de npm audit de auditreach.

Por qué existe auditreach

Una consultora con la que hablamos tenía un agente de investigación de IA que extraía sentimiento social para un informe de cliente. Funcionaba bien hasta que el equipo legal del cliente preguntó, por escrito, bajo qué autoridad se realizaba la recopilación de datos. La respuesta honesta fue "una sesión de cookies de navegador", porque la herramienta que usaban se autentica importando una sesión iniciada y haciendo scraping como si fuera un usuario real. Eso funciona. Pero tampoco es una respuesta que puedas poner en un memorando de cumplimiento, y es exactamente el patrón por el que Reddit demandó a Anthropic y SerpApi en 2025, y el mismo patrón que hizo que Reddit cortara el acceso a la API pública de Pushshift en 2024.

Agent-Reach no es una mala herramienta. Tiene tracción real (más de 65k estrellas) porque el scraping basado en cookies genuinamente cubre más terreno que cualquier API oficial hoy, a costo cero de API. Pero "cubre más terreno" y "el cliente de una agencia puede pasar una revisión de cumplimiento" son dos estándares diferentes, y nada se construyó específicamente para superar el segundo.

auditreach es la CLI que deseábamos que existiera. Habla con Reddit y YouTube solo a través de sus APIs oficiales y documentadas, usando tus propias claves de API (nunca un grupo compartido), y cada consulta escribe una entrada encadenada por hash en un registro de auditoría local: qué plataforma, qué endpoint, qué ámbito, y una línea en lenguaje sencillo que explica la base de consentimiento/ToS para esa llamada específica. Sin importación de cookies. Sin reutilización de tokens de sesión. Sin ruta de código que pueda siquiera pretender ser un humano con sesión iniciada.

No intentamos superar la cobertura de seis plataformas de Agent-Reach. auditreach es más limitado a propósito, para el comprador que estructuralmente no puede usar una herramienta basada en cookies.

Primeros pasos

1. Instala: consulta Instalación arriba: npx auditreach-cli, npm install -g auditreach-cli, o clona y compila desde el código fuente.

2. Configura credenciales para la plataforma que quieras buscar (BYOK: tus propias, nunca las nuestras):

node dist/cli.js auth --platform reddit
# Solicita ID de cliente, secreto de cliente, nombre de usuario, contraseña.
# Crea una aplicación de script en https://www.reddit.com/prefs/apps primero.

node dist/cli.js auth --platform youtube
# Solicita una clave de API.
# Crea una en https://console.cloud.google.com/apis/credentials

Todas las credenciales se almacenan en tu llavero del sistema operativo (@napi-rs/keyring), nunca en un archivo de configuración, nunca se transmiten a ningún lugar excepto al endpoint de autenticación oficial de la propia plataforma. Una vez configuradas las credenciales, verifícalas sin ejecutar una búsqueda real:

node dist/cli.js auth --platform reddit --verify

3. Busca:

node dist/cli.js search --platform reddit --query "tu consulta" --subreddit some_subreddit
node dist/cli.js search --platform youtube --query "tu consulta" --channel @SomeChannel

Nota honesta sobre el tiempo de configuración: obtener tus propias credenciales de API de Reddit y Google toma unos minutos la primera vez; esto es más lento que el flujo de importación de cookies de Agent-Reach (que simplemente reutiliza una sesión de navegador que ya tienes) por diseño. BYOK significa que el costo de configuración es real, no oculto.

Comandos

auditreach tiene cuatro subcomandos. Cada bandera a continuación se extrae directamente de la salida de --help de la propia CLI, no de memoria de lo que solía soportar.

auditreach search

Busca en una plataforma usando solo su API oficial.

BanderaDescripción
--platform <platform>reddit | youtube (obligatorio)
--query <query>consulta de búsqueda (obligatorio)
--subreddit <subreddit>restringe la búsqueda a un subreddit (solo Reddit)
--channel <handle>restringe la búsqueda a un canal, p. ej. @AnthropicAI (solo YouTube)
--since <date>solo resultados publicados después de esta fecha, p. ej. 2026-06-01 (solo YouTube)
--max-results <n>máximo de resultados a devolver (predeterminado: 25; límites de plataforma: 100 Reddit / 50 YouTube)
--before <fullname>paginar resultados antes de este cursor fullname de Reddit, p. ej. t3_abc123 (solo Reddit)
--after <fullname>paginar resultados después de este cursor fullname de Reddit, p. ej. t3_abc123 (solo Reddit)
--output <path>escribir el JSON completo de resultados en esta ruta
--jsonimprimir JSON estructurado en stdout en lugar de salida legible, para scripts y llamadores de agentes
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

Configura, verifica o borra credenciales BYOK para una plataforma (almacenadas en tu llavero del sistema operativo).

BanderaDescripción
--platform <platform>reddit | youtube (obligatorio)
--clearelimina las credenciales almacenadas para esta plataforma
--verifyverifica que las credenciales almacenadas sean válidas sin ejecutar una búsqueda (sin archivo de resultados, sin entrada de registro de auditoría)
--jsoncon --verify, imprime un resultado JSON estructurado en lugar de texto legible
node dist/cli.js auth --platform reddit --verify

auditreach verify-log

Verifica que el registro de auditoría local encadenado por hash no haya sido manipulado.

BanderaDescripción
--path <path>ruta al archivo de registro de auditoría (predeterminado: ./auditreach.log.jsonl si se omite)
node dist/cli.js verify-log --path ./auditreach.log.jsonl

auditreach mcp

Ejecuta un servidor de Model Context Protocol sobre stdio (construido sobre el @modelcontextprotocol/sdk oficial), exponiendo exactamente 3 herramientas para que un agente de IA pueda llamar a esta CLI directamente en lugar de ejecutar comandos externos y analizar la salida estándar:

HerramientaEquivalente aNotas
searchauditreach search --jsonMismos parámetros: platform, query, subreddit/channel, since, maxResults, before/after
auth_statusauditreach auth --platform <p> --verify --jsonSolo lectura. Comprueba si las credenciales almacenadas son válidas -- no puede establecerlas ni borrarlas
verify_logauditreach verify-log --jsonMismos parámetros: path
node dist/cli.js mcp
# o, una vez publicado: npx auditreach-cli mcp

Añádelo a la configuración de tu cliente MCP (para Claude Desktop, claude_desktop_config.json). Cualquiera de las dos distribuciones funciona, ya que ambas incluyen el mismo subcomando mcp:

{
  "mcpServers": {
    "auditreach": {
      "command": "npx",
      "args": ["-y", "auditreach-cli", "mcp"]
    }
  }
}

o, desde el paquete de PyPI:

{
  "mcpServers": {
    "auditreach": {
      "command": "uvx",
      "args": ["--from", "auditreach-cli", "auditreach", "mcp"]
    }
  }
}

Configurar o borrar credenciales BYOK (auditreach auth --platform <p> / --clear) está deliberadamente no expuesto a través de MCP -- eso sigue siendo una acción local de la CLI, impulsada por humanos, para que un agente que llama pueda comprobar si las credenciales funcionan pero nunca pueda aprovisionarlas ni eliminarlas por sí mismo. Consulta .well-known/agent.json para ver el manifiesto legible por máquina (requisitos de autenticación, esquemas de herramientas, comandos de invocación) que un agente o un registro de agentes puede leer para descubrir este servidor sin que un humano lea primero el README.

auditreach usage: sending a raw MCP initialize + tools/list JSON-RPC request over stdio to auditreach mcp and getting back the three registered tools

Ejecuta auditreach <command> --help en cualquier momento para ver las banderas exactas que admite tu versión instalada.

Referencia de la API de la biblioteca

auditreach-cli también funciona como una biblioteca importable. Cada exportación a continuación proviene directamente de dist/index.d.ts en el paquete publicado.

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";

Clientes

  • new RedditClient(credentials: RedditCredentials) -- se comunica únicamente con la API OAuth oficial de Reddit, utilizando la concesión de contraseña ("flujo de aplicación de script"). .search(options: RedditSearchOptions): Promise<SearchOutcome>, .verifyCredentials(): Promise<void>.
  • new YoutubeClient(credentials: YoutubeCredentials) -- envuelve la API oficial de YouTube Data API v3. .search(options: YoutubeSearchOptions): Promise<SearchOutcome>, .verifyCredentials(): Promise<void> (una llamada de 1 unidad de cuota, sin necesidad de consulta).
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",
});

Credenciales (setCredential / getCredential / deleteCredential / getRedditCredentials / getYoutubeCredentials) -- toda la entrada/salida de credenciales pasa por este módulo. Es el único lugar permitido para tocar un secreto sin procesar; los valores solo se devuelven para entregarlos directamente al constructor de un cliente, nunca para registrarlos o imprimirlos.

Registro de auditoría

  • appendAuditLogEntry(entryWithoutHash: UnhashedAuditLogEntry, logPath?: string): Promise<AuditLogEntry> -- la única ruta de escritura en el registro; las entradas nunca se editan ni se eliminan en el lugar.
  • getLastEntryHash(logPath?: string): Promise<string | null>
  • computeEntryHash(entry: UnhashedAuditLogEntry): string
  • verifyAuditLogChain(logPath?: string): Promise<ChainVerificationResult> -- vuelve a derivar el hash de cada entrada y verifica la cadena de principio a fin.
  • DEFAULT_AUDIT_LOG_PATH -- "./auditreach.log.jsonl"
const result = await verifyAuditLogChain();
if (!result.valid) {
  console.error(`Chain broken at entry ${result.brokenAtIndex}: ${result.reason}`);
}

Utilidades criptográficas

  • canonicalJson(value: unknown): string -- ordena recursivamente las claves de los objetos para que la misma entrada lógica siempre se serialice en los mismos bytes, de lo cual depende la cadena de hash para verificar de manera determinista.
  • sha256Hex(input: string): string
  • credentialFingerprint(secret: string): string -- conserva solo los últimos 6 caracteres hexadecimales de un hash derivado de scrypt (emitido en el registro de auditoría como scrypt:<6 hex>), suficiente para distinguir claves rotadas en un registro de auditoría local, nunca suficiente para ser una fuga parcial de credenciales.

Núcleos de comandos y MCP

  • executeSearch(args), checkAuthStatus(platform), executeVerifyLog(path?) -- los mismos núcleos programáticos que los comandos CLI search / auth --verify / verify-log y las herramientas MCP invocan; ninguno de ellos escribe en la consola/salida estándar, por lo que son seguros de llamar desde cualquier host, incluido uno que comparte la salida estándar con un transporte MCP.
  • SearchCommandError -- la clase de error que executeSearch lanza para un fallo esperado y accionable por el usuario: no hay credenciales BYOK almacenadas aún para la plataforma objetivo, o una búsqueda de Reddit llamada sin --query. Captúrala específicamente para distinguir "lo llamaste mal" de un fallo real de red/API.
  • buildMcpServer({ version }): McpServer -- construye el servidor MCP (de @modelcontextprotocol/sdk) con las herramientas search / auth_status / verify_log registradas, sin iniciar un transporte -- útil para pruebas o para incrustarlo en un servidor MCP más grande.
  • runMcpServerCommand({ version }) -- lo que ejecuta auditreach mcp: construye el servidor y lo conecta a través de stdio. Nunca regresa mientras el servidor está en ejecución.

Aún no existe un sitio de documentación de API generada (no hay una compilación de TypeDoc conectada a CI) -- las exportaciones anteriores son la superficie pública completa. Consulta dist/index.d.ts en el paquete publicado para ver los tipos exactos.

El paquete de Python (auditreach-cli en PyPI) expone la misma superficie con nombres snake_case -- from auditreach import RedditClient, YoutubeClient, get_reddit_credentials, verify_audit_log_chain, ... -- consulta python/README.md para la referencia completa de la API de Python.

Cobertura de plataformas

PlataformaAPI utilizadaEstadoRestricción conocida
RedditAPI de Reddit (OAuth2 con concesión de contraseña, REST directo)EnviadoLos límites de velocidad son generalmente manejables para volúmenes de investigación reales
YouTubeYouTube Data API v3 (googleapis)EnviadoBasado en cuotas (10,000 unidades/día por defecto), generalmente manejable
X (Twitter)X API v2Aún no enviadoLos precios oficiales de la API de X y los límites de volumen de publicaciones han sido ampliamente reportados como prohibitivos para equipos pequeños que realizan investigaciones significativas desde los cambios de precios de 2023. Diferido hasta que un usuario real lo necesite lo suficiente como para financiar una solución a esa restricción -- enviarlo a medias socavaría toda la premisa de "ser honesto sobre lo que las API oficiales pueden y no pueden hacer" sobre la que se construye esta herramienta.

Límites de resultados

--max-results <n> controla cuántos elementos devuelve una sola llamada a search. Si se omite, auditreach aplica silenciosamente un valor predeterminado de 25 -- la misma forma de sorpresa que el get_comments() de PRAW tuvo durante años (praw#119): un llamador que no sabe pasar la bandera obtiene un conjunto de resultados truncado silenciosamente.

[!NOTE] Una búsqueda que devuelve exactamente el límite aplicado (25 por defecto, o tu valor de --max-results) puede no ser el conjunto de resultados completo. auditreach imprime una advertencia en stderr cuando esto sucede, pero los scripts que solo analizan la salida estándar/--json no la verán -- verifica la advertencia o pasa un --max-results explícito si la integridad es importante.

PlataformaPredeterminado (bandera omitida)Máximo (--max-results)
Reddit25100
YouTube2550

Los valores por encima del límite se recortan silenciosamente a él. Para Reddit, --before/--after te permiten paginar a través del conjunto de resultados de una búsqueda utilizando el cursor real que devuelve la propia respuesta de Reddit, hasta el límite de búsqueda de ~1,000 elementos de Reddit (consulta Historias de éxito para saber por qué la paginación con cursor sola no puede ir más allá); YouTube no tiene equivalente aún. Siempre que el número de elementos devueltos sea igual al límite que realmente se aplicó, ya sea el predeterminado silencioso o un valor explícito de --max-results, auditreach imprime una advertencia en stderr indicando que pueden existir más resultados y cómo aumentar --max-results (hasta el límite de la plataforma).

Qué es una "base de consentimiento", honestamente

El campo consent_basis en cada entrada del registro de auditoría nombra los términos específicos de la API de la plataforma y el mecanismo de autenticación utilizados para esa consulta. Certifica que la solicitud pasó por la superficie de API oficial y documentada de la plataforma bajo las credenciales que proporcionaste. No certifica que tu caso de uso específico sea legalmente suficiente para tu jurisdicción o contrato -- esa determinación es tuya, informada por un registro preciso, completo y a prueba de manipulaciones de lo que realmente sucedió.

Autoalojamiento / solo local por defecto

Nada en auditreach requiere una cuenta o servidor alojado. Cada comando se ejecuta completamente en tu máquina; el registro de auditoría es un archivo simple que posees. Este es el mismo flujo que Instalación arriba:

git clone https://github.com/RudrenduPaul/auditreach.git
cd auditreach
npm install
npm run build
node dist/cli.js search --platform reddit --query "..."

Desarrollo

TypeScript (este paquete):

npm install
npm run lint          # ESLint
npm run format        # Verificación de Prettier
npm run typecheck     # tsc --noEmit --strict
npm run test:coverage # vitest, 91 pruebas, 95.1% de cobertura de declaraciones

Python (python/):

cd python
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest                # 95 pruebas

Consulta CONTRIBUTING.md para las reglas sobre cómo agregar un nuevo cliente de plataforma -- la versión corta: solo API oficial, divulgación honesta de límites de velocidad, pruebas que simulan el límite de red, nunca nada que lea o escriba una credencial sin procesar fuera de src/auth/credential-store.ts (o python/src/auditreach/auth/credential_store.py en el lado de Python).

Seguridad

Consulta SECURITY.md para la política de divulgación de vulnerabilidades. Una revisión previa al lanzamiento de OWASP/STRIDE encontró cero hallazgos CRÍTICOS/ALTOS en el código propio de auditreach. ip-address y hono -- ambos extraídos transitivamente por el código de transporte HTTP de la dependencia oficial @modelcontextprotocol/sdk, una ruta que auditreach mcp nunca ejecuta (solo inicia el transporte stdio del SDK, StdioServerTransport) -- anteriormente tenían avisos; el campo overrides de package.json ahora fija ambos a versiones parcheadas. Al momento de escribir esto, npm audit --audit-level=high en una instalación nueva reporta 0 vulnerabilidades. El escaneo de secretos de GitHub y la protección de push están habilitados en este repositorio.

Historias de éxito

Cuatro problemas reales reportados contra praw-dev/praw -- PRAW, el envoltorio oficial de la API de Python de Reddit, y lo más cercano que este proyecto tiene a un trabajo previo -- se diagnosticaron contra el código fuente de auditreach y se utilizaron para cerrar brechas genuinas en esta herramienta antes de que tuviera un solo usuario externo. Cada línea a continuación está vinculada al informe real que la motivó.

  • praw#614 (@mananwason) -- preguntó cómo paginar más allá del límite de ~1,000 resultados de búsqueda de Reddit. La solución real es más limitada que eso: la propia API de Reddit no devuelve ningún cursor before/after una vez que superas ese límite, ya sea con paginación basada en cursor o no -- confirmado directamente en el hilo del problema. Lo que search() hace ahora realmente es extraer el cursor real de la respuesta de Reddit (SearchOutcome.nextCursor) y exponer las banderas --before/--after para que puedas paginar a través de los resultados dentro del conjunto de resultados limitado de una sola búsqueda, en lugar de solo ver siempre la primera página. Superar el límite de 1,000 elementos en sí requiere re-consultas con ventanas de tiempo de cloudsearch, lo cual aún no está implementado.
  • praw#1939 (@Auditormadness9) -- encontró un error 400 no diagnosticado causado por un nombre de subreddit que aún llevaba un prefijo r/ al inicio. Los errores de búsqueda ahora identifican esa causa específica cuando es la más probable: anteriormente la CLI solo devolvía un código de estado simple y te dejaba a ti la suposición.
  • praw#984 (@MaxMatti) -- solicitó una forma sencilla de verificar si las credenciales del bot de Reddit seguían siendo válidas, sin la confusa solución de recursión getMe() de PRAW. auditreach auth --platform reddit --verify hace exactamente eso ahora: una verificación ligera, sin necesidad de búsqueda, sin escribir nada en disco.
  • praw#119 (@nsp) -- encontró el histórico límite silencioso de 25 resultados de PRAW, descubrible solo leyendo el docstring de una clase base no relacionada; el propio mantenedor de PRAW admitió que "no estaba seguro de la mejor manera de hacer esto claro." --help y este README ahora indican el límite real y los límites por plataforma, y se emite una advertencia en tiempo de ejecución cada vez que una búsqueda realmente se trunca.

FAQ

¿Qué es auditreach, y qué lo hace diferente de otras herramientas de investigación de Reddit/YouTube? Es una CLI BYOK (y servidor MCP) que se comunica con Reddit y YouTube solo a través de sus APIs oficiales y documentadas, usando tus propias claves de API, y escribe una entrada de registro de auditoría encadenada por hash para cada consulta -- plataforma, endpoint, alcance, y la base específica de consentimiento/ToS para esa llamada. El diferenciador es lo que se niega a hacer: sin importación de cookies, sin scraping de sesión compartida, sin ruta de código que pretenda ser un usuario humano conectado. Consulta Por qué existe auditreach para el razonamiento completo y Cómo se compara para la tabla contra alternativas nombradas.

¿En qué plataformas y versiones funciona auditreach? El paquete npm (auditreach-cli) requiere Node.js 20 o superior (campo engines en package.json). El paquete PyPI (también auditreach-cli) requiere Python 3.10+ (requires-python en python/pyproject.toml), que también lleva el clasificador Operating System :: OS Independent. Las credenciales van a tu llavero del sistema operativo a través de @napi-rs/keyring (npm) o keyring (PyPI) en lugar de un archivo de configuración, por lo que no hay configuración específica de plataforma más allá de tener Node o Python instalado.

¿Almacena auditreach mis credenciales de Reddit o YouTube en algún lugar? No. Las credenciales van directamente a tu llavero del sistema operativo a través de @napi-rs/keyring (src/auth/credential-store.ts). No hay archivo de configuración, ni variable de entorno, ni ruta de código que escriba una credencial sin procesar en disco.

¿Cuántos resultados devuelve una búsqueda por defecto, y puedo obtener más? 25, silenciosamente, a menos que pases --max-results -- consulta Límites de resultados. El límite máximo es 100 para Reddit y 50 para YouTube. Se emite una advertencia en stderr cada vez que una búsqueda realmente alcanza el límite aplicado, ya sea el silencioso por defecto o un valor explícito que hayas pasado.

¿Cómo verifico que mis credenciales siguen siendo válidas sin ejecutar una búsqueda real? node dist/cli.js auth --platform reddit --verify (o --platform youtube). Realiza la verificación autenticada mínima e informa éxito o fallo, sin necesidad de --query, sin escribir archivo de resultados, y sin añadir entrada de registro de auditoría.

¿El registro de auditoría es realmente a prueba de manipulaciones, o solo un archivo de registro? A prueba de manipulaciones: el hash de cada entrada se calcula a partir de su propio contenido y la siguiente entrada lo referencia, por lo que verify-log puede señalar la entrada exacta que una edición manual rompió. Consulta la demostración en Qué hace.

¿Cuáles son las limitaciones actuales de auditreach? Dos que vale la pena conocer de antemano. Primero, X (Twitter) no está incluido -- los precios y límites de volumen de publicaciones de la API v2 de X han sido prohibitivos para equipos pequeños que hacen investigación real desde los cambios de 2023; consulta Cobertura de plataformas. Segundo, paginación de Reddit: search() lee el cursor real after/before de la propia respuesta de Reddit y expone las banderas --before/--after para paginar a través del conjunto de resultados de una sola búsqueda, pero eso no te lleva más allá del límite de ~1,000 elementos de búsqueda de Reddit -- consulta la historia de éxito de praw#614 para ver qué cubre la solución y qué no.

¿Cómo funciona el modo servidor MCP? auditreach mcp (npm) o pipx run auditreach-cli mcp (PyPI) inicia un servidor Model Context Protocol sobre stdio, construido sobre los SDK oficiales @modelcontextprotocol/sdk / mcp. Expone exactamente 3 herramientas -- search, auth_status (solo lectura, no puede establecer ni borrar credenciales), y verify_log -- cada una un envoltorio delgado alrededor del mismo núcleo programático que usan los comandos CLI, por lo que nada se reimplementa para la ruta de agente. Consulta auditreach mcp arriba para la tabla completa de herramientas y .well-known/agent.json para el manifiesto legible por máquina que un registro de agentes puede leer directamente.

¿Cómo se compara auditreach con Agent-Reach específicamente? Agent-Reach cubre más plataformas (seis, frente a las dos de auditreach) importando una sesión de navegador iniciada y haciendo scraping como ese usuario, a costo cero de API. auditreach solo llama a APIs oficiales y documentadas con tus propias claves y escribe una entrada de consentimiento/auditoría encadenada por hash por consulta; no tiene ninguna ruta de código de importación de sesión. Ningún enfoque es estrictamente mejor -- están construidos para diferentes compradores. Consulta Cómo se compara para la comparación completa lado a lado.

¿Es auditreach gratuito para uso comercial, y qué requiere realmente la licencia? Sí. auditreach es Apache 2.0 (consulta LICENSE), que permite uso comercial, modificación y redistribución, incluso como parte de un producto de código cerrado. Las condiciones son: incluir una copia de la licencia con cualquier cosa que redistribuyas, marcar cualquier archivo que modifiques, y mantener los avisos de copyright/atribución existentes. No otorga derechos sobre el nombre o las marcas comerciales de auditreach.

Contribuciones

Consulta CONTRIBUTING.md para las reglas sobre añadir un nuevo cliente de plataforma. Versión corta: solo API oficial, divulgación honesta de límites de tasa, pruebas que simulen el límite de red, nunca una ruta de código que lea o escriba una credencial sin procesar fuera de src/auth/credential-store.ts.

Licencia

Apache 2.0. Consulta LICENSE.