Simple GNU Screen session manager with a session-first TUI.
Pouch opens as a focused session board first, then falls back to familiar CLI commands when you need scripting. It keeps managed sessions restartable, leaves external Screen sessions visible, and makes the first attach flow obvious.
- Open
pouchand see every session immediately. - Create the first managed session with one key:
n. - Filter sessions with
/and clone a managed session withc. - Reattach with
Enter, then confirmstopandrestartbefore Pouch changes a live session. - Keep unmanaged Screen sessions visible without taking them over.
- Run
pouch doctorwhen the environment is wrong instead of guessing.
npm install -g @kyungyeol.baek/pouch
pouch --version
pouch doctorThe npm package downloads a prebuilt pouch binary from GitHub Releases during install. Supported prebuilt targets:
- macOS Apple Silicon
- macOS Intel
- Linux x64
If the release download is unavailable or your platform is not listed above, build Pouch from source with Cargo instead.
If doctor reports that Screen is missing, install GNU Screen first and rerun it.
- macOS or Linux
- GNU Screen installed and available in
PATH - Node.js
18+for npm installation
rustup toolchain install 1.93.0
cargo build --release
./target/release/pouch doctorCurrent dependencies need rustc 1.88+. This repository pins stable 1.93.0 through rust-toolchain.toml, so cargo will automatically use it after rustup is installed.
# 1. Check the environment
pouch doctor
# 2. Start the TUI
pouchInside the TUI:
- Press
nto create your first managed session - Leave
Commandempty to start your default shell - Press
Enterto start it - Press
Enteragain on the selected session to attach - Read the detach reminder, then use default
Ctrl-A dto leavescreen - Press
/to filter by session name or command - Press
cto clone a managed session into a prefilled form - Press
sorr, then confirm withEnterory - Press
?orhat any time to open help
Pouch shows two kinds of sessions:
- Managed sessions: created by Pouch, store the original command and working directory, and can be restarted from the TUI or CLI.
- Unmanaged sessions: existing GNU Screen sessions that Pouch did not create. They stay visible and attachable, but restart is disabled.
# Start a managed session directly
pouch run demo -- sleep 300
# List all sessions
pouch ls
# Attach by managed name
pouch attach demo
# When attached, leave screen without stopping it
# default: Ctrl-A d
# Restart a managed session
pouch restart demo
# Stop a session
pouch stop demo↑/↓ Move selection
Enter Attach selected session
/ Filter by name or command
n New managed session
c Clone selected managed session
s Stop selected session after confirmation
r Restart selected managed session after confirmation
g Refresh sessions
? / h Toggle help
q Quit
This project uses Rust 2024 edition and current dependencies require a newer toolchain than older system cargo installs. Use:
rustup toolchain install 1.93.0
cargo +1.93.0 testRun:
pouch doctorPouch will check platform support, the Screen executable, Screen listing, and session metadata health.
It also reports whether screen-256color terminfo is available and whether any managed sessions were started before Pouch's UTF-8 screen profile was introduced.
That means Pouch found existing GNU Screen sessions but does not own them. You can still attach, but restart is available only for sessions created through Pouch.
Pouch now starts managed sessions with screen -U and prefers screen-256color when terminfo is installed. If you still see broken separators or icons:
pouch doctorIf doctor warns about legacy managed sessions, recreate them with:
pouch restart <name>For shells or sessions started outside Pouch, add this to ~/.screenrc:
defutf8 on
term screen-256color
Attaching to an already-running legacy session may still look wrong until it is restarted.
Pouch now shows a detach reminder before every interactive attach. The default GNU Screen detach key is:
Ctrl-A d
If you changed Screen's escape prefix, use your custom prefix followed by d instead.
That is intentional. TUI stop and restart actions now open a confirmation prompt so you do not kill or recycle a live session by accident. Confirm with Enter or y, cancel with Esc or n.
Maintainers publish in two steps:
- Push a
vX.Y.Ztag to build binaries, run checks, and create a draft GitHub Release. - Configure npm Trusted Publisher for this GitHub repository, review the draft, then run the
publish-releaseGitHub Actions workflow to publish the release andnpmpackage together.
Trusted Publisher requirements for this repo:
- npm package scope stays
@kyungyeol.baek/pouch - npm package settings must trust
zpdldhkdl/pouch - GitHub Actions
publish-releaseuses GitHub OIDC instead ofNPM_TOKEN
- Use the help overlay in the TUI with
? - Run
pouch doctorbefore filing a bug - Open an issue with the failing command,
doctoroutput, and your OS/toolchain details
Small, focused improvements are preferred. UX polish, clearer onboarding, and better diagnostics are especially useful for this MVP stage.