Linux ships ps, ss, lsof, who — none of them answer the obvious operator question: what is each shell doing right now, and can I jump in? tap does. Your sessions if you're you, every session on the host if you're root. Remote and AI access via hop →
Pick a session. Attach. Type. Or just look at what every shell is doing.
Live-refreshing picker of every session you can see, with a side panel showing the highlighted session's current screen. Arrow keys to navigate, Enter to attach, q to leave. The tmux-style session switcher Unix has been missing for the shells the user didn't open in tmux.
Attach to pty N like it's your own terminal. Live output to your screen, your keystrokes injected into the session. Detach with Ctrl-T — single keystroke, no tmux overlap. From the picker, Ctrl-T returns you to the menu; q in the menu exits.
Enumerate active sessions with sticky opener identity, current writer (sudo/setpriv visible inline), byte counters, age, and idle time. Scriptable companion for the picker.
Decades of admin tools, none of them answer the live-shell question.
Linux ships ps for processes, ss and netstat for sockets, lsof for open files, who and w for logged-in users. Each answers one slice of "what's happening on this host." None of them answers the most obvious operator question: what is each shell doing right now, and can I get into one?
screen and tmux work — but only for sessions you set up inside them ahead of time. They're invisible to a third party joining late. SSH'd-in sessions stay opaque. strace-on-bash works but is brittle, root-only, and breaks when the user reaches for tab completion. Audit logs land hours later and are usually incomplete.
Every active TTY/PTY on the host, live, by default — including sessions that started before tap was installed (seeded from /proc at daemon start). Attach to any of them. Type into them. Or just look. Same authority model Unix already has: you see your own; root sees everything.
/proc at startupOne curl. Linux-only — eBPF needs a Linux kernel.
The installer drops the daemon under systemd and the tap CLI in /usr/local/bin. Nothing to configure — tap works the moment install finishes.
The same authority model Unix has had since 1969. No new ACLs, no key management.
Root sees and acts on every session. Non-root users see and act on only the sessions they opened. The kernel tells the daemon who's connecting (SO_PEERCRED on the local socket) — there's no key management, no on-the-wire claim a client could lie about.
Every session remembers who opened it. sudo in the middle of a session doesn't change ownership for tap's purposes — alice's session is alice's session even when she's running root commands inside it. So a user can't escape their scope by escalating mid-session, and root can still see exactly when the privilege transition happened.
Probing a pty you can't see returns the same error as probing one that doesn't exist. So a non-root user can't enumerate other users' sessions by trying every pty number.
tap rides Linux's pty subsystem via eBPF. macOS and Windows are out of scope for the daemon. Want to drive tap from another machine? Pair it with hop for authenticated remote and AI-driven access from any client OS.