A vim-modal terminal for AI development.
A keyboard-driven terminal workspace with vim-modal input β built for developers supervising many concurrent AI agents.
Navigate panes with hjkl, send commands in Insert mode, dispatch to your workspace AI β all without touching the mouse.
Live demo and landing page β
demo_2x.mp4
| Platform | File |
|---|---|
| π macOS (Apple Silicon) | fluxtty_*_aarch64.dmg |
| π macOS (Intel) | fluxtty_*_x64.dmg |
| π§ Linux | fluxtty_*_amd64.deb Β· .rpm Β· .AppImage |
| πͺ Windows | fluxtty_*_x64-setup.exe |
macOS will block the app on first open because it is not notarized. Run this once after installing:
sudo xattr -cr /Applications/fluxtty.appThen open normally from Finder or Spotlight.
Prerequisites: Rust 1.77+, Node.js 18+, Tauri v2 prerequisites
git clone https://github.com/wangzewang/fluxtty
cd fluxtty
npm install
npm run tauri buildBuilt app is in src-tauri/target/release/bundle/.
npm run tauri dev # developmentModern AI-assisted development looks different from traditional coding. You have multiple claude sessions running in parallel, dev servers, test runners, database shells, and CI watchers all running at once. Your job is to supervise them β review outputs, redirect agents, intervene when things go wrong.
The usual terminal workflow breaks down here. Alt-tabbing between windows is disorienting at scale. tmux panes get too small to be useful. The mouse is slow.
fluxtty applies vim's modal philosophy to this problem: a persistent view of all your terminals, and a modal input bar that knows the difference between navigating (hjkl), typing into a shell (i), and talking to your workspace AI (a). One window. Keyboard-first.
Terminal rows stack vertically; each row fills the viewport. Horizontal splits live within a row. Row heights recalculate on resize and sidebar toggle β always fills the screen.
The input bar sits at the bottom, always visible. Four modes modeled after vim:
| Mode | Key | What keystrokes do |
|---|---|---|
| Normal | default | Navigate panes with hjkl, scroll output, open commands |
| Insert | i |
Send keystrokes directly to the active shell |
| AI | a |
Dispatch to the Workspace AI in natural language |
| Terminal | Ctrl+\ |
Raw PTY β xterm owns the keyboard (TUI apps, vim, etc.) |
| Pane Selector | / |
Fuzzy-search over all open panes |
Press a to enter AI mode. Supports Claude, GPT, Gemini, Ollama, or a built-in regex parser with no model at all.
run <cmd> in <session> new [name] [in <group>]
<cmd> in all sessions rename <session> to <name>
run X then Y in <session> close <session> | close idle
Multi-step and broadcast actions show a plan preview and wait for y before executing.
Panes detect running agents (claude, codex, aider) from PTY output and show an agent badge. Tab in Insert mode completes that agent's slash commands.
Pane names auto-update from cwd on spawn, then change to reflect what's running β claude, cargo test, psql, ssh: prod. Manual renames are pinned.
Ctrl+B opens a grouped session tree with running/idle/error indicators. Click to jump to any pane.
Ctrl+, opens a settings panel (font, colors, keybindings, AI provider, terminal behaviour). All settings live in ~/.config/fluxtty/config.yaml and hot-reload on save β no restart needed.
# ~/.config/fluxtty/config.yaml
font:
family: "JetBrains Mono"
size: 13.0
colors:
primary:
background: "#0d1117"
foreground: "#e6edf3"
normal:
black: "#484f58" red: "#ff7b72" green: "#3fb950" yellow: "#d29922"
blue: "#388bfd" magenta: "#bc8cff" cyan: "#39c5cf" white: "#b1bac4"
# theme: catppuccin-mocha | gruvbox-dark | solarized-dark
cursor:
style: Block # Block | Underline | Bar
blinking: true
input:
live_typing: false # true: each keystroke forwarded immediately
workspace_ai:
model: none # none | claude-sonnet-4-6 | gpt-4o | gemini-2.0-flash | ollama/llama3
# claude-cli: uses your Claude Code login, no API key needed
api_key_env: ANTHROPIC_API_KEY
always_confirm_broadcast: true
always_confirm_multi_step: true
waterfall:
row_height_mode: viewport # viewport | fixed
new_pane_focus: trueAll bindings are configurable in config.yaml.
| Key | Action |
|---|---|
i |
Insert mode β type into the active shell |
a |
AI mode β dispatch to Workspace AI |
h j k l |
Navigate panes and rows |
n / s |
New terminal / split row |
q |
Close active pane |
/ |
Fuzzy pane search |
r |
Rename pane |
b |
Toggle sidebar |
gg / G |
Scroll to top / bottom |
Ctrl+D / Ctrl+U |
Scroll half page |
| Key | Action |
|---|---|
Ctrl+\ |
Toggle Normal β Terminal (raw PTY) |
Ctrl+N |
New terminal |
Ctrl+H |
Split row |
Ctrl+B |
Toggle sidebar |
Ctrl+, |
Settings |
Ctrl+Shift+C / V |
Copy / Paste |
Ctrl++ / Ctrl+- / Ctrl+0 |
Font size |
Ctrl+Q |
Quit |
Read CLAUDE.md before opening a pull request β it covers the core design decisions (layout model, modal input system, Workspace AI scope) that should be understood before making significant changes.
Built with: Tauri 2 Β· xterm.js 5 Β· portable-pty Β· Rust + Tokio Β· Vanilla TypeScript + Vite
MIT