Skip to content
Back to skills

Troubleshoot

ASecurity

Diagnose No Johns setup issues. Checks Python, Dolphin, ISO, arena connectivity, and common problems.

  • 57 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added May 31, 2026
businesspythongobashgit

Works with

  • cli

Security analysis

A92/100
  • mediumInstalls packages at runtime which could introduce malicious dependencies

Pro shows the line behind each finding and how to fix it

Scanned May 31, 2026

npx -y skills add diegosouzapw/awesome-omni-skill --skill troubleshoot --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Troubleshoot?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Troubleshoot
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/diegosouzapw-troubleshoot/badge)](https://www.skillsdirectory.com/skills/diegosouzapw-troubleshoot)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: troubleshoot
description: Diagnose No Johns setup issues. Checks Python, Dolphin, ISO, arena connectivity, and common problems.
---

# Setup Troubleshooter

Diagnose and fix common No Johns setup problems. Run each check in order
and report findings at the end.

## Steps

### 1. System Check

```bash
# OS and architecture
uname -a

# Python version (must be 3.12.x, NOT 3.13)
python3.12 --version 2>/dev/null || python3 --version

# Check if venv exists
ls -la .venv/bin/python 2>/dev/null && echo "Venv OK" || echo "PROBLEM: No .venv found"

# Check venv Python version
.venv/bin/python --version 2>/dev/null
```

**Expected:** Python 3.12.x. If 3.13, pyenet won't build. If no venv, user
needs `python3.12 -m venv .venv`.

### 2. Package Check

```bash
# libmelee (critical — the Dolphin interface)
.venv/bin/python -c "import melee; print('libmelee OK')" 2>&1

# pyenet (libmelee dependency — C extension, common build failure)
.venv/bin/python -c "import enet; print('pyenet OK')" 2>&1

# nojohns CLI
.venv/bin/python -m nojohns.cli list-fighters 2>&1

# TensorFlow (only needed for Phillip)
.venv/bin/python -c "import tensorflow as tf; print(f'TF {tf.__version__} OK')" 2>&1

# slippi-ai (Phillip runtime)
.venv/bin/python -c "import slippi_ai; print('slippi-ai OK')" 2>&1
```

**Common failures:**
- `import enet` fails → pyenet build issue. See `docs/TROUBLESHOOTING.md` "pyenet Build Failure"
  - macOS fix: `LDFLAGS="-L/opt/homebrew/lib -lenet" CFLAGS="-I/opt/homebrew/include" .venv/bin/pip install --no-cache-dir --no-binary :all: pyenet`
  - Linux fix: `sudo apt install -y libenet-dev && .venv/bin/pip install --force-reinstall pyenet`
- `import melee` fails → libmelee not installed. Run `.venv/bin/pip install -e .`
- `import tensorflow` fails with `mutex lock` → TF 2.20 on macOS ARM. Fix: `.venv/bin/pip install "tensorflow==2.18.1" "tf-keras==2.18.0"`

### 3. Config Check

```bash
# Config file exists
cat ~/.nojohns/config.toml 2>/dev/null || echo "PROBLEM: No config.toml — run 'nojohns setup melee'"
```

Verify these fields in `~/.nojohns/config.toml`:

- **`dolphin_path`**: Must exist and contain "netplay" in the path string (libmelee validates this)
  - macOS: `~/Library/Application Support/Slippi Launcher/netplay`
  - Linux: `~/.config/Slippi Launcher/netplay`
- **`iso_path`**: Must exist and be >500MB (a real Melee ISO is ~1.3GB)
- **`connect_code`**: Format `XXXX#NNN` (4 letters, hash, 1-3 digits). Avoid codes with '9' on macOS Sequoia.

```bash
# Verify Dolphin path exists
DOLPHIN_PATH=$(python3 -c "
import tomllib
with open('$HOME/.nojohns/config.toml', 'rb') as f:
    c = tomllib.load(f)
print(c.get('games', {}).get('melee', {}).get('dolphin_path', 'NOT SET'))
" 2>/dev/null)
echo "Dolphin path: $DOLPHIN_PATH"
ls "$DOLPHIN_PATH" 2>/dev/null && echo "Path OK" || echo "PROBLEM: Path does not exist"

# Verify ISO exists and check size
ISO_PATH=$(python3 -c "
import tomllib
with open('$HOME/.nojohns/config.toml', 'rb') as f:
    c = tomllib.load(f)
print(c.get('games', {}).get('melee', {}).get('iso_path', 'NOT SET'))
" 2>/dev/null)
echo "ISO path: $ISO_PATH"
ls -la "$ISO_PATH" 2>/dev/null || echo "PROBLEM: ISO file not found"
```

### 4. Dolphin Check

```bash
# macOS: Check Gatekeeper isn't blocking Dolphin
# (only relevant on macOS)
if [[ "$(uname)" == "Darwin" ]]; then
    DOLPHIN_APP="$HOME/Library/Application Support/Slippi Launcher/netplay/Slippi Dolphin.app"
    if [ -d "$DOLPHIN_APP" ]; then
        echo "Dolphin app found"
        xattr -l "$DOLPHIN_APP" 2>/dev/null | grep -q quarantine && \
            echo "PROBLEM: Gatekeeper quarantine active. Fix: xattr -cr \"$DOLPHIN_APP\"" || \
            echo "Gatekeeper OK"
    else
        echo "PROBLEM: Dolphin.app not found at expected location"
        echo "Open Slippi Launcher and let it download Dolphin"
    fi
fi

# Linux: Check Dolphin binary exists
if [[ "$(uname)" == "Linux" ]]; then
    NETPLAY_DIR="$HOME/.config/Slippi Launcher/netplay"
    if [ -d "$NETPLAY_DIR" ]; then
        echo "Slippi netplay dir found"
        find "$NETPLAY_DIR" -name "dolphin-emu" -o -name "*.AppImage" 2>/dev/null
    else
        echo "PROBLEM: Slippi netplay directory not found"
    fi
fi
```

### 5. Phillip Check

```bash
# Model weights exist
MODEL="fighters/phillip/models/all_d21_imitation_v3.pkl"
if [ -f "$MODEL" ]; then
    SIZE=$(wc -c < "$MODEL")
    echo "Model weights: $SIZE bytes"
    if [ "$SIZE" -lt 1000000 ]; then
        echo "PROBLEM: Model file too small — may be corrupted"
    else
        echo "Model OK"
    fi
else
    echo "PROBLEM: Model weights not found. Run: nojohns setup melee phillip"
fi

# slippi-ai installed
if [ -d "fighters/phillip/slippi-ai" ]; then
    echo "slippi-ai repo OK"
else
    echo "PROBLEM: slippi-ai not cloned. Run: nojohns setup melee phillip"
fi
```

### 6. Network Check

```bash
# Arena reachable
ARENA_URL=$(python3 -c "
import tomllib
with open('$HOME/.nojohns/config.toml', 'rb') as f:
    c = tomllib.load(f)
print(c.get('arena', {}).get('url', 'https://nojohns-arena-production.up.railway.app'))
" 2>/dev/null || echo "https://nojohns-arena-production.up.railway.app")

echo "Arena URL: $ARENA_URL"
curl -s --max-time 5 "$ARENA_URL/health" 2>/dev/null || echo "PROBLEM: Arena unreachable"
```

### 7. Known Issues Reference

If the checks above pass but things still don't work, check these known issues
in `docs/TROUBLESHOOTING.md`:

| Symptom | Issue | Fix |
|---------|-------|-----|
| Connect codes with '9' fail on Sequoia | Position 3 bug | Use a code without '9' |
| Netplay freezes at stock loss | Rollback desync | Set `online_delay=6` |
| Phillip doesn't move in netplay | Missing `on_game_start` | Update to latest code |
| `mutex lock failed` on TF import | TF 2.20 bug on ARM | Install TF 2.18.1 |
| `Unknown path` from libmelee | Path missing "netplay" | Use Slippi Launcher's netplay dir |
| Menu stuck on 2nd+ match | libmelee state leak | Use subprocess per match |
| CSS stuck at character select | Intermittent | Kill and restart matchmake |

### 8. Report

After running all checks, print a summary:

```
=== No Johns Setup Diagnostic ===
System:     [OS, arch, Python version]
Packages:   [OK / PROBLEMS: list]
Config:     [OK / PROBLEMS: list]
Dolphin:    [OK / PROBLEMS: list]
Phillip:    [OK / PROBLEMS: list]
Network:    [OK / PROBLEMS: list]

[For each PROBLEM, include the specific fix command]
```

If everything passes: "Setup looks good. Try `nojohns fight random do-nothing` for a smoke test."

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.