kitty

Original🇺🇸 English
Translated

Instructions for using kitty remote control to spawn windows/tabs, send text, inspect output, and manage processes. Useful for running servers or long-running tasks in the background.

2installs
Added on

NPX Install

npx skill4agent add xyenon/agents kitty

Kitty Remote Control Skill

This skill empowers you to manage multiple concurrent processes (like servers, watchers, or long builds) using kitty's remote control feature directly from the
Bash
tool.
Since you are running inside a kitty terminal, you can spawn new windows or tabs to handle these tasks without blocking your main communication channel.

1. Verify Environment & Check Status

First, verify you are running inside kitty with remote control enabled. You can try listing windows:
bash
kitten @ ls
If this fails, check if
$KITTY_LISTEN_ON
is set. Note that in some configurations it might be empty even if remote control is enabled (using default sockets).
bash
echo $KITTY_LISTEN_ON
If remote control is not enabled, the user should add
allow_remote_control yes
to their
kitty.conf
or start kitty with
--allow-remote-control
.

2. Spawn a Background Process

To run a command (e.g., a dev server) in a way that persists and can be inspected:
  1. Create a new window in the SAME tab as the agent (recommended): Use
    $KITTY_WINDOW_ID
    to ensure the new window stays with you.
    bash
    WID=$(kitten @ launch --match "id:$KITTY_WINDOW_ID" --title "server-log" --keep-focus)
    echo "Created window with ID: $WID"
  2. Or create a new tab:
    bash
    kitten @ launch --type=tab --title "server-log" --keep-focus
  3. Launch with a command directly: (Use
    --hold
    if you want the window to stay open after the command finishes)
    bash
    kitten @ launch --title "server-log" --keep-focus --hold npm start

3. Send Text/Commands to a Window

Send keystrokes to a specific window. Use the window ID for precision, or matching for convenience.
Using ID (Reliable):
bash
kitten @ send-text --match "id:$WID" "npm start\n"
Using Matching (Title):
Note: Use
\n
for Enter. In some shells, you may need to use
$'...'
or pipe to ensure the newline is interpreted correctly.
bash
kitten @ send-text --match "title:server-log" "npm start
"
# OR
echo "npm start" | kitten @ send-text --match "title:server-log" --stdin
Or send to all windows:
bash
kitten @ send-text --all "echo hello\n"

4. Inspect Output (Get Text from Window)

Get the current visible text from a window:
bash
kitten @ get-text --match "id:$WID"
Get text including scrollback buffer:
bash
kitten @ get-text --match "title:server-log" --extent=all
Get only the last command output (requires shell integration):
bash
kitten @ get-text --match "title:server-log" --extent=last_cmd_output

5. Focus or Bring Window to Front

Focus a specific window:
bash
kitten @ focus-window --match "id:$WID"
Focus a specific tab:
bash
kitten @ focus-tab --match "title:server-log"

6. Interact with Processes

Send Ctrl+C (Interrupt):
bash
kitten @ send-text --match "id:$WID" "\x03"
Close a window:
bash
kitten @ close-window --match "id:$WID"
Close a tab: (Note: You can close a tab by matching its title or any window ID inside it)
bash
# By ID of a window inside the tab
kitten @ close-tab --match "id:$WID"

# By tab title
kitten @ close-tab --match "title:server-log"

7. Advanced: Window Matching

Kitty supports powerful matching expressions:
  • title:pattern
    - Match by window title
  • id:number
    - Match by window ID
  • pid:number
    - Match by process ID
  • cwd:path
    - Match by current working directory
  • cmdline:pattern
    - Match by command line
  • state:focused
    - Match the focused window
  • state:active
    - Match the active window
Combine with
and
,
or
,
not
:
bash
kitten @ focus-window --match "title:server and state:active"

8. Get Window/Tab Information

List all OS windows, tabs, and windows as JSON:
bash
kitten @ ls
Get current focused window ID:
bash
kitten @ ls | jq -r '.[].tabs[] | select(.is_focused) | .windows[] | select(.is_focused) | .id'
Parse for specific info:
bash
kitten @ ls | jq '.[].tabs[].windows[] | {id, title, cmdline}'

Summary of Pattern

  1. WID=$(kitten @ launch --title "NAME" --keep-focus [CMD])
    - Create window and save ID
  2. kitten @ send-text --match "id:$WID" "CMD\n"
    - Send command reliably
  3. kitten @ get-text --match "id:$WID"
    - Read output
  4. kitten @ close-window --match "id:$WID"
    - Cleanup

Common Remote Control Commands

CommandDescription
kitten @ ls
List all windows/tabs
kitten @ launch
Create new window/tab
kitten @ send-text
Send text to window
kitten @ get-text
Get text from window
kitten @ focus-window
Focus a window
kitten @ focus-tab
Focus a tab
kitten @ close-window
Close a window
kitten @ close-tab
Close a tab
kitten @ signal-child
Send signal to process
kitten @ set-tab-title
Change tab title
kitten @ set-colors
Change terminal colors