Usa npx @openai/codex-security bulk-scan para revisar varios repositorios en una sola campaña. Busca repositorios en tu cuenta personal de GitHub o en una organización, o proporciona un archivo CSV que especifique una revisión exacta de Git para cada repositorio.
El paquete @openai/codex-security es público. Para ejecutar análisis que usan la inferencia de OpenAI, necesitas acceso a Codex Security. Sigue la guía de inicio rápido de la CLI para instalar la CLI y luego selecciona las credenciales de tu proveedor.
Elegir el origen de los repositorios
| Origen | Cuándo usarlo |
|---|---|
| Búsqueda en GitHub | Para elegir de forma interactiva los repositorios de tu cuenta personal de GitHub o de una organización. |
| Inventario en CSV | Para ejecutar una campaña automatizada y repetible sobre revisiones exactas de los repositorios. |
Ambos flujos de trabajo guardan el progreso, conservan los resultados de cada repositorio y te permiten reanudar la campaña después de una interrupción.
Buscar repositorios en GitHub
Inicia sesión con GitHub CLI:
gh auth login
Inicia un análisis interactivo por lotes:
npx @openai/codex-security bulk-scan
La CLI te guía por estos pasos:
- Elige tu cuenta personal de GitHub o una organización.
- Revisa los repositorios que tuvieron actividad en los últimos 90 días.
- Busca en la lista de repositorios y selecciona los que quieras analizar.
- Elige un directorio para los resultados del análisis.
- Revisa los repositorios seleccionados y confirma la campaña.
La búsqueda excluye los repositorios archivados y los forks. La CLI registra el commit exacto de la rama predeterminada de cada repositorio seleccionado en <output-directory>/repositories.csv. Los análisis comienzan solo después de que confirmes la selección.
Para usar GitHub Enterprise Server, primero inicia sesión en tu host de GitHub:
gh auth login --hostname github.example.com
Configura GH_HOST al iniciar la búsqueda de repositorios:
GH_HOST=github.example.com npx @openai/codex-security bulk-scan
La búsqueda interactiva requiere una terminal. Si trabajas en CI, usas contenedores o ya tienes una lista de repositorios preparada, usa un inventario en CSV.
Crear un archivo CSV de repositorios
Crea un archivo CSV con una fila por repositorio e indica en ella la revisión exacta que quieres analizar:
id,repository,revision,scope,mode,prompt
payments,https://github.com/example/payments.git,0123456789abcdef0123456789abcdef01234567,services/api,standard,Review payment authorization and refunds.
identity,https://github.com/example/identity.git,fedcba9876543210fedcba9876543210fedcba98,,deep,Review session and identity boundaries.
El archivo CSV admite estas columnas:
| Columna | Obligatoria | Descripción |
|---|---|---|
id |
Sí | Identificador único del repositorio. Usa letras, números, puntos, guiones o guiones bajos. |
repository |
Sí | URL HTTPS, URL SSH o ruta a un repositorio local. Las rutas relativas se resuelven a partir del directorio del archivo CSV. |
revision |
Sí | SHA completo de un commit de Git, de 40 o 64 caracteres. No se admiten nombres de ramas, etiquetas ni hashes de commit abreviados. |
scope |
No | Ruta del directorio que se analizará, relativa a la raíz del repositorio. Omite el valor para analizar todo el repositorio. |
mode |
No | standard o deep. Omite el valor para usar el modo seleccionado en el comando. |
prompt |
No | Instrucciones de análisis específicas para este repositorio. |
Para obtener el SHA completo del commit de un repositorio local, ejecuta:
git -C /path/to/repository rev-parse HEAD
Ejecutar una campaña a partir de un archivo CSV
Indica el archivo CSV y un directorio de salida privado que esté fuera de los repositorios:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4
--workers controla cuántos repositorios se analizan en paralelo. Su valor predeterminado es 4. La opción no establece la cantidad de procesos independientes que ejecutan análisis estándar dentro de cada análisis profundo. Configura esos límites en [deep_scan]. Usa --mode deep para seleccionar el análisis profundo en las filas que no tengan su propio valor de mode. En cada fila del archivo CSV puedes elegir el modo de análisis y la parte del repositorio que se analizará.
Configura [deep_scan].max_time_hours para limitar el tiempo de ejecución de los procesos de cada análisis profundo de la campaña. La opción --max-time-hours funciona con scan, pero no con bulk-scan.
La CLI crea una copia de trabajo de cada repositorio en la revisión especificada, analiza el contenido seleccionado, registra el resultado y elimina la copia temporal. El análisis de un repositorio se considera completo cuando su estado en el archivo de manifiesto es completed y todos los artefactos de resultados obligatorios son válidos. Las brechas de cobertura no hacen que falle el análisis.
Compartir contexto e instrucciones de seguridad
Agrega documentos de arquitectura, modelos de amenazas o políticas de seguridad a todos los análisis con --knowledge-base. Repite la opción para agregar más archivos o directorios:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--knowledge-base /path/to/architecture.md \
--knowledge-base /path/to/security-policies
Para agregar instrucciones de análisis compartidas o ejecutar una tarea de seguimiento después de cada análisis, proporciona archivos de prompts:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--scan-prompt-file scan-instructions.md \
--post-scan-prompt-file follow-up.md
La CLI agrega el valor de prompt de cada repositorio en el CSV después de las instrucciones de análisis compartidas. Las instrucciones de seguimiento se ejecutan en la misma sesión autenticada tanto si el análisis termina correctamente como si ocurre un error. No se ejecutan si se cancela el análisis o si este alcanza su límite de costo. Las rutas de los archivos de prompts se resuelven a partir del directorio actual.
Elegir un modelo y un nivel de esfuerzo de razonamiento
De forma predeterminada, los análisis por lotes usan gpt-5.6-sol con un esfuerzo de razonamiento de xhigh. Para elegir otro modelo y otro nivel de esfuerzo para una campaña basada en un archivo CSV, usa un modelo al que tengas acceso con tus credenciales. Si inicias sesión con ChatGPT, consulta la disponibilidad de GPT-6.1 Sol antes de usar este ejemplo:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4 \
--model gpt-6.1-sol \
--effort mediumLas mismas opciones funcionan durante la búsqueda interactiva de repositorios:
npx @openai/codex-security bulk-scan --model gpt-6.1-sol --effort mediumUsa un valor de --effort compatible con tu modelo, tu proveedor y tu versión de Codex.
Para usar OpenRouter o Fireworks, configura OPENROUTER_API_KEY o FIREWORKS_API_KEY, respectivamente, y especifica --provider y --model. Para obtener información sobre las credenciales y ver ejemplos, consulta la configuración de OpenRouter o Fireworks o la configuración de Amazon Bedrock.
Revisar los resultados de la campaña
El directorio de salida contiene la configuración de la campaña, un registro de cada intento y los resultados de cada repositorio por separado:
security-scans/
├── manifest.json
├── results.jsonl
├── checkouts/
└── artifacts/
├── payments/
│ └── attempt-1/
│ ├── scan-manifest.json
│ ├── findings.json
│ └── report.md
└── identity/
└── attempt-1/
├── scan-manifest.json
├── findings.json
└── report.md
manifest.jsonregistra los repositorios, las revisiones fijadas, los alcances, los modos de análisis y las instrucciones compartidas o específicas de cada repositorio que se usan en la campaña.results.jsonlregistra cada intento de análisis de un repositorio, su estado, el directorio de artefactos y los detalles disponibles sobre costos o errores.report.mdcontiene un informe legible de un intento de análisis de un repositorio.- Abre
findings.jsonpara ver los hallazgos del intento yscan-manifest.jsonpara consultar el alcance configurado y lo que se excluyó de la revisión.
Si necesitas un resultado portátil, exporta el análisis completado de un repositorio:
npx @openai/codex-security export \
/path/outside/repositories/security-scans/artifacts/payments/attempt-1 \
--export-format sarif \
--output /path/outside/repositories/payments.sarif
Los resultados pueden contener fragmentos de código fuente y detalles sobre vulnerabilidades. Mantén el directorio de salida privado y fuera de los repositorios analizados. Define cuánto tiempo se conservarán los resultados.
Reanudar una campaña
Ejecuta el comando original con el mismo archivo CSV y el mismo directorio de salida:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4
La CLI reanuda la campaña e inicia nuevos intentos para los repositorios cuyo análisis quedó pendiente y que cumplen las condiciones para otro intento. Omite los análisis completados, incluidos los que tienen brechas de cobertura. Sus resultados siguen disponibles.
Si usas un directorio de salida existente, conserva el inventario de repositorios y las instrucciones de análisis y seguimiento originales. La CLI comprueba el archivo de manifiesto fijado para la campaña y rechaza cualquier campaña diferente. Usa un directorio de salida nuevo si cambias los repositorios, las revisiones, los alcances, los modos de análisis o las instrucciones compartidas o específicas de cada repositorio.
Reintentar el análisis de un repositorio tras un error
Usa --max-attempts para volver a intentar el análisis de un repositorio si ocurre un error temporal al crear la copia de trabajo o al ejecutar el análisis:
npx @openai/codex-security bulk-scan repositories.csv \
--output-dir /path/outside/repositories/security-scans \
--workers 4 \
--max-attempts 3
De forma predeterminada, se realiza un intento por repositorio. Cada intento tiene su propio registro de resultados y directorio de artefactos. Se puede reintentar si hay errores al crear la copia de trabajo, si falla el análisis o si faltan artefactos obligatorios o estos no son válidos. Los análisis completados no se repiten por brechas de cobertura ni por incumplimientos de la política de gravedad.
Los análisis por lotes usan estos códigos de salida:
| Código de salida | Significado |
|---|---|
0 |
Se completó el análisis de todos los repositorios y se cumplieron todas las políticas de gravedad configuradas. |
1 |
Se completaron los análisis, pero hubo hallazgos que alcanzaron un umbral de gravedad configurado. |
2 |
El análisis de un repositorio falló por un error en los datos de entrada, en la ejecución, en la integridad de los resultados o en una salida obligatoria. |
130 |
Se interrumpió la campaña con Ctrl-C. |
143 |
SIGTERM puso fin a la campaña. |
Ejecutar análisis por lotes en Docker
El repositorio de Codex Security incluye una configuración de Compose con seguridad reforzada para automatizar campañas basadas en archivos CSV en un host de Docker con Linux. El host debe permitir que los usuarios sin privilegios creen espacios de nombres de usuario.
Mantén el archivo CSV de repositorios, los resultados del análisis y el estado de inicio de sesión montados en directorios persistentes. Proporciona las credenciales de OpenAI mediante variables de entorno o un gestor de secretos. Para los repositorios privados de GitHub, proporciona GH_TOKEN o GITHUB_TOKEN de la misma manera.
Ejecuta la imagen con el archivo CSV y el directorio de salida montados:
docker compose run --rm codex-security \
bulk-scan /input/repositories.csv \
--output-dir /output \
--workers 4
Usa el mismo archivo CSV y el mismo directorio de salida montados para reanudar la campaña. Si usas GitHub Enterprise Server, asigna a CODEX_SECURITY_GIT_HOST el nombre de tu host de GitHub.
Para ver todas las opciones disponibles, consulta la referencia del comando bulk-scan. Si tienes preguntas sobre la cobertura de los análisis o los hallazgos, consulta las preguntas frecuentes sobre la CLI.