# witr
### Why is this running?
Trace any process, port, container, or file back to the exact chain that started it โ
one command, machine-readable JSON, or an [interactive TUI](#4-interactive-mode-tui).
[](https://github.com/pranshuparmar/witr/releases/latest) [](#8-platform-support)
[](https://repology.org/project/witr/versions)

### ๐ฎ [**Try witr in your browser โ**](https://pranshuparmar.github.io/witr/)
*Investigate a simulated Linux box โ a guided tutorial and free-play sandbox, no install required.*
---
[**Purpose**](#1-purpose) โข [**Installation**](#2-installation) โข [**AI Agents**](#3-using-witr-with-ai-coding-agents) โข [**TUI**](#4-interactive-mode-tui) โข [**Examples**](#5-example-outputs)
[**Flags**](#6-flags--options) โข [**Output Behavior**](#7-output-behavior) โข [**Platforms**](#8-platform-support) โข [**Sponsors**](#9-sponsors)
---
## 1. Purpose
**witr** exists to answer a single question:
> **Why is this running?**
When something is running on a system, whether it is a process, a service, or something bound to a port, there is always a cause. That cause is often indirect, non-obvious, or spread across multiple layers such as supervisors, containers, services, or shells.
Existing tools (`ps`, `top`, `lsof`, `ss`, `systemctl`, `docker ps`) expose state and metadata. They show _what_ is running, but leave the user to infer _why_ by manually correlating outputs across tools.
**witr** makes that causality explicit. Ports, services, containers and files all map back to a **PID**, and for that PID witr answers:
1. What is running?
2. How did it start?
3. What is keeping it running?
4. What context does it belong to?
The answer comes as a single human-readable report, as JSON for scripts and AI agents, or in an **interactive TUI dashboard**.
```bash
witr node # why is this node process running?
witr --port 8080 # what is holding port 8080, and why?
witr --pid 1234 --tree # its ancestry and children as a tree
witr --container redis # a container, across Docker, Podman, Kubernetes and more
witr --port 8080 --json # the same answer for scripts and AI agents
witr # browse everything in the interactive TUI
```
> ๐ Curious how witr came to be? [Read the story](https://medium.com/@pranshu.parmar/witr-why-is-this-running-a9a97cbedd18).
---
## 2. Installation
witr is distributed as a single static binary for Linux, macOS, FreeBSD, and Windows.
witr is also independently packaged and maintained across multiple operating systems and ecosystems. An up-to-date overview of packaging status is available on [Repology](https://repology.org/project/witr/versions). Please note that community packages may lag GitHub releases due to independent review and validation.
> [!TIP]
> If you use a package manager (Homebrew, Conda, Winget, etc.), we recommend installing via that for easier updates. Otherwise, the install script is the quickest way to get started.
---
### 2.1 Quick Install
#### Unix (Linux, macOS & FreeBSD)
```bash
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash
```