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
آخر نشاط في المصدر
١٤ مارس ٢٠٢٦ في ٢٠:٠٦
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٥
التفرعات
١

خيارات التثبيت

يُحدَّد 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