sbsh provides persistent terminal sessions with built-in discovery, environment profiles, and an API for automation.
*The problem:*
- Complex configuration required to access multiple Kubernetes clusters and Terraform workspaces, including setting visual prompts to identify production environments and avoid mistakes
- Manual setup of environment variables and credentials for each environment
- No easy, shareable way to reproduce those configurations across a team
- Lack of structured logs or visibility into existing sessions
- SSH sessions that die in the middle of debugging or long tasks
*How it works:*
sbsh separates the terminal session (your shell and environment) from the supervisor (the controller). Terminals continue running even if the supervisor stops or the network connection drops.
*Key features:*
- Terminal session discovery: sb get lists all sessions, sb attach mysession reconnects instantly
- Profiles: YAML-defined environments for Kubernetes contexts, Terraform workspaces, or Docker containers, identical in local dev and CI/CD
- Multi-attach: Several users can connect to the same live session
- API access: Control and automate sessions programmatically
- Structured logs: All input and output are recorded for replay or analysis
*Use cases:*
- DevOps: Persistent kubectl or Terraform sessions
- Developers: Long-running tests and builds over unstable connections; launching Python environments, npm projects, and more
- CI/CD: Identical profiles in local and pipeline environments
sbsh is a single Go binary (busybox-style) that can also be used as a login shell. It runs on Linux, macOS, and FreeBSD.
Repository: github.com/eminwux/sbsh
I have been using it for some time now, and it completely changed how I manage infrastructure. I would love to hear feedback and see how others might use it.
eminwux•2h ago
sbsh does not multiplex a single terminal session like those tools. Instead, it runs a persistent supervisor that manages multiple terminal sessions (PTYs) as independent processes. Each session can continue running even if the supervisor exits, and you can attach to it later from any machine that has access.
The main motivation was having YAML-defined profiles that set up environment variables, prompts, and startup commands for kubectl, terraform, or any other tool. This makes it easy to share consistent environments across a team without relying on ad-hoc Bash scripts.