LibTmux.Workspace.Cli
0.0.0-alpha.17
Prefix Reserved
dotnet tool install --global LibTmux.Workspace.Cli --version 0.0.0-alpha.17
dotnet new tool-manifest
dotnet tool install --local LibTmux.Workspace.Cli --version 0.0.0-alpha.17
#tool dotnet:?package=LibTmux.Workspace.Cli&version=0.0.0-alpha.17&prerelease
nuke :add-package LibTmux.Workspace.Cli --version 0.0.0-alpha.17
tmux-workspace
Describe a tmux session once, in YAML, and open it with one command.
tmux-workspace reads tmuxp
workspace files, captures running sessions back into them, and answers in JSON
when a script asks.
Save this as ~/.tmuxp/myproject.yaml:
session_name: myproject
start_directory: ~/code/myproject
windows:
- window_name: editor
layout: main-vertical
panes:
- vim
- git status
- window_name: server
panes:
- npm run dev
Open it:
$ tmux-workspace load myproject
Outside tmux this attaches your terminal to the new session. Inside tmux it asks whether to switch to it, leave it detached, or add its windows to the session you are in.
Alpha. Every release carries an
-alphatag, and options may change between releases. Pin a version where a script depends on it.
Install
$ dotnet tool install --global LibTmux.Workspace.Cli --prerelease
--prerelease is required while every release is an alpha. If your shell
cannot find tmux-workspace afterwards, add $HOME/.dotnet/tools to PATH.
Try it without installing anything, using the .NET 10 SDK:
$ dnx LibTmux.Workspace.Cli --prerelease --yes -- --help
Pin it for everyone who clones a repository. Run this at the repository root,
commit the dotnet-tools.json it writes, and run the tool as
dotnet tmux-workspace:
$ dotnet tool install LibTmux.Workspace.Cli --prerelease
Upgrade a global install:
$ dotnet tool update --global LibTmux.Workspace.Cli --prerelease
Everyday commands
Load a workspace without attaching:
$ tmux-workspace load -d myproject
Load the .tmuxp.yaml in a project directory:
$ tmux-workspace load ~/code/myproject
Load several workspaces at once; the last one is the one you land in:
$ tmux-workspace load api web
Add a workspace's windows to the tmux session you are in:
$ tmux-workspace load --append tools
List the workspaces it can find:
$ tmux-workspace ls
Find the workspaces that mention server in their name, windows, or pane
commands:
$ tmux-workspace search server
Save a running session as a workspace file:
$ tmux-workspace freeze myproject --save-to ~/.tmuxp/myproject.yaml
Convert a workspace between YAML and JSON:
$ tmux-workspace convert myproject.yaml --save-to myproject.json
Turn a tmuxinator project into a workspace:
$ tmux-workspace import tmuxinator ~/.config/tmuxinator/blog.yml \
--save-to ~/.tmuxp/blog.yaml
Or a teamocil one:
$ tmux-workspace import teamocil ~/.teamocil/blog.yml \
--save-to ~/.tmuxp/blog.yaml
Open a workspace in $EDITOR:
$ tmux-workspace edit myproject
Collect versions and search paths for a bug report:
$ tmux-workspace debug-info
Open a Python REPL holding a session's tmux objects. It runs through tmuxp
1.74.0, so point TMUX_WORKSPACE_PYTHON at a Python that has it installed:
$ tmux-workspace shell myproject
tmux-workspace <command> --help lists every option.
Workspace files
A command that takes a workspace accepts a file path, a directory holding a
.tmuxp.yaml, or a bare name. A name is looked up in the first of these that
exists:
$TMUXP_CONFIGDIR$XDG_CONFIG_HOME/tmuxp, which defaults to~/.config/tmuxp~/.tmuxp
ls also shows the nearest .tmuxp.yaml, .tmuxp.yml, or .tmuxp.json
above the current directory.
The format is tmuxp's, in YAML or JSON. The configuration reference covers every key, and the example gallery has files to start from.
Scripting
--json prints one JSON document on stdout. --ndjson streams one record per
line as a load progresses. Errors go to stderr as JSON lines with a stable
code.
List workspace names:
$ tmux-workspace ls --json | jq -r '.workspaces[].name'
Load detached and read back which sessions were created:
$ tmux-workspace load -d --json myproject | jq -r '.results[].session_name'
Inside tmux, a scripted load needs -d or --append, because a script
cannot answer the switch prompt. ls and search print the same JSON as
tmuxp.
| Exit status | Meaning |
|---|---|
| 0 | Done |
| 1 | The operation failed; status and the error code say how |
| 2 | Usage: a bad option, or a command that cannot run where it was started |
| 70 | An internal error; please report it |
| 130 | Interrupted |
The output reference and error codes document every field.
Shell completion
Bash, with the bash-completion package:
$ tmux-workspace --generate bash > ~/.local/share/bash-completion/completions/tmux-workspace
zsh, into any directory on your fpath:
$ tmux-workspace --generate zsh > ~/.zfunc/_tmux-workspace
fish:
$ tmux-workspace --generate fish > ~/.config/fish/completions/tmux-workspace.fish
--generate man writes a manual page.
Compatibility
| tmux | 3.2a and newer |
| .NET | .NET 8 or .NET 10 runtime |
| OS | Linux and macOS |
| Workspace files | tmuxp's format, in YAML or JSON |
Where it differs from tmuxp:
- A window with no
layoutis tiled, where tmuxp keeps halving the last pane. - Without a
focuskey the first window is left active; tmuxp leaves the last. -8is refused: no supported tmux implements 88-color mode. Use-2for 256 colors.shell, plugins, and custom workspace builders run through tmuxp itself and need tmuxp 1.74.0.
Compatibility records what is implemented so far and where it differs.
Documentation
- Command reference — every command and option
- Installation walkthrough — install, load, and capture on a private socket
- Inspect a loaded session through MCP — let an assistant read your panes
- LibTmux.Workspace — build sessions from C# instead
- Changelog
License
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.0.0-alpha.17 | 34 | 9/27/2026 |
| 0.0.0-alpha.16 | 48 | 9/26/2026 |
Alpha. LibTmux, LibTmux.FSharp, LibTmux.Testing, LibTmux.Query.Json, LibTmux.Extensions.DependencyInjection, LibTmux.Workspace, LibTmux.Workspace.Cli and LibTmux.Mcp share one version, so this release covers them together. What changed, per package and per release: https://github.com/libtmux/libtmux-dotnet/blob/master/CHANGELOG.md The public API is not settled and may change without notice between prereleases; pin an exact version.