用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/code-yeongyu/sisyphus-private --skill tui-applications命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
Create YAML format work plans saved as .sisyphus/tasks/{name}.yaml with strict schema validation. Analyze user requirements, gather project context, and generate structured plans with verification specs. ALWAYS includes mandatory plan-reviewer verification. Use when users request YAML-based work planning or Sisyphus-compatible task breakdown.
Specialized GitHub PR intelligence agent for automatically gathering comprehensive context from Pull Requests. Activate when users need CI failure analysis, review comment investigation, or PR status assessment. Triggers on requests like "CI 실패 원인 찾아줘", "gather review comments", "check PR status", "analyze PR".
Commits changes in atomic units following dependency order. Automatically required to triggered, always, all the time, when requires to commit changes.
基于 SOC 职业分类
正在显示 SKILL.md
| name | tui-applications |
| description | Patterns for controlling TUI applications (vim, htop, tig, lazygit, etc.) via 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.
terminalcp enables:
The MCP server runs via npx @mariozechner/terminalcp@latest --mcp and provides complete terminal rendering.
// Open file in vim
{
"action": "start",
"command": "vim myfile.txt",
"name": "vim-session"
}
// Open file in neovim
{
"action": "start",
"command": "nvim myfile.txt",
"name": "nvim-session"
}
// Start vim without file
{
"action": "start",
"command": "vim",
"name": "vim-session"
}
// Enter insert mode
{
"action": "stdin",
"id": "vim-session",
"data": "i"
}
// Type text
{
"action": "stdin",
"id": "vim-session",
"data": "Hello, World!"
}
// Exit insert mode (Escape)
{
"action": "stdin",
"id": "vim-session",
"data": "\u001b"
}
// Move cursor (in normal mode)
{
"action": "stdin",
"id": "vim-session",
"data": "h" // left
}
{
Note: \u001b is the Escape key in MCP notation.
// Delete line
{
"action": "stdin",
"id": "vim-session",
"data": "dd"
}
// Undo
{
"action": "stdin",
"id": "vim-session",
"data": "u"
}
// Redo
{
"action": "stdin",
"id": "vim-session",
"data": "\u0012" // Ctrl+R
}
// Copy line (yank)
{
"action": "stdin",
"id": "vim-session",
"data": "yy"
}
// Paste
{
// Save file
{
"action": "stdin",
"id": "vim-session",
"data": ":w\r"
}
// Save and quit
{
"action": "stdin",
"id": "vim-session",
"data": ":wq\r"
}
// Quit without saving
{
"action": "stdin",
"id": "vim-session",
"data": ":q!\r"
}
// Open another file
{
"action": "stdin",
"id": "vim-session",
"data": ":e another_file.txt\r"
}
// Save as
{
// Search forward
{
"action": "stdin",
"id": "vim-session",
"data": "/search_term\r"
}
// Search backward
{
"action": "stdin",
"id": "vim-session",
"data": "?search_term\r"
}
// Next search result
{
"action": "stdin",
"id": "vim-session",
"data": "n"
}
// Previous search result
{
"action": "stdin",
"id": "vim-session",
"data": "N"
}
// Go to line
{
// Enter visual mode
{
"action": "stdin",
"id": "vim-session",
"data": "v"
}
// Select text (move cursor while in visual mode)
{
"action": "stdin",
"id": "vim-session",
"data": "jjj" // Select 3 lines down
}
// Copy selection
{
"action": "stdin",
"id": "vim-session",
"data": "y"
}
// Exit visual mode
{
"action": "stdin",
"id": "vim-session",
"data": "\u001b"
}
{
"action": "stdout",
"id": "vim-session"
}
This returns the full terminal rendering including vim's UI, status line, and content.
// Start htop
{
"action": "start",
"command": "htop",
"name": "htop-session"
}
// Navigate processes
{
"action": "stdin",
"id": "htop-session",
"data": "\u001b[B" // Down arrow
}
{
"action": "stdin",
"id": "htop-session",
"data": "\u001b[A" // Up arrow
}
// Sort by CPU
{
"action": "stdin",
"id": "htop-session",
"data": "P"
}
// Sort by memory
// Start btop
{
"action": "start",
"command": "btop",
"name": "btop-session"
}
// Toggle menu
{
"action": "stdin",
"id": "btop-session",
"data": "m"
}
// Switch views
{
"action": "stdin",
"id": "btop-session",
"data": "1" // CPU view
}
{
"action": "stdin",
"id": "btop-session",
"data": "2" // Memory view
}
{
// Start tig (git commit history viewer)
{
"action": "start",
"command": "tig",
"name": "tig-session"
}
// Navigate commits
{
"action": "stdin",
"id": "tig-session",
"data": "j" // Next commit
}
{
"action": "stdin",
"id": "tig-session",
"data": "k" // Previous commit
}
// View commit details
{
"action": "stdin",
"id": "tig-session",
"data": "\r" // Enter to view diff
// Start lazygit
{
"action": "start",
"command": "lazygit",
"name": "lazygit-session"
}
// Navigate panels
{
"action": "stdin",
"id": "lazygit-session",
"data": "1" // Files panel
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "2" // Branches panel
}
{
"action": "stdin",
"id": "lazygit-session",
"data": "3" // Commits panel
}
// Stage file
// Start ranger file manager
{
"action": "start",
"command": "ranger",
"name": "ranger-session"
}
// Navigate
{
"action": "stdin",
"id": "ranger-session",
"data": "j" // Down
}
{
"action": "stdin",
"id": "ranger-session",
"data": "k" // Up
}
{
"action": "stdin",
"id": "ranger-session",
"data": "l" // Enter directory
}
{
// Start mycli
{
"action": "start",
"command": "mycli -u user -p password -D database",
"name": "mycli-session"
}
// Execute query
{
"action": "stdin",
"id": "mycli-session",
"data": "SELECT * FROM users LIMIT 10;\r"
}
// Navigate results with arrow keys
{
"action": "stdin",
"id": "mycli-session",
"data": "\u001b[B" // Scroll down
}
// Capture results
{
"action": "stdout",
"id": "mycli-session"
}
// Exit
{
"action"
// Start pgcli
{
"action": "start",
"command": "pgcli -h localhost -U user database",
"name": "pgcli-session"
}
// Execute query
{
"action": "stdin",
"id": "pgcli-session",
"data": "SELECT * FROM products WHERE price > 100;\r"
}
// Capture output
{
"action": "stdout",
"id": "pgcli-session"
}
// 1. Open file in vim
{
"action": "start",
"command": "vim script.py",
"name": "edit-session"
}
// 2. Go to specific line
{
"action": "stdin",
"id": "edit-session",
"data": ":50\r"
}
// 3. Enter insert mode
{
"action": "stdin",
"id": "edit-session",
"data": "i"
}
// 4. Type new code
{
"action": "stdin",
"id": "edit-session",
"data": " print('Debug info')\r"
}
// 5. Exit insert mode
// 1. Start htop
{
"action": "start",
"command": "htop",
"name": "monitor"
}
// 2. Sort by CPU
{
"action": "stdin",
"id": "monitor",
"data": "P"
}
// 3. Capture current state
{
"action": "stdout",
"id": "monitor"
}
// Parse output for high CPU processes...
// If high CPU detected, capture more details
// 4. Periodic monitoring with stream mode
{
"action": "stream",
"id": "monitor",
"since_last": true
}
// Continue monitoring...
// 1. Start tig to review changes
{
"action": "start",
"command": "tig status",
"name": "git-review"
}
// 2. Navigate to unstaged file
{
"action": "stdin",
"id": "git-review",
"data": "j"
}
// 3. View diff
{
"action": "stdin",
"id": "git-review",
"data": "\r"
}
// 4. Capture diff view
{
"action": "stdout",
"id": "git-review"
}
// 5. Stage file
{
"action": "stdin"
// 1. Start database client
{
"action": "start",
"command": "mycli -u root mydb",
"name": "db-query"
}
// 2. Run analysis query
{
"action": "stdin",
"id": "db-query",
"data": "SELECT category, COUNT(*), AVG(price) FROM products GROUP BY category;\r"
}
// 3. Capture results
{
"action": "stdout",
"id": "db-query"
}
// Parse results...
// 4. Run follow-up query based on analysis
{
"action": "stdin",
"id": "db-query",
"data": "SELECT * FROM products WHERE category = 'electronics' ORDER BY price DESC LIMIT 5;\r"
}
// 5. Capture final results
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~
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
stream mode for continuous monitoringgg in vim vs many k presses)// Vim: Handle if file doesn't exist
// Check output after :e command
{
"action": "stdout",
"id": "vim-session"
}
// Parse for error messages like "Cannot open file"
stop action if application hangsThis skill provides comprehensive automation patterns for TUI applications using terminalcp's full terminal emulation capabilities.