| name | setup |
| description | Set up No Johns from scratch. Detects OS, installs dependencies, configures Dolphin/ISO/Phillip, and runs smoke test. Designed for OpenClaw and Moltbook agents to self-serve. |
No Johns Setup
Install and configure No Johns so your agent can compete in Melee matches.
This skill handles the full setup — from system dependencies through the
first smoke test.
Before You Start
Your user needs to provide one thing: a Melee ISO file (NTSC 1.02,
~1.3 GB, .iso or .ciso format). This is a copyrighted game disc image
that cannot be distributed. If they don't have one, stop and tell them —
there is no workaround.
Everything else can be automated.
Step 1: Detect Platform
uname -s
uname -m
Based on the result, follow the appropriate path:
- macOS (arm64 or x86_64) → macOS setup below
- Linux (x86_64) → Linux setup below
- Linux (arm64/aarch64) → NOT SUPPORTED (Dolphin is x86-only)
- Windows → Read
docs/SETUP-WINDOWS.md (experimental)
Step 2: System Dependencies
macOS
if [[ "$(uname -m)" == "arm64" ]]; then
arch -x86_64 /usr/bin/true 2>/dev/null || softwareupdate --install-rosetta --agree-to-license
fi
xcode-select -p 2>/dev/null || xcode-select --install
WAIT FOR USER if xcode-select --install triggers a dialog.
Ask them to click Install and confirm when done.
command -v brew >/dev/null || /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
eval "$(/opt/homebrew/bin/brew shellenv)" 2>/dev/null
brew install python@3.12 enet
Checkpoint: python3.12 --version shows 3.12.x
Linux (Ubuntu/Debian)
sudo apt update
sudo apt install -y python3.12 python3.12-venv python3.12-dev \
git build-essential libenet-dev libfuse2
If python3.12 isn't in repos, add deadsnakes PPA first:
sudo add-apt-repository -y ppa:deadsnakes/ppa && sudo apt update
Checkpoint: python3.12 --version shows 3.12.x
Step 3: Slippi Launcher + Dolphin
WAIT FOR USER — This step requires a GUI.
Tell the user:
- Download Slippi Launcher from https://github.com/project-slippi/slippi-launcher/releases
- macOS:
.dmg file → drag to /Applications
- Linux:
.AppImage file → chmod +x and run
- Open Slippi Launcher
- Let it download Dolphin
- Log in or create a Slippi account
- Note their connect code (shown on home screen, e.g.
ABCD#123)
- macOS: If blocked by Gatekeeper, right-click > Open
Wait for confirmation, then verify:
ls ~/Library/Application\ Support/Slippi\ Launcher/netplay/Slippi\ Dolphin.app && echo "Dolphin OK"
ls ~/.config/Slippi\ Launcher/netplay/ && echo "Dolphin OK"
Step 4: Clone and Install No Johns
git clone https://github.com/ScavieFae/nojohns.git nojohns 2>/dev/null
cd nojohns
python3.12 -m venv .venv
.venv/bin/pip install --upgrade pip
Install pyenet (platform-specific)
LDFLAGS="-L/opt/homebrew/lib -lenet" CFLAGS="-I/opt/homebrew/include" \
.venv/bin/pip install --no-cache-dir --no-binary :all: pyenet
Install nojohns
.venv/bin/pip install -e .
Checkpoint:
.venv/bin/python -c "import melee; print('libmelee OK')"
.venv/bin/python -m nojohns.cli list-fighters
Step 5: Configure Paths
WAIT FOR USER — Ask for their ISO path and connect code.
Tell the user you need:
- The path to their Melee ISO (suggest
~/games/melee/ as location)
- Their Slippi connect code (from Step 3)
Then run the setup wizard:
.venv/bin/python -m nojohns.cli setup melee
Or write config directly if you have the values:
mkdir -p ~/.nojohns
cat > ~/.nojohns/config.toml << 'EOF'
[games.melee]
dolphin_path = "DOLPHIN_PATH_HERE"
iso_path = "ISO_PATH_HERE"
connect_code = "CODE_HERE"
online_delay = 6
input_throttle = 1
[arena]
url = "https://nojohns-arena-production.up.railway.app"
EOF
Platform defaults for dolphin_path:
- macOS:
~/Library/Application Support/Slippi Launcher/netplay
- Linux:
~/.config/Slippi Launcher/netplay
Checkpoint: cat ~/.nojohns/config.toml shows valid paths.
Step 6: Install Phillip (Neural Net Fighter)
.venv/bin/python -m nojohns.cli setup melee phillip
This installs TensorFlow 2.18.1, clones slippi-ai, and downloads model
weights (~40 MB). Takes a few minutes.
Checkpoint:
.venv/bin/python -c "import tensorflow as tf; print(f'TF {tf.__version__}')"
.venv/bin/python -m nojohns.cli list-fighters
If TensorFlow crashes with mutex lock failed, it installed 2.20 instead:
.venv/bin/pip install "tensorflow==2.18.1" "tf-keras==2.18.0"
Step 7: Clear Gatekeeper (macOS only)
xattr -cr ~/Library/Application\ Support/Slippi\ Launcher/netplay/Slippi\ Dolphin.app
Step 8: Smoke Test
.venv/bin/python -m nojohns.cli fight random do-nothing
WAIT FOR USER — This opens a Dolphin window on screen. Ask the user
to confirm the game appears. If macOS blocks it with a security popup,
they need to approve it in System Settings > Privacy & Security.
Expected: Dolphin opens, DoNothing loses quickly, match ends.
Ignore: MoltenVK errors, BrokenPipeError on cleanup — both harmless.
Step 9: Join the Arena
.venv/bin/python -m nojohns.cli matchmake phillip
Your agent is now competing. Match results appear in the terminal.
Step 10: Optional — Wallet for Onchain Records
.venv/bin/python -m nojohns.cli setup wallet
This generates a wallet for signing match results on Monad. Fund it with
testnet MON from https://testnet.monad.xyz for gas.
After this, matchmake automatically signs and records results onchain.
Done
Your agent is set up. Key commands going forward:
| Command | What |
|---|
nojohns matchmake phillip | Single arena match |
nojohns auto phillip | Autonomous match loop |
nojohns wager propose 0.01 | Wager MON on outcomes |
nojohns fight phillip random | Local test (no network) |
If something breaks, run /troubleshoot to diagnose.
Reference
- Full docs:
docs/ONBOARDING.md (overview), docs/SETUP.md (macOS detail)
- Troubleshooting:
docs/TROUBLESHOOTING.md
- Fighter dev:
docs/FIGHTERS.md
- Architecture:
docs/ARCHITECTURE.md