Sistema de seguridad para monitoreo y protección de interfaces de línea de comandos con capacidades de IA.
Si usas herramientas de inteligencia artificial en tu terminal (como Gemini, Claude, Codex o GitHub Copilot), necesitas mantenerlas actualizadas para obtener las últimas mejoras. Sin embargo, actualizar software desde internet puede ser riesgoso. AI-CLI-Sentinel es tu "cinturón de seguridad": automatiza la actualización de tus agentes favoritos asegurándose de que, si algo sale mal o el paquete contiene errores, tu computadora y tus llaves de acceso (API Keys) estén protegidas.
¿Qué hace este script por mí?
- ✅ No toca tus archivos personales: Solo respalda configuraciones de IA.
- ✅ Es reversible: Crea un punto de restauración para que puedas "volver atrás".
- ✅ Es silencioso: Hace el trabajo pesado en segundos sin pedirte configuraciones complejas.
- ✅ Solo actualiza lo que tú apruebas: Trabaja con una lista blanca estricta de agentes confiables.
- ✅ Protege tus secretos: Respalda automáticamente tus llaves de acceso antes de cualquier cambio.
AI-CLI-Sentinel gestiona de forma segura los siguientes agentes de IA:
| Agente | Desarrollador | Gestor | Propósito |
|---|---|---|---|
| Gemini CLI | npm | Asistente multimodal y generación de código. | |
| Claude Code | Anthropic | npm | Programación en pareja (Pair programming) avanzada. |
| Codex CLI | OpenAI | npm | Generación de comandos y lógica de programación. |
| Qwen Code | Alibaba | npm | Modelos de lenguaje especializados en código. |
| GitHub Copilot CLI | GitHub | npm | Asistencia de IA para comandos y flujos en terminal. |
| Aider | Aider | uv tool | Asistente para desarrollo de código asistido por IA en terminal. |
Nota: En operación elevada, la lista blanca aprobada debe vivir en
%ProgramData%\AI-CLI-Sentinel\policy\agents.allowlist.json. El archivosrc/agents.allowlist.jsonqueda como fallback del repositorio y activará una advertencia de seguridad.
- Seguridad primero: Solo actualiza agentes que tú explícitamente apruebas en tu lista blanca
- Protección automática: Crea puntos de restauración antes de cualquier cambio
- Respaldo de secretos: Guarda tus llaves de acceso solo en una ruta explícita y validada antes de actualizar
- Modo descubrimiento: Encuentra agentes instalados que no están en tu lista blanca (sin hacer cambios)
- Prevención de malware: Usa técnicas avanzadas para evitar la ejecución de código malicioso durante instalaciones
- Registro completo: Mantiene un log detallado de todas las operaciones para tu revisión
- PowerShell 5.1 o superior (recomendado: PowerShell 7.4+)
- Windows 10/11 o Windows Server 2016+
- Privilegios de Administrador (requeridos para VSS y actualizaciones globales)
- Node.js y npm instalados (para gestión de paquetes NPM)
- Winget instalado (para gestión de aplicaciones Windows)
- UV instalado (para gestión de herramientas Python tipo
uv tool, comoaider-chat)
# Clonar el repositorio
git clone https://github.com/datanicaragua/ai-cli-sentinel.git
cd ai-cli-sentinel
# Verificar estructura
Get-ChildItem -Recurse-
Revisar configuración de fallback del repositorio:
Get-Content src\agents.allowlist.json -
Instalar la raíz de confianza protegida:
# Ejecutar como Administrador New-Item -ItemType Directory -Path "$env:ProgramData\AI-CLI-Sentinel\policy" -Force Copy-Item "src\agents.allowlist.json" "$env:ProgramData\AI-CLI-Sentinel\policy\agents.allowlist.json" -Force
-
Personalizar lista de permitidos: Edita
%ProgramData%\AI-CLI-Sentinel\policy\agents.allowlist.jsonpara agregar tus agentes permitidos en los arraysnpm,wingetyuv. Usarsrc\agents.allowlist.jsondirectamente solo es un fallback para desarrollo o arranque inicial y emitirá una advertencia de seguridad durante la ejecución. -
Verificar permisos:
Get-ExecutionPolicy # Si es necesario: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
AI-CLI-Sentinel prioriza la allowlist protegida en:
$env:ProgramData\AI-CLI-Sentinel\policy\agents.allowlist.jsonEsta ruta debe ser administrada con ACLs de administradores y tratada como política de seguridad. Si el archivo no existe, el script cae de forma controlada a src\agents.allowlist.json, pero lo reporta como fallback inseguro para recordar que el repositorio local no debe ser la raíz de confianza de una ejecución elevada.
Actualiza solo los agentes en la lista blanca con respaldo de secretos:
# Ejecutar como Administrador
.\src\AI-CLI-Sentinel.ps1 -BackupSecrets -BackupPath "C:\SecureBackups"-BackupSecrets requiere -BackupPath. Las rutas bajo Desktop, OneDrive u otras carpetas conocidas de sincronización en nube se bloquean por defecto para reducir el riesgo de exfiltración de credenciales.
Comportamiento funcional:
- Primero compara la versión instalada contra la versión disponible.
- Solo ejecuta la actualización cuando detecta una versión más reciente.
- Genera un reporte JSON estructurado con el detalle
antes -> despuéspor agente, salvo que uses-NoReport. - Si no puede escribir el reporte JSON solicitado, la ejecución se considera fallida para no perder trazabilidad.
Comportamiento de salida:
- Devuelve
0cuando todas las operaciones completan sin fallos. - Devuelve
1si una o más actualizaciones fallan (útil para automatización/CI).
Resumen esperado por estados:
updated: se instaló una versión más reciente.would-update: hay una versión más reciente, pero la ejecución fue con-WhatIf.already-current: el agente ya estaba al día.not-installed: el agente está en allowlist, pero no está instalado localmente.failed: hubo un fallo operativo al consultar o actualizar.unknown: no se pudo determinar el estado final con certeza.
Ver qué haría el script sin realizar cambios:
.\src\AI-CLI-Sentinel.ps1 -WhatIfEn este modo, los agentes con una versión más reciente disponible se reportan como would-update.
No se escriben ni el archivo de log ni el reporte JSON para evitar efectos laterales.
Buscar agentes de IA instalados que NO están en la lista blanca:
.\src\AI-CLI-Sentinel.ps1 -DiscoverEste modo NO realiza cambios de actualización. Exporta candidatos detectados en src\agents.candidates.json para revisión.
Revisar candidatos y decidir si se agregan a la lista blanca:
.\src\AI-CLI-Sentinel.ps1 -ApproveCandidatesModo no interactivo (aprobación de todos los pendientes):
.\src\AI-CLI-Sentinel.ps1 -ApproveCandidates -AutoApproveCandidatesEste modo solo actualiza la allowlist. Luego ejecuta el flujo estándar para actualizar paquetes.
- Si quieres ver qué haría el script sin tocar nada:
./src/AI-CLI-Sentinel.ps1 -WhatIf - Si quieres detectar CLIs instalados fuera de tu allowlist:
./src/AI-CLI-Sentinel.ps1 -Discover - Si quieres revisar y aprobar candidatos detectados:
./src/AI-CLI-Sentinel.ps1 -ApproveCandidates - Si quieres ejecutar la actualización real con respaldo de secretos:
./src/AI-CLI-Sentinel.ps1 -BackupSecrets -BackupPath "C:\SecureBackups"
Imagina que tienes varios asistentes de IA instalados en tu computadora (como Gemini, Claude, Codex). Cada cierto tiempo, estos asistentes reciben actualizaciones con nuevas funciones y correcciones de errores. AI-CLI-Sentinel es como un asistente personal que:
- Verifica qué asistentes tienes instalados (modo Discover)
- Actualiza solo los que tú apruebas (lista blanca)
- Crea una copia de seguridad antes de hacer cambios (punto de restauración)
- Protege tus llaves de acceso en una ruta local explícita y no sincronizada
┌─────────────────────────────────────────────────────────────┐
│ 1. Inicio: Verificas que tienes permisos de administrador │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 2. Preparación: Se crea un punto de restauración del sistema│
│ (por si necesitas "volver atrás") │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 3. Respaldo: Se guardan tus llaves en BackupPath validado │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 4. Actualización: Se actualizan solo los agentes aprobados │
│ en tu lista blanca │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────────┐
│ 5. Finalización: Todo listo. Tus agentes están actualizados │
│ y protegidos │
└─────────────────────────────────────────────────────────────┘
Antes de ejecutar el script por primera vez, usa el modo simulación para ver qué haría sin hacer cambios reales:
.\src\AI-CLI-Sentinel.ps1 -WhatIfVerás mensajes como:
What if: Performing the operation 'Crear Punto de Restauración (VSS)'...What if: Performing the operation 'Actualizar NPM'...
Esto te permite entender exactamente qué hará el script antes de ejecutarlo realmente.
.\src\AI-CLI-Sentinel.ps1 -ConfigFile "ruta\personalizada\agents.allowlist.json" -BackupSecrets -BackupPath "C:\SecureBackups".\src\AI-CLI-Sentinel.ps1 -LogPath "C:\Logs\sentinel.log" -BackupSecrets -BackupPath "C:\SecureBackups".\src\AI-CLI-Sentinel.ps1 -ReportPath "C:\Logs\sentinel-report.json" -BackupSecrets -BackupPath "C:\SecureBackups"Si la ruta indicada no es escribible y no usas -NoReport, el script terminará con error para evitar una ejecución sin evidencia estructurada.
Para desactivar el reporte estructurado en una ejecución puntual:
.\src\AI-CLI-Sentinel.ps1 -NoReport -BackupSecrets -BackupPath "C:\SecureBackups"ai-cli-sentinel/
├── .github/
│ ├── workflows/
│ │ └── ci-lint.yml # CI: Validación automática
│ └── ISSUE_TEMPLATE/
│ ├── bug_report.md
│ ├── feature_request.md
│ └── security_report.md
├── src/
│ ├── AI-CLI-Sentinel.ps1 # Script principal
│ └── agents.allowlist.json # Fallback de configuración
├── tests/
│ └── AI-CLI-Sentinel.tests.ps1 # Pruebas unitarias
├── docs/
│ ├── architecture.md # Arquitectura del sistema
│ └── recovery.md # Guía de recuperación
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
└── SECURITY.md
flowchart TD
A[Inicio: AI-CLI-Sentinel] --> B{¿Privilegios<br/>Admin?}
B -->|No| C[Error: Se requieren privilegios]
B -->|Sí| D[Cargar allowlist protegida]
D --> E{¿Modo<br/>Discover?}
E -->|Sí| F[Buscar agentes instalados]
F --> G[Reportar candidatos]
G --> H[Fin: Solo reporte]
E -->|No| I{¿WhatIf?}
I -->|Sí| J[Mostrar acciones simuladas]
J --> H
I -->|No| K[Crear punto VSS]
K --> L{¿Backup<br/>Secrets?}
L -->|Sí| M[Respaldar secretos en BackupPath]
L -->|No| N[Actualizar agentes NPM]
M --> N
N --> O[Actualizar aplicaciones Winget]
O --> P[Fin: Actualización completa]
style A fill:#e1f5ff
style C fill:#ffcccc
style H fill:#ccffcc
style P fill:#ccffcc
Ejecutar tests desde terminal (runner robusto):
# Ejecutar tests (instala/usa Pester compatible automáticamente)
.\scripts\run-tests.ps1 -InstallPester5 -FailOnError¿Cuándo correr tests?
- Antes de abrir un Pull Request.
- Después de cambios en
src/AI-CLI-Sentinel.ps1. - Después de cambios en configuración o flujo de actualización (
src/agents.allowlist.json, raíz de confianza protegida, control de errores, logging). - Después de atender comentarios de revisión o refactors en el script.
¿Para qué sirven estos tests?
- Verifican que el script principal exista y mantenga parámetros esperados como
-Discover,-BackupSecrets,-BackupPathy-ConfigFile. - Validan que la configuración JSON tenga estructura correcta.
- Detectan regresiones básicas en sintaxis PowerShell, decisiones de seguridad y el nuevo contrato de actualización por versión/reporte estructurado.
Si solo vas a usar la herramienta y no estás modificando código, normalmente no necesitas ejecutar estos tests. Están orientados sobre todo a desarrollo, mantenimiento y validación antes de publicar cambios.
Para reportar vulnerabilidades de seguridad, por favor usa el formulario de seguridad o consulta SECURITY.md.
Este proyecto implementa prácticas de seguridad basadas en estándares reconocidos:
-
OWASP Top 10 para LLM (2024-2025)
- Mitiga riesgos de "Insecure Output Handling" mediante validación estricta de entrada.
- Previene ataques de inyección indirecta mediante lista blanca de agentes.
- Referencia: OWASP LLM Top 10
-
Node.js Security Best Practices
- Utiliza
--ignore-scriptspara prevenir la ejecución de malware durante la instalación de paquetes npm. - Referencia: npm Security Best Practices
- Utiliza
-
Microsoft Volume Shadow Copy Service (VSS)
- Implementa puntos de restauración del sistema antes de realizar cambios críticos.
- Referencia: Windows System Restore
-
Repositorios Oficiales
- Solo interactúa con repositorios oficiales y verificados:
- npm Registry - Para paquetes Node.js
- Microsoft Winget - Para aplicaciones Windows
- OpenAI Codex - Documentación oficial de Codex CLI
- Qwen Code - Repositorio oficial de Qwen Code
- Solo interactúa con repositorios oficiales y verificados:
Las contribuciones son bienvenidas! Por favor lee CONTRIBUTING.md para más detalles sobre cómo contribuir al proyecto.
Este proyecto está licenciado bajo la Licencia MIT - ver el archivo LICENSE para más detalles.
Gustavo Ernesto Martínez Cárdenas Lead Data Scientist & Architect at DataNicaragua
DataNicaragua - Organización
Gracias a todos los contribuidores que hacen posible este proyecto.
- Issues: GitHub Issues
- Documentación: Ver carpeta
docs/
⭐ Si este proyecto te resulta útil, considera darle una estrella en GitHub!