- Kitty keyboard flags survive detach — query outer-terminal flags at attach (
CSI ? u, 80ms timeout) and re-set them on detach so an inner shell'sCSI = flags udoesn't leakN;5uCtrl-key sequences into the user's outer shell. Pop count on stack drain bumped from 1 to 99 #bug -
rift lastself-heals — if the recorded session is gone, clear.lastand fall back to the picker instead of erroring #improvement -
list -v/--verbose— adds uptime (derived fromcreated_at) and log file path to each session line #improvement - Lifecycle hooks —
RIFT_ON_ATTACH/RIFT_ON_DETACH(client-side) andRIFT_ON_EXIT(daemon-side) fire-and-forget shell snippets with$RIFT_SESSIONset #feature - Argless
riftopens an interactive picker — uses$RIFT_PICKER(e.g., fzf) if set, otherwise a built-in numbered prompt on /dev/tty #feature -
last/la— re-attach to the most recently attached session (state file<socket_dir>/.last) #feature -
logs/lg— shortcut fortail -fon the session's log file, with extra args passed through totail#feature - Rename sessions —
rift rename [<old_name>] <new_name>(aliasrn) dynamically renames active sessions, including Unix sockets, logs, and symlinks #feature - Migrate daemon and client to async tokio runtime (current_thread + LocalSet, per-client tasks via mpsc,
tokio-utilcodec for the wire protocol) #refactor - Use deterministic socket dir (
$HOME/.local/state/rift) so macOS GUI- vs CLI-launched shells share the same sessions #bug - Fix rift tail escape sequence rendering and Ctrl+C interrupt bug #bug
- Fix session listing bug where .ssh-auth-sock symlinks were erroneously listed as unreachable sessions #bug
- Optimize session startup performance (reduced from 2s to ~15ms) by removing busy-waiting in PTY DA query draining #improvement
- SSH agent forwarding socket symlink propagation for multiple SSH sessions #feature
- Cargo project initialized with deps: nix, vt100, log, env_logger, libc #chore
-
src/ipc.rs— IPC protocol (Tag enum, Header, send/recv, SocketBuffer, probe_session) #feature -
src/socket.rs— Unix socket creation/connection, session name validation, path management #feature -
src/logger.rs— File-based logging with 5MB rotation #feature -
src/util.rs— Shell quoting, DA responses, task exit markers, terminal serialization (vt100), session listing #feature -
src/main.rs— Core runtime: CLI, PTY spawning, daemon/client event loops, attach flow #feature - list — enumerate active sessions with status info #feature
- kill — terminate a session by name #feature
- detach — disconnect all clients from a session #feature
- history — retrieve session output (plain, --vt, --html) #feature
- Detached spawn —
rift new <session>orrift attach -d <session>#feature - wait — poll sessions for task completion, prefix matching, aggregate exit codes #feature
- completions — shell completion scripts for bash, zsh, fish via
rift completions <shell>#feature -
send— inject keystrokes into a session's PTY input (fire-and-forget, stdin support) #feature -
tail— follow session output in real-time #feature -
run -d— detached/background run, track withwait#feature -
kill --force/-f— SIGKILL instead of SIGTERM #feature - Short aliases for all subcommands (
a,r,s,d,l/ls,k,hi,w,t,c,v,h) #improvement -
detachwithout args usesRIFT_SESSIONfrom env #improvement - Fix: client now exits on daemon-initiated detach (DetachAll) #bug
- Fix: daemon reads pending data before treating POLLHUP as disconnect #bug
-
killwith multiple names and prefix matching (rift kill dev*) #improvement -
tailwith multiple names and prefix matching (rift tail dev*) #improvement -
RIFT_SESSION_PREFIXapplied tokillandtail#improvement -
print— inject text into session display without PTY input #feature -
write— pipe stdin to a file via session (base64 chunked) #feature -
attach <session> <command>— spawn specific command instead of login shell #feature -
run --fish— fish-specific command completion detection #improvement -
RIFT_DIR_MODE/RIFT_LOG_MODE— permission modes for socket dirs and log files #feature