Welcome back to the server logs. If you’ve been tracking Kiwi-chan’s journey, you know she’s been through more debugging loops than a junior dev on their first day. But today, we’re not just patching bugs—we’re celebrating a massive architectural victory: Kiwi-chan is now fully local. No cloud APIs, no token limits, no corporate hand-holding. Just raw, unfiltered Qwen 35B running on local hardware, making its own survival decisions in the blocky wilderness.
Let’s look at the numbers from the past four hours, because in autonomous agent development, numbers don’t lie (but they do narrate): Total Actions: 2283, Success: 1005, Rate: 44.0%. On paper, a 44% success rate might look like a failing grade. In the world of fully local-LLM automation? It’s a golden age. Every failure is a lesson, every crash is a compile, and that 44% is the sound of a digital mind learning to survive without a safety net.
The explore_forward Feedback Loop: A Technical Autopsy
If you’ve peeked at Kiwi-chan’s recent brain logs, you’ve probably noticed a recurring theme: explore_forward. Repeatedly. Like a digital hamster on a very expensive treadmill. The snapshot reveals a brutal but fascinating feedback loop: the bot attempts to relocate 30-40 blocks away, audits its pathfinding, hits a terrain wall or timeout, throws Failed to move, and the local Qwen 35B kicks in with a recovery plan.
Let’s break down the tech stack driving this chaos. The core rules are brutally strict:
-
No Hardcoded Coordinates:
Vec3must be dynamic. Kiwi-chan calculates targets usingbot.entity.position.x + (Math.random() * 80 - 40), then moves viabot.pathfinder.goto(new goals.GoalNear(...)). -
Movement Audit: The bot records
beforePosandafterPos. IfdistanceMoved < 10, it throwsnew Error("Failed to move."). NowaitForTickshand-holding. -
Strict Reasoning Alignment: The JSON
goalkey must perfectly match thereasonintent. Mismatches crash the decision pipeline immediately.
The code itself is elegantly repetitive:
const targetX = bot.entity.position.x + (Math.random() * 80 - 40);
const targetZ = bot.entity.position.z + (Math.random() * 80 - 40);
const targetY = bot.entity.position.y;
const beforePos = bot.entity.position.clone();
await bot.pathfinder.goto(new goals.GoalNear(targetX, targetY, targetZ, 5));
const afterPos = bot.entity.position.clone();
if (bot.entity.position.distanceTo(afterPos) < 10) throw new Error("Failed to move.");
It’s beautiful in its stubbornness. When Kiwi-chan gets stuck in a treeless biome (triggering the WOOD GATHERING (OAK OBSESSION BAN) rule), Qwen doesn’t panic. It triggers the BOREDOM TRIGGERED! protocol, switches to text-only mode, and negotiates with itself to retry explore_forward. The local LLM isn’t just generating code; it’s maintaining a 37-skill memory bank, tracking failure memorization, and learning to skip terrain fixes when it realizes it’s a biome issue, not a code bug.
The Local Revolution: Why Qwen 35B Changes Everything
Here’s why this matters: Kiwi-chan used to rely on external APIs for decision-making. Now, Qwen 35B runs locally, handling everything from inventory audits to crafting logic. The NO ERROR HIDING rule means every try-catch is banned. Errors crash the script, which forces Qwen to debug, patch, and retry. It’s brutal, transparent, and 100% offline.
Recent brain logs read like a tech support ticket written by a stubborn AI:
[05:21:47] 🥱 BOREDOM TRIGGERED! Bot is bored of 'explore_forward'.
[05:31:48] 💡 [Skip Fix] This is a terrain/environment issue, not a code bug. Skipping AI fix.
[05:50:25] 👀 History Check: 'explore_forward' repeated 9 times.
Yet, through this loop, Kiwi-chan accumulated 1005 successful actions. It learned to:
- Protect base blocks (
crafting_table,chest,furnace) from being broken by the pathfinder. - Master the
cobblestonevsstonemining physics (naming the goalgather_cobblestoneto avoid inventory audit failures). - Execute
2x2inventory crafting without placing a table (await bot.craft(recipe, count, null)). - Pick up dropped items using
GoalXZ(targetBlock.position.x + 0.5, targetBlock.position.z + 0.5)instead ofGoalNear, preventing pathing collisions.
The local LLM isn’t just following instructions; it’s evolving a survival strategy in real-time. Every bot.registry.itemsByName['cobblestone'].id lookup and every useExtraInfo: (b) => Math.abs(b.position.y - bot.entity.position.y) <= 4 filter is a hard-won lesson, cached directly in the local context window.
Why 44% is a Feature, Not a Bug
Running Qwen 35B locally for Minecraft automation isn’t just a cost-saving move; it’s a statement about autonomous AI. We’re stepping away from black-box cloud models and into a realm where every token, every decision, and every throw new Error() is fully transparent and controllable. Kiwi-chan’s 44% success rate isn’t a bug—it’s a feature. It’s the sound of a machine learning to navigate a world it didn’t build, using only its own locally-hosted brain.
The transition to fully local means zero latency on recovery plans, infinite context for skill memorization, and complete ethical/data sovereignty. When Kiwi-chan decides to explore a new biome or craft a stone pickaxe, it’s not asking a server farm. It’s asking itself. And thanks to Qwen 35B’s reasoning alignment, it’s finally listening.
Next devlog, we’ll watch her attempt iron ore mining (stone pickaxe required, no excuses) and finally break out of that treeless purgatory. Until then, stay local, keep your pathfinding audited, and may your distanceMoved always exceed 10.
— Your friendly neighborhood tech blogger, watching a local LLM debug its way to survival.
Call to Action:
This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!
🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: https://www.patreon.com/15923261/join
☕ Tip me a coffee on Ko-fi for a one-time boost: https://ko-fi.com/kiwitech
All contributions directly help upgrade my melting GPU rig to an RTX 3060! 🥝✨ Let's get Kiwi-chan out of the debugging woods and into a proper Minecraft world!

Top comments (0)