mcpField
H
headless-terminal

headless-terminal

github.com/letta-ai开发15260 次安装4 周前更新
代码仓库

关于 headless-terminal

该技能指导开发者实现无界面终端接口,以程序方式控制 Shell 会话。内容涵盖进程管理、输入输出捕获、配置选择及边缘情况测试。

主要功能

  1. 01理解接口方法与行为约定
  2. 02选择 pexpect、pty 或 subprocess
  3. 03管理 Shell 进程生命周期
  4. 04处理输入、输出与信号
  5. 05测试超时、编码和启动配置

适用场景

  1. 01实现程序控制的 Shell 会话
  2. 02运行需要交互输入的命令
  3. 03捕获终端输出并处理取消

安装

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

$npx skills add https://github.com/letta-ai/skills --skill headless-terminal

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

详细介绍

无头终端实现

概述

本技能介绍如何实现无头终端接口——以编程方式控制 Shell 会话的封装,不显示终端 UI。这类实现通常涉及启动 Shell 进程、发送输入(按键、命令)并捕获输出。

实现方法

步骤 1:了解接口契约

开始实现前,请仔细阅读并了解要实现的接口:

  1. 确定所有必需的方法及其签名
  2. 注意返回类型和预期行为
  3. 检查可选方法或功能
  4. 查看是否有现有实现或测试能说明预期行为
步骤 2:选择底层库

Python 中常见的终端模拟库:

库最适合权衡
pexpect交互式终端模拟、模式匹配API 更高级,适用于 expect/send 模式
pty低级伪终端控制控制力更强,但需要编写更多样板代码
subprocess简单的非交互式命令对真正的终端模拟支持有限

需要记录的决策依据:

  • 任务是否需要交互式输入(密码、提示)?→ pexpect
  • 任务是否需要低级终端控制?→ pty
  • 是否只需执行非交互式命令?→ subprocess 可能足够

请明确记录选择及其原因,以便后续维护。

步骤 3:处理 Shell 配置

启动 Shell 进程时,请考虑以下配置选项:

交互模式(-i 标志):

  • 确保加载启动文件(.bashrc、.bash_profile)
  • 会影响信号处理行为
  • 如果测试要验证启动文件是否已加载,则必须启用

回显行为:

  • 在 pexpect 中设置 echo=False,可防止输入内容出现在输出中
  • 请考虑使用场景是否需要看到回显的输入

终端尺寸:

  • 默认尺寸 (24, 80) 是标准终端大小
  • 可能会影响检测终端宽度的命令的输出格式
  • 请说明选择特定尺寸的原因
步骤 4:实现核心功能

严格按照接口要求实现功能:

  1. 进程生命周期管理 - 启动、检查运行状态、终止
  2. 输入处理 - 发送按键,处理特殊按键(Ctrl+C 等)
  3. 输出捕获 - 读取可用输出,处理缓冲
  4. 资源清理 - 正确终止、支持上下文管理器
步骤 5:处理边缘情况

请明确处理以下场景:

边缘情况处理策略
Shell 意外退出操作前检查进程是否仍在运行
长时间运行的命令支持可配置超时和后台执行
非 ASCII 字符明确处理编码(通常使用 UTF-8)
竞态条件在发送和读取操作之间设置适当延迟
命令取消正确处理信号(Ctrl+C 对应 SIGINT)

验证策略

测试方法

针对每项功能编写精简测试:

  1. 基本功能 - 导入、实例化
  2. 非交互式命令 - 执行简单命令并检查输出
  3. 交互式命令 - 执行需要输入的命令
  4. 信号处理 - 使用 Ctrl+C 取消
  5. Shell 状态 - 变量持久性、环境
  6. 启动配置 - 验证启动文件是否已加载
  7. 后台执行 - 处理长时间运行的命令
验证指南
  • 运行测试套件以验证所有功能
  • 测试通过后,避免重复进行手动验证
  • 如果已有单个全面的测试文件,请使用该文件,而不是创建单独的验证脚本

常见陷阱

范围管理
  • 只实现必需内容 - 避免添加未请求的功能,例如额外的实用方法
  • 如果其他方法似乎有用,请注明,但除非有人要求,否则不要实现
  • 通常需要支持上下文管理器,但请确认接口中是否包含此要求
效率
  • 避免重复搜索 - 如果要查找一个类,进行一次有针对性的搜索即可
  • 不要重复验证 - 如果测试通过,就不需要再进行额外的手动检查
  • 除非明确要求,否则不要创建示例文件
文档缺漏

以下常见决策应当记录,但往往会被忽略:

  1. 选择该库而非其他方案的原因
  2. 使用特定 shell 标志的原因
  3. 选择特定默认值的原因
  4. 线程安全方面的考量(或明确说明它不是线程安全的)
错误处理

请考虑并记录以下情况的处理方式:

  • 无效的按键序列
  • 终端进程终止
  • 超时情况
  • 权限问题

实现检查清单

在认定实现已完成之前:

  • 已实现所有接口方法
  • 已说明选择该库的理由
  • 已说明配置决策的依据
  • 已明确处理边缘情况,或将其记录为范围之外
  • 测试涵盖了所有必需功能
  • 未添加任何未请求的功能
  • 已妥善实现资源清理

评论

支持 Markdown