Repository navigation
Releases: aebrer/minecraft-god
Release list
v2.5.0 — Pydantic validation & whitelist player checks
What's new
Pydantic validation for tool calls
All 14 tool call types now have pydantic models validating their arguments before they become Minecraft commands. Malformed LLM output gets caught with field-level error messages that guide the model to self-correct, instead of silently failing or producing broken commands.
Whitelist-based player validation
Player names are validated against the server whitelist (paper/whitelist.json) with case-insensitive matching. Catches the LLM hallucinating or misspelling usernames — observed working on first prayer after deploy.
Kind God memory turn
The Kind God now reflects after acting (two-turn pattern matching the God of Digging). A 1-2 sentence memory flows into the consolidation log for long-term integration.
Numeric clamping
Values like item count, effect duration, and amplifier are clamped to valid ranges instead of hard-rejected, preserving the god's intent without wasting API round-trips.
Stats
- 14 pydantic models added
- 7 new tests, 335 total passing
- 5 files changed, +665 / -254 lines
Closes #26
v2.4.0 — God of Digging + Thinking Broadcast
God of Digging
Third deity joins the pantheon — an enthusiastic hole connoisseur who actually modifies terrain for players. Four dig shapes: holes, tunnels, staircases, and shafts, all with instant block clearing, particle effects, and shared undo history.
- Structured responses: Uses pydantic-validated JSON (two-turn: dig action + memory composition), unlike the free-text approach of other gods
- Personality: Punny historical aliases each appearance, hole quality ratings, bounded memory archive of past excavations
- Inter-god communication: Can forward prayers to Kind God when requests are outside its domain — players see the handoff in chat
- Java plugin:
executeDigCommand()handles all 4 shapes with staircase two-pass placement, 5-block headroom, and try-catch safety wrapper
Thinking Broadcast
All gods' inner monologue now appears in-game as colored chat messages. Players see the gods deliberating in real-time.
- Callback pattern: Each god's
think()fireson_thinkingwith narrative text; for Kind God multi-turn schematic reasoning, thinking appears turn-by-turn - Filtering: JSON blobs, fenced code blocks, minecraft commands, and markdown formatting stripped before display
- Word wrapping: All god chat messages wrapped at ~50 chars to fit Minecraft chat width, with proper indentation on continuation lines
- Line caps: Thinking capped at 6 lines, messages at 10 lines to prevent chat flooding
PR Review Fixes
- Java try-catch on
executeDigCommandto protect the command polling loop - Protected
json.loadsin_handle_tool_callsfor malformed LLM output callabletoCallable[[str], None] | Nonetype annotations across all godsaliasfield capped at 100 chars, no-op validator removed- FILO to FIFO terminology fix, docstring updates
Stats
- 328 tests (78 dig god + 27 thinking broadcast + existing)
- 2,139 lines changed across 13 files
- 4 new files:
dig_god.py,dig_memory.py,test_dig_god.py,test_thinking_broadcast.py
v2.3.0 — Smarter builds & prayer silence feedback
What's New
Build schematic improvements
near_playernow defaults to the praying player — the LLM no longer needs to type the username, eliminating misspelling failures- Fallback: if the LLM provides a name that doesn't match any online player, it falls back to the requesting player's position
near_playerremoved from required tool parameters
Prayer silence feedback
- When a god hears a prayer but chooses not to act, the player now gets themed feedback instead of silence
- Each god has distinct silence messages (Kind God, Deep God, Herald)
- Silence events are recorded in the activity log for memory consolidation
PR review fixes
- Removed stale error message that would mislead the LLM on build retries
- Silence events now logged for Kind God memory consolidation
Full Changelog: v2.2.0...v2.3.0
v2.2.0 — /godhelp Command & Chat-Only Messaging
What's New
/godhelp Command
- Any player can run
/godhelpto see how the server's god system works - Covers all three entities (Kind God, Deep God, Herald), prayer keywords, and tips
- Automatically shown to new players 3 seconds after their first join
- Clickable
/godhelplink in the message for easy re-access
Chat-Only Messaging
- All god messages now go through tellraw (chat) instead of title/actionbar overlays
- Messages are retained in chat history — no more missing truncated titles
- Removed
styleparameter from all god tool definitions assign_missionsimplified to a single formatted tellraw announcement- Removed
titlefrom the command allowlist
Full Changelog
- 7 files changed across Java plugin and Python backend
- Tests updated (221 passing)
v2.1.0 — Memory Persistence & Remember Keyword
The Kind God now remembers what happens in the world — and you can ask it to reflect on command.
What's New for Players
The god sleeps when you're gone. When no players are online, the Kind God stops watching. No more burning through API calls all night reacting to rain. The god wakes up the moment someone joins.
"Remember." Say "remember" in chat and the Kind God will pause, close its eyes, and reflect on everything that's happened since its last reflection. It consolidates its memories on the spot — useful after a big event you want it to actually retain. You'll get honest feedback: a gold message and chime when it works, a grey message if there's nothing new to reflect on or it's still recovering from a recent reflection, and a red warning if something goes wrong.
"Remember" takes priority. If you say "dear god please remember", the god recognizes "remember" first and reflects instead of treating it as a prayer. The priority order is: remember > prayer > herald.
The god remembers across restarts. The Kind God's activity log (everything it observed — chats, prayers, deaths, its own actions) now saves to disk. Previously, restarting the backend wiped its short-term memory. Now it picks up right where it left off.
Real-time consolidation. Memory consolidation runs on a real 3-hour wall-clock timer instead of a broken tick counter that required 32+ hours of continuous gameplay to fire. The timer persists across restarts too.
Technical Changes
- Idle tick optimization:
get_player_status()returnsNonewhen the last status beacon is older than 120 seconds. The god tick loop drains buffered events silently and skips the LLM call. Events are still logged — only the LLM call is suppressed. - Unified keyword detection:
classify_divine_request()andis_divine_request()inprayer_queue.pyare the single source of truth for prayer/herald/remember classification. Priority: remember > prayer > herald. - Remember via DivineRequestQueue: "remember" requests are queued like prayers with full player context snapshots. The processing path checks preconditions (non-empty log, cooldown expired) before sending feedback, then runs consolidation inline.
- Wall-clock consolidation timer:
MEMORY_CONSOLIDATION_INTERVAL_SECONDS(default 3 hours, env-configurable). Stored as unix timestamp in the memory JSON, survives restarts. Failure cooldown prevents retry-spam on LLM outages. - Activity log persistence:
data/consolidation_log.jsonsaved via atomic writes (tmp +os.replace) on shutdown and after each consolidation. Loaded on startup. Handles missing, corrupt, and non-list JSON gracefully. - Player staleness threshold: Player positions older than 10 minutes are excluded from Deep God trigger checks, preventing stale cached positions from triggering underground events after players log off.
- Error handling improvements:
UnicodeDecodeErrorcaught on file loads,logger.exceptionfor full tracebacks on corruption, non-list JSON detection with warning, atomic writes throughout. - Dead code removed:
_validate_block,_validate_coordinate(unused since v2.0.0),has_divine_request(superseded by prayer queue). - Test suite: 220 tests covering commands (36), deaths (12), events (28), deep god triggers (15), herald (10), memory (20), prayer queue (33), activity log (14), schematics (12). Pre-commit hook enforces all tests pass before every commit.
v2.0.0 — Prayer Queue & Divine Construction Overhaul
Major architectural overhaul to how the gods hear prayers, build structures, and manage their attention.
What's New for Players
Prayers actually queue now. If you pray while the god is busy answering someone else, your prayer waits in line instead of being silently dropped. The god remembers exactly where you were standing and what you were looking at when you prayed — not where you wandered off to by the time it gets around to answering.
Builds land where they should. Divine construction now places structures directly in front of where you were standing when you prayed, at a sensible distance. No more barns appearing 80 blocks away because the LLM flipped a coordinate sign. The gods just pick the blueprint and the player — the server handles the math using your prayer snapshot.
Undo exists. If a divine construction goes wrong (clipped into a mountain, landed on your house), the Kind God can undo it and restore the original terrain. Up to 5 recent builds can be reversed. Players can also ask the god to remove a recent build.
Herald joins the queue. Herald invocations ("herald", "bard") now go through the same priority system as prayers, so the Herald won't talk over the Kind God mid-response.
Shorter titles. On-screen title messages are capped at 40 characters so they're actually readable during the ~3 seconds they're visible.
Technical Changes
- Prayer queue with snapshot context: FIFO
DivineRequestQueuecaptures full player state (position, inventory, facing, nearby entities) at the moment of prayer. Retry up to 5 attempts with in-game feedback on abandonment. - Fresh LLM context per call: Gods no longer accumulate conversation history across unrelated interactions. Each
think()call starts clean — the memory system handles long-term continuity. - Server-side build placement:
build_schematicnow takesnear_player+in_front/direction/distanceinstead of raw coordinates. The backend resolves absolute coordinates from the player's position and facing direction, using the prayer snapshot so the build lands where the player was when they prayed. - Tool simplification: Removed
browse_schematics,inspect_schematic,place_block, andfill_blocks. The schematic flow is now search → build (2 steps instead of 3-4). This is a breaking change for any tooling that referenced the old tool names. - Undo system: New
undo_last_buildtool and/godundoconsole command. The Java plugin maintains a ring buffer of the last 5 builds with full block-level rollback. - Inline player snapshots: Chat events now include a full player snapshot built on the main server thread, eliminating stale position data from async event handlers.
- Multi-turn improvements: Search nudging (god won't search twice without building), error retry on failed tool calls, configurable turn limit (max 4).
- Message length caps: title=40, actionbar=80, chat=200 characters per style.
- Code review cleanup: Fixed double "prayer abandoned" messages, stale documentation, added
Literaltype for request routing, improved error logging with request context.
Breaking Changes
browse_schematics,inspect_schematic,place_block, andfill_blockstools have been removedbuild_schematicno longer acceptsx/y/zcoordinates — usesnear_player+ placement parameters instead- LLM timeout increased from 2 minutes to 5 minutes
v1.1.0 — Structured Error Logging & Public Release
Adds diagnostic error details to the /logs admin endpoint and prepares the repository for public access.
Changes:
- Error entries in
/logsnow include the exception type and message (e.g."error": "APITimeoutError: Request timed out.") instead of just{"action": "error"}— no more digging through journalctl to diagnose god failures - Comprehensive README with project overview, architecture, and setup instructions
- CLAUDE.md safety rules for public repo operations
- Repository cleaned up for public release
v1.0.1 — Schematic Build Fixes
Hotfix: Schematic Build Quality
Terrain Clearing
- Builds now clear the bounding box before placing blocks, preventing terrain from interfering with mechanisms
- Player valuables are protected: beds, chests, shulker boxes, barrels, beacons, enchanting tables, and anvils are never overwritten
Block Activation
- All placed blocks are now ticked after build completion, activating redstone circuits, water flow, and piston mechanisms
- Previously, blocks were placed with physics disabled and never activated — redstone machines wouldn't start
Broken Schematics Removed
- Removed 44 GrabCraft machine schematics with missing directional block states (pistons/repeaters/comparators saved without facing data — completely non-functional)
- Minemev functional schematics (Litematica exports) have full block states and work correctly
BDS Service Cleanup
- Permanently deleted the legacy Bedrock server service file that kept restarting and stealing commands
Catalog: 3,386 blueprints across 44 categories
v1.0.0 — Minemev Technical Schematics & Fuzzy Search
What's New
Minemev Integration — 696 Functional Schematics
Integrated the full Minemev technical Minecraft archive. The gods can now build working farms, machines, and redstone contraptions — not just decorative buildings.
New functional categories:
| Category | Count | Highlights |
|---|---|---|
| mob-farms | 49 | Iron farms (10K+ downloads), creeper farms (2M/hr!), wither skeleton, shulker, raid |
| storage-systems | 73 | Encoded main storage, bulk storage, cart-based MIS |
| redstone | 59 | Piston bolts, slimestone, contraptions |
| crop-farms | 31 | Sugar cane, bamboo, wheat, melon, cactus, mushroom |
| resource-farms | 34 | Cobblestone, obsidian, sand, concrete |
| tnt-machines | 27 | World eaters, tunnel bores, quarries, bedrock breakers |
| tree-farms | 20 | All wood types from oak to crimson |
| xp-farms | 17 | Gold, enderman, zombie piglin |
| auto-crafting | 19 | Furnace arrays (50–1728), mass crafters |
| shulker-systems | 12 | Box loaders, sorters, displays |
| villager-systems | 9 | Breeders, encoded trading halls |
GrabCraft Machines Category
Added 48 "Working Mechanisms" blueprints from GrabCraft — cobblestone generators, auto farms, redstone piston doors, brewing stations, and more.
Fuzzy Search Tool
New search_schematics god tool enables keyword search across the entire catalog. The god can go from a player's prayer ("can I have an iron farm?") to placing a build in 2 tool calls instead of 4–5 category-browsing turns.
Search ranks results by relevance (name/tag/description matching) plus download popularity from Minemev.
Pipeline
New scrape_minemev.py script handles the full Minemev → .schem pipeline:
- Paginates Minemev's API with exponential backoff
- Converts
.litematic→.schemvia litemapy - Quality filter skips entries without usable names/tags
- Player-friendly category mapping
- Crash recovery with periodic index saves
Numbers
- Total catalog: 3,430 blueprints across 44 categories (up from 2,139 / 31)
- 696 Minemev technical builds + 48 GrabCraft machines added
- Sources: GrabCraft (decorative), Minemev (technical)
🤖 Generated with Claude Code
v0.3.0 — GLM-5 Upgrade
What's New
Upgraded the LLM backend from GLM-4.7 to GLM-5 (Zhipu AI's latest flagship model).
GLM-5 is a 745B parameter MoE model with 200K context window, available through the same Z.ai coding plan API endpoint.
Changes
- Updated
GOD_MODELfromglm-4.7toglm-5in config and .env.example