11 de septiembre de 2026 · Por YasKad
pranshuparmar/witr

witr: una CLI que responde por qué está corriendo un proceso

pranshuparmar/witr · 22.498★ · 786 forks

witr es una utilidad de línea de comandos y una interfaz de terminal interactiva (TUI) escrita en Go que responde a una única pregunta: «¿Por qué está esto corriendo?». Ante un proceso, un puerto, un contenedor o un archivo abierto, reconstruye la cadena causal exacta que originó esa instancia —el sistema de inicialización, el supervisor, la sesión, el contenedor o el cron— y la presenta como una salida legible por humanos, como JSON o en una TUI. A 4 de septiembre de 2026 lleva 22.073 estrellas.

La fila de cola se encontraba malformada (129 127_pranshuparmar_witr); se resuelve sin ambigüedad como el repositorio pranshuparmar/witr en GitHub, que es el único con ese nombre bajo ese usuario.

Origen

El repositorio fue creado el 20 de diciembre de 2025 por Pranshu Parmar (pranshuparmar), cuyo correo pranshu.parmar@gmail.com figura como mantenedor en la configuración de publicación (.goreleaser.yml). Seis días después, el 26 de diciembre de 2025, Parmar publicó el envío «Show HN: Witr – Explain why a process is running on your Linux system» en Hacker News (hilo 46392910), que alcanzó 526 puntos y 105 comentarios.

El README enlaza una historia del propio autor en Medium («witr: Why is this running», por @pranshu.parmar) y al hilo de Hacker News como referencia del contexto de diseño. En ese hilo, el autor aclara el alcance desde el principio: witr no pretende reemplazar herramientas de monitoreo u observabilidad, sino cubrir «esos momentos en los que entras por SSH a una máquina y necesitas entender rápido por qué algo está corriendo sin revisar manualmente configuraciones, trabajos cron ni árboles de servicios».

El proyecto ha ido ganando superficie de distribución de forma orgánica y comunitaria: la conversación de lanzamiento produjo una entrada en el AUR a solicitud del propio autor, la sugerencia de soporte Nix (PR #5, aportada por el usuario sestep), y más tarde su ingreso en Homebrew, conda-forge y repositorios oficiales de Debian/Ubuntu. La versión más reciente consultada es v0.3.3 (24 de junio de 2026).

Un detalle señalado por la comunidad: la documentación del proyecto reconoce que fue desarrollado con asistencia de IA/LLM (GitHub Copilot, ChatGPT y herramientas similares), «supervisado por un humano que a veces sabía lo que hacía». En el hilo de lanzamiento, el usuario zenoprax cuestionó la contradicción de pedir confianza durante incidentes para una herramienta desarrollada con asistencia de IA; el autor respondió que ese apoyo reduce la barrera de esfuerzo y conocimiento necesarios para construirla.

Filosofía y principios

El README condensa la filosofía en torno a hacer explícita la causalidad frente a las herramientas existentes. Afirma que ps, top, lsof, ss, systemctl y docker ps exponen estado y metadatos: muestran qué está corriendo, pero dejan al usuario inferir por qué correlacionando manualmente varias salidas. witr responde en cambio a cuatro preguntas por objetivo:

  1. ¿Qué está corriendo?
  2. ¿Cómo empezó?
  3. ¿Qué lo mantiene corriendo?
  4. ¿A qué contexto pertenece?

Un principio central es tratar todo como una pregunta de proceso: puertos, servicios, contenedores y comandos se resuelven finalmente a un PID, y sobre ese PID se construye la cadena causal. Los principios de salida declarados son: una pantalla por defecto (esfuerzo razonable), orden determinista, explicación en formato narrativo y detección de mejor esfuerzo con incertidumbre explícita —es decir, witr declara cuando no está seguro en lugar de inventar una causa.

El README define criterios de éxito concretos: que un usuario pueda responder «¿por qué está esto corriendo?» en segundos, que reduzca la dependencia de varias herramientas, que la salida sea comprensible bajo estrés y que el usuario confíe en él durante incidentes.

Cómo funciona

witr identifica el objetivo (por nombre, PID, puerto, archivo o contenedor), resuelve el PID y construye la cadena de ascendencia. La salida estándar se organiza en secciones:

  • Target: lo que el usuario consultó.
  • Process: ejecutable, PID, usuario, comando, tiempo de inicio y número de reinicios.
  • Why It Exists: la cadena causal de ascendencia (por ejemplo systemd (pid 1) → pm2 (pid 5034) → node (pid 14233)). Es el valor central de la herramienta.
  • Source: el sistema principal responsable de iniciar o supervisar el proceso (esfuerzo de mejor esfuerzo). Solo se selecciona una fuente primaria: unidad systemd (con detalle de temporizador), servicio launchd (con calendario), sesión SSH (con IP remota y terminal), contenedor Docker, pm2, cron, shell interactivo (detecta tmux/screen) o sandbox Snap/Flatpak.
  • Context: directorio de trabajo, nombre y rama del repositorio git (se busca hacia arriba desde el directorio de trabajo hasta encontrar .git), nombre/imagen del contenedor, y si la conexión es pública o privada.
  • Warnings: observaciones no bloqueantes, como proceso corriendo como root, capacidades Linux peligrosas en procesos no root, escucha en interfaz pública (0.0.0.0/::), múltiples reinicios, alto consumo de memoria (>1 GB RSS), tiempo de ejecución >90 días, binario eliminado o indicadores de inyección de librerías (LD_PRELOAD, DYLD_*).

Una detallada visualización cyberpunk en modo oscuro de causalidad de procesos, un nodo de proceso central brillante conectado por líneas luminosas a un árbol ascendente de ascendencia, con nodos abstractos etiquetados por iconos simbólicos para systemd, pm2, node, shell, contenedor y sesión de usuario, estelas de luz neón azul, cian y violeta fluyendo hacia arriba, un gráfico limpio estilo terminal con profundidad y paralaje, insignias PID flotantes, contadores de reinicio e indicadores de tiempo de inicio representados como chips brillantes minimalistas

Modo interactivo (TUI): ejecutar witr sin argumentos o con -i abre un panel en tiempo real con cuatro pestañas —Procesos, Puertos, Contenedores y Bloqueos— con un panel lateral del árbol de ascendencia del proceso resaltado. Permite enviar señales (Kill, Terminate, Pause, Resume) y renice desde la interfaz (solo Unix), navegación con ratón, tema adaptativo a fondo claro/oscuro y auto-actualización con cadencia adaptativa (empieza a 3 s y retrocede bajo carga).

Una futurista interfaz de usuario de terminal interactiva renderizada como un holograma cyberpunk oscuro, cuatro paneles de pestaña brillantes etiquetados por iconos abstractos para procesos, puertos, contenedores y bloqueos, un panel lateral mostrando un árbol de ascendencia de proceso resaltado, métricas actualizándose en tiempo real, botones de señal representados como iconos neón para kill, terminate, pause y resume, indicadores de actualización adaptativa, cursor de navegación con ratón con brillo suave, alternador de tema claro/oscuro representado por un pequeño glifo luna-sol

Códigos de salida (documentados para scripts, CI y monitoreo):

CódigoSignificado
0Limpio: proceso encontrado, sin advertencias
1Advertencias: proceso encontrado con una o más advertencias
2No encontrado: sin proceso o servicio coincidente
3Permiso denegado: privilegios insuficientes
4Entrada inválida: argumentos erróneos o coincidencia ambigua
5Error interno: fallo inesperado

Soporte por plataforma (según la matriz del README): Linux (x86_64, arm64) con soporte completo vía /proc; macOS con ps, lsof, sysctl, pgrep; Windows con APIs nativas Win32 (ToolHelp32, PSAPI, Service Control Manager, sin depender de PowerShell ni WMI) y FreeBSD con procstat, ps, lsof. Los contenedores se detectan a través de Docker, Podman, nerdctl, K8s/crictl, Incus, LXC, LXD y jails de FreeBSD.

El ecosistema

Repositorios del autor. pranshuparmar mantiene además de witr (22 073 estrellas) el repositorio pranshuparmar/witr-pkgs (1 estrella), un contenedor de paquetes «auto-mantenido» que alberga las definiciones de Chocolatey, npm, Scoop y winget con workflows de actualización automática. El resto de repositorios del usuario son proyectos personales menores (juegos en navegador con Three.js como neon-mayhem con 2 estrellas y downhill-mayhem con 11, yolovest, joke, sudoku-creator-solver), sin relación funcional con witr.

Puertos y reimplementaciones de la comunidad (cifras de estrellas según la API de GitHub en esta investigación):

  • rewrite-everything-in-rust/witr-rs — reescritura completa en Rust de witr que declara paridad de funcionalidad y agrega seguridad de tipos; 14 estrellas, creado el 29 de diciembre de 2025.
  • bobozi-cmd/witr-py — reimplementación en Python del proyecto (lema en chino: «基于 witr 项目,使用 python 进行复刻»); 6 estrellas, creado el 4 de enero de 2026.
  • supervoidcoder/win-witr — reimplantación para Windows en C++ puro, marcada como WIP (trabajo en curso); 3 estrellas, creada el 1 de enero de 2026. Su autor declara que la comenzó antes de que el desarrollador original publicara una versión de Windows.
  • dmitrymx/witr-gui — cliente gráfico (Electron/React/Vite) para Windows descrito como «monitor de procesos y analizador de seguridad» sobre witr, con interfaz documentada en ruso; 2 estrellas, creado el 15 de mayo de 2026.

El repositorio acumula 772 bifurcaciones; la página de bifurcaciones recuperada muestra copias sin diferencias sustanciales, por lo que los cuatro proyectos anteriores son los derivados no triviales visibles. El proyecto también inspiró una bifurcación homenaje/parodia, Fantastic-Computing-Machine/wtftr («Why the fuck is this running?»), sin funcionalidad adicional documentada. El README agradece como patrocinadores a Tim Colson (timcolson) y Rijurekh Bose (R-Bose).

Un concepto de instalación de herramienta de desarrollador multiplataforma en estilo cyberpunk oscuro, cuatro paneles holográficos flotantes de sistema operativo para Linux, macOS, Windows y FreeBSD, cada uno conectado a un icono binario central brillante, insignias de gestor de paquetes representadas por símbolos neón abstractos para apt, brew, conda, winget, Chocolatey, Scoop, npm e instalación Go, un concepto de binario estático único mostrado como un artefacto compacto brillante, fondo oscuro limpio, acentos neón azul y magenta

Herramientas de publicación. Los releases se generan con GoReleaser (.goreleaser.yml), que produce binarios, un SHA256SUMS y paquetes .deb, .rpm y .apk a través de nfpm, e inserta metadatos de versión/commit/fecha para witr --version.

Una visual de ecosistema comunitario para un repositorio popular de código abierto, un nodo central de repositorio brillante estilo GitHub con 22.000 estrellas representadas como una constelación de pequeñas estrellas, ramificándose en proyectos derivados mostrados como nodos más pequeños para Rust, Python, C++ y un cliente GUI, conectados por líneas neón, símbolos sutiles de fork y pull request, iconos de pipeline de release para GoReleaser, checksums, paquetes deb/rpm/apk y workflows de CI, fondo cyberpunk oscuro, acentos neón cian, magenta y dorado

Estado oficial / semioficial

witr no cuenta con un respaldo de un único gran vendor, pero ha alcanzado una adopción de facto notable en el ecosistema de distribución de software libre:

  • Repositorios oficiales de distribuciones: el README documenta la instalación con sudo apt install witr desde los repositorios oficiales de Debian (sid) y Ubuntu 26.04+, así como en derivadas como Kali, Devuan y Raspbian. También figura en Homebrew core (brew install witr, fórmula witr 0.3.3), conda-forge (conda install -c conda-forge witr), MacPorts, FreeBSD ports (pkg install witr), GNU Guix y AOSC OS.
  • Windows: manifiestos en winget (winget install -e --id PranshuParmar.witr), Chocolatey (choco install witr) y Scoop (scoop install main/witr).
  • npm: paquete @pranshuparmar/witr (versión 0.3.3).
  • Product Hunt: el proyecto figura como destacado (post 1211309) con el lema «ps, top and lsof tell you what is running. witr tells you why.»
  • Trendshift: presente en la lista de repositorios en tendencia (badge trendshift.io/repositories/18714).

En la práctica, esto significa que witr es instalable desde los catálogos oficiales de la mayoría de las plataformas principales, aunque el README avisa de que los paquetes de la comunidad pueden ir por detrás de la última versión de GitHub. No existe una designación formal de «estándar», pero su presencia transversal en los repositorios de distros y gestores de paquetes lo sitúa como una referencia de facto para responder la pregunta de causalidad de procesos.

Guía rápida de uso

Instalación y primer arranque

Prerrequisito: un sistema Linux, macOS, Windows o FreeBSD. Las opciones documentadas:

# Unix (Linux, macOS y FreeBSD) — detecta SO y arquitectura, instala a /usr/local/bin/witr
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash
# Windows (PowerShell) — descarga el zip, verifica checksum y lo instala en %LocalAppData%\witr\bin
irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex

Por gestor de paquetes:

sudo apt install witr                # Debian sid / Ubuntu 26.04+
brew install witr                    # Homebrew
conda install -c conda-forge witr    # conda-forge (también mamba / pixi)
yay -S witr-bin                      # AUR (Arch)
npm install -g @pranshuparmar/witr   # npm (multiplataforma)
winget install -e --id PranshuParmar.witr   # Windows
choco install witr                            # Chocolatey
scoop install main/witr                       # Scoop

Desde fuente: go install github.com/pranshuparmar/witr/cmd/witr@latest. En Nix, nix run github:pranshuparmar/witr -- --help.

Al primer arranque, witr --version y man witr verifican la instalación. Ejecutar witr sin argumentos abre la TUI. El README recomienda, si se usa un gestor de paquetes, instalar por ese medio para facilitar las actualizaciones; si no, el script de instalación es la vía más rápida. Existe también una demostración interactiva en el navegador (sin instalación) en https://pranshuparmar.github.io/witr/ que simula una máquina Linux con un tutorial guiado y un modo libre.

Flujos de trabajo habituales

  • Rastrear por nombre: witr node muestra el proceso, el usuario, el comando, cuándo empezó y la cadena systemd → pm2 → node, junto con el directorio de trabajo, el repositorio git y los sockets.
  • Resolver un puerto: witr --port 5000 --short devuelve la cadena en una sola línea, por ejemplo systemd (pid 1) → PM2 ... → python (pid ...).
  • Inspeccionar un PID en forma de árbol: witr --pid 143895 --tree imprime el árbol de ascendencia e incluye hasta 10 procesos hijos, resaltando el objetivo.
  • Consultar un contenedor: witr --container redis busca en todos los runtimes detectados (Docker, Podman, nerdctl, K8s/crictl, Incus, LXC, LXD, jails de FreeBSD) por nombre, imagen, comando o etiqueta de compose; con --verbose añade montajes, redes y metadatos de compose.
  • Entradas mixtas: witr nginx --port 5432 --pid 1234 muestra los resultados de forma secuencial con separadores etiquetados.
  • Uso en script: witr nginx --short; echo $? y actuar según el código de salida (0 limpio, 2 no encontrado, 3 permisos, etc.).

Una escena dramática oscura enfocada en la resolución de puertos de red: un número de puerto brillante representado como una insignia neón abstracta sobre un terminal, conectado por cables de datos luminosos a un nodo de proceso, un icono de contenedor, un indicador de red pública/privada y un endpoint de socket, paneles circundantes mostrando IP remota y sesión de terminal como glifos abstractos, fondo negro profundo con cuadrícula sutil, acentos neón cian, azul eléctrico y ámbar cálido, iluminación volumétrica

Configuración esencial

witr no usa un archivo de configuración persistente; la «configuración» son sus banderas, de las que un usuario nuevo tocará primero:

  • -i, --interactive: abre la TUI. También se activa sola si no se dan argumentos ni banderas de objetivo.
  • -x, --exact: coincidencia exacta de nombre (por defecto hace coincidencia parcial/fuzzy).
  • --json: salida máquina-legible para integrar en pipelines.
  • --no-color: desactiva el color (útil al redirigir a archivos o logs).
  • --verbose: muestra información extendida (montajes, redes, metadatos de compose, etc.).

Todas las banderas de objetivo (--pid, --port, --file, --container) son repetibles y combinables entre sí y con argumentos posicionales. Las finalizaciones de shell se generan con witr completion bash|zsh|fish|powershell.

Trampas frecuentes y soluciones

  • Falta de permisos: witr inspecciona directorios del sistema que pueden requerir privilegios elevados. Solución documentada: ejecutar con sudo witr [...] (Linux/FreeBSD) o en PowerShell como Administrador (Windows).
  • Proceso desvinculado con nohup: en el hilo de Hacker News, el usuario tatref señaló que un proceso nohup/desvinculado aparece con PPID 1 (systemd), lo cual era incorrecto; el autor lo reconoció como bug pendiente de corrección. Es una limitación conocida del trazado de ascendencia en ciertos casos.
  • macOS y SIP: debido a la System Integrity Protection, algunos detalles de procesos del sistema no son accesibles incluso con sudo.
  • Ambigüedad de nombres: al consultar un nombre con coincidencia parcial, witr lista las coincidencias (p. ej. nginx y ngrok) y pide re-ejecutar con --pid. Use --exact para evitar la coincidencia parcial.
  • Instalación vía curl: varios usuarios en Hacker News (vzaliva) desconfiaban de instalar un binario con curl. El autor respondió que lo mantuvo simple por ser el primer lanzamiento y luego añadió paquetes oficiales; hoy existe paquete .deb, .rpm, .apk y gestores de paquetes como alternativa.
  • Reutilización de PID en la cadena de ascendencia: una reseña de Product Hunt de Omri Ben-Shoham (31 de julio de 2026) señala que el recorrido de ascendencia todavía no valida la hora de inicio del PID padre, dejando un caso límite teórico de reutilización de PID; según la reseña, ya existe una incidencia abierta al respecto.

Una imagen de advertencia de seguridad dramática en modo oscuro para un inspector de procesos: un nodo de proceso central rodeado de insignias de advertencia neón flotantes representando privilegios de root, capacidades peligrosas de Linux, interfaces públicas de escucha, múltiples reinicios, alto uso de memoria, tiempo de ejecución largo, binarios eliminados e indicadores de inyección de librerías, brillos neón rojos, ámbar y cian sobre una superficie de cristal negro, iconos de escudo y alerta, líneas de escaneo sutiles, atmósfera de terminal cyberpunk

Integraciones y migración

witr se integra por su salida --json y sus códigos de salida en scripts, CI y herramientas de monitoreo. El README muestra un ejemplo con case $? para automatizar. El modo TUI replica la forma de los paneles para uso interactivo. Para migrar: witr no sustituye a ps/lsof/systemctl sino que se suma a ellos; se puede usar como capa de «por qué» sobre la información de estado que ya proporciona el sistema. La demo web (docs/) sirve como equivalencia de un tutorial sin instalar el binario. Los puertos con activación por socket de systemd o de un runtime de contenedores se resuelven mediante un respaldo vía Docker CLI.

Métricas actuales

Medición: 4 de septiembre de 2026, API de GitHub.

MétricaValor
Estrellas22 073
Bifurcaciones772
Suscriptores46
Commits588
Incidencias abiertas indicadas por la API16
Lenguaje principalGo (676 496 bytes); secundarios: Shell, PowerShell, Nix, Makefile
LicenciaApache-2.0
Creación20 de diciembre de 2025
Última actualización de metadatos4 de septiembre de 2026
Último empuje15 de agosto de 2026
Última publicaciónv0.3.3, 24 de junio de 2026

Los principales contribuidores que devolvió la API, por número de contribuciones, fueron pranshuparmar (398), claude (25), chojs23 (18), gaod (15), amerine (12), github-actions[bot] (11), ggmolly (10) y RikSmits06 (8). El conteo de 588 se obtuvo de la cabecera de paginación (rel="last" → página 588) del endpoint de commits. La API de GitHub expone open_issues_count, que puede incluir solicitudes de cambios abiertas; por eso no debe leerse como un conteo exclusivo de incidencias. watchers_count replica las estrellas, por lo que se informa por separado subscribers_count como suscriptores reales.

Recepción de la comunidad

La evidencia recuperada procede sobre todo del hilo de lanzamiento de Hacker News (46392910), con 526 puntos y 105 comentarios, donde el propio autor respondió con frecuencia. El entusiasmo es amplio y hay críticas concretas:

Reconocimiento y entusiasmo:

  • dcminter: «This is very clever. I’ve often needed to figure out what some running process was actually for (…) but it never occurred to me that one could have a tool to answer that question. Well done.» Añadió una edición aclarando que creyó erróneamente que también explicaba qué hacía el proceso.
  • properbrew: «This is extremely useful, will be added to the toolbox. Thanks for sharing.»
  • dontdieych: «Nice and installed then starred.»
  • scrame: elogió el ejemplo del puerto 3306 y dijo que «having a purpose to explain a purpose seems like a good pitch».
  • Saris y canxerian: «This looks very handy to have around!» y «Great idea!».
  • techsystems: «I’m really loving this! ‘Responsibility chain’ will become a trendy phrase.»

Crítica y objeciones concretas:

  • tatref señaló un defecto real: el trazado «only checks for the parent processes» y que «a disowned/nohup process will show up as PPID 1 (systemd), which is not correct». El autor respondió: «Yes, this is a bug. Planning to fix it soon.»
  • darrenf cuestionó la novedad: «Is that not whatis?» El autor respondió que whatis ayuda en ese caso pero que mantendría witr enfocado en explicar PIDs.
  • wyldfire argumentó: «ps uaxf gives me pretty similar output.» El autor enumeró las diferencias (cuándo empezó, qué puertos usa, qué usuario lo arrancó, desde qué directorio, bandera --env, --json).
  • vzaliva objetó la instalación con curl por temas de seguridad («doesn’t sit right with me») y pidió paquetes .deb/snap; el autor explicó que era el primer lanzamiento y luego confirmó que ya había brew, AUR, deb/rpm/apk y Nix.
  • Un hilo lateral se centró en la animación GIF del README: mh-, Neywiny, godelski y thaumasiotes pidieron que la imagen se quedara quieta o fuera una captura estática; el autor respondió que «already switched it to a static image».
  • filterfish propuso buscar el binario en el gestor de paquetes (APT/dpkg) como fuente adicional de información; ajb respondió que dpkg -S ya lo permite.
  • klooney apuntó que systemctl status $pid ya da bastante, y jamescun sugirió GoReleaser, que el autor terminó usando.
  • saidnooneever objetó que la salida muestra «quién lo hizo», no realmente «por qué se inició» (archivo de servicio, autorun, execve), ya que en gran parte se limita a reportar el PPID como causa, y recomendó que la salida greppable/JSON fuera el formato por defecto para automatización.
  • tototrains compartió una anécdota de uso real: Claude Code, apoyándose en una herramienta de este tipo, encontró un minero de criptomonedas que llevaba unos cinco meses sin detectarse en un equipo Windows 10 actualizado, en cuestión de minutos — una experiencia individual, no una métrica del proyecto.

Más allá de Hacker News. El proyecto también aparece en Product Hunt (página publicada el 30 de julio de 2026), con una valoración de 5.0; una reseña de Omri Ben-Shoham allí elogia que el recorrido de ascendencia atraviesa los shims de contenedor hasta llegar al proceso real del host, en vez de detenerse en «Docker lo inició». El repositorio mantiene además GitHub Discussions, con hilos como «Better README image needed!» (10 comentarios) y una discusión del propio autor sobre la TUI (con referencia a la PR 59). En YouTube, el video «Stop Guessing. Debug Faster with WITR.» del canal Hack the Clown (27.700 suscriptores) acumula 8.170 vistas.

No se encontró un anuncio con una discusión más amplia fuera de Hacker News en las fuentes consultadas, por lo que el balance se toma de ese hilo y no se infiere un consenso mayor del que las fuentes muestran.

Comparación con proyectos similares

Una imagen conceptual cyberpunk oscura contrastando herramientas tradicionales de procesos con explicación causal: a la izquierda, pequeños paneles tenues representando ps, top, lsof, ss, systemctl y docker ps mostrando solo estado bruto y metadatos; a la derecha, un panel central brillante respondiendo cuatro preguntas abstractas con iconos brillantes para qué está corriendo, cómo empezó, qué lo mantiene corriendo y a qué contexto pertenece, una ruta causal luminosa conectando ambos lados, acentos neón azul, violeta y cian, interfaz oscura elegante

ProyectoCoincidencia verificableDiferencia verificable
ps, top, lsof, ss, systemctl, docker psHerramientas nativas que exponen estado de procesos/puertos/servicios.El README declara que estas muestran qué corre pero no por qué; witr agrega la cadena causal y el contexto (git, contenedor, fuente).
pstreeMuestra la jerarquía padre/hijo de procesos.En Hacker News, q2dg y mathfailure confirmaron que pstree «doesn’t answer the why» —no explica la causa.
whatisExplica a qué corresponde un comando.El autor lo reconoce como útil para ese caso concreto, pero witr se centra en explicar PIDs, no en describir utilidades.
rewrite-everything-in-rust/witr-rsReimplementa el mismo objetivo (trazar ascendencia) en Rust.Es una reescritura de la comunidad con paridad declarada, no el proyecto original.
supervoidcoder/win-witrReimplementa witr para Windows en C++.WIP y sin el código original; el proyecto original ya incluye Windows con APIs Win32 nativas.
dmitrymx/witr-guiAñade una interfaz gráfica (Electron/React) sobre witr para Windows.Es un cliente GUI de terceros, no parte del repositorio oficial.

La comparación más útil: witr destaca cuando se necesita la causa (no solo el estado) de un proceso o puerto, de forma portable y con salida programable. Las herramientas nativas siguen siendo el fondo de la información de estado; los puertos comunitarios (Rust, Python, C++, GUI) son variantes no oficiales que no reemplazan al binario original multiplataforma.

Cómo contribuir

El repositorio documenta un proceso concreto en CONTRIBUTING.md:

  1. Compilar desde fuente: requiere Go 1.25+; git clone, go build -o witr ./cmd/witr, y ./witr --help como prueba rápida. El bloque -ldflags inyecta los metadatos de commit/fecha para witr --version.
  2. Flujo de fork: bifurcar, clonar el fork (git clone https://github.com/YOUR_USERNAME/witr.git), crear rama feature/your-feature-name y go mod download.
  3. Desarrollo: seguir el estilo existente, gofmt, escribir pruebas de unidad y asegurar go test ./....
  4. Solicitud de cambios (PR): aplanar (squash) los commits a uno lógico, rebasear sobre la rama staging (no main), abrir la PR contra staging, completar la plantilla de PR, esperar la revisión del mantenedor y fusionar con Squash and Merge (política estricta para mantener limpia la historia de main).
  5. Validación local de la PR: test -z $(gofmt -l .), go vet ./..., go test -v ./... y verificación de compilación cruzada (GOOS/GOARCH para linux/darwin, amd64/arm64), o bien con act (requiere Docker): act -j validate, act -j build.

La CI (.github/workflows/pr-check.yml) ejecuta lint con golangci-lint en los cuatro sistemas (linux, darwin, windows, freebsd), govulncheck para vulnerabilidades, verificación de que vendor está sincronizado, pruebas de unidad con -race (en linux y macOS) y una medida de cobertura informativa. Existe un workflow pr-title.yml que es bloqueante y exige títulos de PR semánticos (amannn/action-semantic-pull-request). El formato de mensaje de commit sigue Conventional Commits (<type>(<scope>): <description>). Las incidencias usan una plantilla estructurada (bug_report.yml) que pide OS, versión y arquitectura. La licencia de contribución es Apache-2.0 y hay un Código de Conducta.

Casos de uso y a quién puede ayudar este repositorio

  • Administradores de sistemas y operadores que entran por SSH a una máquina desconocida pueden usar witr --port <puerto> o witr <nombre> para responder en segundos qué cadena de systemd/supervisor/cron/contenedor originó un servicio, en lugar de correlacionar ps, lsof y systemctl. La salida «bajo estrés» y los códigos de salida la hacen apta para incidentes.
  • Responsables de una incidencia de puertos en conflicto o de recursos (p. ej. EADDRINUSE) pueden rastrear qué proceso sostiene un puerto, quién lo arrancó y desde qué directorio/repo git, y decidir si detenerlo. La TUI permite enviar señales (Kill/Terminate/Pause) directamente.
  • Equipo de ingeniería/Seguridad puede apoyarse en la sección de Warnings (proceso como root, capacidades peligrosas, escucha pública, binario eliminado, indicadores de LD_PRELOAD/DYLD_*) para hacer un barrido rápido de superficie de ataque durante una revisión, y usar --json para integrarlo en su pipeline.
  • Desarrolladores que depuran por qué un proceso «no muere» o arranca solo pueden ver el supervisor (pm2, cron, launchd, timer de systemd) que lo mantiene vivo y reinicia, y el contexto del contenedor (Docker/Podman/K8s/Incus/LXC).
  • Integradores y autores de automatización pueden depender del modo --json y de los códigos de salida 0–5 para encadenar witr en scripts, CI o herramientas de monitoreo.
  • Quienes evalúan la herramienta sin instalarla pueden usar el playground en el navegador (https://pranshuparmar.github.io/witr/), una caja Linux simulada con tutorial guiado, para familiarizarse con las salidas antes de adoptarla.

Una escena cinematográfica de respuesta a incidentes en modo oscuro: una sesión de terminal SSH flotando sobre un rack de servidores, la mano de un desarrollador extendiéndose hacia un árbol de proceso holográfico, la interfaz de la herramienta explicando calmadamente un proceso en ejecución con secciones concisas para objetivo, proceso, causa, fuente, contexto y advertencias, indicadores de estado brillantes, diseño legible de bajo estrés, acentos cian neón y blanco suave, iluminación ambiental de sala de servidores oscura, atmósfera de diagnóstico de alta tecnología, diseño de UI premium

Recursos


Nota: este artículo combina el README, la configuración de publicación y los workflows del repositorio, la API de GitHub, los registros de paquetes (npm, Homebrew, AUR, conda-forge) y el hilo de lanzamiento de Hacker News consultados el 4 de septiembre de 2026. Las cifras de estrellas, descargas y versiones cambian con el tiempo. Los datos del artículo de Medium y el número de upvotes de Product Hunt no pudieron leerse en detalle en esta investigación por restricciones de acceso (HTTP 403), por lo que se cita su existencia pero no sus métricas completas.

Comentarios