Plandex fails with "Unsupported terminal" error inside tmux
Description
I'm still experiencing the same issue as #28. When running plandex commands that need the keyboard inside a tmux session. The same command works fine when running directly in my terminal (Ghostty) without tmux.
Error Output
❯ plandex models custom
A new version of Plandex is available: 2.2.1
Current version: 2.1.2
Example models file → /home/<user>/.plandex-home-v2/accounts/05386986-5155-4999-8a6b-41e8afcc9fa6/custom-models.json
Edit it, then come back here to save
Opened in editor
Error confirming
→ Failed to get user input
→ Failed to open keyboard
→ Error while reading terminfo data:termbox
→ Unsupported terminalEnvironment
| Field | Value |
|---|---|
| OS | NixOS 25.11 (WSL2, Linux 6.6.87.2-microsoft-standard-WSL2, x86_64) |
| Plandex version | 2.1.2 |
| Shell | zsh 5.9 |
| TERM (in tmux) | tmux-256color |
| TERM (outside tmux) | xterm-ghostty |
| Terminal emulator | Ghostty 1.2.3 |
Root Cause
The error originates from the eiannone/keyboard library (used in term/prompt.go → GetUserKeyInput() → keyboard.Open()). This library has its own terminfo parser that searches for the terminfo entry matching $TERM in this order:
$TERMINFO— if set, used as the exclusive search path (no other locations are checked)~/.terminfo/$TERMINFO_DIRS— colon-separated list of directories/lib/terminfo/usr/share/terminfo
If the file lookup fails, it falls back to built-in definitions for: xterm, xterm-256color, screen, rxvt-unicode, rxvt-256color, linux, Eterm — plus substring matching (e.g. if $TERM contains "xterm" or "screen").
In my case, Ghostty sets $TERMINFO to its own terminfo directory (which only contains Ghostty's entries, not tmux-256color). Because $TERMINFO is set, the library uses it exclusively and never checks $TERMINFO_DIRS or standard system paths where tmux-256color actually exists.
Since tmux-256color also doesn't match any built-in definition or substring pattern, both lookup strategies fail → "Unsupported terminal".
This will affect anyone whose terminal emulator sets $TERMINFO to a directory that doesn't include tmux's terminfo entries.
Resolution
Unsetting $TERMINFO inside tmux config resolves the issue. In tmux config:
set-environment -g -u TERMINFOThis allows the keyboard library to fall through to $TERMINFO_DIRS and standard system paths, where tmux-256color is available. I did not need to set $TERMINFO_DIRS in my config, not sure if this is being set my by tmux or something that the nixos package is setting. Either what this is what my TERMINFO_DIRS is set to:
❯ echo $TERMINFO_DIRS
/home/<user>/.nix-profile/share/terminfo:/nix/profile/share/terminfo:/home/<user>/.local/state/nix/profile/share/terminfo:/etc/profiles/per-user/<user>/share/terminfo:/nix/var/nix/profiles/default/share/terminfo:/run/current-system/sw/share/terminfoDocumentation
I'd be happy to contribute a docs page covering tmux integration and this terminfo interaction if you can point me to the best place to add it.
Source: plandex-ai/plandex