7.3 KiB
Tmux Task Runner - Examples
This document provides practical examples of using the tmux-task-runner skill.
Quick Start
Example 1: Running a Build Process
# Start a build in a tmux session
./run.sh run build "npm run build"
# Output:
# ✓ Task started in tmux session
#
# Session: task-build-1729519263
# Log file: $LOG_DIR/task-build-1729519263.log (LOG_DIR defaults to /tmp)
# Status file: $STATUS_DIR/task-build-1729519263.status
# Workdir: /Users/you/project
#
# Monitoring commands:
# tail -f $LOG_DIR/task-build-1729519263.log
# tmux attach-session -t task-build-1729519263
# ./run.sh tail task-build-1729519263
# tmux kill-session -t task-build-1729519263
Monitor the build:
tail -f "$LOG_DIR"/task-build-1729519263.log
Example 2: Running Tests
# Run pytest with verbose output and CI environment
./run.sh run test --env NODE_ENV=ci "pytest tests/ --verbose --cov"
# Or with npm/yarn (preserve exit status with coverage)
./run.sh run test --notify "npm test -- --coverage"
Check test status:
./run.sh check task-test-1729519263
# Or review the recorded metadata:
./run.sh status task-test-1729519263
Example 3: Starting a Development Server
# Start a Python HTTP server
./run.sh run server "python -m http.server 8000"
# Start a Node.js dev server
./run.sh run server --workdir ./apps/frontend "npm run dev"
# Start a Django dev server
./run.sh run server "python manage.py runserver"
Attach to the server session to see real-time requests:
./run.sh attach task-server-1729519263
# Press Ctrl+b then d to detach
Example 4: Running Deployment Scripts
# Deploy to production
./run.sh run deploy --notify "./deploy.sh production"
# Or with a deployment tool
./run.sh run deploy "terraform apply -auto-approve"
Monitor deployment progress:
# Poll the last 80 lines every 5 seconds
./run.sh tail task-deploy-1729519263 --interval 5 --lines 80
Advanced Usage
Example 5: Managing Multiple Concurrent Tasks
# Start multiple tasks
./run.sh run build "npm run build"
./run.sh run test "npm test"
./run.sh run lint "npm run lint"
# List all active tasks
./run.sh list
# Output:
# Active task sessions:
# task-build-1729519263: 1 windows (created Tue Oct 21 10:30:00 2025)
# task-test-1729519264: 1 windows (created Tue Oct 21 10:30:05 2025)
# task-lint-1729519265: 1 windows (created Tue Oct 21 10:30:10 2025)
Example 6: Long-Running Data Processing
# Process large dataset
./run.sh run process "python scripts/process_data.py --input large_dataset.csv"
# Machine learning training
./run.sh run train "python train_model.py --epochs 100"
Check progress periodically:
# Every 30 seconds, check the last 20 lines
./run.sh tail task-train-1729519263 --interval 30 --lines 20
Example 7: Database Migrations
# Run database migrations
./run.sh run migrate "alembic upgrade head"
# Or with Django
./run.sh run migrate "python manage.py migrate"
Example 8: Cleanup Operations
# Check all running tasks
./run.sh list
# Kill a specific task
./run.sh kill task-build-1729519263
# Kill all task sessions
./run.sh kill all
Real-World Scenarios
Scenario 1: CI/CD Pipeline Simulation
# Run a complete CI/CD pipeline locally
./run.sh run ci "bash -c '
echo \"=== Installing dependencies ===\" &&
npm install &&
echo \"=== Running linter ===\" &&
npm run lint &&
echo \"=== Running tests ===\" &&
npm test &&
echo \"=== Building application ===\" &&
npm run build &&
echo \"=== CI Pipeline Complete ===\"
'"
# Monitor the pipeline
tail -f "$LOG_DIR"/task-ci-*.log
Scenario 2: Monitoring API Load Testing
# Start API load test
./run.sh run loadtest "ab -n 10000 -c 100 http://localhost:8000/api/endpoint"
# Or with a more advanced tool
./run.sh run loadtest "artillery run load-test-config.yml"
# Attach to watch real-time metrics
./run.sh attach task-loadtest-1729519263
Scenario 3: File Processing Pipeline
# Process video files
./run.sh run encode "ffmpeg -i input.mp4 -c:v libx264 -preset slow output.mp4"
# Batch image optimization
./run.sh run optimize "find ./images -name '*.jpg' -exec mogrify -quality 85 {} \;"
Scenario 4: Development Workflow
# Terminal 1: Start backend server
./run.sh run backend "python manage.py runserver"
# Terminal 2: Start frontend dev server
./run.sh run frontend "npm run dev"
# Terminal 3: Watch tests
./run.sh run test-watch "npm run test:watch"
# Terminal 4: Monitor all logs
./run.sh list
# Then tail specific logs as needed
Integration with Claude Code
When working with Claude Code, you can request task execution like this:
User: "Run the test suite in the background so I can continue working"
Claude: I'll run your test suite in a tmux session using the tmux-task-runner skill.
./skills/tmux-task-runner/run.sh run test "npm test -- --coverage"
Your tests are now running in session task-test-1729519263.
Monitor progress:
./skills/tmux-task-runner/run.sh tail task-test-1729519263 --lines 80
# Or follow the log directly:
tail -f "$LOG_DIR"/task-test-1729519263.log
I'll check the initial output:
tmux capture-pane -t task-test-1729519263 -p -S -20
The tests are running. You can continue working, and I'll check back on the results in a few moments.
User: "Check on the test results"
Claude: Let me check the test session status:
./skills/tmux-task-runner/run.sh check task-test-1729519263
[Shows output with test results]
The tests have completed successfully! All 127 tests passed with 92% coverage.
Tips and Tricks
Tip 1: Creating Task Aliases
Add to your ~/.bashrc or ~/.zshrc:
alias tmux-task='/path/to/skills/tmux-task-runner/run.sh'
# Now you can use:
tmux-task run build "npm run build"
tmux-task list
Tip 2: Monitoring Multiple Sessions
# Create a monitoring dashboard using tmux itself
tmux new-session -s monitoring \; \
send-keys "tail -f \"$LOG_DIR\"/task-build-*.log" C-m \; \
split-window -v \; \
send-keys "tail -f \"$LOG_DIR\"/task-test-*.log" C-m \; \
split-window -h \; \
send-keys "watch -n 5 './run.sh list'" C-m
Tip 3: Saving Output
# Save complete session output to file
tmux capture-pane -t task-build-1729519263 -p -S - > build-output.txt
# Or just use the log file
cp "$LOG_DIR"/task-build-1729519263.log ./build-output.txt
Tip 4: Setting Up Notifications
# Built-in flag handles macOS/Linux automatically
./run.sh run build --notify "npm run build"
Troubleshooting
Issue: Can't find session
# List all sessions to find the correct name
tmux list-sessions
# Or check available logs
ls -lt "$LOG_DIR"/task-*.log
Issue: Session closed unexpectedly
# Check the log file for errors
cat "$LOG_DIR"/task-build-1729519263.log
# Look for error messages or exit codes
tail -50 "$LOG_DIR"/task-build-1729519263.log
Issue: Want to keep session after task completes
Sessions exit automatically once the command completes, but the log and status files remain for review (./run.sh status <session>).
Issue: Too many old sessions
# Kill all active task sessions
./run.sh kill all
# Clean up old log files (older than 7 days)
find "$LOG_DIR" -name "task-*.log" -mtime +7 -delete