mcpField
K
kitty

kitty

github.com/xyenon开发196 次安装3 周前更新
代码仓库

关于 kitty

kitty 是一项通过远程控制命令行管理 kitty 终端窗口和标签页的技能。它帮助开发者在不阻塞主要工作流的情况下运行和检查后台进程、发送命令并管理终端会话。

主要功能

  1. 01启动窗口和标签页
  2. 02向终端窗口发送命令
  3. 03读取可见文本与滚屏内容
  4. 04聚焦或关闭窗口和标签页
  5. 05按标题、ID 或状态匹配窗口

适用场景

  1. 01在独立窗口运行开发服务器
  2. 02查看长期运行进程的日志
  3. 03向会话发送中断并关闭已完成会话

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/xyenon/agents --skill kitty

安装后在 Claude Code 中输入/kitty确认已加载。

详细介绍

Kitty 远程控制技能

此技能让你能够直接通过 Bash 工具,使用 kitty 的远程控制功能管理多个并发进程(例如服务器、监视器或长时间运行的构建任务)。

由于你运行在 kitty 终端中,因此可以新建窗口或标签页来处理这些任务,而不会阻塞主要通信渠道。

1. 验证环境并检查状态

首先,验证你是否运行在已启用远程控制的 kitty 中。可以尝试列出窗口:

kitten @ ls

如果失败,请检查是否设置了 $KITTY_LISTEN_ON。请注意,在某些配置中,即使已启用远程控制(使用默认套接字),该变量也可能为空。

echo $KITTY_LISTEN_ON

如果未启用远程控制,用户应在 kitty.conf 中添加 allow_remote_control yes,或使用 --allow-remote-control 启动 kitty。

2. 启动后台进程

若要运行某个命令(例如开发服务器),并使其持续运行且可供检查:

  1. 在与 Agent 相同的标签页中创建新窗口(推荐): 使用 $KITTY_WINDOW_ID 确保新窗口留在当前标签页中。

    WID=$(kitten @ launch --match "id:$KITTY_WINDOW_ID" --title "server-log" --keep-focus)
    echo "Created window with ID: $WID"
    
  2. 或者新建一个标签页:

    kitten @ launch --type=tab --title "server-log" --keep-focus
    
  3. 直接通过命令启动: (如果希望命令结束后窗口仍保持打开,请使用 --hold)

    kitten @ launch --title "server-log" --keep-focus --hold npm start
    

3. 向窗口发送文本/命令

向指定窗口发送按键。使用窗口 ID 可精确定位,或使用匹配方式以方便操作。

使用 ID(可靠):

kitten @ send-text --match "id:$WID" "npm start\n"

使用匹配方式(标题):

注意:使用 \n 表示回车。在某些 shell 中,可能需要使用 $'...' 或管道,确保正确解析换行符。

kitten @ send-text --match "title:server-log" "npm start
"
# OR
echo "npm start" | kitten @ send-text --match "title:server-log" --stdin

或者发送到所有窗口:

kitten @ send-text --all "echo hello\n"

4. 检查输出(获取窗口文本)

获取窗口当前可见的文本:

kitten @ get-text --match "id:$WID"

获取包含回滚缓冲区的文本:

kitten @ get-text --match "title:server-log" --extent=all

仅获取上一条命令的输出(需要 shell 集成):

kitten @ get-text --match "title:server-log" --extent=last_cmd_output

5. 聚焦窗口或将窗口置于前台

聚焦指定窗口:

kitten @ focus-window --match "id:$WID"

聚焦指定标签页:

kitten @ focus-tab --match "title:server-log"

6. 与进程交互

发送 Ctrl+C(中断):

kitten @ send-text --match "id:$WID" "\x03"

关闭窗口:

kitten @ close-window --match "id:$WID"

关闭标签页: (注意:可以通过匹配标签页标题或其中任意窗口 ID 来关闭标签页)

# 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. 高级:窗口匹配

Kitty 支持功能强大的匹配表达式:

  • title:pattern - 按窗口标题匹配
  • id:number - 按窗口 ID 匹配
  • pid:number - 按进程 ID 匹配
  • cwd:path - 按当前工作目录匹配
  • cmdline:pattern - 按命令行匹配
  • state:focused - 匹配当前聚焦的窗口
  • state:active - 匹配当前活动的窗口

使用 and、or、not 进行组合:

kitten @ focus-window --match "title:server and state:active"

8. 获取窗口/标签页信息

以 JSON 格式列出所有 OS 窗口、标签页和窗口:

kitten @ ls

获取当前聚焦窗口的 ID:

kitten @ ls | jq -r '.[].tabs[] | select(.is_focused) | .windows[] | select(.is_focused) | .id'

解析特定信息:

kitten @ ls | jq '.[].tabs[].windows[] | {id, title, cmdline}'

模式总结

  1. WID=$(kitten @ launch --title "NAME" --keep-focus [CMD]) - 创建窗口并保存 ID
  2. kitten @ send-text --match "id:$WID" "CMD\n" - 可靠地发送命令
  3. kitten @ get-text --match "id:$WID" - 读取输出
  4. kitten @ close-window --match "id:$WID" - 清理

常用远程控制命令

命令描述
kitten @ ls列出所有窗口/标签页
kitten @ launch创建新窗口/标签页
kitten @ send-text向窗口发送文本
kitten @ get-text获取窗口文本
kitten @ focus-window聚焦窗口
kitten @ focus-tab聚焦标签页
kitten @ close-window关闭窗口
kitten @ close-tab关闭标签页
kitten @ signal-child向进程发送信号
kitten @ set-tab-title更改标签页标题
kitten @ set-colors更改终端颜色

评论

支持 Markdown