muffintui
muffintui is the crates.io package for a Rust terminal workspace that runs as the muffin command.
It is designed to keep file navigation, shell work, and AI-assisted workflows in one terminal UI.

It gives you four panes inside a project directory:
- Files
- File Viewer / Diff Viewer
- Terminal
- Shell / Codex / Claude
It starts in the current working directory and uses that directory as:
- the root of the file tree
- the working directory for shell commands
- the working directory for the right-hand interactive session
Requirements
- Rust and Cargo
codexonPATHif you want--codexclaudeonPATHif you want--claude
Setup Prerequisites
1. Install Rust and Cargo
If rustc and cargo are not installed yet, install them with rustup:
|
After installation, restart your shell or load Cargo's environment:
Verify the installation:
2. Install optional right-pane CLIs
By default, muffin starts a shell in the right pane.
If you want to start directly in Codex mode, verify that codex is available:
If needed, authenticate it:
If you want to start directly in Claude mode, verify that claude is available:
3. Sanity check
Before installing or running muffin, this should work:
Install
Install from crates.io:
This installs the executable as:
Install from the local checkout:
That local install also provides the muffin executable.
Run
Launch in the current directory:
Launch with Codex in the right pane:
Launch with Claude in the right pane:
Launch against another project:
Run without installing during local development:
Pass startup flags through Cargo with an extra --:
What It Does
- Shows a navigable file tree rooted at the current directory
- Highlights updated files and changed directories in the Files pane using the active theme
- Opens the selected file in a read-only file viewer
- Highlights source code in normal file view with theme-aware colors
- Toggles a diff viewer against
HEAD~1 - Runs shell commands inside the built-in terminal pane with
sh -lc - Starts the right pane as a shell by default
- Can start the right pane with
codexorclaude - Cycles between three built-in themes
- Ships with integration tests under
tests/
Notes:
.gitandtargetare intentionally hidden from the file tree- The built-in terminal pane starts empty
- Diff mode falls back to a message when the repository has no
HEAD~1 - If the initial right-pane launch fails, pressing
Enterin that pane retries the same mode - If a
codexorclaudesession exits, the app automatically switches that pane back to a shell - If
codexorclaudeis not installed, the rest of the TUI still works and the right pane shows the startup error
Keybindings
Global
Tab: move focus to the next paneShift+Tab: cycle the themeEsc: quitCtrl+C: quit when focus is not in the Codex pane
Files Pane
Upork: move selection upDownorj: move selection downEnteron a directory: expand or collapse itEnteron a file: open it in the file viewer
Notes:
- Files with git changes are highlighted
- Directories are highlighted when they contain changed files
File Viewer / Diff Viewer
Ctrl+D: toggle between file view and diff viewPageUp: scroll upPageDown: scroll down
Terminal Pane
- Type directly into the prompt
Enter: run the current commandBackspace: delete one characterPageUp: scroll backPageDown: scroll forwardHome: jump to the oldest visible terminal historyEnd: jump back to the live prompt
Right Pane
- Regular typing: send input to the active shell, Codex, or Claude session
Enter: submit input, or retry the session if startup failedCtrl+C: send interrupt to the active right-pane sessionArrow keys,PageUp,PageDown,Home,End,Tab,Backspace: forwarded to the embedded session
Publish
Before publishing:
Then publish:
Contributions and issue reports are welcome.
Test
Run the integration test suite with: