You don't write code anymore — you direct agents. fluxtty is a keyboard-driven terminal workspace built for supervising many AI agents at once, with the same modal efficiency that made vim indispensable.
When AI writes the code, your job shifts from typing to directing. You need a tool built for that — not a text editor with a terminal bolted on.
vim proved that separating navigation from editing is more efficient. The same insight applies when you're managing terminals instead of text.
| Mode | In vim | In fluxtty |
|---|---|---|
| NORMAL | Move cursor without inserting text. Your hands rest on the home row, eyes read the file. | Navigate panes with hjkl. Monitor what agents are doing without disturbing any shell. Scroll output with gg / G / Ctrl+D. |
| INSERT | Type characters into the buffer. | Press i — keystrokes go directly to the active shell. Send commands, answer prompts, interrupt with Ctrl+C. Esc returns to Normal. |
| AI | — (no equivalent) | Press a — talk to the workspace AI. "run cargo test in backend", "close idle sessions", "rename frontend to dev". Dispatch without touching the agent directly. |
| TERMINAL | — (no equivalent) | Press Ctrl+\ — xterm.js owns the keyboard. Use when an agent needs raw input, or you want full vim keybindings inside a pane. Ctrl+\ returns to Normal. |
Every feature answers the same question: how do I stay in control when ten processes are running at once?
Sessions stack in rows you can see simultaneously. When agents are busy, their output is right there — no alt-tabbing, no hidden windows.
Navigate ten panes without touching the mouse. hjkl moves focus,
i sends a command, a talks to workspace AI, / jumps to any session.
Automatically detects claude, aider, codex running in a pane. Shows an agent badge, enables Tab completion for that agent's slash commands, and keeps Insert mode clean.
Press a and ask in plain language. Run commands across sessions,
close idle agents, broadcast to all. Confirm before any broad action.
Supports Claude, GPT, Gemini, Ollama, or no model at all.
Pane names update from cwd on spawn, then change to reflect what's running —
claude, cargo test, psql.
You always know what each session is without reading the output.
~/.config/fluxtty/config.yaml — Alacritty-style.
Font, colors, keybindings, AI provider. Changes apply instantly, no restart.
Grouped session tree with running/idle/error indicators.
b to toggle. Click to jump. Never lose track of which agent is which.
Tab in Insert mode completes file paths and commands.
In an agent session, Tab completes that agent's native slash commands — /compact, /diff, /undo.
Press m to annotate any pane — what this agent is working on,
which branch, what to check next. Shown in the pane header at a glance.
The input bar at the bottom is always visible. Like vim, you're always in a mode — and each mode does exactly one thing well.
The default. Navigate without disturbing any agent.
hjkl / arrows move between panes and rows.
gg / G / Ctrl+D/U scroll output.
n new pane, s split, q close, r rename.
Nothing you press here reaches any shell.
Press i — type into the active shell. Enter submits; arrows browse local history; Tab completes. If an AI agent is detected in this pane, Tab shows its slash commands. Esc returns to Normal instantly.
Press a — talk to the workspace AI. Dispatch commands to sessions, manage the workspace in natural language. Broadcasts and multi-step plans show a confirmation step before executing. Works with any LLM or as a plain regex dispatcher with no model at all. Esc returns to Normal.
Press Ctrl+\ — xterm.js owns the keyboard completely. Every keystroke goes to the PTY: vim keybindings, mouse selection, raw escape sequences. Use when a TUI app or agent needs unintercepted input. Ctrl+\ returns to Normal.
Press / — fuzzy search all sessions. Filter by name, group, cwd. Arrow keys navigate the list. Enter jumps to the pane and scrolls the waterfall to it. Esc cancels with no change.
All behavior is configurable. Edit ~/.config/fluxtty/config.yaml
and changes apply immediately — no restart needed.
# ~/.config/fluxtty/config.yaml font: normal: { family: "JetBrains Mono", style: Regular } size: 13.0 colors: primary: background: "#0d1117" foreground: "#e6edf3" input: live_typing: false # true: keystrokes forwarded immediately workspace_ai: model: none # none | claude-sonnet-4-6 | gpt-4o | ollama/llama3 api_key_env: ANTHROPIC_API_KEY waterfall: row_height_mode: viewport # viewport | fixed new_pane_focus: true keybindings: - { key: N, mods: Control, action: NewTerminal } - { key: H, mods: Control, action: SplitHorizontal } - { key: Comma, mods: Control, action: OpenSettings }
Set workspace_ai.model and the AI manages your terminal sessions for you.
Or leave it as none and use the built-in regex command parser.
All bindings are configurable in config.yaml.
Normal mode navigation
Global keybindings