from a single repository to forty, running on the cli, the desktop app or vs code.
from one repository
to forty, without
opening a terminal.
3 running
of 12 repositories
Resume
Stop
Archive
Continue
Live state comes from the documented agent interface, the history from transcripts on disk. Whether anything is running here is answered before you ask.
built on documented
claude code interfaces
100% free
no licence, no subscription, no paid tier waiting behind a feature.
no ads
nothing is promoted, sponsored or injected into the board.
no telemetry
no analytics, no crash pings, no account. nothing is collected.
stays on your mac
transcripts and archives never leave the machine. no server involved.
SessionPort itself sends nothing anywhere. It reads the session files Claude Code already wrote to your disk and shows them to you — it does not upload them, index them off-machine, analyse them or pass them to anyone. What Claude Code does with your prompts is between you and Anthropic.
{{ panelLabel }}
{{ panelBig }}
{{ panelSub }}
One row per git repository, sorted by what is running. The list is derived from each session's working directory, resolved to the git top level.
Working, blocked, done, failed and stopped, read from the supported agent interface. A session still thinking is never blurred with one that has finished but is still alive.
Claude Code deletes transcripts after cleanupPeriodDays — thirty days by default. Archiving copies the file into SessionPort's own store first, then hides the session.
For Keel-managed repositories, SessionPort reads the phase, baseline and waiting hand-off from disk, then runs the repository's own verify script before launching anything.
Find a session by something that was said in it, not only by its title. Scope to one repository, to all of them, or include the archive.
supported paths only
Live state from claude agents --json, stopping through claude stop. No process inspection, no raw signals.
tolerant by design
The transcript format is internal and can change. The parser skips a malformed line, keeps unknown fields, and surfaces the version that wrote each record.
your repositories stay yours
Nothing is committed or pushed. Keel writes land between their own delimiters and stay staged for you to review.
Acting on a stale hand-off is precisely the failure Keel's courier checks exist to prevent. SessionPort reads the verdict and behaves accordingly.
How it works$ scripts/keel-handoff-verify
repo: packdesk-macos
generated: 2026-08-13T09:41:02Z
commit: 4f9c1ab (HEAD 4f9c1ab)
tree: clean
position: phase 5 · sprint 3 · slice 4 closed
handover: docs/continuation-prompt.md
VERDICT: CONTINUE
$ claude agents --json | jq -r '.[] | .state'
working
blocked
done
live polling
the board refreshes on an interval you set, and says when it last did.
one inventory
sessions from every surface in a single list.
bulk prune
archive everything finished, or older than n days, in one confirmed action.
diagnostics
which cli was found, which config directory is read, which lines failed to parse.
start from the board
launch a session in any repository, in your terminal of choice.
The signed build will be downloadable straight from this site — no App Store, no account. macOS only, and not released yet. It needs the Claude Code CLI on your machine and reads ~/.claude without writing to it.
requires
macOS 13+
build
universal
status
coming soon
writes to
nothing
Need more? The guides cover every screen.
View guidesIt is not released yet — the download is coming soon. When it lands you will get the signed .dmg directly from this site, for macOS only. SessionPort is not distributed through the App Store, so there is no account and no store review in the way — just the binary and its release notes.
SessionPort writes nothing to your repositories. It reads them — branch, dirty tree, and any Keel files that already exist — and that is all.
Keel is a separate, entirely optional project, and it is a different matter: installing Keel does write into a repository. It creates its own agent directories and a docs/ folder, and it maintains a set of files inside them, because Keel is a full working protocol, not a config flag. If you ask SessionPort to add or update Keel it is Keel that writes, on your explicit confirmation, showing the diff and leaving everything staged for you to review — never committed, never pushed. Say no, or switch the Keel layer off, and your repository is never touched.
It reads the supported claude agents --json interface and groups the results by working directory. No process inspection, no pid guessing.
No. Keel is a separate skill that carries a project from its first idea through to the first release and every update after it — planning, phases, sprints, hand-offs, releases and hotfixes. If your repositories are built that way, SessionPort reads that state and gives you the Continue button. If they are not, nothing is missing: the Keel layer is a flag you can switch off, and a repository that has never heard of Keel shows its sessions and live state with no empty widgets.
In its own store under the app's application-support directory, outside ~/.claude, so the cleanup window cannot reach it. Diagnostics shows the exact path.