Skip to content

Commit a714f72

Browse files
authored
fix: tmux && update readme & github page (#75)
1 parent 8afa5f3 commit a714f72

4 files changed

Lines changed: 1894 additions & 1244 deletions

File tree

README.md

Lines changed: 123 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -1,50 +1,60 @@
11
# fluxtty
22

33
<p align="center">
4-
<img src="src-tauri/icons/icon.png" width="128" height="128" alt="fluxtty" />
4+
<img src="src-tauri/icons/icon.png" width="112" height="112" alt="fluxtty" />
55
</p>
66

7-
<p align="center">
8-
<strong>A vim-modal terminal for AI development.</strong>
9-
</p>
7+
<h3 align="center">A vim-modal terminal workspace for AI development.</h3>
108

119
<p align="center">
12-
A keyboard-driven terminal workspace with vim-modal input — built for developers supervising many concurrent AI agents.<br />
13-
Navigate panes with <code>hjkl</code>, send commands in Insert mode, dispatch to your workspace AI — all without touching the mouse.
10+
You don't just write code anymore — you supervise agents.<br/>
11+
fluxtty is a keyboard-driven workspace for running many AI sessions in parallel,<br/>
12+
with the modal efficiency that made vim indispensable.
1413
</p>
1514

1615
<p align="center">
1716
<a href="https://github.com/amoswzw/fluxtty/actions/workflows/ci.yml"><img src="https://github.com/amoswzw/fluxtty/actions/workflows/ci.yml/badge.svg" alt="CI" /></a>
1817
<a href="https://github.com/amoswzw/fluxtty/actions/workflows/codeql.yml"><img src="https://github.com/amoswzw/fluxtty/actions/workflows/codeql.yml/badge.svg" alt="CodeQL" /></a>
19-
<a href="https://github.com/amoswzw/fluxtty/releases"><img src="https://img.shields.io/github/v/release/amoswzw/fluxtty" alt="Release" /></a>
20-
<img src="https://img.shields.io/badge/license-MIT-blue" alt="License" />
21-
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey" alt="Platform" />
22-
<img src="https://img.shields.io/badge/Tauri-2.x-orange" alt="Tauri" />
23-
<img src="https://img.shields.io/badge/Rust-1.77%2B-orange" alt="Rust" />
18+
<a href="https://github.com/amoswzw/fluxtty/releases/latest"><img src="https://img.shields.io/github/v/release/amoswzw/fluxtty" alt="Release" /></a>
19+
<img src="https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-2f363d" alt="Platform" />
20+
<img src="https://img.shields.io/badge/Tauri-2.x-24b47e" alt="Tauri" />
21+
<img src="https://img.shields.io/badge/license-MIT-4f8cff" alt="License" />
2422
</p>
2523

2624
<p align="center">
27-
<a href="https://amoswzw.github.io/fluxtty/"><strong>Live demo and landing page →</strong></a>
25+
<a href="https://amoswzw.github.io/fluxtty/"><strong>Live demo →</strong></a>
26+
&nbsp;&nbsp;·&nbsp;&nbsp;
27+
<a href="https://github.com/amoswzw/fluxtty/releases/latest"><strong>Download latest release</strong></a>
2828
</p>
2929

30-
<video src="https://github.com/user-attachments/assets/6b9ba19d-14c2-43d3-8e6a-6d3353674bb6" controls autoplay loop muted width="100%"></video>
30+
<p align="center">
31+
<img src="docs/fluxtty-preview.gif" width="100%" alt="fluxtty workspace preview" />
32+
</p>
3133

32-
---
34+
## The idea
3335

34-
## Table of Contents
36+
When AI writes the code, your job shifts from typing to directing. You need a workspace built for that — not an editor with a terminal bolted on.
3537

36-
- [Installation](#installation)
37-
- [The Problem](#the-problem)
38-
- [Features](#features)
39-
- [Configuration](#configuration)
40-
- [Keybindings](#keybindings)
41-
- [Contributing](#contributing)
38+
| Before | Now |
39+
| --- | --- |
40+
| Write code manually in an editor. | Agents write; you review, steer, and unblock. |
41+
| One terminal for the occasional command. | 8–12 sessions open in parallel: agents, servers, shells. |
42+
| Run tests yourself, read output, patch manually. | Monitor outputs, redirect agents, course-correct fast. |
43+
| Context-switch between editor, browser, terminal. | The terminal is the entire workspace. |
4244

43-
---
45+
fluxtty applies vim's modal philosophy to the whole terminal workspace:
46+
47+
| Need | fluxtty answer |
48+
| --- | --- |
49+
| Watch many sessions at once | Waterfall rows keep all agents visible without squeezing into a tiny grid |
50+
| Move without touching the mouse | Normal mode: `h j k l` navigation, `/` fuzzy search, `n` new, `s` split, `q` close |
51+
| Type safely into any shell | Insert mode routes input to the active PTY — Normal mode never leaks keys into a running agent |
52+
| Use real terminal apps | Terminal mode gives xterm.js raw keyboard control for vim, htop, TUIs, and agent prompts |
53+
| Coordinate the workspace | Workspace AI can run, read, create, rename, group, pipeline, and dispatch across sessions |
4454

45-
## Installation
55+
## Install
4656

47-
### Homebrew (macOS)
57+
### Homebrew on macOS
4858

4959
```bash
5060
brew tap amoswzw/tap
@@ -53,18 +63,18 @@ brew install --cask fluxtty
5363

5464
### Download
5565

56-
**[→ Download latest release](https://github.com/amoswzw/fluxtty/releases/latest)**
66+
**[Latest release](https://github.com/amoswzw/fluxtty/releases/latest)** — macOS, Linux, Windows
5767

58-
| Platform | File |
59-
|---|---|
60-
| 🍎 macOS (Apple Silicon) | `fluxtty_*_aarch64.dmg` |
61-
| 🍎 macOS (Intel) | `fluxtty_*_x64.dmg` |
62-
| 🐧 Linux | `fluxtty_*_amd64.deb` · `.rpm` · `.AppImage` |
63-
| 🪟 Windows | `fluxtty_*_x64-setup.exe` |
68+
| Platform | Package |
69+
| --- | --- |
70+
| macOS Apple Silicon | `fluxtty_*_aarch64.dmg` |
71+
| macOS Intel | `fluxtty_*_x64.dmg` |
72+
| Linux | `fluxtty_*_amd64.deb`, `.rpm`, `.AppImage` |
73+
| Windows | `fluxtty_*_x64-setup.exe` |
6474

6575
### Build from source
6676

67-
**Prerequisites:** [Rust](https://rustup.rs/) 1.77+, [Node.js](https://nodejs.org/) 18+, [Tauri v2 prerequisites](https://tauri.app/start/prerequisites/)
77+
Prerequisites: [Rust](https://rustup.rs/) 1.77+, [Node.js](https://nodejs.org/) 18+, [Tauri v2 prerequisites](https://tauri.app/start/prerequisites/).
6878

6979
```bash
7080
git clone https://github.com/amoswzw/fluxtty
@@ -73,69 +83,71 @@ npm install
7383
npm run tauri build
7484
```
7585

76-
Built app is in `src-tauri/target/release/bundle/`.
77-
7886
```bash
7987
npm run tauri dev # development
8088
```
8189

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>
117+
split
118+
focus <session>
119+
group <session> as <group>
120+
note <session> <text>
121+
read <session>
122+
clear <session>
123+
kill <session>
124+
list | status | help
125+
!agent <claude|codex|aider|gemini|opencode|goose|cursor|qwen|amp|crush|openhands|none>
126+
```
101127

102-
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.
103129

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
111131

112-
### ✨ Workspace AI
132+
### Waterfall layout
113133

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.
115135

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
121137

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.
123139

124-
### 👁️ Agent detection & auto-naming
140+
### Session identity and auto-naming
125141

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.
127143

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
129145

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.
131147

132-
`Ctrl+B` opens a grouped session tree with running/idle/error indicators. Click to jump to any pane.
148+
### Hot-reload config
133149

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.
139151

140152
## Configuration
141153

@@ -150,87 +162,60 @@ colors:
150162
primary:
151163
background: "#0d1117"
152164
foreground: "#e6edf3"
153-
normal:
154-
black: "#484f58" red: "#ff7b72" green: "#3fb950" yellow: "#d29922"
155-
blue: "#388bfd" magenta: "#bc8cff" cyan: "#39c5cf" white: "#b1bac4"
156-
# theme: catppuccin-mocha | gruvbox-dark | solarized-dark
157-
158-
cursor:
159-
style: Block # Block | Underline | Bar
160-
blinking: true
161165

162166
input:
163-
live_typing: false # true: each keystroke forwarded immediately
164-
165-
tmux:
166-
enabled: false # true: new panes launch through tmux
167-
session: "fluxtty-{cwd_name}-{short_id}" # saved per pane and reused on workspace restore
168-
auto_attach: true # attach existing session when available
169-
passthrough: true # allow shell metadata to pass through tmux when supported
167+
live_typing: true
170168

171169
workspace_ai:
172-
model: none # none | claude-sonnet-4-6 | gpt-4o | gemini-2.0-flash | ollama/llama3
173-
# claude-cli: uses your Claude Code login, no API key needed
174-
api_key_env: ANTHROPIC_API_KEY
170+
model: none # or: claude-sonnet-4-6, gpt-4o, gemini-2.0-flash, ollama/llama3
175171
always_confirm_broadcast: true
176172
always_confirm_multi_step: true
177173

178174
waterfall:
179-
row_height_mode: viewport # viewport | fixed
180-
new_pane_focus: true
175+
row_height_mode: viewport
176+
scroll_snap: false
181177
```
182178
183-
---
184-
185179
## Keybindings
186180
187-
All bindings are configurable in `config.yaml`.
188-
189-
### Essential — Normal mode
190-
191-
| Key | Action |
192-
|---|---|
193-
| `i` | Insert mode — type into the active shell |
194-
| `a` | AI mode — dispatch to Workspace AI |
195-
| `h` `j` `k` `l` | Navigate panes and rows |
196-
| `n` / `s` | New terminal / split row |
197-
| `q` | Close active pane |
198-
| `/` | Fuzzy pane search |
199-
| `r` | Rename pane |
200-
| `b` | Toggle sidebar |
201-
| `gg` / `G` | Jump workspace to top / bottom |
202-
| `Ctrl+D` / `Ctrl+U` | Scroll half page |
203-
204-
### Global
205-
206-
| Key | Action |
207-
|---|---|
208-
| `Ctrl+\` | Toggle Normal ↔ Terminal (raw PTY) |
209-
| `Ctrl+N` | New terminal |
210-
| `Ctrl+H` | Split row |
211-
| `Ctrl+B` | Toggle sidebar |
212-
| `Ctrl+,` | Settings |
213-
| `Ctrl+Shift+C` / `V` | Copy / Paste |
214-
| `Ctrl++` / `Ctrl+-` / `Ctrl+0` | Font size |
215-
| `Ctrl+Q` | Quit |
181+
| Key | Mode | Action |
182+
| --- | --- | --- |
183+
| `h` `j` `k` `l` | Normal | Move across panes and rows |
184+
| `i` | Normal, View | Insert mode for the active PTY |
185+
| `a` or `:` | Normal | Workspace AI / command prompt |
186+
| `/` | Normal | Fuzzy pane selector |
187+
| `v` | Normal | View mode for the active row |
188+
| `n` | Normal | New terminal row |
189+
| `s` | Normal | Split the active row |
190+
| `q` | Normal | Close the active pane |
191+
| `m` | Normal | Toggle the row note pane |
192+
| `r` | Normal | Rename the active pane |
193+
| `G` / `gg` | Normal | Jump to bottom / top of workspace |
194+
| `Ctrl+\` | Any | Toggle raw Terminal mode |
195+
| `Esc` | Insert, AI, Find, View | Return to Normal mode |
196+
| `Tab` | Insert | Shell completion or agent slash-command completion |
197+
| `Cmd+,` / `Ctrl+,` | Any | Open settings |
198+
199+
## Development
216200

217-
---
201+
```bash
202+
npm install
203+
npm run tauri dev # dev with hot reload
204+
npm test
205+
npm run build
206+
npm run tauri build # production bundle
207+
```
218208

219209
## Contributing
220210

221-
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.
226212

227213
## Inspiration
228214

229215
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."
230216

231217
---
232218

233-
234219
## License
235220

236-
MIT
221+
MIT

docs/fluxtty-preview.gif

37.1 MB
Loading

0 commit comments

Comments
 (0)