Claude Code Plugins

Community-maintained marketplace

Feedback
28
0

Best practices for using fly ssh console to inspect Fly.io machines. Use when debugging production issues, checking memory usage, inspecting processes, or examining files on deployed machines.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name fly-ssh
description Best practices for using fly ssh console to inspect Fly.io machines. Use when debugging production issues, checking memory usage, inspecting processes, or examining files on deployed machines.

Fly SSH Console Usage

Critical Considerations

1. Machine Must Be Running

Fly.io machines may be stopped. Before using fly ssh console, ensure a machine is running:

Option A: Start machine explicitly

# List machines to find IDs
fly machines list -a smooth-nav

# Start a specific machine
fly machine start <machine-id> -a smooth-nav

Option B: Wake machine with HTTP request

# Fetch a page to auto-start the machine
curl -I https://smooth-nav.fly.dev/

2. No Shell - Direct Command Execution Only

fly ssh console executes commands directly, not through a shell. This means:

Don't use:

  • Pipes: ps aux | grep puma
  • Redirection: echo "test" > file.txt
  • Shell operators: &&, ||, ;
  • Shell expansions: *.txt, ~, $HOME

Do use:

  • Direct commands: ps auxww
  • Multiple separate fly ssh console calls for complex operations
  • Command-specific options instead of pipes

Example - Wrong vs Right:

# ❌ Wrong (pipe won't work)
fly ssh console -a smooth-nav -C "ps aux | grep puma"

# ✅ Right (use grep command directly)
fly ssh console -a smooth-nav -C "ps auxww" | grep puma

# Or use ps filtering
fly ssh console -a smooth-nav -C "ps -C puma -o pid,user,%mem,%cpu,command"

3. Debian Linux Commands (Not macOS)

The Fly.io machines run Debian Linux, which has different command options than macOS.

Common Differences

ps command:

# ❌ macOS syntax (doesn't work on Linux)
fly ssh console -a smooth-nav -C "ps auxww -o %mem"

# ✅ Debian Linux syntax
fly ssh console -a smooth-nav -C "ps auxww"
fly ssh console -a smooth-nav -C "ps -eo pid,user,%mem,%cpu,command"
fly ssh console -a smooth-nav -C "ps -C navigator -o pid,%mem,command"

Memory inspection:

# Show all processes with memory usage
fly ssh console -a smooth-nav -C "ps auxww"

# Show specific process
fly ssh console -a smooth-nav -C "ps -C navigator -o pid,user,%mem,vsz,rss,command"

# Show top memory consumers
fly ssh console -a smooth-nav -C "ps aux --sort=-%mem | head -20"

File operations:

# List files
fly ssh console -a smooth-nav -C "ls -lah /data/db"

# Read file
fly ssh console -a smooth-nav -C "cat /rails/config/navigator.yml"

# Check disk usage
fly ssh console -a smooth-nav -C "df -h"

Common Use Cases

Memory Usage Analysis

# Get comprehensive process list with memory
fly ssh console -a smooth-nav -C "ps auxww"

# Show only relevant processes (filter locally)
fly ssh console -a smooth-nav -C "ps auxww" | grep -E 'navigator|puma|redis'

# Check specific process memory
fly ssh console -a smooth-nav -C "ps -C navigator -o pid,user,%mem,vsz,rss,command"

Understanding ps memory columns:

  • %MEM - Percentage of physical RAM used
  • VSZ - Virtual memory size (KB)
  • RSS - Resident Set Size (actual physical memory in KB)

Process Inspection

# List all running processes
fly ssh console -a smooth-nav -C "ps auxww"

# Check if specific process is running
fly ssh console -a smooth-nav -C "ps -C puma -o pid,command"

# Show process tree
fly ssh console -a smooth-nav -C "ps auxwwf"

# Count processes by name
fly ssh console -a smooth-nav -C "ps aux" | grep -c puma

File and Directory Inspection

# List databases
fly ssh console -a smooth-nav -C "ls -lh /data/db/*.sqlite3"

# Check configuration
fly ssh console -a smooth-nav -C "cat /rails/config/navigator.yml"

# Check logs (most recent lines)
fly ssh console -a smooth-nav -C "tail -100 /data/log/production.log"

# Check disk space
fly ssh console -a smooth-nav -C "df -h /data"

Network and Port Inspection

# Check listening ports
fly ssh console -a smooth-nav -C "netstat -tlnp"

# Check specific port
fly ssh console -a smooth-nav -C "netstat -tlnp" | grep 28080

Region-Specific Commands

# Specify region
fly ssh console -a smooth-nav -r iad -C "ps auxww"

# List available regions
fly regions list -a smooth-nav

Multi-Application Commands

# Compare smooth-nav (with optimizations)
fly ssh console -a smooth-nav -C "ps auxww" | grep -E 'navigator|puma|redis'

# Compare smooth (original)
fly ssh console -a smooth -C "ps auxww" | grep -E 'navigator|puma|redis'

Debugging Tips

Check if machine is accessible

# Ping the machine
fly ssh console -a smooth-nav -C "echo ok"

Check Navigator status

# Check if Navigator is running
fly ssh console -a smooth-nav -C "ps -C navigator -o pid,user,command"

# Check Navigator version
fly ssh console -a smooth-nav -C "navigator --version"

Check Rails processes

# Check Action Cable
fly ssh console -a smooth-nav -C "ps auxww" | grep "cable/config.ru"

# Check tenant Rails apps
fly ssh console -a smooth-nav -C "ps auxww" | grep "rails/config.ru"

Verify environment

# Check environment variables (for specific process)
fly ssh console -a smooth-nav -C "cat /proc/1/environ" | tr '\0' '\n'

Performance Considerations

  • Each fly ssh console call incurs network latency
  • For complex analysis, consider multiple separate calls rather than trying to use shell features
  • Filter output locally (on your machine) rather than trying to filter remotely

Example Workflows

Analyze memory after deployment

# 1. Ensure machine is running
curl -I https://smooth-nav.fly.dev/

# 2. Wait a few seconds for cold start to complete
sleep 5

# 3. Get process list
fly ssh console -a smooth-nav -C "ps auxww" > /tmp/smooth-nav-ps.txt

# 4. Analyze locally
grep -E 'navigator|puma|redis' /tmp/smooth-nav-ps.txt

Compare memory usage across apps

# Get both process lists
fly ssh console -a smooth-nav -C "ps auxww" > /tmp/nav-ps.txt
fly ssh console -a smooth -C "ps auxww" > /tmp/smooth-ps.txt

# Compare
echo "=== smooth-nav ==="
grep -E 'navigator|puma|redis' /tmp/nav-ps.txt

echo "=== smooth ==="
grep -E 'navigator|puma|redis' /tmp/smooth-ps.txt

Check if Action Cable is running

# Quick check
fly ssh console -a smooth-nav -C "ps auxww" | grep -q "cable/config.ru" && echo "Action Cable running" || echo "Action Cable NOT running"

Common Errors and Solutions

Error: "no machines available"

Solution: Machine is stopped. Start it with fly machine start or trigger with HTTP request.

Error: "connection refused"

Solution: Machine might be starting. Wait 10-30 seconds and retry.

Error: "command not found"

Solution: Verify the command exists in Debian. Check available commands with:

fly ssh console -a smooth-nav -C "which <command>"

Pipe or redirection doesn't work

Solution: Don't use shell operators in -C argument. Filter/redirect on your local machine instead.