vim-modal  ·  multi-agent  ·  AI-native

vim,  but for

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.

View on GitHub The idea

AI changed what developers do all day

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.

Before
Open editor, write code manually
One terminal for occasional commands
Run tests, check output, fix code yourself
Context-switch between editor and terminal
Now
Agents write code — you review and direct
5–10 sessions open: agents, servers, shells
Monitor outputs, send instructions, course-correct
The terminal is the workspace

Modal input is the right model for this

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.

Built for agent supervision

Every feature answers the same question: how do I stay in control when ten processes are running at once?

Waterfall layout

Sessions stack in rows you can see simultaneously. When agents are busy, their output is right there — no alt-tabbing, no hidden windows.

Vim-modal input

Navigate ten panes without touching the mouse. hjkl moves focus, i sends a command, a talks to workspace AI, / jumps to any session.

🌐

Agent detection

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.

🛠

Workspace AI dispatch

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.

📄

Auto-naming

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.

YAML config, hot-reload

~/.config/fluxtty/config.yaml — Alacritty-style. Font, colors, keybindings, AI provider. Changes apply instantly, no restart.

👁

Session sidebar

Grouped session tree with running/idle/error indicators. b to toggle. Click to jump. Never lose track of which agent is which.

💡

Shell & agent completion

Tab in Insert mode completes file paths and commands. In an agent session, Tab completes that agent's native slash commands — /compact, /diff, /undo.

📋

Pane notes

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.


One bar, four modes

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.

NORMAL

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.

INSERT

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.

AI

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.

TERMINAL

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.

FIND

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.


YAML config, Alacritty-style

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 }

Works with any LLM

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.

Anthropic Claude
OpenAI GPT / o-series
Google Gemini
Ollama (local)
claude CLI subprocess
No model (regex parser)

Key reference

All bindings are configurable in config.yaml.

Normal mode navigation

Next / prev row
jk
Next / prev pane
hl
New terminal
n
Split row
s
Close pane
q
Toggle sidebar
b
Find pane
/
Workspace command
:
Enter insert mode
i
Enter AI mode
a
Raw terminal mode
Ctrl\
Rename pane
r
Edit pane note
m
Scroll to top / bottom
gg / G
Half page down / up
Ctrl+D / Ctrl+U

Global keybindings

New terminal
CtrlN
Split horizontal
CtrlH
Toggle sidebar
CtrlB
Settings panel
Ctrl,
Rename session
CtrlR
Copy selection
CtrlShiftC
Paste
CtrlShiftV
Font size +/-/reset
Ctrl+