Skip to main content

tui

Use when you need to operate a full-screen terminal application (TUI) via wsh. Examples: "navigate vim to edit a file", "use lazygit to stage and commit changes", "interact with htop or k9s".

소스 정보

저장소
deepgram/wsh
최근 소스 활동
2026년 3월 14일 20:06
감지된 SKILL.md 언어
영어
스타
5
포크
1

설치 방법

기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.

소스 파일 검토

설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.

SKILL.md 표시 중

SKILL.md
소스 지침 · 읽기 전용 미리보기
name
tui
description
Use when you need to operate a full-screen terminal application (TUI) via wsh. Examples: "navigate vim to edit a file", "use lazygit to stage and commit changes", "interact with htop or k9s".
> **IMPORTANT: EXECUTION CONTEXT** > This skill describes *what to do* — domain patterns and decision-making. > It does NOT describe *how* to call the API. > > 1. **If you have `wsh_*` tools** (check your toolkit for `wsh_send_input`, > `wsh_get_screen`, etc.): use them directly. Operation names in this > skill generally map to tool names (e.g., "send input" → `wsh_send_input`). > When in doubt, list your available `wsh_*` tools. > 2. **If you do NOT have `wsh_*` tools**: you are in HTTP/curl fallback mode. > **DO NOT GUESS endpoints or CLI subcommands.** > Load the full API reference first: search your workspace for > `skills/core/` and read `SKILL.md`. It contains every endpoint > with working curl examples and a bootstrap sequence. > 3. **Quick bootstrap**: `curl -sf --unix-socket ${XDG_RUNTIME_DIR:-/tmp}/wsh/default.http.sock http://localhost/health` > — if that fails: `wsh server -L agent-$$ --ephemeral &` and retry. # wsh:tui — Operating Full-Screen Terminal Applications Some programs take over the entire terminal — vim, htop, lazygit, k9s, midnight commander. They use the terminal's "alternate screen buffer," a fixed grid where the program controls every character position. This is a fundamentally different interaction model from command-and-response. ## Detecting Alternate Screen Mode When a TUI is active, the screen response includes: "alternate_active": true This tells you you're in grid mode. The screen is no longer a log of output — it's a 2D canvas the program redraws at will. Scrollback is irrelevant while alternate screen is active; the program owns the entire display. When the TUI exits, `alternate_active` flips back to `false` and the normal scrollback view resumes exactly where it left off. None of the TUI's screen content leaks into scrollback. ## Reading a 2D Grid In a TUI, screen position matters. A line isn't just text — it's a row in a spatial layout. Use `styled` format here; formatting carries critical information: - **Bold or highlighted text** often marks the selected item - **Color differences** distinguish panes, headers, status bars - **Inverse/reverse video** typically indicates cursor position or selection - **Dim or faint text** marks inactive elements Read the full screen and interpret it spatially. The first few lines are often a header or menu bar. The last line or two are often a status bar or command input. The middle is content. ## Navigation TUI programs don't use typed commands — they use keystrokes. Every key does something different depending on context. You need to know the program's keybindings. ### Universal Navigation Keys Arrow keys, Page Up/Down, Home/End, Tab (cycle panes), Enter (confirm/open), Escape (cancel/back). ### Vim-Style Navigation Many TUIs adopt vim conventions: h, j, k, l # left, down, up, right g, G # top, bottom / # search n, N # next/previous match q # quit ### Sending Keystrokes Send one keystroke at a time. Wait briefly between keystrokes to let the TUI redraw — TUIs repaint the screen after each input, and you need the updated screen to know where you are. send: j # move down wait (500ms) read screen # see what's selected now send: j # move down again wait (500ms) read screen # verify position This is slower than blasting keys, but reliable. You're navigating blind if you don't read between keystrokes. ## Understanding TUI Layouts When you first enter a TUI, read the full screen and build a mental map. Most TUIs follow common layout patterns: ### Typical Structure +----------------------------------+ | Menu bar / Title bar | <- rows 0-1 +----------------------------------+ | | | Main content area | <- middle rows | (list, editor, dashboard) | | | +----------------------------------+ | Status bar / Help / Command line | <- last 1-2 rows +----------------------------------+ ### Finding Your Bearings - **Status bar** (usually bottom): shows mode, filename, position, hints. Read this first — it often tells you everything you need to know about current state. - **Help hints**: many TUIs show keybinding hints at the bottom or top. Look for text like `q:quit j/k:navigate ?:help` or `^X Exit ^O Save`. - **The selected item**: look for inverse video, bold, or color-highlighted text in the content area. That's your cursor position. - **Pane borders**: look for `|`, `-`, `+` characters or box-drawing characters. These indicate split panes. Only one pane is active at a time — Tab or Ctrl+W typically switches between them. ### Modals and Dialogs TUIs often pop up confirmation dialogs or input fields over the main content. These appear as a differently-styled block in the middle of the screen. Look for: - A bordered box that wasn't there before - Text like "Are you sure?" or "Enter filename" - Highlighted buttons like `[ OK ] [ Cancel ]` When a modal is active, navigation keys operate on the modal, not the content behind it. ## Common Applications You don't need to memorize every TUI's keybindings. But knowing the basics for frequently encountered programs helps. ### Text Editors **vim/neovim:** Starts in Normal mode. `i` to insert text, `Esc` to return to Normal. `:w` save, `:q` quit, `:wq` both. If lost, press `Esc Esc` then `:q!` to quit without saving. **nano:** Simpler. Just type to edit. Keybindings shown at bottom. `^` means Ctrl. `^X` exits, `^O` saves. ### Git TUIs **lazygit:** Pane-based. Tab switches panes (files, branches, commits). `j/k` navigates, Enter opens, `space` stages, `c` commits, `p` pushes, `q` quits. ### System Monitors **htop/top:** Shows processes. `j/k` or arrows to navigate, `k` to kill a process, `q` to quit. `F` keys for actions (shown at bottom). ### Kubernetes **k9s:** Resource browser. `:` opens command mode for resource type (`:pods`, `:deployments`). `j/k` navigates, `Enter` drills in, `Esc` goes back, `d` describe, `l` logs. ### General Strategy for Unfamiliar TUIs 1. Read the screen — look for help hints at top or bottom 2. Try `?` or `h` — most TUIs open a help screen 3. Try F1 — some use function keys for help 4. Read the help, then press `q` or `Esc` to close it 5. If completely stuck: `q`, `Esc`, `:q`, `Ctrl+C`, `Ctrl+Q` — try these in order to exit ## Exiting a TUI Getting out is as important as getting in. When you're done with a TUI, you need to return to the normal shell prompt. ### Exit Strategies (in order of preference) 1. Use the program's quit command (`q`, `:q`, `Ctrl+X`) 2. Check the status bar for exit hints 3. Press `Esc` to back out of any modal or sub-mode first 4. If the program won't quit cleanly, `Ctrl+C` 5. Last resort: `Ctrl+Z` to suspend, then `kill %1` ### Confirming You're Out After sending a quit command, wait for idle, then check: "alternate_active": false If this is `false`, you're back in normal mode with your shell prompt. If it's still `true`, the TUI is still running — your quit command may not have worked, or the program asked for confirmation before exiting. ## Pitfalls ### Don't type commands into a TUI A TUI is not a shell. If you send `ls -la\n` into vim, you'll get those characters inserted into the document. Always know what mode you're in before sending input. ### Don't blast keystrokes TUIs redraw the screen after each input. If you send 10 `j` keystrokes without reading in between, you won't know where you landed. Navigate one step at a time. ### Watch for mode changes Many TUIs have multiple modes (vim's Normal/Insert/Visual, lazygit's panes). The same key does different things in different modes. Read the screen after each action to confirm you're in the mode you expect. ### Alternate screen within alternate screen If you launch a TUI from within a TUI (e.g., vim from within a file manager), `alternate_active` is still just `true`. You need to track the nesting yourself by remembering what you launched and how many layers deep you are.
GitHub에서 보기