Skip to content

An Agents view: PortNanny, organised by who is working - #61

Merged
mukes555 merged 3 commits into
mainfrom
feat/agent-view
Sep 16, 2026
Merged

mukes555 merged 3 commits into
mainfrom
feat/agent-view

Conversation

@mukes555

Copy link
Copy Markdown
Owner

The list is now grouped by the session that started each server, and that
is where PortNanny opens.

What changed

Agents view. Every agent session gets a section: the servers it is
running and how much memory they hold, the ports it has reserved and not
started on yet, and a verb that applies to the whole session. Sessions that
have ended share one section with a Clean up button. Everything nobody
claims goes last, and does not get a bulk verb: that group is a leftovers
bin, and stopping all of it would take the database and Docker with it.

Claims. A lease with nothing listening on it yet is a row the old list
could not show at all, because there is no process to put in a table.
"Codex CLI has :3100 and has not started yet" is exactly what the other
agent in the room needs to know.

Refusals, where they happened. When another agent has just been refused
one of a session's ports, the section header says so. That is the guard's
whole job and until now it happened out of sight.

The density setting became two things, because it was doing two jobs: a
view (Agents or Ports, the plain list by kind) and a "Show details in rows"
switch that works in either. An upgrade from Advanced keeps its detail and
starts in Agents.

portnanny agents answers the same question in a terminal, and in
--json for the agents themselves: every session here, what it runs, what
it claims, which one is you. The rules file PortNanny installs into
projects now points agents at it before they take a port someone else is
about to use.

The Workbench leads with Agents and opens there, and its session cards
show claims too. Its grouping moved to AgentSessions in the core, so a
session means one thing across the app and the CLI.

Testing

  • 379 unit tests, 0 failures, including the grouping (claims matched to
    their holder, a claim on a busy port not repeated, ended sessions sharing
    a section, a person's own lease staying out of the agent list), the
    agents command's lines and JSON, and the settings migration both ways.
  • The e2e suites against the built binary: guard 23/23, kills 12/12,
    MCP 23/23.
  • README images regenerated from the scripted demo data, in the view the
    app now opens in.

🤖 Generated with Claude Code

mukes555 and others added 3 commits September 16, 2026 05:35
The list is now grouped by the session that started each server: every
agent with what it is running and how much memory that holds, the ports an
agent has reserved and not started on yet, the sessions that have ended
with one button to clean up after them, and everything nobody claims. When
another agent has just been refused one of a session's ports, the section
header says so, which is the guard's whole job and until now it happened
out of sight.

A claim is a row the old list could not show at all: a lease has no process
to put in a table.

The Clean/Advanced density setting became two separate things, because it
was doing two jobs: a view (Agents or Ports, the plain list by kind) and a
"Show details in rows" switch that works in either. An upgrade from
Advanced keeps its detail and starts in Agents.

The Workbench's session grouping moved to AgentSessions and both surfaces
render it, so a session means the same thing in both. Its cards show claims
too.

README images are regenerated from the scripted demo data, in the view the
app now opens in.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The Agents view with nothing to group by is a fair question ("is this
thing working?"), so when nothing on the machine came from an agent the
list says so, and how to label your own servers.

The Workbench leads with Agents and opens there: whose server it is comes
before what kind of server it is.

`portnanny agents` answers the same question in a terminal, and in --json
for the agents themselves: every session here, the servers it is running,
the ports it has claimed and not started on yet, the ended sessions, and
which one is you. The rules file PortNanny installs into projects points
agents at it before they take a port someone else is about to use.

The session grouping moved to PortNannyCore so the CLI and both views share
one definition of a session. `doctor --agents` keeps its schema under
"doctor-agents", since "agents" is a command now.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The popover and the Workbench each had their own icon for a group and their
own rule about the bulk verb, and they disagreed: the Workbench offered
"Stop all" for the ports nobody claims, which would take the database and
Docker with it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mukes555
mukes555 merged commit 0327f5a into main Sep 16, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant