Portsmith · Security & privacy

Local port visibility without broad Mac permissions

Portsmith is deliberately narrow: it organizes same-user listening TCP ports and their process metadata on your Mac. It is not a remote scanner, packet monitor, or privileged system tool.

What Portsmith can see

Portsmith reads the listening TCP sockets and process metadata that macOS exposes to your current user account. It uses that data to show one logical row per process and port, identify the owning process, and classify a runtime or framework when the available evidence supports it.

macOS does not expose every process to an ordinary app. Portsmith therefore does not show listeners owned by root or another user. It currently does not inspect UDP, scan remote hosts, capture packets, read arbitrary open files, or enumerate every network connection.

Permissions Portsmith does not request

A fresh install should show zero macOS privacy-permission prompts. Portsmith does not request or use:

  • Screen Recording
  • Accessibility
  • Full Disk Access
  • Apple Events automation
  • Administrator or root access
  • A privileged helper or private Apple APIs

It also does not scrape Terminal windows, record keystrokes, take screenshots, or read shell history to infer what is running.

How process actions are kept narrow

A port itself cannot be “killed.” When you choose Kill Process, Portsmith identifies the process that owns the listener, shows a confirmation, and sends SIGTERM to that eligible process. Force Kill is a separate confirmed escalation that sends SIGKILL.

Portsmith refuses termination when the target is a protected system process, a host app such as your terminal or editor, a login shell, a process owned by another user, or Portsmith itself. System and background listeners stay muted and kill-disabled when revealed.

What Codex and Claude attribution means

Portsmith can sometimes connect a local server process to a Codex or Claude Code ancestor and show that context beside the listener. This is best-effort process ancestry, not session tracking, prompt access, task-completion detection, or a record of what an AI coding tool did.

Detached or re-parented servers—including some tmux, PM2, launchd, and container workflows—can remain visible while losing that listener attribution. Listener actions always target the process that owns the port. The separate Stop Agent action is offered only for an eligible local Agent process after full identity, detector-kind, ownership, Host-app, system-process, login-shell, and Portsmith-subtree checks are repeated.

Together with the opt-in Agent Island wings on supported built-in MacBook displays, these capabilities ship as one included Portsmith feature. The Agents panel and notch surface read the same bounded process metadata. Background Agent Island monitoring is off by default and stops when disabled. Unsupported displays add no secondary status item; the menu bar always keeps one static Plug.

What leaves your Mac

Listener data, process metadata, trial state, and license verification stay local. Portsmith contains no first-party analytics, telemetry, advertising SDK, or user account. Its normal network use is limited to checking for and downloading signed updates through Sparkle.

Visiting this website and downloading files still creates ordinary hosting and security logs. Buying a license opens Lemon Squeezy, which processes checkout as merchant of record. The Privacy Policy explains those website, download, checkout, and support records in detail.

Signed, notarized, and directly distributed

Portsmith ships outside the Mac App Store because App Sandbox restrictions block the process enumeration its core feature requires. The official DMG is signed with an Apple Developer ID certificate, submitted to Apple for notarization, and distributed from updates.portsmith.app. Sparkle verifies signed updates before offering them inside the app.