Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

322 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GridVibe logo

GridVibe

The vibe-coding cockpit.
Spin up a grid of AI agent CLIs and SSH terminals in seconds, talk to them out loud,
and keep your files, Git, and a live app preview in the same window.

CI License: MIT Python 3.10+


Why GridVibe

A grid, not a tab pile Pick 1, 2, 3, 4, 6, or 8 panes, pick a target per pane, hit launch. SSH, WSL, PowerShell, cmd, or a local repo — side by side, resizable, splittable.
Agents are a dropdown, not a chore Six agent CLIs are first-class pane types, most with an Auto mode toggle. GridVibe detects them on the target machine before you launch, so you find out about a missing binary before the pane opens.
Talk to your agents Fully offline voice input (Vosk or faster-whisper) dictates straight into any pane. Push-to-talk keybind included. Off by default.
Set it up once Save a tab as a preset, save the whole workspace, restart, get it all back — right down to which group you were working in.

Everything else — the file explorer, the Git sidebar, the browser preview — exists so you never have to leave the grid mid-flow.

Screenshots

Launcher Agents Terminal Workspace Browser App Settings
GridVibe launcher with terminal count, layout, connection, and per-terminal setup controls Preset agent setup from a saved configuration GridVibe terminal workspace showing a four-pane SSH session group GridVibe app browser terminal mode with tabs GridVibe app settings with theme, SSH host-key, and voice options

Quick Start

Python 3.10+ is the only prerequisite. The launcher scripts create and repair the virtual environment, install dependencies, and start the app.

# Windows
.\START_HERE\Start GridVibe.bat
# Linux / macOS
sudo apt install python3 python3-venv python3-pip   # Debian/Ubuntu
chmod +x GridVibe.sh && ./GridVibe.sh
# Manual, any platform
python -m venv .venv
source .venv/bin/activate        # Windows PowerShell: .venv\Scripts\Activate.ps1
python -m pip install --upgrade -r requirements.txt
python main.py                   # → http://localhost:5050

Both launchers ask for Desktop (native window) or Browser mode. Core requirements already include pywinpty on Windows, so local cmd/PowerShell/WSL panes work in browser mode too. For a native window, also install requirements-desktop.txt.

Getting & updating it

Get it Update it
Clone (recommended) git clone https://github.com/JSstudent/gridvibe.git The launcher's Check for updates button fast-forwards in place
Release ZIP (no Git) Source code (zip) from Releases Download the next release — in-app update needs a clone, and says so

A Windows installer that bundles Python is planned for 2.0.0.

Run modes

python main.py                     # browser mode on http://localhost:5050
python main.py --host 0.0.0.0      # bind all interfaces (opt-in)
python main.py --port 8080         # custom port
python webview_launcher.py         # auto: native window, browser fallback
python webview_launcher.py --mode browser|native

Agent CLIs

Pick an agent per pane in the launcher. GridVibe checks whether the binary is on PATH in the target environment (the remote host for SSH, the chosen distro for WSL, Windows for PowerShell/cmd) and shows install guidance when it isn't.

Agent Binary Auto mode
Claude Code claude Yes
OpenAI Codex CLI codex Yes
GitHub Copilot CLI copilot Yes
OpenCode CLI opencode
Kilo CLI kilo Yes
Kimi Code CLI kimi Yes

GridVibe does not bundle the CLIs. If everything shows Missing, install it and put its folder on PATH — for npm-installed agents on Windows that is usually %APPDATA%\npm (check with npm prefix -g). Restart GridVibe after PATH changes.

Voice Input

Optional, fully offline, off by default. Turn it on in App Settings (the gear on either page), pick a backend (Vosk or faster-whisper), a language, and optionally a capture profile, microphone, and push-to-talk keybind. Then hit the 🎙️ button on any pane.

If the packages are missing, App Settings says so and offers Install voice dependencies — installed into GridVibe's own environment and loaded without a restart. Or do it yourself:

python -m pip install --upgrade -r requirements-voice.txt

Browser mode is the most reliable for microphone permissions. Settings apply live to open workspace tabs. Details: docs/voice_guideline.md.

Sessions & Workspace

Session tabs Keep related panes together in draggable tabs. Use Alt+1Alt+9 to switch, middle-click to close, or broadcast typing to every pane in the active tab.
Saved sessions Save a setup as a reusable preset, import one later, or choose New Session for a clean start. Stored SSH passwords are encrypted.
Save & restore GridVibe autosaves your workspace and also offers Save Workspace. After a restart, restore the same tabs, pane layouts, directories, commands, and active group; passwords are never written to the workspace snapshot.
Multiple workspaces Optionally keep separate projects in separate windows, move tabs between them without restarting terminals, and switch with Alt+W / Alt+Shift+W.
Updates Check for updates fast-forwards a Git clone, with an option to save the workspace and restart.

Closing a workspace ends its terminals but keeps it available to restore. Close and forget removes both the live workspace and its snapshot, while closing only the window leaves its terminals running. Closing the last tab removes an empty workspace.

File Explorer

Swap any pane between a terminal and a file explorer with one button — same directory, no re-navigation. Works on a local repo folder or a remote host over SFTP.

Browse & preview Use breadcrumbs, a lazy file tree, draggable file tabs, syntax-coloured source, rendered Markdown and Mermaid, inline images, downloads, and Ctrl+F find.
Edit Edit complete UTF-8 text files in place and save with Ctrl+S. Saves are atomic, and a conflict prompt protects files changed on disk.
Git See branch and file status, inspect current or historical diffs, and stage, unstage, commit, publish, or discard changes. Diff views also support line and block undo.
Search Press Ctrl+Shift+F for repository-wide search with case, whole-word, regex, file-pattern, scope, and .gitignore controls.
Manage files Create, copy, move, rename, and delete from the context menu. Every write stays inside the explorer root; collisions never overwrite existing files, and deletion requires confirmation.

Uploading, cross-root transfers, and Git checkout, pull, or merge are intentionally left to the terminal.

Switching a Local Repo Pane's Shell

Launched a pane in cmd and wanted PowerShell — or WSL? Click the pane's 🔄 button: on a Local Repo terminal it's a dropdown with Reset view on top and a Shell section listing Command Prompt, PowerShell, WSL (default distro) and every detected distro. Picking one restarts that pane's shell in place — same slot, same title, same startup command — starting in the directory the old shell was sitting in. Windows hosts only; SSH, explorer, and browser panes keep the plain one-click reset.

Browser Preview

Flip a Local Repo pane to a browser preview (the 🌐 button) and watch the app you're building next to the terminal running it.

  • Tabbed — up to 8 tabs, per-tab close, drag to reorder, + opens a blank tab at http://127.0.0.1:3000. Each tab keeps its own live frame, so switching or reordering never reloads your app.
  • URL bar navigates the active tab (http/https only); Open kicks it out to a real OS browser tab.
  • Same-origin popups get captured into new pane tabs instead of escaping — which is what lets you drive GridVibe's own launcher → workspace flow inside a pane. Named window targets reuse their tab rather than stacking up. Cross-origin pages can't be instrumented by anyone, so their popups still open externally.
  • Nested preview is capped one level deep — a GridVibe page already inside a pane shows a Nested preview disabled notice instead of re-embedding itself forever.
  • The whole tab strip saves and restores with the workspace and with session presets.

GridVibe does not proxy pages or bypass X-Frame-Options/CSP, so sites that block embedding need Open.

Icons & Shortcuts

Pane header:

Does
🔄 Reset the view and replay recent output (reloads explorer and browser panes). On a Local Repo terminal it opens a dropdown: Reset view plus a Shell section that restarts the pane in cmd, PowerShell, or a WSL distro
📁 ⇄ 💻 Swap between terminal and file explorer at the current directory
🌐 ⇄ 💻 Swap a Local Repo pane between terminal and browser preview
🪟 Split side-by-side or stacked. A terminal clones its connection; an explorer or browser pane splits off a terminal instead — for both SSH and Local Repo — rooted where the explorer is currently browsing
🧹 Clear the display and purge the replay buffer
🎙️ Start/stop voice input (when enabled)
🌙 ⇄ ☀️ Toggle an explorer pane between dark and light
Overflow menu, shown when the pane is too narrow for the full row
✖️ Close the pane (confirms first — it's a live session)

Explorer bar:

Does
🔄 Refresh the explorer (F5)
⬆️ Go to the parent directory (or mouse Back)
🗂️ Files tree sidebar
Git changes and history sidebar
🔍 Repository search sidebar (Ctrl+Shift+F)
🖥️ Reveal the current location in the system file manager (local panes only)

Top bar: theme · refresh all · max surface · broadcast typing · fullscreen · App Settings · chevron to hide the bar. Plus a Workspace… menu and a Sessions… menu.

Session tab line: the back-to-launcher button sits at the head of the tab line, ahead of the first tab, so it stays reachable with the top bar hidden.

Shortcut Action
Alt+` Open the launcher (the key left of 1)
Alt+1Alt+9 Switch session group
Alt+W / Alt+Shift+W Next / previous workspace window (multiple workspaces only) — the window you land in pulses once
Ctrl+Shift+F Terminal scrollback search — or, on an explorer pane, toggle repository search
Ctrl+F Find in the open file
Ctrl+Shift+V Toggle Markdown rendered preview
Ctrl+S / Esc Save / cancel in the explorer editor
F5 Refresh the focused explorer

Drag the dividers between panes to resize them.

Configuration

Everything lives in App Settings — same dialog from the gear on the launcher or the session window, so settings never need a trip back to the launcher. It covers theme, surface mode, terminal font and size, max sessions, workspace autosave interval, SSH host-key policy, and all voice options. The one exception is Multiple workspaces: it changes what every launch does, so its switch sits in the launcher's Workspaces card instead of the dialog.

On disk, settings load from config.json (git-ignored) falling back to default_config.json:

{
  "server": { "host": "127.0.0.1", "port": 5050 },
  "appearance": { "theme": "dark" },
  "terminal": { "max_sessions": 16, "font_size": 14 },
  "workspace": { "surface_mode": "normal", "autosave_interval_minutes": 5, "multi_workspace_enabled": false },
  "ssh": { "host_key_policy": "auto-add" },
  "explorer_search": { "max_files": 2000, "max_matches": 5000, "timeout_seconds": 20 }
}

GridVibe generates a Flask session signing key at startup unless GRIDVIBE_SECRET_KEY, SECRET_KEY, or security.secret_key is set.

Security

GridVibe is a local tool, not a public web service: it binds to 127.0.0.1 by default, has no built-in authentication, and should not be exposed to the internet.

  • Socket.IO CORS defaults to same-origin; state-changing cross-origin requests are rejected. Set security.cors_origins only if you serve GridVibe from another origin.
  • SSH host keys persist to .known_hosts; ssh.host_key_policy can be auto-add (default), known-hosts, or strict.
  • Saved SSH passwords are Fernet-encrypted; the key lives in .encryption_key.

See SECURITY.md for reporting and scope.

Development

make check                      # test + lint, run this before handing work back
make test lint fix              # individually

# Windows without make:
python tests/run_tests.py
python -m ruff check .

Backend lives in the modular web/ package (app.py, api.py, agents.py, terminal_io.py, explorer.py, explorer_search.py, voice.py, …), session state in sessions/manager.py, the voice service in services/, and the two pages in templates/ with assets in web/static/. Root-level api.py, session_manager.py, cleanup.py, and webview_launcher.py are compatibility shims — edit the canonical modules.

More: CONTRIBUTING.md · CHANGELOG.md · docs/logging_guide.md · docs/voice_guideline.md

Local Files

Created at runtime, never committed:

File Purpose
config.json Local runtime configuration override
saved_sessions.json Saved launcher presets (encrypted passwords)
runtime_state.json Workspace-shape snapshot for restore-after-restart
.known_hosts Persisted SSH host keys
.encryption_key Fernet key for password encryption
logs/gridvibe.log Main rotating log file

License

MIT. See LICENSE.

About

GridVibe is a browser-first workspace for launching and managing multiple SSH terminals, local shell panes, agent panes, and SSH/SFTP or local repository file explorer panes from one control surface.

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages