| name | tui-applications |
| description | Patterns for controlling TUI applications (vim, htop, tig, lazygit, etc.) via terminalcp |
TUI Applications Control with terminalcp
This skill provides comprehensive patterns for automating Text User Interface (TUI) applications using terminalcp MCP. It enables AI agents to control interactive terminal applications with full visual feedback.
Overview
terminalcp enables:
- Full PTY terminal emulation for TUI apps
- ANSI color and cursor positioning preservation
- Complex key sequence automation
- Screen content capture and parsing
- Multi-TUI session management
The MCP server runs via npx @mariozechner/terminalcp@latest --mcp and provides complete terminal rendering.
Vim/Neovim Automation
Starting Vim/Neovim
{
"action": "start",
"command": "vim myfile.txt",
"name": "vim-session"
}
{
"action": "start",
"command": "nvim myfile.txt",
"name": "nvim-session"
}
{
"action": "start",
"command": "vim",
"name": "vim-session"
}
Vim Mode Navigation
{
"action": "stdin",
"id": "vim-session",
"data": "i"
}
{
"action": "stdin",
"id": "vim-session",
"data": "Hello, World!"
}
{
"action": "stdin",
"id": "vim-session",
"data": "\u001b"
}
{
"action": "stdin",
"id": "vim-session",
"data": "h"
}
{
"action": "stdin",
"id": "vim-session",
"data": "j"
}
{
"action": "stdin",
"id": "vim-session",
"data": "k"
}
{
"action": "stdin",
"id": "vim-session",
"data": "l"
}
Note: \u001b is the Escape key in MCP notation.
Vim Editing Commands
{
"action": "stdin",
"id": "vim-session",
"data": "dd"
}
{
"action": "stdin",
"id": "vim-session",
"data": "u"
}
{
"action": "stdin",
"id": "vim-session",
"data": "\u0012"
}
{
"action": "stdin",
"id": "vim-session",
"data": "yy"
}
{
"action": "stdin",
"id": "vim-session",
"data": "p"
}
{
"action": "stdin",
"id": "vim-session",
"data": ":%s/old/new/g\r"
}
Vim File Operations
{
"action": "stdin",
"id": "vim-session",
"data": ":w\r"
}
{
"action": "stdin",
"id": "vim-session",
"data": ":wq\r"
}
{
"action": "stdin",
"id": "vim-session",
"data": ":q!\r"
}
{
"action": "stdin",
"id": "vim-session",
"data": ":e another_file.txt\r"
}
{
"action": "stdin",
"id": "vim-session",
"data": ":saveas newfile.txt\r"
}
Vim Search and Navigation
{
"action": "stdin",
"id": "vim-session",
"data": "/search_term\r"
}
{
"action": "stdin",
"id": "vim-session",
"data": "?search_term\r"
}
{
"action": "stdin",
"id": "vim-session",
"data": "n"
}
{
"action": "stdin",
"id": "vim-session",
"data": "N"
}
{
"action": "stdin",
"id": "vim-session",
"data": ":42\r"
}
{
"action": "stdin",
"id": "vim-session",
"data": "G"
}
{
"action": "stdin",
"id": "vim-session",
"data": "gg"
}
Vim Visual Mode
{
"action": "stdin",
"id": "vim-session",
"data": "v"
}
{
"action": "stdin",
"id": "vim-session",
"data": "jjj"
}
{
"action": "stdin",
"id": "vim-session",
"data": "y"
}
{
"action": "stdin",
"id": "vim-session",
"data": "\u001b"
}
Capturing Vim Screen
{
"action": "stdout",
"id": "vim-session"
}
This returns the full terminal rendering including vim's UI, status line, and content.
System Monitoring TUIs
htop
{
"action": "start",
"command": "htop",
"name": "htop-session"
}
{
"action": "stdin",
"id": "htop-session",
"data": "\u001b[B"
}
{
"action": "stdin",
"id": "htop-session",
"data": "\u001b[A"
}
{
"action": "stdin",
"id": "htop-session",
"data": "P"
}
{
"action": "stdin",
"id": "htop-session",
"data": "M"
}
{
"action": "stdin",
"id": "htop-session",
"data": "F4"
}
{
"action": "stdin",
"id": "htop-session",
"data": "python\r"
}
{
"action": "stdin",
"id": "htop-session",
"data": "F9"
}
{
"action": "stdout",
"id": "htop-session"
}
{
"action": "stdin",
"id": "htop-session",
"data": "q"
}
btop
{
"action": "start",
"command": "btop",
"name": "btop-session"
}
{
"action": "stdin",
"id": "btop-session",
"data": "m"
}
{
"action": "stdin",
"id": "btop-session",
"data": "1"
}
{
"action": "stdin",
"id": "btop-session",
"data": "2"
}
{
"action": "stdin",
"id": "btop-session",
"data": "3"
}
{
"action": "stdout",
"id": "btop-session"
}
Git TUIs
tig
{
"action": "start",
"command": "tig",
"name": "tig-session"
}
{
"action": "stdin",
"id": "tig-session",
"data": "j"
}
{
"action": "stdin",
"id": "tig-session",
"data": "k"
}
{
"action": "stdin",
"id": "tig-session",
"data": "\r"
}
{
"action": "stdin",
"id": "tig-session",
"data": "/search_term\r"
}
{
"action": "stdin",
"id": "tig-session",
"data": ":toggle refs\r"
}
{
"action": "stdout",
"id": "tig-session"
}
{
"action": "stdin",
"id": "tig-session",
"data": "q"
}
lazygit
{
"action": "start",
"command": "lazygit",
"name": "lazygit-session"
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "1"
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "2"
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "3"
}
{
"action": "stdin",
"id": "lazygit-session",
"data": " "
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "c"
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "Commit message\u001b:wq\r"
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "P"
}
{
"action": "stdout",
"id": "lazygit-session"
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "q"
}
File Managers
ranger
{
"action": "start",
"command": "ranger",
"name": "ranger-session"
}
{
"action": "stdin",
"id": "ranger-session",
"data": "j"
}
{
"action": "stdin",
"id": "ranger-session",
"data": "k"
}
{
"action": "stdin",
"id": "ranger-session",
"data": "l"
}
{
"action": "stdin",
"id": "ranger-session",
"data": "h"
}
{
"action": "stdin",
"id": "ranger-session",
"data": "/filename\r"
}
{
"action": "stdin",
"id": "ranger-session",
"data": "dD"
}
{
"action": "stdout",
"id": "ranger-session"
}
{
"action": "stdin",
"id": "ranger-session",
"data": "q"
}
Database TUIs
mycli (MySQL client)
{
"action": "start",
"command": "mycli -u user -p password -D database",
"name": "mycli-session"
}
{
"action": "stdin",
"id": "mycli-session",
"data": "SELECT * FROM users LIMIT 10;\r"
}
{
"action": "stdin",
"id": "mycli-session",
"data": "\u001b[B"
}
{
"action": "stdout",
"id": "mycli-session"
}
{
"action": "stdin",
"id": "mycli-session",
"data": "\\q\r"
}
pgcli (PostgreSQL client)
{
"action": "start",
"command": "pgcli -h localhost -U user database",
"name": "pgcli-session"
}
{
"action": "stdin",
"id": "pgcli-session",
"data": "SELECT * FROM products WHERE price > 100;\r"
}
{
"action": "stdout",
"id": "pgcli-session"
}
Advanced Patterns
Automated Code Editing Workflow
{
"action": "start",
"command": "vim script.py",
"name": "edit-session"
}
{
"action": "stdin",
"id": "edit-session",
"data": ":50\r"
}
{
"action": "stdin",
"id": "edit-session",
"data": "i"
}
{
"action": "stdin",
"id": "edit-session",
"data": " print('Debug info')\r"
}
{
"action": "stdin",
"id": "edit-session",
"data": "\u001b"
}
{
"action": "stdin",
"id": "edit-session",
"data": ":w\r"
}
{
"action": "stdout",
"id": "edit-session"
}
{
"action": "stdin",
"id": "edit-session",
"data": ":q\r"
}
System Monitoring and Alert
{
"action": "start",
"command": "htop",
"name": "monitor"
}
{
"action": "stdin",
"id": "monitor",
"data": "P"
}
{
"action": "stdout",
"id": "monitor"
}
{
"action": "stream",
"id": "monitor",
"since_last": true
}
Git Workflow Automation
{
"action": "start",
"command": "tig status",
"name": "git-review"
}
{
"action": "stdin",
"id": "git-review",
"data": "j"
}
{
"action": "stdin",
"id": "git-review",
"data": "\r"
}
{
"action": "stdout",
"id": "git-review"
}
{
"action": "stdin",
"id": "git-review",
"data": "u"
}
{
"action": "stdin",
"id": "git-review",
"data": "q"
}
{
"action": "start",
"command": "lazygit",
"name": "git-commit"
}
{
"action": "stdin",
"id": "git-commit",
"data": "c"
}
{
"action": "stdin",
"id": "git-commit",
"data": "iCommit message\u001b:wq\r"
}
{
"action": "stdout",
"id": "git-commit"
}
Database Query and Analysis
{
"action": "start",
"command": "mycli -u root mydb",
"name": "db-query"
}
{
"action": "stdin",
"id": "db-query",
"data": "SELECT category, COUNT(*), AVG(price) FROM products GROUP BY category;\r"
}
{
"action": "stdout",
"id": "db-query"
}
{
"action": "stdin",
"id": "db-query",
"data": "SELECT * FROM products WHERE category = 'electronics' ORDER BY price DESC LIMIT 5;\r"
}
{
"action": "stdout",
"id": "db-query"
}
{
"action": "stdin",
"id": "db-query",
"data": "\\q\r"
}
Key Sequences Reference
Special Keys in MCP Notation
Enter: \r
Escape: \u001b
Tab: \t
Ctrl+C: \u0003
Ctrl+D: \u0004
Ctrl+Z: \u001a
Ctrl+R: \u0012
Ctrl+L: \u000c
Backspace: \u007f
Up Arrow: \u001b[A
Down Arrow: \u001b[B
Right Arrow: \u001b[C
Left Arrow: \u001b[D
Home: \u001b[H
End: \u001b[F
Page Up: \u001b[5~
Page Down: \u001b[6~
Delete: \u001b[3~
F1-F12: \u001bOP to \u001b[24~
Vim Key Combinations
Ctrl+W + W: Switch windows
Ctrl+W + V: Vertical split
Ctrl+W + S: Horizontal split
Ctrl+F: Page down
Ctrl+B: Page up
Ctrl+U: Half page up
Ctrl+D: Half page down
Best Practices
Screen Capture Timing
- Capture after significant actions complete
- Use
stream mode for continuous monitoring
- Wait for UI to settle before capture
- Parse output carefully - TUIs include ANSI codes
Navigation Strategy
- Use shortcuts when available (e.g.,
gg in vim vs many k presses)
- Learn application-specific navigation
- Test key sequences in isolation first
- Handle different terminal sizes
Error Handling
{
"action": "stdout",
"id": "vim-session"
}
Session Management
- Name TUI sessions by purpose
- Close applications gracefully (quit commands)
- Use
stop action if application hangs
- List sessions to track active TUIs
Output Parsing
- TUI output includes formatting codes
- Use regex to extract data from formatted tables
- Be aware of terminal width affecting layout
- Strip ANSI codes for text-only analysis
Common TUI Workflows
Quick File Edit
- Open vim with file
- Navigate to target location
- Make changes in insert mode
- Save and quit
System Health Check
- Start htop
- Capture CPU/memory state
- Identify high-usage processes
- Document findings
Git Change Review
- Start tig or lazygit
- Navigate through commits/changes
- Capture relevant diffs
- Make staging/commit decisions
Database Investigation
- Connect to database with TUI client
- Run exploratory queries
- Capture results
- Refine queries based on findings
This skill provides comprehensive automation patterns for TUI applications using terminalcp's full terminal emulation capabilities.