agentleFS
JakeschincariolJakeschincariol/console-skill/console-anywhere/SKILL.md

console-anywhere

Skill92 starsChanged 21 days agoMITView on GitHub

Play Anywhere. Builds the port for Windows, Mac, Linux, Steam Deck, Android and PS Vita and packages it without any game files inside. doctor checks this machine's tools for a target and prints the exact install command for anything missing; plan prints the build steps taken from PS2Recomp's own README, android/README.md and vita scripts; package makes a player folder in console/dist/ (the runner, its libraries, an empty game/ folder, PLAYERS.md, a launch script, .recomp.json) and refuses outright if a disc image, PS2 ELF, IRX module, recompiled runner source or other game data is inside; guard runs that check on any folder; recomp-json writes the project's optional .recomp.json. Use when the user says "put it on my Steam Deck", "build it for Android", "play it on my phone", "on my TV", "Vita build", "Mac build", "package it", "make a release folder", "is it safe to zip this", or after the port plays on the machine it was built on.

The file

We split this skill into the rules it gives an agent

3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Add --elf-name (else the launch script reads BOOT2 from the player's SYSTEM.CNF) and --game/--serial for .recomp.json.

    line 73
  2. Distinctive:

    Bring your own game: Every player supplies the game from a disc they own, dumped themselves.

    line 96
  3. Distinctive:

    Never download ISOs, ELFs or BIOS files, never help find them, never ask for them.

    line 97

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

console-anywhere

A PS2Recomp port is a normal native program (ps2EntryRunner) built from the recompiled game code plus the runtime, drawn with raylib. The same CMake project builds it on Windows, macOS (Apple silicon through sse2neon), Linux and the Steam Deck; android/ makes an APK and vita/ makes a vpk. This skill checks the toolchain, prints the right steps for each device, and packages the result so the player brings the game from their own disc.

Honest limits: PS2Recomp says it is tested mainly with MSVC, so Mac, Linux, Android and Vita builds get less testing; the Vita is far slower than a PC; Android has no on-screen controls yet. And the runner is compiled from your game's recompiled code, so a package is for your own devices: it never contains the disc, but it is still derived from the game, so it is not something to upload.

${CLAUDE_SKILL_DIR} below is this skill's folder (where this SKILL.md lives).

python3 "${CLAUDE_SKILL_DIR}/targets.py" doctor                       # this machine's own OS
python3 "${CLAUDE_SKILL_DIR}/targets.py" doctor --target android --target vita   # or --target all
python3 "${CLAUDE_SKILL_DIR}/targets.py" plan --target steamdeck --elf-name SLUS_203.12
python3 "${CLAUDE_SKILL_DIR}/targets.py" package --runner out/release/ps2xRuntime/ps2EntryRunner \
        --target linux --elf-name SLUS_203.12 --game "My Game" --serial SLUS-20312 \
        --out console/dist/mygame-linux
python3 "${CLAUDE_SKILL_DIR}/targets.py" guard console/dist/mygame-linux   # before you zip or push anything
python3 "${CLAUDE_SKILL_DIR}/targets.py" recomp-json --game "My Game" --serial SLUS-20312 --status playable

Targets: windows, macos, linux, steamdeck, android, vita, and web (plan and doctor only: a separate toolchain). plan takes --repo (your PS2Recomp checkout) and --build-dir. package takes --lib FILE (extra libraries), --allow FILE, --replace, --status, --json. Exit codes: 0 ok, 1 something missing or refused, 2 bad input.

What it reads and writes

filewhat
your build outputps2EntryRunner (+ .dll / .so / .dylib next to it), app-release.apk, or ps2EntryRunner.vpk
console/dist/<name>/the player folder: runner, libraries, game/ (empty), PLAYERS.md, play.bat / play.command / play.sh / install-android.sh, .recomp.json, .console-dist.json
templates/PLAYERS.mdthe player instructions template
.recomp.jsonoptional project description read by recomp lists (PS2Recomp itself ignores it)
console/STATE.mdread the build folder and checkout path from it; log what was built

Method

  1. Ask where they want to play and on what: a PC, a Mac, a Steam Deck, an Android phone, tablet or TV box, a homebrew Vita. "On the TV" means an Android TV box with a Bluetooth pad, or a PC or Deck plugged into the TV with a controller.
  2. The port must already run here. Build it and check it with /console-tester on the machine you develop on first. A crash on the desktop will not get better on a phone.
  3. Doctor. targets.py doctor --target <t>. Install what is MISSING with the printed command, then run doctor again.
  4. Plan. targets.py plan --target <t> --elf-name <the disc's ELF>. Follow the steps in the user's checkout (the one holding their recompiled code). Per-target details and the source of each fact: reference/targets.md.
  5. Build with the plan's commands. Incremental only; never clean a build folder, never CLEAN=1 for the Vita. A separate release folder (out/release) keeps the day-to-day build intact.
  6. Package. targets.py package --runner <built file> --target <t> --out console/dist/<name>. Add --elf-name (else the launch script reads BOOT2 from the player's SYSTEM.CNF) and --game/--serial for .recomp.json.
  7. Read the guard's verdict. A refusal lists each file and why. Fix the cause (wrong --lib, a disc file next to the runner). Never add an allow line for a disc image, a PS2 ELF, an IRX, SYSTEM.CNF or runner sources: the allow file is only for a false positive that is truly the user's own file, with the reason written next to it. Details: reference/guard.md.
  8. Install on the device following PLAYERS.md, then the player dumps their own disc into game/. Test it there, and log the result in console/STATE.md.

Per target in one line

targetrunnerhow the ELF is foundnotes
Windowsps2EntryRunner.exe + FFmpeg DLLsplay.bat passes game\<ELF>MSVC, the most tested path
macOSps2EntryRunnerplay.command passes game/<ELF>arm64 builds through sse2neon; needs Homebrew FFmpeg unless built without it
Linuxps2EntryRunnerplay.shraylib needs X11 and GL headers to build
Steam Deckthe Linux buildplay.sh, added to Steam as a non-Steam gameor the Windows build under Proton (untested here)
Androidapp-release.apkbaked in with -Pps2xBootElf=...files go to /storage/emulated/0/Android/data/com.ps2x.runner/files/ with adb push; pair a controller
PS Vitaps2EntryRunner.vpkbaked in by ./vita/build.sh <ux0:data/... path>./vita/setup.sh once; install with VitaShell; slow
web(not a PS2Recomp target)snuri00/ps2-web-recomp is a different recompiler: a second port of the same disc, experimental

Guard rails

  • Bring your own game. Every player supplies the game from a disc they own, dumped themselves. Never download ISOs, ELFs or BIOS files, never help find them, never ask for them. No BIOS needed.
  • Nothing from the game gets published. package refuses disc images (ISO, BIN, IMG, MDF, NRG, CHD, CSO and ISO 9660 content under any name), PS2 ELFs and IRX modules (by magic and machine), disc-style names like SLUS_203.12, SYSTEM.CNF, recompiled runner/ sources, anything in game/, and any file over 512 MB. The runner itself is built from the recompiled game code: the package is for the user's own devices, not for upload. Share patches, overrides and original assets.
  • Not affiliated with Sony. PlayStation is a trademark of Sony Interactive Entertainment. PS Vita homebrew, Steam, Android and the other platforms belong to their owners.
  • Never destroy the user's files. --replace only replaces a folder this tool made, and refuses while game/ holds anything (the player's disc, saves in mc0/).

Hands off to

  • /console-tester to run the build on this machine before packaging, and after.
  • /console-controller for the device's controls (xbox layout on the Steam Deck, touch zones or a Bluetooth pad on Android).
  • /console-saves to move saves between devices (mc0/ sits next to the game's ELF).

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.