NodeSpy
Watch (and kick) live terminal sessions. Sysop-only.
Where
- Card on
/admin/control/(the Sysop Control Panel) - Direct link in the admin dropdown → "NodeSpy (kick users)"
What it shows
| Column | Meaning |
|---|---|
| Slot | The node number (1..BBS_NODES) |
| User | Logged-in username |
| Proto | telnet / ssh / rlogin |
| Page | Their current page slug (main, boards/123, door:lord) |
| Last action | Last thing they did (pressed E, loaded /boards/...) |
| Idle | Seconds since their last keypress |
The eye icon shows a snapshot of their last terminal screen (handy
for "this user looks stuck — what are they looking at?").
Kicking
The door-arrow icon disconnects the user. A prompt asks for a
reason — shown to them just before the connection drops:
*** Disconnected by sysop: <reason> ***
The kick is cross-process: the web app sets a flag on the user's
NodeActivity DB row, and a watchdog inside the terminal session
polls that flag every 5 seconds. Worst-case kick latency: ~5 s.
Different from a Ban: a kick just drops the current connection.
The user can reconnect immediately. To stop them coming back, add
an IP ban under /admin/ip-bans/.
Audit trail
Every kick writes a UserActivity row with activity_type='kick_node',
the slot, the target username, the reason, and the sysop's
username + IP — /admin/audit/ shows the trail.