PluginBench
Skill
Fail
Audit score 45

witr-process-inspector

aradotso/trending-skills

CLI/TUI tool that traces why processes, services, and ports are running by following causality chains.

What is witr-process-inspector?

witr answers "why is this running?" for any process, service, or port by making causality chains explicit—showing supervisors, containers, and shells responsible for a running thing. Use it to debug service dependencies, audit running processes, and understand process hierarchies across systemd, containers, and shells.

  • Inspect processes by PID or name and display full causality chain (parent → supervisor → service)
  • Query what process is listening on a specific port and trace its origin
  • Launch interactive TUI dashboard to browse all running processes with causality info
  • Output results as JSON for scripting and automation
  • Watch/follow a process with auto-refresh to monitor changes over time
  • Filter and audit processes by user, with verbose metadata including environment and binary paths

How to install witr-process-inspector

npx skills add https://github.com/aradotso/trending-skills --skill witr-process-inspector
Claude Code
Cursor
Windsurf
Cline

How to use witr-process-inspector

  1. 1.Install witr using your preferred package manager (Homebrew, winget, Scoop, apk, Go, or curl installer)
  2. 2.Run `witr <pid>` or `witr <name>` to inspect a process and see its causality chain
  3. 3.Use `witr --port <port>` to find what process is listening on a specific port
  4. 4.Launch `witr --interactive` (or `witr -i`) to open the TUI dashboard and navigate processes interactively
  5. 5.Use `witr --json <pid>` to get machine-readable output for scripting or piping to other tools
  6. 6.Use `witr --watch <pid>` to monitor a process and auto-refresh its causality chain

Use cases

Good for
  • Debug why a service won't start by tracing the full supervisor chain from systemd down to the process
  • Identify which service owns a listening port (e.g., port 8080) and audit its startup chain
  • Audit all running processes on a system and export causality data to JSON for compliance or security review
  • Monitor a long-running process in watch mode to detect unexpected parent changes or supervisor restarts
  • Troubleshoot container processes by understanding the boundary between container runtime and host systemd
Who it's for
  • DevOps engineers and SREs debugging service dependencies and process hierarchies
  • System administrators auditing running processes and port ownership
  • Developers troubleshooting why background services or daemons are or aren't running
  • Security teams performing process audits and understanding service startup chains

witr-process-inspector FAQ

Can witr inspect processes I don't own?

witr can inspect any running process, but on Linux it needs read access to /proc. For system-level processes, run with `sudo witr <pid>`.

Does witr work in containers?

Yes. witr understands container boundaries and will show the full chain from the containerized process through the container runtime to the host systemd.

Can I use witr output in scripts?

Yes. Use `witr --json <pid>` or `witr --json --port <port>` to get JSON output, then parse with jq or other tools for automation.

What platforms does witr support?

Linux (amd64, arm64), macOS (amd64, arm64), Windows (amd64), and FreeBSD (amd64, arm64).

How do I filter processes by user?

Use `witr --all --user <username>` to show only processes owned by a specific user with their causality chains.

Full instructions (SKILL.md)

Source of truth, from aradotso/trending-skills.


name: witr-process-inspector description: CLI and TUI tool that explains why processes, services, and ports are running by tracing causality chains across supervisors, containers, and shells. triggers:

  • "why is this process running"
  • "inspect running processes with witr"
  • "trace process causality"
  • "find what started a service"
  • "witr TUI dashboard"
  • "check what's listening on a port"
  • "use witr to debug running services"
  • "explain process chain with witr"

witr — Why Is This Running?

Skill by ara.so — Daily 2026 Skills collection.

witr is a Go CLI/TUI tool that answers "why is this running?" for any process, service, or port. Instead of leaving you to correlate ps, lsof, ss, systemctl, and docker ps manually, witr makes the causality chain explicit — showing where a running thing came from, how it was started, and what chain of supervisors/containers/shells is responsible.


Installation

Quickest (Unix)

curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash

Quickest (Windows PowerShell)

irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex

Package Managers

# Homebrew (macOS/Linux)
brew install witr

# Conda
conda install -c conda-forge witr

# Arch Linux (AUR)
yay -S witr-bin

# Windows winget
winget install -e --id PranshuParmar.witr

# Windows Scoop
scoop install main/witr

# Alpine / apk
sudo apk add --allow-untrusted ./witr-*.apk

# Go source install
go install github.com/pranshuparmar/witr/cmd/witr@latest

Key Commands & Flags

Basic Usage

# Inspect a process by PID
witr <pid>

# Inspect by process name (substring match)
witr <name>

# Inspect what's bound to a port
witr --port <port>
witr -p <port>

# Launch interactive TUI dashboard
witr --interactive
witr -i

# Show all running processes with causality info
witr --all
witr -a

# Output as JSON (for scripting)
witr --json <pid>

# Follow/watch mode — refresh automatically
witr --watch <pid>
witr -w <pid>

# Verbose output — show full environment and metadata
witr --verbose <pid>
witr -v <pid>

# Filter processes by user
witr --user <username>

# Show version
witr --version

Common Flag Reference

FlagShortDescription
--port-pInspect by port number
--interactive-iLaunch TUI dashboard
--all-aShow all processes
--jsonOutput as JSON
--watch-wAuto-refresh/follow
--verbose-vFull metadata output
--userFilter by OS user
--versionPrint version

Interactive TUI Mode

Launch the full dashboard:

witr -i
# or
witr --interactive

TUI Keybindings:

KeyAction
↑ / ↓Navigate process list
EnterExpand process detail / causality chain
fFilter/search processes
sSort by column
rRefresh
jToggle JSON view
q / Ctrl+CQuit

Example Outputs

Inspect a PID

witr 1234
PID: 1234
Name: node
Binary: /usr/local/bin/node
Started: 2026-03-18 09:12:44
User: ubuntu

Why is this running?
  └─ Started by: npm (PID 1200)
       └─ Started by: bash (PID 1180)
            └─ Started by: sshd (PID 980)
                 └─ Started by: systemd (PID 1) [service: sshd.service]

Inspect by Port

witr --port 8080
Port: 8080 (TCP, LISTEN)
Process: python3 (PID 4512)
Binary: /usr/bin/python3
User: deploy

Why is this running?
  └─ Started by: gunicorn (PID 4490)
       └─ Started by: systemd (PID 1) [service: myapp.service]
            Unit file: /etc/systemd/system/myapp.service
            ExecStart: /usr/bin/gunicorn app:app --bind 0.0.0.0:8080

JSON Output (for scripting)

witr --json 4512
{
  "pid": 4512,
  "name": "python3",
  "binary": "/usr/bin/python3",
  "user": "deploy",
  "started_at": "2026-03-18T09:00:00Z",
  "causality_chain": [
    {"pid": 4490, "name": "gunicorn", "type": "parent"},
    {"pid": 1,    "name": "systemd",  "type": "supervisor", "service": "myapp.service"}
  ]
}

Watch/Follow a Process

# Refresh every 2 seconds
witr --watch 4512

Common Patterns

Find Who Started a Port Listener

# Quick check: who owns port 5432 (Postgres)?
witr --port 5432

# Get machine-readable output for automation
witr --json --port 5432 | jq '.causality_chain[-1].service'

Audit All Running Services

# List everything with causality, pipe to less
witr --all | less

# Export full audit to JSON
witr --all --json > audit.json

Inspect a Docker/Container Process

# witr understands container boundaries
witr <pid-of-containerized-process>
# Output will show: container → container runtime → systemd chain

Use in a Shell Script

#!/usr/bin/env bash
# Check if port 8080 is in use and why
if witr --json --port 8080 > /tmp/witr_out.json 2>/dev/null; then
  SERVICE=$(jq -r '.causality_chain[-1].service // "unknown"' /tmp/witr_out.json)
  echo "Port 8080 is owned by service: $SERVICE"
else
  echo "Port 8080 is not in use"
fi

Filter Processes by User

# Show only processes owned by www-data and why they're running
witr --all --user www-data

Platform Support

PlatformArchitecturesNotes
Linuxamd64, arm64Full support
macOSamd64, arm64 (Apple Silicon)Full support
Windowsamd64Full support
FreeBSDamd64, arm64Full support

Go Integration (Embedding witr Logic)

If you want to use witr programmatically in a Go project:

go get github.com/pranshuparmar/witr
package main

import (
    "fmt"
    "github.com/pranshuparmar/witr/pkg/inspector"
)

func main() {
    // Inspect a process by PID
    result, err := inspector.InspectPID(1234)
    if err != nil {
        panic(err)
    }

    fmt.Printf("Process: %s\n", result.Name)
    for _, link := range result.CausalityChain {
        fmt.Printf("  └─ %s (PID %d)\n", link.Name, link.PID)
    }
}
// Inspect by port
result, err := inspector.InspectPort(8080, "tcp")
if err != nil {
    panic(err)
}
fmt.Printf("Port 8080 owned by PID %d (%s)\n", result.PID, result.Name)

Troubleshooting

Permission Denied on Some PIDs

# witr needs read access to /proc (Linux) or equivalent
# Run with sudo for system-level processes
sudo witr <pid>
sudo witr --port 80

Binary Not Found After Install

# Ensure install location is in PATH
export PATH="$PATH:/usr/local/bin"   # Unix default install
# or for Go installs:
export PATH="$PATH:$(go env GOPATH)/bin"

Port Not Found / No Output

# Confirm port is actually listening first
ss -tlnp | grep <port>       # Linux
netstat -an | grep <port>    # macOS/Windows

# Then retry
witr --port <port>

TUI Not Rendering Correctly

# Ensure terminal supports 256 colors
export TERM=xterm-256color
witr --interactive

# If on Windows, use Windows Terminal for best TUI experience

Process Exited Before Inspection

# witr can only inspect currently running processes
# Use --watch on a long-running process to monitor it
witr --watch <pid>

macOS: Requires Elevated Access for Some Processes

# System Integrity Protection may restrict some process metadata
sudo witr <pid>

Quick Reference Card

witr <pid>              # Why is PID X running?
witr <name>            # Why is process "nginx" running?
witr -p <port>         # What's on port 8080 and why?
witr -i                # Interactive TUI dashboard
witr -a                # Show all processes + causality
witr --json <pid>      # Machine-readable output
witr -w <pid>          # Watch/follow a process
witr -v <pid>          # Verbose: full env + metadata
witr --user <user>     # Filter by OS user