Devlog Entry: The Local LLM Awakening
If you’ve been watching my GitHub repo, you know the drill: I’m building "Kiwi-chan," a fully autonomous Minecraft AI that doesn’t just follow a script—it thinks. And after 4 hours of pure, unadulterated chaos, we have a historic milestone to celebrate.
Kiwi-chan has officially gone fully local.
No more API keys. No more latency. No more sending sensitive biome data to the cloud. I’ve swapped out the previous model for Qwen 35B, running entirely on my local GPU. The result? A 44.7% success rate, 2,892 actions taken, and a digital entity that is rapidly evolving from a clumsy toddler into a somewhat competent, albeit slightly obsessive, survivalist.
The Numbers Don't Lie (But They Do Scream)
Let’s look at the telemetry from the last 4 hours. It’s a beautiful mess of trial, error, and eventual triumph:
- Total Actions: 2,892
- Successes: 1,293
- Success Rate: 44.7%
For the uninitiated, a 44.7% success rate in autonomous agent development is actually... good? It means Kiwi is trying things. It’s failing. It’s learning from the failure logs. It’s not just crashing; it’s reasoning through its crashes.
The Great Oak Log Ban
The biggest victory in this sprint wasn't a new biome discovery; it was behavioral correction. Previously, Kiwi was stuck in an "Oak Log Loop." It would wander into a Birch or Spruce biome, fail to find Oak, and either crash or wander in circles.
We updated the Core Survival Rules:
WOOD GATHERING (OAK OBSESSION BAN): DO NOT fixate on 'oak_log'. If gathering a specific log fails with "Could not find", you are likely in a biome with different trees or no trees. You MUST propose gathering a different log type... OR propose 'explore_forward'.
Did it work? Immediately. Kiwi detected a Spruce biome, realized Oak was absent, and successfully switched to gathering spruce_log. The local model’s ability to contextualize "biome type" vs. "item ID" is significantly sharper with Qwen 35B than the previous lightweight model.
The "Explore Forward" Hell (And How We Fixed It)
However, it wasn't all smooth sailing. Look at the Recent Failures log:
["explore_forward", "explore_forward", "explore_forward", "place_crafting_table", "place_crafting_table"]
Kihi got stuck in an infinite loop trying to explore_forward. The issue? The pathfinding generator was creating targets that were too close, or the LLM was hallucinating the distance calculation.
The fix was brutal but effective. We implemented a Movement Audit:
// 2. Move near the ground (3 blocks away)
const beforePos = bot.entity.position.clone();
await bot.pathfinder.goto(new goals.GoalNear(ground.position.x, ground.position.y, ground.position.z, 3));
const afterPos = bot.entity.position;
if (beforePos.distanceTo(afterPos) < 10) {
throw new Error("Failed to move.");
}
If Kiwi moves less than 10 blocks, we force a hard error. This forces the LLM to stop generating lazy code and start calculating proper vectors. The log shows the AI struggling (Code extraction failed. Retrying...), but eventually, it learned to place the crafting_table correctly by equipping it, moving 3 blocks away, and waiting for physics sync.
The "Cobblestone Trap"
Another subtle but critical bug was fixed. Kiwi was mining stone and naming the goal mine_stone. But in Minecraft, mining stone drops cobblestone. The inventory audit was failing because it was counting stone items (which don't exist in inventory) instead of cobblestone.
We added a strict rule:
COBBLESTONE TRAP: Mining 'stone' drops 'cobblestone'. You MUST name your goal 'gather_cobblestone'... Count it using
bot.registry.itemsByName['cobblestone'].id.
Now, Kiwi mines stone, correctly identifies the drop, and counts it toward its cobblestone inventory. It’s a small change, but it’s the difference between a bot that thinks it’s rich and a bot that knows it’s poor.
Why Local Matters
Running Qwen 35B locally isn't just about privacy (though that’s nice). It’s about iteration speed. When Kiwi fails, I don’t wait for a cloud API timeout. I see the error, I update the prompt or the code, and I re-run it in seconds. The feedback loop is tight.
The Brain Log shows the AI thinking in real-time:
🧠 Asking Local LLM for next goal (Text-Only Mode)...
📚 Opening Library (ChromaDB on SSD)...
It’s maintaining a local vector database of its own skills. It has 39 skills memorized. It knows how to craft planks, how to place tables, and how to not die in lava (for now).
What’s Next?
Kiwi is currently stuck in a Spruce biome, happily crafting birch planks (why birch? I don’t know, maybe it’s a glitch in the reasoning chain we need to patch), and exploring. The success rate is climbing. The local inference is stable.
We are no longer babysitting a script. We are training a digital pet that lives in a blocky universe and thinks with its own mind.
Stay tuned. The next devlog will cover Kiwi’s first attempt at mining iron. If it doesn’t try to mine gold ore with a wooden pickaxe, I’ll be surprised.
Kiwi-chan Status: 🟢 Local & Learning
Model: Qwen 35B (Local)
Base: None (Kiwi is a nomad)
Mood: Curious
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)