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: Puedes agregar mΓ‘s agentes editando el archivo
src/agents.allowlist.json. Solo se actualizarΓ‘n los agentes que estΓ©n explΓcitamente en tu lista blanca.
- 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 automΓ‘ticamente tus llaves de acceso 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:
Get-Content src\agents.allowlist.json -
Personalizar lista de permitidos: Edita
src\agents.allowlist.jsonpara agregar tus agentes permitidos en los arraysnpm,wingetyuv. -
Verificar permisos:
Get-ExecutionPolicy # Si es necesario: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
Actualiza solo los agentes en la lista blanca con respaldo de secretos:
# Ejecutar como Administrador
.\src\AI-CLI-Sentinel.ps1 -BackupSecretsComportamiento 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
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 (respaldo de secretos)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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 de acceso (.ssh, .config)β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β 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.\src\AI-CLI-Sentinel.ps1 -LogPath "C:\Logs\sentinel.log" -BackupSecrets.\src\AI-CLI-Sentinel.ps1 -ReportPath "C:\Logs\sentinel-report.json" -BackupSecretsSi 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 -BackupSecretsai-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 # 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 agents.allowlist.json]
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 .ssh, .config, .npmrc]
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, 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,-BackupSecretsy-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!