tmux-processes by 0xbigboss/claude-code
npx skills add https://github.com/0xbigboss/claude-code --skill tmux-processes使用 send-keys 模式以确保可靠的 shell 初始化。 创建会话时会自动生成一个交互式 shell。使用 send-keys 在该 shell 中运行命令,确保 PATH、direnv 和其他初始化过程正确运行。
# 错误 - 内联命令绕过了 shell 初始化,会破坏 PATH/direnv
tmux new-session -d -s "$SESSION" -n main 'tilt up'
# 正确 - 创建会话,然后将命令发送到交互式 shell
tmux new-session -d -s "$SESSION" -n main
tmux send-keys -t "$SESSION:main" 'tilt up' Enter
始终从项目中派生会话名称:
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
对于一个项目中的多个进程,使用窗口而非独立的会话:
myappserver、tests、广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
logsSESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 创建带有命名窗口的会话,然后发送命令
tmux new-session -d -s "$SESSION" -n main
tmux send-keys -t "$SESSION:main" '<command>' Enter
在启动前检查是否已在运行:
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
tmux new-session -d -s "$SESSION" -n main
tmux send-keys -t "$SESSION:main" '<command>' Enter
else
echo "Session $SESSION already exists"
fi
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 如果窗口不存在,则添加一个新窗口
if ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$"; then
tmux new-window -t "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
else
echo "Window 'server' already exists"
fi
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 创建包含第一个进程的会话
tmux new-session -d -s "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
# 添加更多窗口
tmux new-window -t "$SESSION" -n tests
tmux send-keys -t "$SESSION:tests" 'npm run test:watch' Enter
tmux new-window -t "$SESSION" -n logs
tmux send-keys -t "$SESSION:logs" 'tail -f logs/app.log' Enter
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 从第一个窗口获取最后 50 行
tmux capture-pane -p -t "$SESSION" -S -50
# 从特定窗口获取
tmux capture-pane -p -t "$SESSION:server" -S -50
# 检查错误
tmux capture-pane -p -t "$SESSION" -S -100 | rg -i "error|fail|exception"
# 检查就绪指示器
tmux capture-pane -p -t "$SESSION:server" -S -50 | rg -i "listening|ready|started"
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 列出所有会话(查看存在哪些会话)
tmux ls
# 列出当前会话中的窗口
tmux list-windows -t "$SESSION"
# 仅终止此项目的会话
tmux kill-session -t "$SESSION"
# 终止特定窗口
tmux kill-window -t "$SESSION:tests"
# 向窗口发送按键(例如,Ctrl+C 以停止)
tmux send-keys -t "$SESSION:server" C-c
tmux kill-server| 场景 | 是否使用 tmux? |
|---|---|
tilt up | 是,始终使用 |
开发服务器 (npm run dev, rails s) | 是 |
文件监视器 (npm run watch) | 是 |
测试监视器 (npm run test:watch) | 是 |
| 数据库服务器 | 是 |
一次性构建 (npm run build) | 否 |
| 快速命令 (<10秒) | 否 |
| 需要在对话中直接获取 stdout | 否 |
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 检查会话是否存在
tmux has-session -t "$SESSION" 2>/dev/null && echo "session exists" || echo "no session"
# 列出窗口及其状态
tmux list-windows -t "$SESSION" -F '#{window_name}: #{pane_current_command}'
# 检查特定窗口是否存在
tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$" && echo "server window exists"
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 发送 Ctrl+C 然后重启命令
tmux send-keys -t "$SESSION:server" C-c
sleep 1
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
tmux new-session -d -s "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
echo "Started dev server in tmux session: $SESSION"
elif ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$"; then
tmux new-window -t "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
echo "Added server window to session: $SESSION"
else
echo "Server already running in session: $SESSION"
fi
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# 轮询就绪消息
for i in {1..30}; do
if tmux capture-pane -p -t "$SESSION:server" -S -20 | rg -q "listening|ready"; then
echo "Server ready"
break
fi
sleep 1
done
每周安装次数
69
代码仓库
GitHub 星标数
36
首次出现时间
2026年1月20日
安全审计
已安装于
claude-code55
opencode54
codex53
gemini-cli52
github-copilot44
antigravity38
Use send-keys pattern for reliable shell initialization. Creating a session spawns an interactive shell automatically. Use send-keys to run commands within that shell, ensuring PATH, direnv, and other initialization runs properly.
# WRONG - inline command bypasses shell init, breaks PATH/direnv
tmux new-session -d -s "$SESSION" -n main 'tilt up'
# CORRECT - create session, then send command to interactive shell
tmux new-session -d -s "$SESSION" -n main
tmux send-keys -t "$SESSION:main" 'tilt up' Enter
Always derive session name from the project:
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
For multiple processes in one project, use windows not separate sessions:
myappserver, tests, logsSESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# Create session with named window, then send command
tmux new-session -d -s "$SESSION" -n main
tmux send-keys -t "$SESSION:main" '<command>' Enter
Check if already running before starting:
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
tmux new-session -d -s "$SESSION" -n main
tmux send-keys -t "$SESSION:main" '<command>' Enter
else
echo "Session $SESSION already exists"
fi
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# Add a new window if it doesn't exist
if ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$"; then
tmux new-window -t "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
else
echo "Window 'server' already exists"
fi
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# Create session with first process
tmux new-session -d -s "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
# Add more windows
tmux new-window -t "$SESSION" -n tests
tmux send-keys -t "$SESSION:tests" 'npm run test:watch' Enter
tmux new-window -t "$SESSION" -n logs
tmux send-keys -t "$SESSION:logs" 'tail -f logs/app.log' Enter
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# Last 50 lines from first window
tmux capture-pane -p -t "$SESSION" -S -50
# From specific window
tmux capture-pane -p -t "$SESSION:server" -S -50
# Check for errors
tmux capture-pane -p -t "$SESSION" -S -100 | rg -i "error|fail|exception"
# Check for ready indicators
tmux capture-pane -p -t "$SESSION:server" -S -50 | rg -i "listening|ready|started"
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# List all sessions (see what exists)
tmux ls
# List windows in current session
tmux list-windows -t "$SESSION"
# Kill only this project's session
tmux kill-session -t "$SESSION"
# Kill specific window
tmux kill-window -t "$SESSION:tests"
# Send keys to a window (e.g., Ctrl+C to stop)
tmux send-keys -t "$SESSION:server" C-c
tmux kill-server| Scenario | Use tmux? |
|---|---|
tilt up | Yes, always |
Dev server (npm run dev, rails s) | Yes |
File watcher (npm run watch) | Yes |
Test watcher (npm run test:watch) | Yes |
| Database server | Yes |
One-shot build (npm run build) | No |
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# Check session exists
tmux has-session -t "$SESSION" 2>/dev/null && echo "session exists" || echo "no session"
# List windows and their status
tmux list-windows -t "$SESSION" -F '#{window_name}: #{pane_current_command}'
# Check if specific window exists
tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$" && echo "server window exists"
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# Send Ctrl+C then restart command
tmux send-keys -t "$SESSION:server" C-c
sleep 1
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
if ! tmux has-session -t "$SESSION" 2>/dev/null; then
tmux new-session -d -s "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
echo "Started dev server in tmux session: $SESSION"
elif ! tmux list-windows -t "$SESSION" -F '#{window_name}' | grep -q "^server$"; then
tmux new-window -t "$SESSION" -n server
tmux send-keys -t "$SESSION:server" 'npm run dev' Enter
echo "Added server window to session: $SESSION"
else
echo "Server already running in session: $SESSION"
fi
SESSION=$(basename $(git rev-parse --show-toplevel 2>/dev/null) || basename $PWD)
# Poll for ready message
for i in {1..30}; do
if tmux capture-pane -p -t "$SESSION:server" -S -20 | rg -q "listening|ready"; then
echo "Server ready"
break
fi
sleep 1
done
Weekly Installs
69
Repository
GitHub Stars
36
First Seen
Jan 20, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
claude-code55
opencode54
codex53
gemini-cli52
github-copilot44
antigravity38
Azure 升级评估与自动化工具 - 轻松迁移 Functions 计划、托管层级和 SKU
111,700 周安装
基础设施成本优化指南:AWS与Kubernetes云成本降低、资源利用率优化
155 周安装
市场顶部探测器 - 量化评分系统,预测2-8周市场调整概率 | O'Neil/Minervini/Monty方法
158 周安装
深度阅读分析师:10+思维框架系统分析,将浅读变深度学习,提升理解与应用能力
154 周安装
Godot 4 GDScript 设计模式与最佳实践 | 游戏开发架构、信号、场景优化指南
157 周安装
AI故障排除指南:结构化文档模板与最佳实践,快速诊断常见技术问题
156 周安装
性能分析与优化指南:识别瓶颈、优化热点路径、降低延迟的实用工具
156 周安装
| Quick command (<10s) | No |
| Need stdout directly in conversation | No |