Repository navigation
An Agents view: PortNanny, organised by who is working - #61
Merged
Merged
Conversation
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>
This was referenced Sep 16, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 agentsanswers the same question in a terminal, and in--jsonfor the agents themselves: every session here, what it runs, whatit 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
AgentSessionsin the core, so asession means one thing across the app and the CLI.
Testing
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
agentscommand's lines and JSON, and the settings migration both ways.MCP 23/23.
app now opens in.
🤖 Generated with Claude Code