mcpField
B
balatro-mod-dev

balatro-mod-dev

github.com/liafonxDevelopment347 installsUpdated 34w ago
Repository

About balatro-mod-dev

balatro-mod-dev is a skill for developing and debugging Balatro mods with Steamodded, Lovely, and SMODS. It provides workflows and commands for mod setup, code research, log-based debugging, testing, and releases.

Key features

  1. 01Initialize and maintain mod structure
  2. 02Research game source and SMODS APIs
  3. 03Find Lovely patch patterns
  4. 04Debug and verify mods using logs
  5. 05Build release packages and update docs

Use cases

  1. 01Start a new Balatro mod project
  2. 02Investigate mod errors or compatibility issues
  3. 03Prepare mod documentation and releases

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/liafonx/open-balatro --skill balatro-mod-dev

After installing, type/balatro-mod-devin Claude Code to confirm it loaded.

Bundled files

References and scripts installed along with SKILL.md.

patterns/
lovely-patches.md
mobile-compat.md
smods-api.md
ui-system.md
references/
game-files.md
globals.md
lua-gotchas.md
sub-agents.md

Details

From the project README

Balatro Mod Development

Create and debug Balatro mods with Steamodded, Lovely, and SMODS.

Quick Agent Selection

When researching or writing code, spawn the right sub-agent via the Task tool:

Need to find...Use agentModelSearch boundary
Game function implementationgame-source-researchersonnetBalatro_src/ only
SMODS API usage/hookssmods-api-researchersonnetsmods/ only
How other mods do Xmod-pattern-researchersonnetMods/ folder only
Lovely patch syntaxlovely-patch-researchersonnetlovely files only
Project architecture/explorationproject-explorersonnetCurrent project only
Write code per plancode-writersonnetCurrent project only
Run temp script for datascript-runnerhaikuN/A (execution)
Review code for correctnesscode-revieweropusCurrent project only
Synthesize multi-source researchresearch-analystopusCurrent project only
Plan complex implementationstrategic-planneropusCurrent project only
Inspect runtime logs, dumps, compatdebug-inspectorsonnetLovely logs/dumps only

The main agent handles directly: User interaction, small edits (<20 lines), presenting results.

Parallel: When researching DIFFERENT sources — spawn multiple Task calls in one message Sequential: When second query depends on first result

See references/sub-agents.md for the 5-phase workflow, iterative retrieval protocol, and delegation rules.

Repo Type Awareness

Auto-detection: Compare mod manifest author with git remote username.

# Get git remote username
git_user=$(git remote get-url origin 2>/dev/null | sed -E 's|.*[:/]([^/]+)/[^/]+\.git$|\1|' | tr '[:upper:]' '[:lower:]')

# Get mod author from manifest (first author, lowercase)
mod_author=$(jq -r '.author[0] // .author // ""' *.json 2>/dev/null | head -1 | tr '[:upper:]' '[:lower:]')

# Compare: match = own, no match = fork
[[ "$git_user" == "$mod_author" ]] && echo "own" || echo "fork"
TypeDetectionImplications
newEmpty repo (no files)Full docs, Logger.lua, localization
ownAuthor matches git userFull docs, standardize structure
forkAuthor differs from git userMinimal changes, temp logs only

File Convention

FilePurposeGit
AGENTS.mdMod structure, functions, dependencies, constraints, Quick Reference (for AI agents)ignored
mod.config.jsonFile lists for sync/release scriptsignored
docs/knowledge-base.mdIssues & lessons learnedignored

AGENTS.md Purpose: Enable seamless handover between agents. Another agent should quickly understand mod structure, functions, dependencies, constraints, and repo type from a single file.

File Placement Rules

Only these .md files belong in root:

  • README.md, README_zh.md
  • CHANGELOG.md, CHANGELOG_zh.md
  • AGENTS.md
  • LICENSE.md

ALL other .md files MUST go in docs/

External References (No Symlinks Needed)

Access reference code directly via absolute paths. No setup required.

Source Locations (macOS)
ResourcePath
Game Source (desktop)~/Development/GitWorkspace/Balatro_src/desktop/
Game Source (mobile)~/Development/GitWorkspace/Balatro_src/ios_plus/
Steamodded Source~/Development/GitWorkspace/smods/src/
Steamodded Lovely~/Development/GitWorkspace/smods/lovely/
Lovely Docs~/Development/GitWorkspace/lovely-injector/
Installed Mods~/Library/Application Support/Balatro/Mods/
Lovely Logs~/Library/Application Support/Balatro/Mods/lovely/log/
Source Locations (Windows)
ResourcePath
Game SourceVaries by setup
Installed Mods%APPDATA%/Balatro/Mods/
Lovely Logs%APPDATA%/Balatro/Mods/lovely/log/

Pattern References

Read these files for specific topics:

TopicReference File
Lovely.toml syntaxpatterns/lovely-patches.md
SMODS hooks, config, localizationpatterns/smods-api.md
Desktop vs mobile differencespatterns/mobile-compat.md
UIBox, CardArea, draw orderpatterns/ui-system.md
Game source file map + search tipsreferences/game-files.md
G.GAME, G.STATES, G.P_* globalsreferences/globals.md
Lua/LuaJIT pitfalls, common mod bugsreferences/lua-gotchas.md

New Mod Setup (type: new)

Templates in ${CLAUDE_PLUGIN_ROOT}/templates/ folder:
FilePurpose
agents-md-template.mdAGENTS.md template for standard mods
agents-texture-pack-template.mdAGENTS.md for Malverk texture packs
mod-config-template.jsonScript configuration
gitignore-templateStandard .gitignore
logger-template.luaCentralized logging utility
Meta Files:
FilePurpose
mod-json-template.jsonSMODS mod manifest ({ModName}.json)
manifest-json-template.jsonThunderstore manifest
User Docs in templates/docs/:
FilePurpose
description-template.mdConcise README for docs/
NEXUSMODS_DESCRIPTION-template.txtBBCode for NexusMods
knowledge-base-template.mdIssues & lessons learned
Basic Mod Structure (new repos):
{ModName}/
├── main.lua                 # Entry point, mod registration
├── config.lua               # Config defaults (optional)
├── lovely.toml              # Lovely patches (if needed)
├── {ModName}.json           # SMODS mod manifest
├── manifest.json            # Thunderstore manifest
├── mod.config.json          # Script configuration
├── Utils/
│   └── Logger.lua           # Centralized logging
├── localization/
│   ├── en-us.lua            # English (required)
│   └── zh_CN.lua            # Chinese
├── assets/                  # Sprites, shaders
├── scripts/                 # Utility scripts
└── docs/                    # Documentation

Available Commands (16 total — plugin-bundled, auto-loaded)

  • /balatro-mod-dev:familiar - Get familiar with this mod (reads AGENTS.md, maps architecture)
  • /balatro-mod-dev:init - Initialize new mod
  • /balatro-mod-dev:sync-mod - Start sync with watch mode (run once at start)
  • /balatro-mod-dev:bump-version [patch|minor|major] - Increment version, update changelogs
  • /balatro-mod-dev:release - Create release packages (auto-detects version from manifests)
  • /balatro-mod-dev:fix-sprites <directory> [--preview] - Fix grey borders on sprites
  • /balatro-mod-dev:refactor [focus-area] - Review code for redundancy, outdated fallbacks, modularization
  • /balatro-mod-dev:debug - Verify fix by checking Lovely logs (auto-detects mod key from repo)
  • /balatro-mod-dev:test [scenario] - Run test scenarios and verify mod behavior via Lovely logs
  • /balatro-mod-dev:draft-pr - Draft PR message (for forks)
  • /balatro-mod-dev:check - Audits project health, scaffolds missing rules
  • /balatro-mod-dev:update-docs - Review all docs for accuracy, staleness, duplication, verbosity
  • /balatro-mod-dev:update-plugin - Update plugin based on new knowledge
  • /balatro-mod-dev:knowledge - Review session work, capture discoveries
  • /balatro-mod-dev:compact - Evaluate whether to compact context now
  • /balatro-mod-dev:help - List all available commands and agents

Sub-agents (11 total — plugin-bundled)

  • game-source-researcher - Find game functions and injection points (sonnet)
  • smods-api-researcher - Find SMODS API patterns and usage (sonnet)
  • mod-pattern-researcher - Find how other mods implement features (sonnet)
  • lovely-patch-researcher - Find Lovely patch syntax and examples (sonnet)
  • project-explorer - Extensive codebase exploration (sonnet)
  • code-writer - Execute implementation plans, write code (sonnet)
  • script-runner - Run temp scripts and return results (haiku)
  • code-reviewer - Review code for correctness and edge cases (opus)
  • research-analyst - Synthesize findings from multiple researchers (opus)
  • strategic-planner - Plan implementation strategy for complex features (opus)
  • debug-inspector - Inspect runtime logs, dumps, mod compatibility (sonnet)

Logging

For new/my repos:

Use Utils/Logger.lua (from ${CLAUDE_PLUGIN_ROOT}/templates/logger-template.lua):

local Logger = require("Utils.Logger")
local log = Logger.create("ModuleName")
log("info", "Initialized")
log("error", "Failed: " .. err)
For forks/others' repos:

Use temp logs only (remove before PR):

pcall(print, "[Debug] checkpoint: " .. tostring(var))

Utility Scripts

ScriptPurpose
${CLAUDE_PLUGIN_ROOT}/scripts/sync_to_mods.template.shSync mod files to game's Mods folder
${CLAUDE_PLUGIN_ROOT}/scripts/create_release.template.shCreate release packages
${CLAUDE_PLUGIN_ROOT}/scripts/fix_transparent_pixels.pyFix grey borders on sprites

Workflow: Debugging

  1. Check references/lua-gotchas.md for known pitfalls (FFI cdata, nil scoping, boolean normalization)
  2. Check platform (desktop vs mobile)
  3. Search game source for function
  4. Check other mods for implementations
  5. Add logs (Logger.lua for own, temp for fork)
  6. Check Lovely logs
  7. If fix fails 3+ times: Invoke research-analyst (opus) to synthesize all debugging context

Workflow: Update User Docs

When user says "update all user docs":

  1. Review ALL files: README(_zh).md, CHANGELOG(_zh).md
  2. Review docs/: description.md, NEXUSMODS_DESCRIPTION.txt
  3. Update version in {ModName}.json, manifest.json
  4. Ensure EN/ZH consistency

Comments

Markdown supported