Repository navigation
Session Kit v0.4.2
Session Kit is a local picker for Claude Code, Codex, and shell sessions: one list, a state word that says which session is waiting on you, and sessions that stay on the host when the terminal closes or SSH drops.
Public beta. Linux with systemd, or macOS 14 or newer. Needs shpool 0.11.0 and at least one provider CLI.
Install
mkdir session-kit-download
cd session-kit-download
gh release download --repo dob323/session-kit --pattern 'session-kit-*'
if command -v sha256sum >/dev/null; then
sha256sum --check session-kit-*.sha256
else
shasum -a 256 --check session-kit-*.sha256
fi
tar -xzf session-kit-*.tar.gz
cd session-kit-*/
./install.sh --check
./install.sh
session-kit doctor
session-kit services enable
session-kit doctor./install.sh --check is read-only. Do not work around a refusal, it prints the reason and the remedy it expects.
Assets are named by source commit, not by version. The .sha256 covers the archive; the .provenance.json records the exact source commit and public-tree digest.
Full instructions, including the prerequisites a minimal server image is missing: docs/install.md.
The
docs/install.mdshipped inside this artifact gives the download asgh release download --repo dob323/session-kitwith no pattern. That form is refused bygh, which requires--patternor--archivewhen no tag is named. Use the command above; the file is corrected for the next release.
Changes in this release
Added
- Short project directory names: a Claude session launched at the registered
root of a project shortcut now stores transcripts and auto memory under the
shortcut's alias (Claude Code 2.1.234'sCLAUDE_CODE_PROJECT_DIR_NAME).
The export is proved per launch, launcher version, unambiguous registry,
valid alias, no directory conflict, and an existing munged directory is
renamed in one atomic move only while no other session of that profile runs
inside the root.session-kit doctorgained aproject-dir-namescheck;
SESSION_KIT_PROJECT_DIR_NAME=offdisables the feature.
Security / data safety
- A second Unix account's shpool daemon no longer disables this account's
kit. Daemon selection now rules out any daemon owned by another account
before it asks who holds the listener: their/proc/<pid>/fdis
unreadable, which the uniqueness rule read as "cannot establish", so
daemon_generationwent null and every session became unprovable,
sp newproduced an unresolved row andsp go/sp closerefused. A
listener under/run/user/<uid>is mode 0700, so another account's daemon
was never a candidate. Census rows now carry the owning uid; a row without
one is still treated as a candidate. - The project-directory migration closed three lose-work races found by a
post-install review lane: the liveness scan now re-runs on the far side of
the rename and undoes it if a raw same-profile launch appeared in the gap;
a same-profile provider in the launcher's own ancestor chain counts as a
live session (only shells and launch plumbing are excused); and the Claude
version proof is bound to the exact executable the shell then runs, an
armed export launches the proved realpath, never a re-resolvedclaude.
An alias path occupied by a regular file or symlink now refuses instead of
exporting an unusable name. - Enrolment writes
autoContinueAtUsageLimit: falseeven when the source
Claude profile has no settings file at all, the default is a promise about
every managed profile, not a transform applied only when there was
something to copy. - The project-dir-name helper reads the same projects registry every other
consumer does (SESSION_KIT_PROJECTS_FILE, then the XDG location), and its
doctor honoursSESSION_KIT_ACCOUNT_ROOT. The watchdog's lock-jam notice
no longer promises that ending the holder is universally safe; it says what
actually happens.
Fixed
- A self-name could deadlock the whole estate: its write-time revalidation ran
a fresh collection while holding the name-store locks, and collecting can
re-acquireconfig.lockthrough a second descriptor, the process then
waits forever on its own lock while every collector, picker refresh and
name attempt queues behind it (observed live for twenty minutes on
2026-08-17). Revalidation now re-reads only the process table; the one
snapshot is taken before any lock. - The watchdog now detects that class of jam: a snapshot that has stopped
refreshing while a kit state lock has queued waiters is reported once, with
the holding pid and the safe remedy. tests/rundrops itself to the lowest CPU and idle IO priority, so a full
suite on a live box can no longer starve the picker and sessions.
Changed
- Enrolled Claude profiles now start with
autoContinueAtUsageLimitoff, so
a managed account never resumes spending by itself when a usage window
resets; turn it back on per profile in Claude's/config. - The test sandbox guard now drops an inherited
CLAUDE_CONFIG_DIR,
CODEX_HOME, andCLAUDE_CODE_PROJECT_DIR_NAMEfrom fixture-homed
children, so a suite that starts a real provider CLI can no longer write
transcripts into a real account profile.