Why a New Process Tool? The State-vs-Causality Gap
Every ops engineer has lived this scene: a 3 a.m. alert, a port listening, a process burning CPU, a container running. You SSH in and ask the oldest question:
> Why is this thing running?
Then comes the manual correlation: ps aux | grep xxx for the PID, lsof -i :8080 for the port, systemctl status for systemd, docker ps for containers, pstree -p for the parent chain, and a shell history dive for the original launch command. Five tools, five outputs, and a brain doing the join.
The core insight behind witr (Why Is This Running) is that existing tools expose state and metadata — they show *what* is running but force the user to infer *why*. witr does causality tracing instead: given one running thing, it reconstructs the full launch chain (e.g., systemd -> pm2 -> node app.js) in a single command.
Three Output Modes, One Engine
witr ships in three presentation layers backed by a shared tracing engine:
1. CLI for human-readable terminal output during debugging. 2. JSON for piping into automation, alerting, and audit pipelines. 3. TUI for interactive dashboard-style multi-hop exploration.
The Unix-philosophy flavor is deliberate: witr does one thing — causality tracing — and varies only the interface.
Four Entry Points
You can start the trace from any of four "running things":
- process — given a PID, walk the launch chain.
- port — given a port number, locate the listener, then walk the chain.
- container — given a container ID, find the host process, then walk the chain.
- file — given a file path, find processes accessing it, then walk the chain.
- GitHub: https://github.com/pranshuparmar/witr
- Live demo: https://pranshuparmar.github.io/witr/
- Hacker News discussion: https://news.ycombinator.com/item?id=46392910
All four converge on the same primitive: reverse from result to cause. The shape mirrors distributed tracing — OpenTelemetry follows a request across services, witr follows a running thing across OS layers.
Why It Hits Now: Three Timing Factors
witr is not the first process-tracing tool (pstree, htop, atop partially overlap). What explains its August 2026 surge of 308 stars in one day?
1. Containerization stretched the chain. Pre-container, a typical launch was init -> shell -> command, two or three hops. Today it can be systemd -> dockerd -> containerd -> containerd-shim -> container init -> shell -> app, six or seven hops. Human correlation breaks past three or four.
2. AI agents make "why is this running" harder. When agents can autonomously spawn processes, start services, and create containers, the answer may no longer involve a human command. A causality chain becomes an audit artifact for agent side effects.
3. Single static binary, every platform. witr is a Go static binary shipping for Linux, macOS, FreeBSD, and Windows, packaged through Homebrew, APT, Winget, Conda, AUR, and MacPorts. brew install witr is the whole installation story.
A Design Principle Worth Pausing On
The README states witr's success metric explicitly:
> witr succeeds when it can produce a complete, accurate, and human-understandable causality chain.
Three adjectives: complete, accurate, human-understandable. The first two are engineering targets; the third is a cognitive one. A chain that requires kernel-data-structure literacy to parse is no better than pstree. witr's differentiator is that its output is a causality story for humans, not a metadata dump for machines.
The broader pattern: the next wave of systems tooling will compete less on *what it can do* and more on *how clearly it explains why*. ps, lsof, and ss all answer *what*. witr answers *why* — the most frequently asked and least tool-supported question in operations.