Token导航 LogoToken导航TokenDH.com
开发操作浏览器github未标认证来源可访问许可证需确认审计通过

wrighttywrightty 命令行

Agent Skill

wrightty 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

245

周安装

10

GitHub Stars

公开资料未说明

下载量

78
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:wrightty(wrightty 命令行)
来源仓库:https://github.com/moejay/wrightty
仓库路径:skills/wrightty
安装命令:
npx skills add https://github.com/moejay/wrightty --skill wrightty
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/moejay/wrightty --skill wrightty

简介

该技能用于处理 GitHub 仓库与协作信息,支持代码变更跟踪。

  • 适用于 Codex、Claude、Cursor、Gemini CLI 中围绕仓库状态与 Issue 管理的场景。
  • 可协助整理 Pull Request 与协作事项。
  • 通过 GitHub 仓库安装,注意权限与文件操作风险。
  • 建议结合原始 README 确认具体功能与使用边界。

SKILL.md

wrightty — Terminal Automation Protocol

Wrightty lets you control terminal emulators over WebSocket JSON-RPC. You can run commands, read the screen, send keystrokes, and take screenshots — just like a human would interact with a terminal, but programmatically.

When to use

  • Running shell commands in a real terminal (not subprocess) where you need the full PTY environment
  • Interacting with TUI applications (vim, htop, less, etc.)
  • Reading terminal screen output with colors and formatting
  • Taking terminal screenshots (SVG)
  • Automating interactive terminal workflows
  • Waiting for specific output to appear before proceeding

Setup

Wrightty needs a terminal backend. Pick one:

Alacritty (native, zero overhead):

git clone -b wrightty-support https://github.com/moejay/alacritty.git
cd alacritty && cargo build --features wrightty
./target/debug/alacritty --wrightty  # listens on ws://127.0.0.1:9420

WezTerm (via bridge):

# Start WezTerm normally, then:
cargo run -p wrightty-bridge-wezterm  # listens on ws://127.0.0.1:9421

# For flatpak:
WEZTERM_CMD="flatpak run --command=wezterm org.wezfurlong.wezterm" cargo run -p wrightty-bridge-wezterm

Headless daemon (no GUI):

cargo run -p wrightty-server  # listens on ws://127.0.0.1:9420

Python SDK

The SDK has zero external dependencies.

from wrightty import Terminal

# Connect to a running terminal
term = Terminal.connect()                          # ws://127.0.0.1:9420
term = Terminal.connect("ws://127.0.0.1:9421")    # WezTerm bridge

# Run a command and get output
output = term.run("cargo test", timeout=120)

# Read the current screen
screen = term.read_screen()

# Wait for text to appear
term.wait_for("tests passed", timeout=60)
term.wait_for(r"error\[\w+\]", regex=True)

# Send keystrokes (TUI apps)
term.send_keys("Escape", ":", "w", "q", "Enter")  # vim: save and quit
term.send_keys("Ctrl+c")                           # interrupt
term.send_keys("ArrowUp", "Enter")                 # repeat last command

# Screenshots
svg = term.screenshot("svg")

# Terminal info
cols, rows = term.get_size()

term.close()

Install: pip install /path/to/wrightty/sdks/python or set PYTHONPATH=/path/to/wrightty/sdks/python.

CLI

wrightty run "ls -la"                              # run command, print output
wrightty run "cargo test" --timeout 120            # with timeout
wrightty read                                       # dump current screen
wrightty send-text "echo hello\n"                   # send raw text
wrightty send-keys Ctrl+c                           # send keystroke
wrightty send-keys Escape : w q Enter               # vim: :wq
wrightty wait-for "BUILD SUCCESS" --timeout 60      # block until text appears
wrightty screenshot --format svg -o terminal.svg    # take screenshot
wrightty info                                       # server capabilities
wrightty size                                       # terminal dimensions
wrightty --url ws://127.0.0.1:9421 run "ls"         # connect to different server

MCP Server

Add to your MCP config (Claude, Cursor, etc.):

{
  "mcpServers": {
    "wrightty": {
      "command": "python3",
      "args": ["-m", "wrightty.mcp_server"],
      "env": {
        "PYTHONPATH": "/path/to/wrightty/sdks/python",
        "WRIGHTTY_SOCKET": "ws://127.0.0.1:9420"
      }
    }
  }
}

Available MCP tools:

ToolDescription
run_commandRun a shell command, return output
read_terminalRead current screen text
send_keysSend keystrokes (["Ctrl+c"], ["Escape", ":", "q", "Enter"])
send_textSend raw text (use \n for newline)
screenshotTerminal screenshot as SVG
wait_for_textBlock until pattern appears on screen
terminal_infoTerminal dimensions and capabilities

Protocol reference

WebSocket JSON-RPC 2.0 on ws://127.0.0.1:9420. Full spec: PROTOCOL.md.

Core methods

Run a command:

{"jsonrpc":"2.0","id":1,"method":"Input.sendText","params":{"sessionId":"0","text":"ls -la\n"}}

Read the screen:

{"jsonrpc":"2.0","id":2,"method":"Screen.getText","params":{"sessionId":"0"}}
// → {"result":{"text":"$ ls -la\ntotal 140\ndrwxr-xr-x  8 user user 4096 ...\n$"}}

Send keystrokes:

{"jsonrpc":"2.0","id":3,"method":"Input.sendKeys","params":{"sessionId":"0","keys":["Ctrl+c"]}}

Take a screenshot:

{"jsonrpc":"2.0","id":4,"method":"Screen.screenshot","params":{"sessionId":"0","format":"svg"}}
// → {"result":{"format":"svg","data":"<svg ...>"}}

Get terminal size:

{"jsonrpc":"2.0","id":5,"method":"Terminal.getSize","params":{"sessionId":"0"}}
// → {"result":{"cols":120,"rows":40}}

Server capabilities:

{"jsonrpc":"2.0","id":6,"method":"Wrightty.getInfo","params":{}}

Key names for sendKeys

Single characters: a, 1, /, . Special keys: Enter, Tab, Escape, Backspace, Delete, ArrowUp, ArrowDown, ArrowLeft, ArrowRight, Home, End, PageUp, PageDown, F1-F12 Modifiers: Ctrl+c, Alt+x, Shift+Tab

Session management (headless daemon only)

// Create session
{"jsonrpc":"2.0","id":1,"method":"Session.create","params":{"cols":80,"rows":24}}
// → {"result":{"sessionId":"abc-123"}}

// List sessions
{"jsonrpc":"2.0","id":2,"method":"Session.list","params":{}}

// Destroy session
{"jsonrpc":"2.0","id":3,"method":"Session.destroy","params":{"sessionId":"abc-123"}}

Native emulator mode uses "sessionId":"0" for the active terminal. Session create/destroy is not supported — the emulator manages its own sessions.

Recording

Three types of recording:

Session recording (asciicast)

Records raw PTY I/O with timestamps. Compatible with asciinema play.

rec_id = term.start_session_recording(include_input=True)
# ... do stuff ...
result = term.stop_session_recording(rec_id)
with open("session.cast", "w") as f:
    f.write(result["data"])
# Play back: asciinema play session.cast

Action recording (script generation)

Records wrightty API calls as a replayable Python/JSON/CLI script. Like Playwright codegen.

rec_id = term.start_action_recording(format="python")
# ... do stuff ...
result = term.stop_action_recording(rec_id)
print(result["data"])  # prints a Python script that replays the actions

Screen capture

Capture individual frames or record periodic screenshots.

# Single frame
frame = term.capture_screen(format="svg")

# Periodic capture
rec_id = term.start_screen_recording(interval_ms=500, format="svg")
# ... do stuff ...
result = term.stop_screen_recording(rec_id)
# result["frames"] is a list of SVG frames with timestamps

Video recording (native emulators only, requires ffmpeg)

Captures the actual rendered framebuffer — pixel perfect, including colors, fonts, sixel images, everything on screen.

rec_id = term.start_video(fps=30, format="mp4")
# ... do stuff ...
result = term.stop_video(rec_id)
print(result["path"])  # /tmp/wrightty-rec_001.mp4

CLI

wrightty record -o session.cast            # Ctrl+C to stop
wrightty record-actions -o script.py       # generates Python script
wrightty record-actions --format cli       # generates shell commands

MCP tools

  • start_recording — starts session + action recording
  • stop_recording — stops and returns asciicast data + Python script
  • capture_screen_frame — single SVG snapshot

Tips

  • Use term.run() for most commands — it sends the command and waits for the prompt to return
  • Use term.send_keys() for interactive/TUI apps where you need specific keystrokes
  • Use term.wait_for() before reading output from slow commands (builds, tests)
  • The default prompt detection pattern is [$#>%]\s*$ — override with term.set_prompt_pattern() if your prompt is different
  • Screenshots are SVG by default — good for rendering in browsers and docs, and readable by vision models

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

32.34%
按下载量换算25

Claude

30.09%
按下载量换算23

Cursor

20.12%
按下载量换算16

Gemini CLI

9.47%
按下载量换算7

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

操作浏览器

该 Skill 可能涉及浏览器控制能力,使用时可能读取或操作网页内容,需要在受控环境中确认权限边界。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills