К основному содержанию
скилл CX Codex

using-tmux-for-interactive-commands — скилл для Claude Code

Учит агента гонять vim, REPL и интерактивный git rebase через отсоединённые сессии tmux. Пригодится, когда обычный bash просто зависает.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add obra/superpowers-lab --skill using-tmux-for-interactive-commands -a claude-code
Открыть на GitHub

Что делает using-tmux-for-interactive-commands

Обычный bash не умеет работать с программами, которым нужен настоящий терминал. vim, git rebase -i, git add -p, REPL на Python или Node — всё это ждёт ввода с клавиатуры и висит, если запустить их через обычную команду. Скилл описывает обход: агент поднимает отсоединённую сессию tmux, шлёт туда нажатия через send-keys и снимает экран через capture-pane -p.

Внутри — таблица базовых команд, разбор специальных имён клавиш (Enter, Escape, C-c, стрелки) и готовые сценарии для Python REPL, правки файла в vim и интерактивного rebase. Отдельный раздел про типичные ошибки: не подождал после старта сессии и получил пустой экран, забыл отправить Enter отдельным аргументом, написал \n вместо имени клавиши. Ещё напоминание убивать сессии, иначе они копятся.

Для работы нужен установленный tmux. Скилл не заменяет обычный Bash-инструмент: для простых команд без интерактива он сам советует его не трогать. В примерах есть путь к вспомогательному скрипту-обёртке из окружения автора — этот файл вам придётся завести у себя или обойтись голым tmux.

Какие задачи решает

  • отредактировать файл в vim из агента, не открывая терминал руками
  • прогнать интерактивный git rebase -i и переписать историю коммитов
  • проверить выражение в Python REPL и забрать вывод
  • разобрать по кускам git add -p без ручного ввода
  • управлять полноэкранными утилитами вроде htop

Примеры запросов агенту

  • Открой vim /tmp/file.txt в сессии tmux, вставь строку и сохрани файл
  • Запусти Python REPL в tmux, посчитай math.pi и покажи вывод
  • Сделай git rebase -i HEAD~3 в сессии tmux и склей последние коммиты

Как установить using-tmux-for-interactive-commands

1Через Skills CLI (Vercel)

npx skills add obra/superpowers-lab --skill using-tmux-for-interactive-commands -a claude-code

2Вручную: положить файлы

~/.claude/skills/using-tmux-for-interactive-commands/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/using-tmux-for-interactive-commands/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Из того же набора3

Похожие

tmux openclaw Даёт агенту доступ к живым tmux-сессиям: читать вывод панели, отправлять клавиши и текст, ждать появления строки в промпте. CX Codex +1 8 400установок remember-interactive-programming официальный github Напоминает агенту работать через живой REPL и проверять текущее состояние системы. Пригодится для интерактивной разработки, особенно в Clojure. 9 000установок Clojure Interactive Programming официальный github Вайб-кодинг на Clojure через запуск выражений в REPL перед правкой файлов. Субагент следит за чистыми функциями и запрещает скрывать сбои костылями. ★ 40 418звёзд репо project-session-manager Yeachan-Heo Скилл автоматизирует создание отдельных git-воркtræев для каждой задачи, PR или фичи, с опциональной оркестровкой tmux-сессий. Позволяет параллельно работать над несколькими ветками без конфликтов. CX Codex +1 866установок resolve-human-reviews pbakaus Скилл проходит по неотвеченным комментариям людей в текущем пул-реквесте, оценивает каждый, вносит правки и отвечает с результатом. CX Codex +1 394установок using-n8n-skills-official n8n-io Всегда включённый протокол плагина n8n-skills: направляет агента к нужному скиллу и перечисляет правила работы с воркфлоу n8n. CX Codex +1 2 000установок

Рядом в теме «Настройка агента: память, контекст, субагенты»

Все скиллы по теме «Настройка агента: память, контекст, субагенты» →

Вопросы о using-tmux-for-interactive-commands

Как установить using-tmux-for-interactive-commands в Claude?

Выполните npx skills add obra/superpowers-lab --skill using-tmux-for-interactive-commands -a claude-code. Файл скилла появится по пути ~/.claude/skills/using-tmux-for-interactive-commands/SKILL.md.

Что делает этот скилл?

Даёт агенту схему управления интерактивными CLI через tmux: создать отсоединённую сессию, отправить клавиши, снять экран, закрыть сессию. Так работают vim, REPL и интерактивный rebase.

Когда tmux не нужен?

Для простых неинтерактивных команд скилл советует обычный Bash-инструмент. Также он не подходит для программ, которые читают ввод из stdin, и для одноразовых команд без диалога.

Исходный текст

SKILL.md · MIT
---
name: using-tmux-for-interactive-commands
description: Use when you need to run interactive CLI tools (vim, git rebase -i, Python REPL, etc.) that require real-time input/output - provides tmux-based approach for controlling interactive sessions through detached sessions and send-keys
---

# Using tmux for Interactive Commands

## Overview

Interactive CLI tools (vim, interactive git rebase, REPLs, etc.) cannot be controlled through standard bash because they require a real terminal. tmux provides detached sessions that can be controlled programmatically via `send-keys` and `capture-pane`.

## When to Use

**Use tmux when:**
- Running vim, nano, or other text editors programmatically
- Controlling interactive REPLs (Python, Node, etc.)
- Handling interactive git commands (`git rebase -i`, `git add -p`)
- Working with full-screen terminal apps (htop, etc.)
- Commands that require terminal control codes or readline

**Don't use for:**
- Simple non-interactive commands (use regular Bash tool)
- Commands that accept input via stdin redirection
- One-shot commands that don't need interaction

## Quick Reference

| Task | Command |
|------|---------|
| Start session | `tmux new-session -d -s <name> <command>` |
| Send input | `tmux send-keys -t <name> 'text' Enter` |
| Capture output | `tmux capture-pane -t <name> -p` |
| Stop session | `tmux kill-session -t <name>` |
| List sessions | `tmux list-sessions` |

## Core Pattern

### Before (Won't Work)
```bash
# This hangs because vim expects interactive terminal
bash -c "vim file.txt"
```

### After (Works)
```bash
# Create detached tmux session
tmux new-session -d -s edit_session vim file.txt

# Send commands (Enter, Escape are tmux key names)
tmux send-keys -t edit_session 'i' 'Hello World' Escape ':wq' Enter

# Capture what's on screen
tmux capture-pane -t edit_session -p

# Clean up
tmux kill-session -t edit_session
```

## Implementation

### Basic Workflow

1. **Create detached session** with the interactive command
2. **Wait briefly** for initialization (100-500ms depending on command)
3. **Send input** using `send-keys` (can send special keys like Enter, Escape)
4. **Capture output** using `capture-pane -p` to see current screen state
5. **Repeat** steps 3-4 as needed
6. **Terminate** session when done

### Special Keys

Common tmux key names:
- `Enter` - Return/newline
- `Escape` - ESC key
- `C-c` - Ctrl+C
- `C-x` - Ctrl+X
- `Up`, `Down`, `Left`, `Right` - Arrow keys
- `Space` - Space bar
- `BSpace` - Backspace

### Working Directory

Specify working directory when creating session:
```bash
tmux new-session -d -s git_session -c /path/to/repo git rebase -i HEAD~3
```

### Helper Wrapper

For easier use, see `/home/jesse/git/interactive-command/tmux-wrapper.sh`:
```bash
# Start session
/path/to/tmux-wrapper.sh start <session-name> <command> [args...]

# Send input
/path/to/tmux-wrapper.sh send <session-name> 'text' Enter

# Capture current state
/path/to/tmux-wrapper.sh capture <session-name>

# Stop
/path/to/tmux-wrapper.sh stop <session-name>
```

## Common Patterns

### Python REPL
```bash
tmux new-session -d -s python python3 -i
tmux send-keys -t python 'import math' Enter
tmux send-keys -t python 'print(math.pi)' Enter
tmux capture-pane -t python -p  # See output
tmux kill-session -t python
```

### Vim Editing
```bash
tmux new-session -d -s vim vim /tmp/file.txt
sleep 0.3  # Wait for vim to start
tmux send-keys -t vim 'i' 'New content' Escape ':wq' Enter
# File is now saved
```

### Interactive Git Rebase
```bash
tmux new-session -d -s rebase -c /repo/path git rebase -i HEAD~3
sleep 0.5
tmux capture-pane -t rebase -p  # See rebase editor
# Send commands to modify rebase instructions
tmux send-keys -t rebase 'Down' 'Home' 'squash' Escape
tmux send-keys -t rebase ':wq' Enter
```

## Common Mistakes

### Not Waiting After Session Start
**Problem:** Capturing immediately after `new-session` shows blank screen

**Fix:** Add brief sleep (100-500ms) before first capture
```bash
tmux new-session -d -s sess command
sleep 0.3  # Let command initialize
tmux capture-pane -t sess -p
```

### Forgetting Enter Key
**Problem:** Commands typed but not executed

**Fix:** Explicitly send Enter
```bash
tmux send-keys -t sess 'print("hello")' Enter  # Note: Enter is separate argument
```

### Using Wrong Key Names
**Problem:** `tmux send-keys -t sess '\n'` doesn't work

**Fix:** Use tmux key names: `Enter`, not `\n`
```bash
tmux send-keys -t sess 'text' Enter  # ✓
tmux send-keys -t sess 'text\n'      # ✗
```

### Not Cleaning Up Sessions
**Problem:** Orphaned tmux sessions accumulate

**Fix:** Always kill sessions when done
```bash
tmux kill-session -t session_name
# Or check for existing: tmux has-session -t name 2>/dev/null
```

## Real-World Impact

- Enables programmatic control of vim/nano for file editing
- Allows automation of interactive git workflows (rebase, add -p)
- Makes REPL-based testing/debugging possible
- Unblocks any tool that requires terminal interaction
- No need to build custom PTY management - tmux handles it all

© obra · MIT · obra/superpowers-lab

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой