You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Built app is in `src-tauri/target/release/bundle/`.
77
-
78
86
```bash
79
87
npm run tauri dev # development
80
88
```
81
89
82
-
---
83
-
84
-
## The Problem
85
-
86
-
Modern 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.
87
-
88
-
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.
89
-
90
-
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.
91
-
92
-
---
93
-
94
-
## Features
95
-
96
-
### 🗂️ Waterfall layout
97
-
98
-
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.
99
-
100
-
### ⌨️ Modal input bar
90
+
## Modes
91
+
92
+
fluxtty has one persistent input bar with a small set of explicit modes:
93
+
94
+
| Mode | Enter | What happens |
95
+
| --- | --- | --- |
96
+
|**Normal**| default | Navigate panes and rows, scroll output, split, close, rename, search. No keystrokes reach the shell. |
97
+
|**Insert**|`i`| Type into the active shell through the input bar. `Esc` returns to Normal. |
98
+
|**AI**|`a`| Enter the Workspace AI prompt. Built-in parser with `model: none`; LLM-backed with any provider configured. |
99
+
|**Terminal**|`Ctrl+\`| Raw terminal input. xterm.js owns the keyboard until `Ctrl+\` returns to Normal. |
100
+
|**Find**|`/`| Fuzzy search across all panes by name, group, cwd, and status. |
101
+
|**View**|`v`| Isolate the active row for focused watching. |
102
+
103
+
`:` in Normal mode opens the same workspace command path inline.
104
+
105
+
## Workspace commands
106
+
107
+
Built-in commands available when `workspace_ai.model: none`:
108
+
109
+
```text
110
+
run <cmd> in <session>
111
+
run <cmd> in group <group>
112
+
<cmd> in all sessions
113
+
run X then run Y in <session>
114
+
new [name] [in <group>]
115
+
rename <session> to <name>
116
+
close <session> | close idle | close group <group>
The input bar sits at the bottom, always visible. Four modes modeled after vim:
128
+
`list`, `status`, `help`, `read`, `focus`, and `!agent` execute immediately. All workspace-changing commands are queued through a plan confirmation step before running.
103
129
104
-
| Mode | Key | What keystrokes do |
105
-
|---|---|---|
106
-
|**Normal**| default | Navigate panes with `hjkl`, scroll output, open commands |
107
-
|**Insert**|`i`| Send keystrokes directly to the active shell |
108
-
|**AI**|`a`| Dispatch to the Workspace AI in natural language |
109
-
|**Terminal**|`Ctrl+\`| Raw PTY — xterm owns the keyboard (TUI apps, vim, etc.) |
110
-
|**Pane Selector**|`/`| Fuzzy-search over all open panes |
130
+
## Highlights
111
131
112
-
### ✨ Workspace AI
132
+
### Waterfall layout
113
133
114
-
Press `a` to enter AI mode. Supports Claude, GPT, Gemini, Ollama, or a built-in regex parser with no model at all.
134
+
Rows stack vertically; horizontal splits live inside a row. With few rows, fluxtty divides the space evenly. With many rows, each row becomes a full-height workspace slice you scroll through.
115
135
116
-
```
117
-
run <cmd> in <session> new [name] [in <group>]
118
-
<cmd> in all sessions rename <session> to <name>
119
-
run X then Y in <session> close <session> | close idle
120
-
```
136
+
### Agent detection and completion
121
137
122
-
Multi-step and broadcast actions show a plan preview and wait for `y` before executing.
138
+
Detected agents: `claude`, `codex`, `aider`, `gemini`, `opencode`, `goose`, `cursor`, `qwen`, `amp`, `crush`, `openhands`. When a pane is running an agent, the mode indicator reflects it and Tab switches to that agent's slash-command completions.
123
139
124
-
### 👁️ Agent detection & auto-naming
140
+
### Session identity and auto-naming
125
141
126
-
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.
142
+
Every pane tracks name, group, cwd, status, last command, exit code, tmux session, alternate-screen state, and agent type. New panes are named from cwd, then auto-renamed when significant commands take over. Manual renames stay pinned.
127
143
128
-
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.
144
+
### Row notes
129
145
130
-
### 🗃️ Session sidebar
146
+
`m` opens a note pane for the active row — branch names, review reminders, agent intent. Notes are included in workspace restore snapshots.
131
147
132
-
`Ctrl+B` opens a grouped session tree with running/idle/error indicators. Click to jump to any pane.
148
+
### Hot-reload config
133
149
134
-
### ⚙️ Settings & config
135
-
136
-
`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.
137
-
138
-
---
150
+
`~/.config/fluxtty/config.yaml` hot-reloads on save. Covers window, font, colors, cursor, shell, tmux, keybindings, input behavior, Workspace AI provider and model, waterfall sizing, persistence, and session defaults.
Read [`CLAUDE.md`](./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.
222
-
223
-
Built with: [Tauri 2](https://tauri.app/) · [xterm.js 5](https://xtermjs.org/) · [portable-pty](https://github.com/wez/wezterm/tree/main/pty) · Rust + Tokio · Vanilla TypeScript + Vite
224
-
225
-
---
211
+
Issues and pull requests are welcome. Keep changes focused, run the test suite, and include screenshots or recordings for UI behavior changes.
226
212
227
213
## Inspiration
228
214
229
215
The waterfall layout idea — terminals stacking vertically, each filling the viewport as you scroll — was shamelessly stolen from [`infinite-scroll`](https://github.com/gaojude/infinite-scroll). I prefer the word "inspired."
0 commit comments