Local consoleDockmaster
Local console for macOS

Know what's running on your Mac.

Stray dev servers, dirty repos, committed secrets, forty gigs of node_modules, and whatever your coding agents left running. One console on your loopback, for this Mac and any other Mac over SSH.

↑ Star on GitHub View source

Paste the prompt into your coding agent, or git clone and npm start. MIT licensed.

Binds to127.0.0.1 only
Background scanningnone
Accounts, telemetrynone
Idle footprint~0 CPU
Agent Watch

See what your coding agents left running.

An agent finishes the task and exits. The dev server it started keeps the port, and the worktree it made keeps the disk. Agent Watch lists both, with the session that caused them.

A / LEFT BEHIND

Find what finished agents left behind.

A server is flagged when it has no terminal, started during an agent session, has no agent in its folder now, and the folder has been quiet for ten minutes. A worktree is flagged when its branch is merged, its tree is clean, and nobody has touched it for a day. The cleanup page shows the reason for each flag and the exact command it will run. Clean up re-scans first, refuses while an agent is still in the folder, sends SIGTERM, and runs git worktree remove without --force.

B / SESSIONS

Every agent on this Mac, in one list.

Agent Watch detects Claude Code, Codex, Gemini CLI, OpenCode, Cursor Agent, Kiro CLI, Aider, Amp, Copilot CLI, and Goose while they run, with the repo each one is in. It reads the last seven days of Claude Code, Codex, and OpenCode history for prompts, tool calls, tokens, and recorded cost. Each folder's newest session lists the servers running there and marks them as the agent's, left behind, or unclaimed. It reads local files only.

Agent Watch listing a running Claude Code session and the last seven days of sessions
C / RECEIPT

The week as a receipt.

Sessions per agent, prompts, tool calls, tokens, lines changed, top projects, and recorded cost for the last seven days. Below that, the servers Dockmaster stopped, the worktrees it removed, and the disk it reclaimed. Copy it as an image or download a PNG. Project names stay hidden until you switch them on.

Modules

Every berth in the harbor.

Each module scans only while its page is open, and each one can be switched off. Destructive buttons are guarded and re-verified before they act.

01 / PORTS

Find the server you forgot about.

Every listening TCP port with its project, process tree, and whether it is exposed to the LAN. Stop sends SIGTERM to the whole tree. Force kill is a separate, confirmed step.

Repository status board
02 / REPOS

A status board for every repo.

Dirty files, ahead and behind counts, stale branches, and the last commit for everything under your dev root. Copy a path or jump to GitHub from the row.

03 / WORKTREES

Dry dock for worktrees and stale branches.

Linked worktrees, prunable leftovers, and branches untouched for 30 days. Remove and delete are one click, but the main worktree and default branches are off limits.

Worktrees and stale branches page
Secrets audit page with redacted findings
04 / SECRETS

Catch the key before you push it.

Credential-shaped strings in tracked files across every repo: cloud keys, tokens, private key blocks. Previews are redacted on the server. The full string never leaves the process.

05 / DISK

Reclaim the bilge.

node_modules, build output, virtualenvs, and tool caches like DerivedData and Homebrew, sized with du. Clean only ever deletes a directory whose exact name is on the list.

Disk page showing reclaimable build artifacts and caches
Health page with status and latency per check
06 / HEALTH

Is it up?

A personal status page for localhost services and the external URLs you care about, with status code and latency. It can send a browser notification when a check changes state while the page is open.

07 / PROCESSES AND THE REST

The CPU hog, the container, the launchd job.

Processes samples CPU over one second and guards Stop the same way Ports does. Containers lists what Docker Desktop or OrbStack is running and stops one after re-checking its id. LaunchAgents loads and unloads the plists in your own gui domain. Hosts applies /etc/hosts profiles through the macOS admin prompt. Press ⌘K anywhere to search ports, repos, branches, paths, and notes.

Processes page with per-row CPU and memory bars
08 / REMOTE MACHINES

Any Mac you can SSH to.

Pick another machine in the header and every module runs there: ports with managed SSH forwarding, repo status, disk, health, secrets, all of it. A small companion process starts over your existing SSH session and exits when you leave. No cloud backend, no open port, no reverse tunnel. You only need SSH access between the machines; Tailscale is one way to get it.

Security model

It can kill processes. So it defends itself.

Dockmaster started as Port Authority. It keeps the same security model, hardened for a dashboard that runs all day.

  1. 01
    Loopback onlyBinds to 127.0.0.1. Middleware rejects any non-loopback Host header, so DNS rebinding gets nothing.
  2. 02
    Per-process tokenEvery API call carries a token injected into the page under a custom header. That forces a CORS preflight, which is never answered, so the browser blocks cross-origin requests before they start.
  3. 03
    Origin checkedOrigin is validated on every API request. A missing or stale token is a 401. A refused action is a 403.
  4. 04
    Fresh scan before every killDestructive actions re-verify identity against a fresh scan. Stale rows get a 409. Never PID 1, never Dockmaster or its ancestors, never another user's process.
  5. 05
    Nothing runs unless you lookNo background timers anywhere. Polling pauses when the tab is hidden. No accounts, no telemetry. The only outbound requests are the Health URLs you add yourself.
  6. 06
    Hosts through the OSApplying an /etc/hosts profile opens the macOS admin prompt. It backs up first and never touches sudoers.
Setup

Ask your agent, or do it by hand.

Requires macOS and Node 20.12 or newer. The production build idles at 150 to 200 MB and no CPU.

Set up Dockmaster on this Mac: https://github.com/naman0r/dockmaster

Clone the repo or use an existing checkout, read the README, and check the
requirements. Install dependencies, configure my development root, build and
start the production app on loopback, and verify it works. Give me the URL
and explain how to start and stop it. If I want to connect a homelab, follow
docs/remote-machines.md using my existing SSH access.

By hand: git clone https://github.com/naman0r/dockmaster && cd dockmaster && npm install && npm run build && npm start

Open source

Missing a module you want?

MIT licensed, plain TypeScript, one process. If Dockmaster has stopped a stray server or freed a gig of cache for you, a star helps, and a PR or issue gets a real reply.