rimlike/CLAUDE.md

6 KiB
Raw Permalink Blame History

Project: rimlike

A 2D, tile-based cute-farming-RPG-meets-colony-sim for mobile / handheld. Rimworld DNA, Going Medieval × Stardew lodestars. Touch-first UI, sandbox + light storyteller, Rimworld-fidelity depth (5-priority work matrix, 16-chip stockpiles, mood + soft breaks, lighting, room beauty, Quality, dirtiness, production chains, combat, burial). Built on Godot 4 with the ElvGames "Ultimate Farming RPG" Humble bundle as primary art and Ventilatore Fantasy Tileset as medieval accent.

Working title rimlike — rename TBD.

Working agreement

  • This is a git repo with origin on Forgejo at https://git.rdx4.com/megaproxy/rimlike.git (private). HTTPS auth uses the token in ~/.git-credentials — pushes are non-interactive.
  • Commit after each logical change with a one-line imperative message; git push after each commit (or at minimum before ending the session).
  • Read memory.md at session start. Update it before ending the session.
  • Read the relevant docs/ companion (design / architecture / ui / art) for any task in that area — memory.md is the index, the companions are the depth.
  • Never commit secrets — see .gitignore and the rules in ~/claude/CLAUDE.md.

Project-specific notes

  • Engine: Godot 4 (GDScript). 2D-first. Mobile and Steam-Deck export targets; iOS export needs Mac/Xcode, Android from Linux is fine.
  • Tile size: 16×16 pixel art (locked).
  • Art: ElvGames "Ultimate Farming RPG" Humble bundle is the primary visual layer; local path /mnt/d/godot/assets/humble set new/. Ventilatore Fantasy Tileset Bundle is owned and used as medieval accent. License attribution is required — maintain a credits string for every pack used (see docs/art.md).
  • Tick rate: sim 20 Hz, render 60 Hz decoupled. Default speed Fast (5×) — 1 in-game day ≈ 5 min real time. Auto-pause on threats / pawn-down / dialog events.
  • Save format: Mid-tick suspend safe; we save between sim ticks. JobRunner state must round-trip from day one.
  • i18n from day one: all player-visible strings live in a string table; English-only ship plan but no hardcoded copy in code.
  • Conventions: GDScript with Godot's standard idioms. Class-per-file. Snake_case for files and variables. Tilesets imported from the bundle's Tilesets/*.png directly (skip the .unitypackage / .yymps / RPG Maker variants).
  • Open scope: the Vertical slice in memory.md is the MVP target — realistic timeline 36 months solo. Do not silently expand scope; fork choices live in memory.md Open questions.

MCP Pro integration

AI assistant tools come from Godot MCP Pro (172 tools, paid, proprietary). Two pieces:

  • Server at D:\godot\mcp\server\ (= /mnt/d/godot/mcp/server/ from WSL) — Node.js, shared across all Godot projects on this machine, not part of this repo.
  • Editor plugin at addons/godot_mcp/ — copied from the paid zip, gitignored (proprietary license, not redistributed). Re-copy on a fresh clone (once the Godot project is scaffolded): cp -r /mnt/d/godot/mcp/addons/godot_mcp ./addons/, then in Godot: Project → Project Settings → Plugins → Godot MCP Pro → Enable.
  • .mcp.json here wires Claude Code → server. .claude/settings.local.json is the pre-built read-only-tool allowlist from the zip (committed).
  • The Godot editor must be running with the plugin enabled before Claude can use MCP tools — look for the green dot in the "MCP Pro" bottom panel.
  • Editor vs runtime tools: editor tools always work; runtime tools (get_game_*, simulate_*, assert_*, etc.) need play_scene first. Full split in addons/godot_mcp/skills.*.md or D:\godot\mcp\instructions\CLAUDE.md.
  • Don't set GODOT_MCP_PORT in .mcp.json — server auto-scans 65056509; fixed port causes silent failures with stale Node processes. If "Editor not connected" persists, kill any leftover node.exe in Task Manager.

Delegation: tiered subagents (cost/speed)

The main conversation runs on Opus. Three project-local subagents in .claude/agents/ exist to offload work to cheaper, faster models. Default to delegation for any well-defined task that fits an agent's description — including small mechanical edits. Don't skip delegation just because the edit is tiny; the user wants the tiered system visibly firing on its natural workload.

  • quick-edit (Haiku) — mechanical edits to .gd files: typos, renames, removing print()s, removing unused imports, single-line fixes. Default for any rename or search-and-replace. Tools restricted to file-edit + grep.
  • researcher (Haiku) — read-only codebase exploration: "where is X defined", "what connects to signal Y", "which scenes reference resource Z". Returns a digested summary, not raw grep output. Default for any exploration or audit question before designing a feature.
  • gdscript-refactor (Sonnet) — medium-scope GDScript work that needs reasoning but no architecture decisions: extract a method, thread a parameter through several call sites, add a save/load seam, write a small new autoload.

Keep on Opus only when:

  • the file/files are already loaded in your context from an earlier turn in this conversation (Haiku would re-read from scratch, blowing the savings), OR
  • the task needs MCP Pro editor tools (scenes, runtime, play_scene, execute_game_script), OR
  • the user is iterating tightly with you and a subagent would break the loop, OR
  • the work is genuinely architectural / ambiguous and needs your judgement.

When in doubt, delegate — overhead on a wasted dispatch is cheap; missed savings on Opus-doing-Haiku-work compound across the session.

Report delegation in the final summary. When you finish a task, briefly say which subagents you used and what for — e.g. "Used researcher (Haiku) to locate the JobRunner call sites; did the refactor on Opus." If you handled everything yourself, say "No delegation — handled on Opus." One short line at the end of the response is enough; the user wants to see whether the tiered-model system is actually firing.