> [!WARNING]
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
> **Not verified by Apple or Microsoft yet.** Portkeeper has no developer certificate for now, so macOS and Windows show a one-time warning when you first open it. That is expected and the app is safe: every build comes from the public code in this repository through GitHub Actions. Two clicks get past the warning (see Install), or use the one-command install below, which shows no dialog at all. The warning disappears once the app is notarized.
Portkeeper
A tiny desktop widget that answers one question: what is running on my machine right now, who started it, and how do I stop it?
> **Fastest install: one command.** It downloads the latest release from GitHub, installs it and opens it. No "unidentified developer" dialog (the builds aren't signed with an Apple or Microsoft certificate yet, see Install).
>
> macOS and Linux, in Terminal:
>
> Windows, in PowerShell:
>
> Read the scripts before you run them, as with any installer.
Website ·
All downloads ·
What it shows ·
Install ·
Build
---
Why
If you work with several projects at once, and let AI coding agents start servers for you, your machine fills up with localhost:3000, :5173, :8080, Docker containers and forgotten dev servers. Finding out which one belongs to which project, which agent opened it, and whether it still answers means lsof, docker ps and a lot of guessing.
Portkeeper puts that in one small panel in your menu bar (macOS) or system tray (Windows): every project with a listening port, grouped by folder, with the logo of the agent or IDE that started it. Click a port to open it. Stop it with one click. Start it again later. Lock the ones a client depends on so nobody stops them by mistake.
What it shows
- **One row per project.** Processes are grouped by their working directory and merged with the Docker Compose project running from the same folder. A project with several ports expands into one row per port, each with its own label (Vite, dashboard/server.mjs).
- **Who started it.** The logo is the AI agent or IDE that launched the process, found by walking up the process tree: Claude Code, Codex, Cursor, Gemini CLI, Copilot, Windsurf, VS Code, JetBrains, Zed, Xcode, Cline, Aider, OpenCode. Without one, it shows what serves the port: Docker, Vite, Next, Node, Python, Ollama, Postgres…
- **Does it answer?** The dot is green when the port responds, amber while it is listening but still silent (booting, or hung). Hover it for "Running since…".
- **Sections.** Projects are separated by the agent that started them. Agents first, the rest after.
- **Stop.** The stop button on a row stops that port, or the whole project, after a one-button confirmation. While it works, the row shows *stopping…*. Portkeeper asks the process politely first and kills it if it ignores the request for 1.5 s, so Stop always stops.
- **Closed, and start again.** Projects that stopped move to *Closed*. Portkeeper remembers the command that started them (npm start, python -m http.server, a compose project), the folder and the environment, and the play button starts them again. Secrets in command lines (--token, API_KEY=) are masked and never written to disk.
- **Lock.** 🔒 on a project's row hides stop and remove and makes the backend refuse them too. Made for the project a client is testing on your machine.
- **Settings.** Appearance (Glass on macOS: Liquid Glass on macOS 26, the system blur before; opaque Dark or Light everywhere, with native rounded corners on Windows 11), language (English, Spanish, French, German, Portuguese), launch at login, open on start, show all processes, check for updates.