Skip to content
Castellan
Pinder's icon

Overview · Pinder

Read as

The Pinder, which rounds up stray processes

What the Pinder looks for (orphaned dev servers, runaway runtimes, the ports they hold), how it decides, what the local model adds, and how you stop a stray: only when you tick it.

Article
1601
Applies to
Pinder 0.5.18
Last reviewed
For
For developers
Written for Pinder 0.5.18. Pinder is at 0.5.19 now (1 small release since: what changed).

What it is#

A PC you develop on gathers processes that outlive what started them: a dev server whose terminal was closed, a Node or Python process whose session has gone, an emulator left behind, a runtime stuck at full speed on one core. They keep a port, memory or the processor.

Every 10 minutes the Pinder takes one look at the processes and lists the strays, in its pound. It never stops anything by itself: you tick the ones to stop, and it stops those.

It's a developer agent, and holds the Shepherd's office: once it's hired, the Shepherd stays on duty behind it. See Hiring, switching and letting staff go.

What it looks for#

Only runtimes can be strays: Node, Python, .NET, Java, adb and the Android emulator, esbuild, Vite, Deno, Bun, and the local model servers, among others (a setting). Of those, code finds three kinds:

KindWhat it means
OrphanIts parent is gone, and it has run for more than 30 minutes.
SquatterAn orphan that holds a listening port.
RunawayAbove 25% of one core in every reading for 10 minutes or more.

A process can be a squatter and a runaway at once. What's never a stray (Windows, your allowlist, anything under a live terminal, the manor's own agents) is in How the Pinder decides what's a stray.

How it works#

Code decides. Each round takes one read-only snapshot of every process, the listening ports and their owners, and a second CPU reading 3 seconds later. Plain rules over that snapshot decide what's a stray. A round takes about 4 seconds.

The model only says what it probably is. For each stray, a small model on this PC writes one line, "Vite: serving the web app on port 5173" say, labelled with where it was written ("note from the NPU, unverified"). It decides nothing. When the Porter already knows the program, its note is used instead, and no model is asked.

You decide what's stopped. Tick strays and press Impound the ticked ones. It checks each once more, then stops that process, not its children, and logs it. See Stop a stray, or let it be.

Its home page#

The Pinder's page is at http://pinder.localhost:19393/, and Open on its card in Castellan goes there. From the top:

  • The last round: when it was, Run now, and how many of each kind.
  • The pound: each stray with its kinds, process id, age, ports, CPU and memory, why code flagged it, its command line (secrets hidden) and its note, with a tick box and Let it be.
  • Shared daemons and employed agents: the shared model servers and the manor's agents it found running, for information.
  • Impound log: every stop it tried, and how it went.
  • Settings, in the title bar.

What it never does#

  • It never stops anything you didn't tick.
  • It never stops a process tree: only the process itself. Its children are listed, and show up as orphans later.
  • It never forces a stop. A process this Windows user doesn't own fails to stop, rather than being forced.
  • It never shows a secret. Tokens, passwords and keys are hidden in every command line before it's shown, kept, or given to the model.

Getting started#

  1. Hire it in Castellan, from the Shepherd's card. It's included in the Workshop license.
  2. Take its tour: what it does, and its two thresholds.
  3. Look at the pound after its first round. Let it be whatever you want left alone; impound the rest when you're ready.

Is this page right?

If something on it is wrong or out of date, tell us and we'll fix the page.

Still stuck? Write to support@castellan-software.com and mention article 1601. Every version of Pinder, and what changed in it, is in its release notes.