名称: tmux 描述: 管理tmux会话以运行交互式后台进程 版本: 1.0.0 许可证: MIT 兼容性: opencode
概述
用于管理tmux会话的CLI工具,使代理能够运行和交互后台进程,如数据库连接(psql、mysql)、REPL、日志跟踪和其他交互式命令。
先决条件
命令
列出会话
列出所有活动的tmux会话。
bun .opencode/skill/tmux/list-sessions.js [选项]
选项:
--json- 以JSON格式输出
示例:
bun .opencode/skill/tmux/list-sessions.js
bun .opencode/skill/tmux/list-sessions.js --json
创建会话
创建一个新的tmux会话以运行后台进程。
bun .opencode/skill/tmux/create-session.js <名称> [选项]
参数:
名称- 会话名称(必需)
选项:
--command <命令>- 在会话中运行的初始命令--workdir <路径>- 会话的工作目录--window <名称>- 初始窗口的名称--json- 以JSON格式输出
示例:
# 为psql创建会话
bun .opencode/skill/tmux/create-session.js 数据库会话 --command "psql -h localhost -U postgres mydb"
# 为跟踪日志创建会话
bun .opencode/skill/tmux/create-session.js 日志 --command "tail -f /var/log/app.log"
# 在特定目录中创建会话
bun .opencode/skill/tmux/create-session.js 开发 --workdir ~/projects/myapp
发送命令
向tmux会话发送命令(输入命令并按Enter键)。
bun .opencode/skill/tmux/send-command.js <会话> <命令> [选项]
参数:
会话- 会话名称(或 会话:窗口 或 会话:窗口.窗格)命令- 要发送的命令
选项:
--no-enter- 发送按键而不按Enter键--literal- 按字面意思发送按键(不进行特殊键解释)--json- 以JSON格式输出
示例:
# 在psql会话中运行SQL查询
bun .opencode/skill/tmux/send-command.js 数据库会话 "SELECT * FROM users LIMIT 10;"
# 发送Ctrl+C以中断进程
bun .opencode/skill/tmux/send-command.js 日志 "C-c" --no-enter
# 输入文本而不执行
bun .opencode/skill/tmux/send-command.js 开发 "echo hello" --no-enter
捕获输出
捕获并读取tmux会话窗格的当前输出。
bun .opencode/skill/tmux/capture-output.js <会话> [选项]
参数:
会话- 会话名称(或 会话:窗口 或 会话:窗口.窗格)
选项:
--lines <n>- 要捕获的回滚行数(默认值:100)--wait <模式>- 在捕获前等待输出匹配此模式--timeout <毫秒>---wait的超时时间(毫秒)(默认值:30000)--json- 以JSON格式输出
示例:
# 捕获会话的最近输出
bun .opencode/skill/tmux/capture-output.js 数据库会话
# 捕获更多回滚历史
bun .opencode/skill/tmux/capture-output.js 日志 --lines 500
# 在捕获前等待特定提示符
bun .opencode/skill/tmux/capture-output.js 数据库会话 --wait "postgres=#" --timeout 5000
终止会话
终止tmux会话。
bun .opencode/skill/tmux/kill-session.js <名称> [选项]
参数:
名称- 要终止的会话名称
选项:
--json- 以JSON格式输出
示例:
bun .opencode/skill/tmux/kill-session.js 数据库会话
常见工作流程
数据库会话 (psql)
# 创建psql会话
bun .opencode/skill/tmux/create-session.js psql --command "psql -h localhost -U postgres mydb"
# 等待连接,然后运行查询
bun .opencode/skill/tmux/capture-output.js psql --wait "postgres=#"
bun .opencode/skill/tmux/send-command.js psql "SELECT COUNT(*) FROM users;"
# 捕获查询结果
bun .opencode/skill/tmux/capture-output.js psql --lines 50
# 完成后清理
bun .opencode/skill/tmux/kill-session.js psql
日志监控
# 开始跟踪日志
bun .opencode/skill/tmux/create-session.js 日志 --command "tail -f /var/log/app.log"
# 定期检查错误
bun .opencode/skill/tmux/capture-output.js 日志 --lines 200
# 停止监控
bun .opencode/skill/tmux/kill-session.js 日志
交互式REPL (Python、Node等)
# 启动Python REPL
bun .opencode/skill/tmux/create-session.js python --command "python3"
# 运行Python命令
bun .opencode/skill/tmux/send-command.js python "import pandas as pd"
bun .opencode/skill/tmux/send-command.js python "df = pd.read_csv('data.csv')"
bun .opencode/skill/tmux/send-command.js python "df.describe()"
# 捕获输出
bun .opencode/skill/tmux/capture-output.js python
输出行为
- 命令输出直接显示给用户的终端
- 不要重新总结或重新格式化输出 - 用户已经可以看到它
- 捕获输出时,返回原始终端内容(可能包含ANSI代码)
- 以编程方式解析时,使用
--json获取结构化输出
注意事项
- 会话名称应具有描述性且唯一(例如,
psql-mydb、logs-app) - 目标格式:
会话或会话:窗口或会话:窗口.窗格 - 特殊按键:
C-c(Ctrl+C)、C-d(Ctrl+D)、C-m(Enter)、C-l(清除) - 会话持续存在,直到显式终止或系统重启