Skip to content

datanicaragua/ai-cli-sentinel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

22 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AI-CLI-Sentinel

PowerShell Linting

Sistema de seguridad para monitoreo y protecciΓ³n de interfaces de lΓ­nea de comandos con capacidades de IA.

ΒΏPor quΓ© necesito AI-CLI-Sentinel?

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.

βœ… Checklist de Confianza

ΒΏ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.

πŸ€– Agentes Soportados

AI-CLI-Sentinel gestiona de forma segura los siguientes agentes de IA:

Agente Desarrollador Gestor PropΓ³sito
Gemini CLI Google 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.

πŸš€ CaracterΓ­sticas

  • 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

πŸ“‹ Requisitos

  • 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, como aider-chat)

πŸ”§ InstalaciΓ³n

InstalaciΓ³n RΓ‘pida

# Clonar el repositorio
git clone https://github.com/datanicaragua/ai-cli-sentinel.git
cd ai-cli-sentinel

# Verificar estructura
Get-ChildItem -Recurse

ConfiguraciΓ³n Inicial

  1. Revisar configuraciΓ³n:

    Get-Content src\agents.allowlist.json
  2. Personalizar lista de permitidos: Edita src\agents.allowlist.json para agregar tus agentes permitidos en los arrays npm, winget y uv.

  3. Verificar permisos:

    Get-ExecutionPolicy
    # Si es necesario: Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

πŸ“– Uso

EjecuciΓ³n EstΓ‘ndar (Modo Seguro)

Actualiza solo los agentes en la lista blanca con respaldo de secretos:

# Ejecutar como Administrador
.\src\AI-CLI-Sentinel.ps1 -BackupSecrets

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Γ©s por 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 0 cuando todas las operaciones completan sin fallos.
  • Devuelve 1 si 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.

Modo SimulaciΓ³n (WhatIf)

Ver quΓ© harΓ­a el script sin realizar cambios:

.\src\AI-CLI-Sentinel.ps1 -WhatIf

En 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.

Modo Descubrimiento (AuditorΓ­a)

Buscar agentes de IA instalados que NO estΓ‘n en la lista blanca:

.\src\AI-CLI-Sentinel.ps1 -Discover

Este modo NO realiza cambios de actualizaciΓ³n. Exporta candidatos detectados en src\agents.candidates.json para revisiΓ³n.

Aprobar Candidatos Detectados (Paso ExplΓ­cito)

Revisar candidatos y decidir si se agregan a la lista blanca:

.\src\AI-CLI-Sentinel.ps1 -ApproveCandidates

Modo no interactivo (aprobaciΓ³n de todos los pendientes):

.\src\AI-CLI-Sentinel.ps1 -ApproveCandidates -AutoApproveCandidates

Este modo solo actualiza la allowlist. Luego ejecuta el flujo estΓ‘ndar para actualizar paquetes.

ΒΏQuΓ© comando debo usar?

  • 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

πŸ“˜ GuΓ­a RΓ‘pida para Usuarios No TΓ©cnicos

ΒΏQuΓ© hace AI-CLI-Sentinel?

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:

  1. Verifica quΓ© asistentes tienes instalados (modo Discover)
  2. Actualiza solo los que tΓΊ apruebas (lista blanca)
  3. Crea una copia de seguridad antes de hacer cambios (punto de restauraciΓ³n)
  4. Protege tus llaves de acceso (respaldo de secretos)

LΓ­nea de Tiempo del Proceso

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ 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                                              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Modo SimulaciΓ³n (Recomendado para Primera Vez)

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 -WhatIf

VerΓ‘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.

Personalizar Archivo de ConfiguraciΓ³n

.\src\AI-CLI-Sentinel.ps1 -ConfigFile "ruta\personalizada\agents.allowlist.json" -BackupSecrets

Personalizar Ruta de Logs

.\src\AI-CLI-Sentinel.ps1 -LogPath "C:\Logs\sentinel.log" -BackupSecrets

Personalizar Ruta del Reporte JSON

.\src\AI-CLI-Sentinel.ps1 -ReportPath "C:\Logs\sentinel-report.json" -BackupSecrets

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

πŸ“ Estructura del Proyecto

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     # 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

πŸ”„ Flujo de EjecuciΓ³n

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
Loading

πŸ§ͺ Testing

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, -BackupSecrets y -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.

πŸ”’ Seguridad

Para reportar vulnerabilidades de seguridad, por favor usa el formulario de seguridad o consulta SECURITY.md.

Referencias de Seguridad

Este proyecto implementa prΓ‘cticas de seguridad basadas en estΓ‘ndares reconocidos:

  1. 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
  2. Node.js Security Best Practices

    • Utiliza --ignore-scripts para prevenir la ejecuciΓ³n de malware durante la instalaciΓ³n de paquetes npm.
    • Referencia: npm Security Best Practices
  3. Microsoft Volume Shadow Copy Service (VSS)

    • Implementa puntos de restauraciΓ³n del sistema antes de realizar cambios crΓ­ticos.
    • Referencia: Windows System Restore
  4. Repositorios Oficiales

🀝 Contribuir

Las contribuciones son bienvenidas! Por favor lee CONTRIBUTING.md para mΓ‘s detalles sobre cΓ³mo contribuir al proyecto.

πŸ“„ Licencia

Este proyecto estΓ‘ licenciado bajo la Licencia MIT - ver el archivo LICENSE para mΓ‘s detalles.

πŸ‘₯ Autores

Gustavo Ernesto MartΓ­nez CΓ‘rdenas Lead Data Scientist & Architect at DataNicaragua

GitHub LinkedIn


DataNicaragua - OrganizaciΓ³n

πŸ™ Agradecimientos

Gracias a todos los contribuidores que hacen posible este proyecto.

πŸ“ž Soporte


⭐ Si este proyecto te resulta útil, considera darle una estrella en GitHub!

About

Security-hardened management tool for AI CLI agents. Mitigates supply chain attacks (NPM/Winget) using VSS snapshots, secret backups, and isolated updates.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors