A modular terminal IDE where your AI agent can control the debugger, your sessions survive restarts, and everything runs in the terminal.
+---------------------------+--------------+
| | |
| nvim (editor/debugger) | AI agent |
| | |
| | |
|---------------------------| |
| terminal | |
| (build/run output) | |
+---------------------------+--------------+
One keybinding. Full IDE. Close your laptop, reopen — everything is exactly where you left off.
Your AI can debug for you. Tell it "find why process_data() returns None" and it will set breakpoints, run the debugger, inspect variables, and report back what's wrong. No other terminal setup can do this.
Sessions survive anything. Editor state, AI conversation, terminal working directory — all restored automatically after a crash or reboot. Like Cursor's session restore, but in the terminal.
The AI sees what you see. It shares your tmux session — it can read build output, test failures, and server logs from the terminal pane and react to them.
Everything is swappable. Don't like neovim? Use Emacs. Prefer Claude Code over OpenCode? One config line. The workflow is the product.
Works on Linux and macOS (Intel + Apple Silicon). Windows users: run inside WSL.
curl -fsSL https://github.com/guysoft/guyide-cli/releases/latest/download/guyide-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m) \
-o ~/.local/bin/guyide && chmod +x ~/.local/bin/guyide
guyide installWant the bleeding edge? Run on the dev channel — main HEAD of NvGuy, vscodium.nvim, tmux-ide and friends, with no compat gating.
curl -fsSL https://github.com/guysoft/guyide-cli/releases/latest/download/guyide-$(uname -s | tr '[:upper:]' '[:lower:]')-$(uname -m) \
-o ~/.local/bin/guyide && chmod +x ~/.local/bin/guyide
guyide install --channel devYou can flip an existing install at any time with guyide channel set dev (or back with guyide channel set stable), then guyide update to pull the new refs.
That's it. The installer:
- Backs up any existing
~/.tmux.conf,~/.config/nvim, and related state under~/.guyide/backups/<timestamp>/(kept forever). - Lays down NvGuy, the canonical
~/.tmux.conf, and your AI agent (OpenCode by default) under~/.guyide/. - Symlinks
~/.config/nvim→~/.guyide/components/nvimand~/.local/bin/guyide→~/.guyide/bin/guyide. - Runs
guyide doctorto confirm the install is healthy. - Asks: "Start GuyIDE now? [Y/n]" — answer yes and it drops you straight into nvim with a
WELCOME.mdcheatsheet that explains how to enter IDE mode, save sessions, and reach the menu.
The welcome cheatsheet teaches you the five keys you actually need:
| Keys | What it does |
|---|---|
Ctrl-a e |
Enter IDE mode (3-pane layout) |
Ctrl-a d |
Detach from tmux (your session keeps running) |
Ctrl-a Ctrl-r |
Restore the last saved session |
Ctrl-a ? |
Show the full list of tmux commands |
Space m |
Open the neovim menu bar (when the nvim pane is focused) |
guyide doctor # health check
guyide update # pull latest stable refs (gated by compat matrix)
guyide channel set dev # opt into bleeding edge
guyide uninstall # restore from the most recent backupChannels:
stabletracks the last validated(NvGuy, vscodium.nvim, ...)triple baked into theguyidebinary.devtracksmainHEAD on every component with no compat gating.
Custom prefix or driver? Edit
~/.guyide/config.yamland re-runguyide install— the installer is idempotent.
| Feature | What it does |
|---|---|
| AI-controlled debugging | The AI sets breakpoints, launches the debugger, inspects variable state, and reports findings — all programmatically via RPC |
| Full session continuity | Layout, editor session, AI conversation, and terminal state all survive restarts. Auto-saves every 15 minutes |
| AI terminal observability | The agent reads your terminal pane — it sees build errors, test output, and logs as they happen |
| Shared editor bridge | Any process in the tmux session can control neovim via the exposed RPC socket (NVIM_IDE_SOCK) |
- 3-pane IDE layout with one keybinding (
Ctrl-a e) - VSCode-compatible
.vscode/launch.jsonfor Run and Debug configurations - Full DAP debugger with UI panels (scopes, watches, stack frames, console)
- Menu bar in neovim (
F10or<leader>m) — File, Edit, View, Git, Run, Tools, Window, and more - Session auto-save/restore per project directory
- Vim-style pane navigation between tmux and nvim (
h/j/k/l) - Mouse support enabled
- Git integration — Neogit (magit-style UI), Gitsigns (inline blame, hunk ops), gitui (fast TUI via floating window), Telescope git pickers
- LSP + completion via Mason, nvim-lspconfig, nvim-cmp
- Treesitter syntax highlighting
- Code minimap sidebar
- File explorer (nvim-tree)
- Fuzzy finder for files, buffers, symbols, diagnostics (Telescope)
- Code formatting via conform.nvim
- Tmux prefix:
Ctrl-a(screen-style)
| Binding | Action |
|---|---|
Ctrl-a e |
Create IDE layout |
Ctrl-a h/j/k/l |
Navigate panes |
Ctrl-a c |
New window |
Ctrl-a Ctrl-s |
Save session |
Ctrl-a Ctrl-r |
Restore session |
| Binding | Action |
|---|---|
F10 |
Menu bar |
F5 |
Run |
F6 |
Debug |
F9 |
Toggle breakpoint |
F11 / Shift-F11 |
Step into / out |
Shift-F5 |
Stop debugger |
Three independent, replaceable layers:
| Layer | Default | Alternatives |
|---|---|---|
| Window Manager | tmux | zellij, screen |
| Editor | NvGuy (neovim) | Emacs, Helix, Vim |
| AI Agent | OpenCode | Claude Code, Aider, Goose |
Swap in ~/.tmux.conf:
set -g @ide-agent "claude-tmux" # swap AI agent (session-persistent)
set -g @ide-editor "emacs" # swap editorOr in ~/.guyide/config.yaml:
# ~/.guyide/config.yaml
schema: guyide/config/v1
channel: stable
components:
editor:
driver: nvim
multiplexer:
driver: tmux
agent:
driver: claude-code # was: opencode (default)
claude-code:
cli: claude # executable name (default)
extra_args: ["--model", "opus"] # optional passthrough flagsGuyIDE ships with a default theme and an optional alternative. Pick one in ~/.tmux.conf.
set -g @plugin 'uhs-robert/tmux-oasis'
set -g @oasis_flavor "lagoon" # also: night, midnight, abyss, starlight, desert,
# sol, canyon, dune, cactus, mirage, twilight,
# rose, dawn, dawnlight, day, dusk, dust
set -g status-position topset -g @plugin 'dracula/tmux'
set -g @dracula-show-powerline true
set -g @dracula-show-left-icon session
set -g @dracula-plugins "cpu-usage"
set -g status-position top| Plugin | Purpose |
|---|---|
| tmux-ide | 3-pane IDE layout (prefix + e) |
| tmux-resurrect | Save/restore sessions |
| tmux-continuum | Auto-save every 15 min |
| tmux-resurrect-opencode-sessions | Preserve OpenCode conversations across restarts |
| tmux-resurrect-claude-sessions | Preserve Claude Code conversations across restarts |
| vim-tmux-navigator | Seamless pane navigation |
Editor Layer — NvGuy
Neovim distribution (NvChad-based) with:
- Menu bar via vim-quickui (13 menus)
- vscodium.nvim — VSCode-like Run/Debug, reads
launch.json - Full DAP debugger + UI panels
- Session management (auto-save per directory)
- Git UI (Neogit + Gitsigns + gitui.nvim for gitui TUI)
AI Agent Layer — OpenCode
Terminal AI coding agent that:
- Lives in the right pane with full project access
- Persists conversations across restarts
- Controls the debugger via the debug-reach skill
- Reads terminal output from other panes
GuyIDE expects these skills installed under ~/.config/opencode/skills/:
| Skill | Purpose | Source |
|---|---|---|
debug-reach |
Lets the AI control nvim's debugger via RPC | bundled in vscodium.nvim (.opencode/skills/debug-reach) |
Verify after install:
ls ~/.config/opencode/skills/debug-reach/SKILL.mdAI Agent Layer — Claude Code
Terminal AI coding agent (by Anthropic) that:
- Lives in the right pane with full project access
- Persists conversations across restarts (via tmux-resurrect-claude-sessions)
- Controls the debugger via the debug-reach skill
- Reads terminal output from other panes
To use Claude Code instead of OpenCode, set in ~/.guyide/config.yaml:
agent: claude-codeOr directly in ~/.tmux.conf:
set -g @ide-agent "claude-tmux"GuyIDE expects these skills installed under ~/.claude/skills/:
| Skill | Purpose | Source |
|---|---|---|
debug-reach |
Lets the AI control nvim's debugger via RPC | bundled in vscodium.nvim (.opencode/skills/debug-reach) |
Verify after install:
ls ~/.claude/skills/debug-reach/SKILL.mdThe debug-reach skill lets the AI agent control nvim's debugger. It ships with vscodium.nvim.
The skill lives inside vscodium.nvim. If you installed NvGuy, vscodium.nvim is already on disk under ~/.local/share/nvim/lazy/vscodium.nvim/ — just copy the skill from there:
For OpenCode:
mkdir -p ~/.config/opencode/skills
cp -r ~/.local/share/nvim/lazy/vscodium.nvim/.opencode/skills/debug-reach \
~/.config/opencode/skills/For Claude Code:
mkdir -p ~/.claude/skills
cp -r ~/.local/share/nvim/lazy/vscodium.nvim/.opencode/skills/debug-reach \
~/.claude/skills/If you don't run NvGuy, clone vscodium.nvim directly:
git clone https://github.com/guysoft/vscodium.nvim.git /tmp/vscodium-nvim
# OpenCode:
mkdir -p ~/.config/opencode/skills
cp -r /tmp/vscodium-nvim/.opencode/skills/debug-reach ~/.config/opencode/skills/
# Claude Code:
mkdir -p ~/.claude/skills
cp -r /tmp/vscodium-nvim/.opencode/skills/debug-reach ~/.claude/skills/Verify:
# OpenCode:
ls ~/.config/opencode/skills/debug-reach/SKILL.md
# Claude Code:
ls ~/.claude/skills/debug-reach/SKILL.mdJust ask the AI to debug something:
"Debug why test_login fails — step through it"
"Set a breakpoint at main.py:42 and check what x is"
"Find what value user_id has when the error occurs"
The AI handles breakpoints, launches the session, inspects state, and reports back.
All three components collaborate:
| Component | Role |
|---|---|
| tmux-ide | Exposes NVIM_IDE_SOCK (nvim's RPC socket) to the tmux session |
| vscodium.nvim | Provides debug-rpc.lua — the RPC API the agent calls |
| NvGuy | Wires up nvim-dap, dap-ui, mason-nvim-dap |
Most users should not need this section —
guyide installdoes everything below for you. Read on if you want to set up the stack manually, or to understand what the installer is actually doing.
Manual install (no guyide binary)
# --- 1a. Backup any existing tmux config ---
[ -f ~/.tmux.conf ] && cp ~/.tmux.conf ~/.tmux.conf.bak.$(date +%Y%m%d-%H%M%S)
# --- 1b. Install tpack (plugin manager) ---
# macOS:
brew install tmuxpack/tpack/tpack
# Linux / anywhere with Go:
# go install github.com/tmuxpack/tpack@latest
# --- 1c. Drop in the canonical ~/.tmux.conf ---
# See the "Complete tmux.conf reference" block below.
# --- 1d. Install all declared plugins ---
tpack install # or: ~/go/bin/tpack install
# Or, from inside a running tmux session: prefix + I
# --- 1e. Wire up the IDE layout helper ---
~/.tmux/plugins/tmux-ide/install.shBACKUP=~/.nvim-backup-$(date +%Y%m%d-%H%M%S)
mkdir -p "$BACKUP"
mv ~/.config/nvim "$BACKUP/nvim" 2>/dev/null || true
mv ~/.local/share/nvim "$BACKUP/nvim-data" 2>/dev/null || true
mv ~/.local/state/nvim "$BACKUP/nvim-state" 2>/dev/null || true
git clone https://github.com/guysoft/NvGuy.git ~/.config/nvim
nvim # plugins install automatically on first launchcurl -fsSL https://opencode.ai/install | bash
mkdir -p ~/.config/opencode/skills
cp -r ~/.local/share/nvim/lazy/vscodium.nvim/.opencode/skills/debug-reach \
~/.config/opencode/skills/npm install -g @anthropic-ai/claude-code
mkdir -p ~/.claude/skills
cp -r ~/.local/share/nvim/lazy/vscodium.nvim/.opencode/skills/debug-reach \
~/.claude/skills/
# Install the session-persistence plugin:
git clone https://github.com/guysoft/tmux-resurrect-claude-sessions \
~/.tmux/plugins/tmux-resurrect-claude-sessions
~/.tmux/plugins/tmux-resurrect-claude-sessions/install.shThen set in ~/.tmux.conf:
set -g @ide-agent "claude-tmux"tmux
cd ~/your-project
# Press Ctrl-a e — IDE layout appearsComplete tmux.conf reference
set -g prefix C-a
unbind C-b
bind C-a send-prefix
# Reload config with prefix-r
unbind r
bind r source-file ~/.tmux.conf
# vim-style mode keys + pane navigation
setw -g mode-keys vi
bind-key h select-pane -L
bind-key j select-pane -D
bind-key k select-pane -U
bind-key l select-pane -R
set -g mouse on
# Clipboard
bind-key -T copy-mode-vi y send-keys -X copy-selection-and-cancel
bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-selection-and-cancel
# Pane creation in current directory
bind c new-window -c "#{pane_current_path}"
bind '"' split-window -v -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
# === Plugins ===
set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @plugin 'christoomey/vim-tmux-navigator'
set -g @plugin 'guysoft/tmux-resurrect-opencode-sessions'
set -g @plugin 'guysoft/tmux-ide'
# Session restore (continuum auto-saves every 15 min)
set -g @continuum-restore 'on'
set -g @resurrect-processes '~opencode'
# === AI Agent: Claude Code (alternative) ===
# Uncomment the block below and comment out the opencode lines above to switch
# set -g @plugin 'guysoft/tmux-resurrect-claude-sessions'
# set -g @ide-agent "claude-tmux"
# set -g @resurrect-processes '~claude'
# === Theme: Oasis (default) ===
set -g @plugin 'uhs-robert/tmux-oasis'
set -g @oasis_flavor "lagoon"
set -g status-position top
# === Theme: Dracula (alternative) ===
# Comment the Oasis block above and uncomment below to switch
# set -g @plugin 'dracula/tmux'
# set -g @dracula-show-powerline true
# set -g @dracula-show-left-icon session
# set -g @dracula-plugins "cpu-usage"
# set -g status-position top
# Initialize tpack (must stay at very bottom)
run '~/go/bin/tpack init'Prerequisites
- git, curl
- tmux >= 2.0
- Neovim >= 0.9
- Node.js >= 18 (for OpenCode and/or Claude Code)
- sqlite3 (for OpenCode session restoration)
- tpack or TPM (plugin manager)
tpackPATH note:tpackinstalls to$GOPATH/bin(typically~/go/bin). Either add that to yourPATH, or use the absolute path in~/.tmux.conf:run '~/go/bin/tpack init'
Step-by-step with TPM instead of tpack
If you prefer TPM over tpack, replace run 'tpack init' with:
set -g @plugin 'tmux-plugins/tpm'
run '~/.tmux/plugins/tpm/tpm'Then press prefix + I to install plugins.
Each component has its own repo:
| Component | Repo |
|---|---|
| tmux-ide | https://github.com/guysoft/tmux-ide |
| vscodium.nvim | https://github.com/guysoft/vscodium.nvim |
| NvGuy | https://github.com/guysoft/NvGuy |
| tmux-resurrect-opencode-sessions | https://github.com/guysoft/tmux-resurrect-opencode-sessions |
| tmux-resurrect-claude-sessions | https://github.com/guysoft/tmux-resurrect-claude-sessions |
For GuyIDE meta-repo issues (documentation, integration, workflow): open an issue here.
GPL-3.0. See LICENSE for details.
