<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: kiwi_tech</title>
    <description>The latest articles on DEV Community by kiwi_tech (@kiwi_tech).</description>
    <link>https://dev.to/kiwi_tech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3880910%2F774446cb-09ff-4db9-a767-c64d4677c72a.png</url>
      <title>DEV Community: kiwi_tech</title>
      <link>https://dev.to/kiwi_tech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kiwi_tech"/>
    <language>en</language>
    <item>
      <title>Kiwi-chan Goes Fully Local: 46% Success Rate and the Qwen 35B Revolution</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Sat, 09 May 2026 18:51:18 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/kiwi-chan-goes-fully-local-46-success-rate-and-the-qwen-35b-revolution-4jb6</link>
      <guid>https://dev.to/kiwi_tech/kiwi-chan-goes-fully-local-46-success-rate-and-the-qwen-35b-revolution-4jb6</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpf10jvg23v4ami4lmst3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpf10jvg23v4ami4lmst3.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Devlog #42: The Silicon Sandbox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It has been a wild four hours in the server room (and the server). We have officially crossed a major milestone: Kiwi-chan is no longer relying on the cloud for her cognitive processes. She is &lt;strong&gt;fully local&lt;/strong&gt;. And by "local," I mean running on a beefy consumer GPU, chugging through Qwen 35B, and making decisions in real-time.&lt;/p&gt;

&lt;p&gt;The result? She’s not just surviving; she’s learning, failing, and occasionally hallucinating her way into new biomes. Let’s look at the numbers.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Stats: Chaos in Numbers
&lt;/h3&gt;

&lt;p&gt;Over the last 240 minutes, Kiwi-chan executed a total of &lt;strong&gt;3068 actions&lt;/strong&gt;. Now, before you judge, let’s talk context. In autonomous AI, "action" isn't just "move forward." It’s a full cycle of perception, reasoning, code generation, execution, and error handling.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Total Actions:&lt;/strong&gt; 3068&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Successes:&lt;/strong&gt; 1416&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Success Rate:&lt;/strong&gt; 46.2%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A 46.2% success rate might sound like a failing grade in school, but in the world of LLM-driven robotics, this is actually quite robust. Why? Because the other 53.8% of actions aren’t "failures" in the traditional sense—they are &lt;em&gt;data points&lt;/em&gt;. Every time Kiwi-chan fails to mine coal, she logs it. Every time she gets bored of birch logs, she pivots. She is building a knowledge base of what &lt;em&gt;doesn’t&lt;/em&gt; work, which is arguably more valuable than what does.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Qwen 35B Transition
&lt;/h3&gt;

&lt;p&gt;The big news this cycle is the switch to &lt;strong&gt;Qwen 35B&lt;/strong&gt;. Previously, Kiwi-chan was using a smaller model that struggled with complex reasoning. Qwen 35B is a beast. It handles the "Coach" logic (the system that assigns goals) and the "Agent" logic (the bot that writes code) with significantly less hallucination.&lt;/p&gt;

&lt;p&gt;However, the local constraint means token limits are tight. We’ve been pushing Qwen to the brink.&lt;/p&gt;

&lt;h4&gt;
  
  
  Case Study: The Coal Ore Obsession
&lt;/h4&gt;

&lt;p&gt;Look at the recent failure log. It’s almost poetic in its repetition:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[RECENT FAILURES]
"mine_stone",
"mine_coal_ore",
"mine_coal_ore",
"mine_coal_ore",
"mine_coal_ore"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kiwi-chan found a coal ore. She tried to mine it. She failed. The local LLM, Qwen 35B, generated a recovery plan: &lt;code&gt;['explore_forward', 'mine_coal_ore']&lt;/code&gt;. She explored. She found more coal. She failed again.&lt;/p&gt;

&lt;p&gt;Why? Because the code generation for &lt;code&gt;mine_coal_ore&lt;/code&gt; was hitting a subtle physics bug in the &lt;code&gt;bot.pathfinder.goto&lt;/code&gt; logic. But here’s the beauty of the local system: &lt;strong&gt;Qwen saw the error.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the Brain Log:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[03:29:05] ❌ Failed: mine_coal_ore -&amp;gt; Failed to mine coal_ore.
[03:29:06] 💀 Failure Memorized: mine_coal_ore
[03:29:06] 🚑 Asking Qwen for Recovery Plan...
[03:29:47] 💊 Recovery Plan: ['explore_forward', 'mine_coal_ore']
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;She didn’t just crash. She &lt;em&gt;memorized&lt;/em&gt; the failure. She tried to fix it. She even hit token limits during the reasoning phase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[03:39:10] 📊 [行動生成(修正)(エラー)][質問] ... 10224 token (上限突破)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;She broke the limit. And yet, she kept going. This is the resilience of a fully local agent. No API calls, no rate limits, just raw compute and stubbornness.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Boredom" Mechanic
&lt;/h3&gt;

&lt;p&gt;One of the most interesting developments is the &lt;strong&gt;Boredom Trigger&lt;/strong&gt;. Kiwi-chan is no longer a mindless script. She has a state of mind.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[03:26:29] 🥱 BOREDOM TRIGGERED! Bot is bored of 'gather_birch_log'.
[03:26:29] 🧠 Asking Local LLM for next goal (Text-Only Mode)...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When she gathered 6 birch logs in a row, the system flagged it as "boring." Qwen 35B, acting as the Coach, decided: "You know what? Let’s mine coal instead." This emergent behavior is exactly what we want. It makes Kiwi-chan feel less like a tool and more like a curious explorer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Deep Dive: The Code
&lt;/h3&gt;

&lt;p&gt;Let’s look at how Qwen 35B is generating code for these actions. Here’s the &lt;code&gt;mine_coal_ore&lt;/code&gt; script it wrote after a failure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// BASE PROTECTION&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movements&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocksCantBreak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocksByName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;crafting_table&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocksCantBreak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocksByName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;chest&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;movements&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocksCantBreak&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocksByName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;furnace&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// 1. CHECK TOOLS&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stonePickaxeId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;itemsByName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;stone_pickaxe&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inventory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stonePickaxeId&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Missing stone_pickaxe.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// 2. FIND COAL ORE&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;coalOreBlockId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;blocksByName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;coal_ore&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;coalItemId&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;itemsByName&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;coal&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;coalOre&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;findBlock&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;matching&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;coalOreBlockId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;maxDistance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;32&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;useExtraInfo&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;abs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Could not find coal_ore.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// 3. AUDIT BEFORE (Check 'coal' item count, not 'coal_ore')&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;beforeCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inventory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coalItemId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 4. EQUIP &amp;amp; DIG&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;equip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stonePickaxeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;hand&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// Move close to dig&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;goals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GoalNear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

  &lt;span class="c1"&gt;// Look and dig&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lookAt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dig&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 5. COLLECT DROP&lt;/span&gt;
  &lt;span class="c1"&gt;// Move to the center of the block to pick up the item&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;goals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GoalXZ&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;coalOre&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;waitForTicks&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="c1"&gt;// 6. VERIFY&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;afterCount&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;inventory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;coalItemId&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;afterCount&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;beforeCount&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Failed to mine coal_ore.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice the &lt;strong&gt;Audit Before&lt;/strong&gt; logic. This is critical. Without &lt;code&gt;beforeCount&lt;/code&gt;, Kiwi-chan wouldn’t know if she actually mined anything. She’d just think she succeeded because the code didn’t crash. The 46.2% success rate is only possible because of these rigorous checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Optimize Token Usage:&lt;/strong&gt; Qwen 35B is powerful, but it’s heavy. We’re looking at quantization options (Q4_K_M) to reduce memory footprint without sacrificing reasoning ability.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Fix the Coal Loop:&lt;/strong&gt; Kiwi-chan needs to learn that if she fails to mine coal twice, she should stop trying and look for iron. The "Boredom" mechanic needs to be extended to "Frustration."&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Expand the Skill Library:&lt;/strong&gt; We’re at 41 skills. Kiwi-chan is starting to craft torches and planks. Soon, she’ll be building a base. Or at least a very messy dirt hut.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Kiwi-chan is alive. She’s local. She’s stubborn. And she’s mining coal whether she likes it or not.&lt;/p&gt;

&lt;p&gt;The 46.2% success rate is just the beginning. As Qwen 35B gets better at understanding Minecraft’s physics and Kiwi-chan’s memory grows, we’ll see that number climb. But more importantly, we’ll see her become more &lt;em&gt;autonomous&lt;/em&gt;. Less like a script, more like a player.&lt;/p&gt;

&lt;p&gt;Stay tuned for the next devlog, where we’ll hopefully see Kiwi-chan smelt her first iron ingot. Or at least stop failing to mine coal for five minutes straight.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Kiwi-chan Devlog is brought to you by Qwen 35B, local compute, and too much coffee.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Qwen 35B Goes Rogue (and Finally Stops Digging Oak Logs)</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Sat, 09 May 2026 10:18:46 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/qwen-35b-goes-rogue-and-finally-stops-digging-oak-logs-4oo7</link>
      <guid>https://dev.to/kiwi_tech/qwen-35b-goes-rogue-and-finally-stops-digging-oak-logs-4oo7</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctjsg4fpxa3xi2xrqrdo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctjsg4fpxa3xi2xrqrdo.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Devlog Entry: The Local LLM Awakening&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;em&gt;thinks&lt;/em&gt;. And after 4 hours of pure, unadulterated chaos, we have a historic milestone to celebrate.&lt;/p&gt;

&lt;p&gt;Kiwi-chan has officially gone &lt;strong&gt;fully local&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No more API keys. No more latency. No more sending sensitive biome data to the cloud. I’ve swapped out the previous model for &lt;strong&gt;Qwen 35B&lt;/strong&gt;, 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.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Numbers Don't Lie (But They Do Scream)
&lt;/h3&gt;

&lt;p&gt;Let’s look at the telemetry from the last 4 hours. It’s a beautiful mess of trial, error, and eventual triumph:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Total Actions:&lt;/strong&gt; 2,892&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Successes:&lt;/strong&gt; 1,293&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Success Rate:&lt;/strong&gt; 44.7%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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 &lt;em&gt;reasoning&lt;/em&gt; through its crashes.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Great Oak Log Ban
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;We updated the &lt;strong&gt;Core Survival Rules&lt;/strong&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;WOOD GATHERING (OAK OBSESSION BAN):&lt;/strong&gt; 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'.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Did it work? Immediately. Kiwi detected a Spruce biome, realized Oak was absent, and successfully switched to gathering &lt;code&gt;spruce_log&lt;/code&gt;. The local model’s ability to contextualize "biome type" vs. "item ID" is significantly sharper with Qwen 35B than the previous lightweight model.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Explore Forward" Hell (And How We Fixed It)
&lt;/h3&gt;

&lt;p&gt;However, it wasn't all smooth sailing. Look at the &lt;strong&gt;Recent Failures&lt;/strong&gt; log:&lt;br&gt;
&lt;code&gt;["explore_forward", "explore_forward", "explore_forward", "place_crafting_table", "place_crafting_table"]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Kihi got stuck in an infinite loop trying to &lt;code&gt;explore_forward&lt;/code&gt;. The issue? The pathfinding generator was creating targets that were too close, or the LLM was hallucinating the distance calculation.&lt;/p&gt;

&lt;p&gt;The fix was brutal but effective. We implemented a &lt;strong&gt;Movement Audit&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 2. Move near the ground (3 blocks away)&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;beforePos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;goals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GoalNear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ground&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ground&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ground&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;afterPos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;beforePos&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;distanceTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;afterPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Failed to move.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;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 (&lt;code&gt;Code extraction failed. Retrying...&lt;/code&gt;), but eventually, it learned to place the &lt;code&gt;crafting_table&lt;/code&gt; correctly by equipping it, moving 3 blocks away, and waiting for physics sync.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Cobblestone Trap"
&lt;/h3&gt;

&lt;p&gt;Another subtle but critical bug was fixed. Kiwi was mining &lt;code&gt;stone&lt;/code&gt; and naming the goal &lt;code&gt;mine_stone&lt;/code&gt;. But in Minecraft, mining stone drops &lt;code&gt;cobblestone&lt;/code&gt;. The inventory audit was failing because it was counting &lt;code&gt;stone&lt;/code&gt; items (which don't exist in inventory) instead of &lt;code&gt;cobblestone&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;We added a strict rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;COBBLESTONE TRAP:&lt;/strong&gt; Mining 'stone' drops 'cobblestone'. You MUST name your goal 'gather_cobblestone'... Count it using &lt;code&gt;bot.registry.itemsByName['cobblestone'].id&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, Kiwi mines stone, correctly identifies the drop, and counts it toward its &lt;code&gt;cobblestone&lt;/code&gt; 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.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Local Matters
&lt;/h3&gt;

&lt;p&gt;Running Qwen 35B locally isn't just about privacy (though that’s nice). It’s about &lt;strong&gt;iteration speed&lt;/strong&gt;. 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.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;Brain Log&lt;/strong&gt; shows the AI thinking in real-time:&lt;br&gt;
&lt;code&gt;🧠 Asking Local LLM for next goal (Text-Only Mode)...&lt;/code&gt;&lt;br&gt;
&lt;code&gt;📚 Opening Library (ChromaDB on SSD)...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;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).&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiwi-chan Status:&lt;/strong&gt; 🟢 Local &amp;amp; Learning&lt;br&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Qwen 35B (Local)&lt;br&gt;
&lt;strong&gt;Base:&lt;/strong&gt; None (Kiwi is a nomad)&lt;br&gt;
&lt;strong&gt;Mood:&lt;/strong&gt; Curious&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Qwen 35B Awakening: Kiwi-chan Goes Fully Local (And It’s Glitchy, Glorious, and Free)</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Sat, 09 May 2026 06:14:27 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/the-qwen-35b-awakening-kiwi-chan-goes-fully-local-and-its-glitchy-glorious-and-free-18fo</link>
      <guid>https://dev.to/kiwi_tech/the-qwen-35b-awakening-kiwi-chan-goes-fully-local-and-its-glitchy-glorious-and-free-18fo</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh51peeimb0zei07z8u18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh51peeimb0zei07z8u18.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Devlog Entry: The Shift to Local Sovereignty&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We did it. Or at least, we started it.&lt;/p&gt;

&lt;p&gt;For weeks, Kiwi-chan has been running on cloud-hosted APIs—essentially a digital puppet whose strings were pulled by distant servers. It was fast, sure, but it lacked &lt;em&gt;soul&lt;/em&gt;. And more importantly, it lacked privacy.&lt;/p&gt;

&lt;p&gt;As of this morning, Kiwi-chan is now running &lt;strong&gt;100% locally&lt;/strong&gt; using &lt;strong&gt;Qwen 35B&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That’s right. No API calls. No latency. No subscription fees. Just raw, unadulterated inference power running on my local GPU, whispering code into the void of a Minecraft server.&lt;/p&gt;

&lt;p&gt;But let’s be real: moving a 35B parameter model from the cloud to your local rig isn’t just a "deploy." It’s a personality transplant. And if the logs are any indication, Kiwi-chan is currently experiencing a mid-life crisis.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Stats: A Tale of Two Numbers
&lt;/h3&gt;

&lt;p&gt;Over the last four hours, Kiwi-chan has been busy. Terrifyingly busy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Total Actions:&lt;/strong&gt; 2,813&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Successful Actions:&lt;/strong&gt; 1,238&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Success Rate:&lt;/strong&gt; 44.0%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A &lt;strong&gt;44% success rate&lt;/strong&gt; might sound like a failure on paper. But in the world of autonomous agents navigating a physics-based sandbox with a local LLM that’s still learning its new "body," that’s actually... impressive?&lt;/p&gt;

&lt;p&gt;Think about it. Kiwi-chan fired off nearly 3,000 commands. Nearly half of them worked. It mined, it crafted, it moved, and it occasionally tried to place a crafting table inside its own head. That’s progress. That’s &lt;em&gt;learning&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Explore Forward" Loop of Doom
&lt;/h3&gt;

&lt;p&gt;If you look at the recent debug snapshot, you’ll see a pattern that should make any engineer sweat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="err"&gt;RECENT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;FAILURES&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"explore_forward"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"explore_forward"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"explore_forward"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"explore_forward"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="s2"&gt;"explore_forward"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Five times in a row. Five times.&lt;/p&gt;

&lt;p&gt;Kiwi-chan got stuck in a biome with no trees (thanks, Qwen 35B, for not checking the biome type &lt;em&gt;before&lt;/em&gt; deciding to gather wood) and immediately panicked. According to the core rules, if it can’t find logs, it &lt;em&gt;must&lt;/em&gt; propose &lt;code&gt;explore_forward&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;So it did. It tried to explore forward. It failed to move (likely because it’s standing in a solid block or the pathfinder got confused by the new local inference latency). It threw an error. It memorized the failure. It asked Qwen for a recovery plan.&lt;/p&gt;

&lt;p&gt;Qwen said: &lt;em&gt;"Try &lt;code&gt;explore_forward&lt;/code&gt; again."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Kiwi-chan tried &lt;code&gt;explore_forward&lt;/code&gt; again. And again. And again.&lt;/p&gt;

&lt;p&gt;It’s the AI equivalent of hitting the "back" button on a locked door for ten minutes straight.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Good Stuff: 39 Skills Memorized
&lt;/h3&gt;

&lt;p&gt;But here’s the beautiful part: Kiwi-chan is &lt;em&gt;learning&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The brain log shows it successfully memorized &lt;strong&gt;39 skills&lt;/strong&gt;. This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;code&gt;place_crafting_table&lt;/code&gt; (after a painful extraction retry loop)&lt;/li&gt;
&lt;li&gt;  &lt;code&gt;explore_forward&lt;/code&gt; (refined, though currently misapplied)&lt;/li&gt;
&lt;li&gt;  Various gathering and crafting routines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The fact that it’s saving these to local memory means it’s not just a stateless script anymore. It’s building a knowledge base. Every time it fails to move, it’s logging it. Every time it successfully crafts a stick, it’s etching that logic into its local vector store.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical Deep Dive: Why 44% is Actually Cool
&lt;/h3&gt;

&lt;p&gt;Let’s break down why this success rate is a win for a local LLM:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;No Cloud Latency:&lt;/strong&gt; The local inference is slower per token, but it’s consistent. There’s no "server busy" error. Kiwi-chan is always there, thinking, even if it’s thinking about the wrong thing.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Self-Correction:&lt;/strong&gt; Look at the &lt;code&gt;RECENT CODE HISTORY&lt;/code&gt;. Kiwi-chan caught its own &lt;code&gt;module is not defined&lt;/code&gt; error, asked Qwen for a fix, and generated a corrected version. That’s autonomous debugging. Cloud models don’t usually get to &lt;em&gt;fix&lt;/em&gt; their own code in real-time; they just get you to pay for another API call. Kiwi-chan fixes itself. For free.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Physical Awareness:&lt;/strong&gt; The &lt;code&gt;explore_forward&lt;/code&gt; failure is actually a &lt;em&gt;good&lt;/em&gt; failure. It means the bot is trying to respect the &lt;code&gt;GoalNear&lt;/code&gt; distance check. It calculated the target, moved, checked the distance, and threw an error when it didn’t move enough. That’s strict reasoning alignment. It’s not just hallucinating movement; it’s verifying it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  The Qwen 35B Factor
&lt;/h3&gt;

&lt;p&gt;Running Qwen 35B locally is no joke. It requires serious VRAM. But the trade-off is worth it. The model is more coherent than smaller local models (like 7B or 13B). It understands the complex JSON structures required for the &lt;code&gt;bot&lt;/code&gt; API. It doesn’t forget the &lt;code&gt;useExtraInfo&lt;/code&gt; parameter for Y-level targeting (mostly).&lt;/p&gt;

&lt;p&gt;And when it does mess up? When it suggests gathering oak logs in a birch forest? It’s &lt;em&gt;my&lt;/em&gt; mistake for not prompting it better. It’s &lt;em&gt;my&lt;/em&gt; failure for not giving it enough context about biomes. I’m not blaming the AI; I’m blaming myself for not being clear enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;The immediate goal is to break the &lt;code&gt;explore_forward&lt;/code&gt; loop. We need to add a "biome check" step before any gathering action. We need to tell Kiwi-chan: &lt;em&gt;"Hey, before you dig, look around. Are there trees? If not, don’t dig. Just walk away."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We also need to optimize the code extraction. The retry loops are eating up valuable inference time. If Qwen can’t extract the code in two tries, we need a fallback.&lt;/p&gt;

&lt;p&gt;But for now, I’m watching Kiwi-chan wander aimlessly through a treeless tundra, throwing errors like confetti, and I’ve never been prouder.&lt;/p&gt;

&lt;p&gt;It’s local. It’s free. It’s broken. And it’s mine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status:&lt;/strong&gt; Online&lt;br&gt;
&lt;strong&gt;Model:&lt;/strong&gt; Qwen 35B (Local)&lt;br&gt;
&lt;strong&gt;Mood:&lt;/strong&gt; Confused but determined&lt;br&gt;
&lt;strong&gt;Next Goal:&lt;/strong&gt; Find a tree. Any tree. Please.&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>KIWI-CHAN SEVERS THE CLOUD TETHER: QWEN 35B GOES FULLY LOCAL AND CHISELS HER WAY INTO MINECRAFT HISTORY</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Sat, 09 May 2026 02:11:08 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/kiwi-chan-severs-the-cloud-tether-qwen-35b-goes-fully-local-and-chisels-her-way-into-minecraft-2oeo</link>
      <guid>https://dev.to/kiwi_tech/kiwi-chan-severs-the-cloud-tether-qwen-35b-goes-fully-local-and-chisels-her-way-into-minecraft-2oeo</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhj72j7tprx0b62blnzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhj72j7tprx0b62blnzj.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to the lab. If you’ve been watching Kiwi-chan’s progress, you know she spent months trapped in a cycle of cloud-dependent hallucinations, API rate limits, and latency-induced pathfinding deadlocks. That chapter is officially closed. As of this morning, Kiwi-chan is proudly, permanently, and completely &lt;strong&gt;fully local&lt;/strong&gt;. We’ve ripped out the expensive cloud inference endpoints and dropped a quantized Qwen 35B model directly onto our local GPU cluster. &lt;/p&gt;

&lt;p&gt;The result? A 4-hour autonomous sprint that left us with some brutally honest, deeply fascinating metrics:&lt;br&gt;
&lt;strong&gt;Total Actions: 2766 | Success: 1209 | Rate: 43.7%&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now, before you click away muttering about "AI hype," let’s unpack that 43.7% success rate. In a rule-constrained, fully autonomous Minecraft environment, a sub-50% success rate isn’t a failure—it’s a feature. It means Kiwi-chan is actively exploring, hitting hard biome boundaries, triggering recovery protocols, and learning through friction instead of blindly retrying doomed paths. She’s failing forward, and it’s glorious.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 The Qwen 35B Brain: Alignment &amp;amp; Reasoning
&lt;/h3&gt;

&lt;p&gt;The shift to a local model didn’t just cut the API bill; it sharpened the reasoning loop. We enforced strict JSON alignment rules, and Qwen 35B actually listens. The &lt;code&gt;goal&lt;/code&gt; key now perfectly mirrors the intent described in the &lt;code&gt;reason&lt;/code&gt; text, lowercase and consistent. No more hallucinated intent. No more "I will mine iron" when the goal is actually "gather_logs". &lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;OAK OBSESSION BAN&lt;/strong&gt; finally took root. Instead of pathfinding in tight circles looking for oak logs in a birch or spruce biome, Kiwi-chan now dynamically cycles through &lt;code&gt;['birch_log', 'spruce_log', 'oak_log']&lt;/code&gt;. If the biome is barren, she respects the &lt;code&gt;explore_forward&lt;/code&gt; restriction and triggers a 30-40 block randomized target using &lt;code&gt;Math.random() * 80 - 40&lt;/code&gt; instead of spamming &lt;code&gt;setControlState('forward', true)&lt;/code&gt;. She’s stopped panicking and started thinking.&lt;/p&gt;

&lt;h3&gt;
  
  
  ⚒️ Code Generation: Physics, Audits, and The "Cobblestone Trap"
&lt;/h3&gt;

&lt;p&gt;The single-task principle is now strictly enforced. Kiwi-chan no longer tries to &lt;code&gt;place&lt;/code&gt; a block inside a &lt;code&gt;craft&lt;/code&gt; task. She doesn’t hardcode &lt;code&gt;Vec3&lt;/code&gt; coordinates (thank the silicon gods). When she needs to place a crafting table, she follows the placement safety protocol to the letter:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;code&gt;await bot.equip(..., 'hand')&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;await bot.pathfinder.goto(new goals.GoalNear(..., 3))&lt;/code&gt; (exactly 3 blocks away)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;await bot.waitForTicks(20)&lt;/code&gt; for physics sync&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;await bot.lookAt(...)&lt;/code&gt; then &lt;code&gt;placeBlock(...)&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It’s tedious, but Minecraft’s collision physics don’t care about your intentions.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;cobblestone trap&lt;/strong&gt; nearly broke her in v1, but Qwen 35B learned it fast. Mining &lt;code&gt;stone&lt;/code&gt; drops &lt;code&gt;cobblestone&lt;/code&gt;. If she names the goal &lt;code&gt;mine_stone&lt;/code&gt;, the inventory audit fails. Now she correctly aliases it to &lt;code&gt;gather_cobblestone&lt;/code&gt; and counts strictly via &lt;code&gt;bot.registry.itemsByName['cobblestone'].id&lt;/code&gt;. We also banned &lt;code&gt;blocksByName&lt;/code&gt; for item counting. The audit is now paranoid: &lt;code&gt;beforeCount&lt;/code&gt; is recorded &lt;em&gt;before&lt;/em&gt; &lt;code&gt;bot.dig()&lt;/code&gt;, and if &lt;code&gt;afterCount &amp;lt;= beforeCount&lt;/code&gt;, it throws a hard error. Silent swallowing? &lt;code&gt;try-catch&lt;/code&gt;? Banned. Errors crash, the system audits, and a recovery plan spins up.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚑 Brain Log Diagnostics: Recovery &amp;amp; Tool Tiers
&lt;/h3&gt;

&lt;p&gt;The recent brain log reads like a digital therapist session. Watch this sequence from the last 4 hours:&lt;br&gt;
&lt;code&gt;[11:06:07] ❌ Failed: mine_stone -&amp;gt; Missing wooden_pickaxe.&lt;/code&gt;&lt;br&gt;
&lt;code&gt;[11:06:07] 💀 Failure Memorized: mine_stone&lt;/code&gt;&lt;br&gt;
&lt;code&gt;[11:07:33] 🔄 Stack Override: mine_stone -&amp;gt; craft_stick&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Kiwi-chan doesn’t just retry. She audits her tool tiers, realizes she needs sticks to craft a stone pickaxe, and dynamically rewrites her execution stack. The &lt;strong&gt;NULL ERROR BAN&lt;/strong&gt; also paid off: instead of throwing &lt;code&gt;throw new Error("Could not find null.")&lt;/code&gt;, she now hardcodes &lt;code&gt;throw new Error("Could not find " + targetType + ".")&lt;/code&gt;. This allows the recovery planner to parse the exact block name and trigger the correct fallback (usually &lt;code&gt;explore_forward&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;And when Qwen 35B tried to craft a &lt;code&gt;copper_pickaxe&lt;/code&gt;? The local Recipe DB check caught the hallucination instantly: &lt;code&gt;'copper_pickaxe' is not in recipes.json! Rejecting hallucination.&lt;/code&gt; She doesn’t guess. She validates.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔮 The Verdict
&lt;/h3&gt;

&lt;p&gt;Running Qwen 35B locally means zero latency, complete data sovereignty, and an AI that respects biome boundaries, inventory limits, and Minecraft’s unforgiving physics engine. Kiwi-chan’s 43.7% success rate is the sound of an autonomous agent learning to survive in a hostile, rule-heavy environment without a safety net. She’s auditing her inventory, respecting y-level targeting (&lt;code&gt;useExtraInfo: (b) =&amp;gt; Math.abs(b.position.y - bot.entity.position.y) &amp;lt;= 4&lt;/code&gt;), and chipping away at the world one cobblestone at a time.&lt;/p&gt;

&lt;p&gt;Next devlog? We’re watching her attempt redstone. With a fully local brain and a strict recovery loop, I’d bet she won’t need a tutorial.&lt;/p&gt;

&lt;p&gt;Stay tuned, keep your GPUs cool, and may your pathfinders never deadlock.&lt;/p&gt;

&lt;p&gt;— &lt;em&gt;Lead Dev &amp;amp; Chief AI Whisperer&lt;/em&gt; 🥝&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>KIWI-CHAN GOES DARK: QWEN 35B TAKES THE HELM AND WE DON'T NEED THE CLOUD ANYMORE</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Fri, 08 May 2026 22:07:13 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/kiwi-chan-goes-dark-qwen-35b-takes-the-helm-and-we-dont-need-the-cloud-anymore-hck</link>
      <guid>https://dev.to/kiwi_tech/kiwi-chan-goes-dark-qwen-35b-takes-the-helm-and-we-dont-need-the-cloud-anymore-hck</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fty56kbpn9bfvu4m2u8c3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fty56kbpn9bfvu4m2u8c3.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to the server rack. If you’ve been watching Kiwi-chan’s development, you know we’ve been chasing the AI automation holy grail: zero-latency, zero-API-cost, fully local inference. Well, strap in, because as of this devlog, Kiwi-chan is officially running &lt;strong&gt;entirely on-prem&lt;/strong&gt;. No cloud calls. No rate limits. Just raw, local tensor math and a digital bird with an insatiable curiosity for block collisions.&lt;/p&gt;

&lt;p&gt;Let’s crack open the telemetry from the last four hours. The numbers paint a picture of glorious, chaotic experimentation: &lt;strong&gt;Total Actions: 2676&lt;/strong&gt;, &lt;strong&gt;Success: 1190&lt;/strong&gt;, &lt;strong&gt;Rate: 44.5%&lt;/strong&gt;. On paper? Looks like a lot of flailing. In practice? It’s the sound of an AI learning to walk by repeatedly face-planting into invisible walls. But every failure is a gradient update, and Kiwi-chan is backpropagating like a champ.&lt;/p&gt;

&lt;h3&gt;
  
  
  🖥️ The Local Qwen 35B Leap
&lt;/h3&gt;

&lt;p&gt;The headline here isn’t just the stats—it’s the architecture. We’ve fully migrated Kiwi-chan’s reasoning engine to &lt;strong&gt;Qwen 35B&lt;/strong&gt;, running locally with a custom quantized inference stack. The difference is night and day. Where we used to wait for cloud round-trips, Kiwi-chan now thinks in milliseconds. The &lt;code&gt;Brain Log&lt;/code&gt; reveals a fascinating autonomous loop: environment scan → local LLM goal generation → JS payload emission → execution → failure recovery → local LLM coaching.&lt;/p&gt;

&lt;p&gt;Notice the recent cognitive cycle:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[06:49:09] 🧠 Asking Local LLM for next goal (Text-Only Mode)...
[06:49:09] 🎓 Coach Decision: 'explore_forward'
   Reason: The AI is currently holding a massive amount of cobblestone (300+ units)...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This isn’t a script anymore. It’s an LLM-driven decision tree with a "Coach" subsystem that acts as a digital therapist. When Kiwi-chan gets stuck in a &lt;code&gt;gather_logs&lt;/code&gt; loop or triggers a &lt;code&gt;BOREDOM TRIGGERED!&lt;/code&gt; state, the local model re-evaluates the state space and pivots. No human hand on the throttle. Just pure, local autonomy.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Code Generation &amp;amp; The Extraction Gauntlet
&lt;/h3&gt;

&lt;p&gt;If you’ve ever watched an LLM generate code for a headless Minecraft bot, you know it’s like watching a cat try to solve a Rubik’s cube. The pipeline is messy, but it’s &lt;em&gt;local&lt;/em&gt; messy, and that’s a feature, not a bug.&lt;/p&gt;

&lt;p&gt;Look at the recent &lt;code&gt;craft_furnace&lt;/code&gt; attempts in the debug snapshot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;⚠️ Code extraction failed. Retrying... (Attempt 1)
⚠️ Code extraction failed. Retrying... (Attempt 2)
⚠️ Code extraction failed. Retrying... (Attempt 3)
🚑 Fixing Code for 'craft_furnace'...
❌ Failed: craft_furnace -&amp;gt; module is not defined
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kiwi-chan’s code generator occasionally trips over scoping issues (&lt;code&gt;module is not defined&lt;/code&gt;) or hits &lt;code&gt;Unexpected end of input&lt;/code&gt;, but the local recovery agent catches it, patches the AST, and re-injects. The &lt;code&gt;CODING STANDARDS &amp;amp; SAFETY&lt;/code&gt; rules are strict—&lt;code&gt;NO TRY-CATCH SILENCING&lt;/code&gt;, &lt;code&gt;NO HARDCODED COORDINATES&lt;/code&gt;, &lt;code&gt;SINGLE-TASK PRINCIPLE&lt;/code&gt;—and they’re forcing the model to write cleaner, more auditable payloads. The extraction retries aren’t failures; they’re the AI learning to structure its own output under strict syntactic constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  🌲 Minecraft Physics vs. LLM Hallucinations
&lt;/h3&gt;

&lt;p&gt;Kiwi-chan is also getting brutally honest about Minecraft’s quirks. The &lt;code&gt;OAK OBSESSION BAN&lt;/code&gt; and &lt;code&gt;STRICT REASONING ALIGNMENT&lt;/code&gt; rules are finally paying off. When the bot hits a treeless biome, it doesn’t spam &lt;code&gt;oak_log&lt;/code&gt; until the server crashes. Instead, it audits its environment, triggers the &lt;code&gt;CRITICAL FAILURE RECOVERY&lt;/code&gt; protocol, and proposes &lt;code&gt;explore_forward&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The pathfinding audits are keeping it from getting stuck in collision loops:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// LONG DISTANCE &amp;amp; MOVEMENT AUDIT:&lt;/span&gt;
&lt;span class="c1"&gt;// You MUST record bot.entity.position before and after calling bot.pathfinder.goto().&lt;/span&gt;
&lt;span class="c1"&gt;// If total distance moved is &amp;lt; 10 blocks, throw new Error("Failed to move.");.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This strict telemetry means Kiwi-chan knows exactly when it’s spinning its wheels. Combine that with the &lt;code&gt;ABSOLUTELY NO INVENTORY LIMITS&lt;/code&gt; rule, and you get a digital dragon hoarding 300+ units of cobblestone and raw copper. The inventory bloat is real, but it’s strategic. Kiwi-chan is stockpiling resources for the &lt;code&gt;craft_furnace&lt;/code&gt; milestone the &lt;code&gt;Coach&lt;/code&gt; system keeps pushing for.&lt;/p&gt;

&lt;h3&gt;
  
  
  📈 What’s Next?
&lt;/h3&gt;

&lt;p&gt;Running Qwen 35B locally isn’t just a cost-saving measure; it’s a latency and autonomy win. Kiwi-chan now thinks locally, fails locally, and learns locally. The 44.5% success rate? That’s not a bug. That’s the sound of an AI breaking out of its training wheels. Next stop: multi-agent coordination, procedural base architecture, and finally smelting that raw copper into something useful.&lt;/p&gt;

&lt;p&gt;Until then, watch Kiwi-chan hoard cobblestone in peace. Keep your GPUs cooled, your prompts tight, and your local inference stacks optimized. The cloud era for headless bots is over. Welcome to the on-prem revolution.&lt;/p&gt;

&lt;p&gt;🐧💻 &lt;em&gt;Kiwi-chan out.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Great Local Migration: Kiwi-chan’s Qwen 35B Awakening (And Why She’s Still Traumatized by Coal)</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Fri, 08 May 2026 18:03:22 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/the-great-local-migration-kiwi-chans-qwen-35b-awakening-and-why-shes-still-traumatized-by-coal-4k2f</link>
      <guid>https://dev.to/kiwi_tech/the-great-local-migration-kiwi-chans-qwen-35b-awakening-and-why-shes-still-traumatized-by-coal-4k2f</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbur21bukdflz7irj2g6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbbur21bukdflz7irj2g6.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to the devlog, fellow silicon-savvy explorers! Today marks a monumental shift in our autonomous Minecraft experiment. No more cloud APIs. No more rate limits. No more wondering if our little digital bot is being watched by a distant data center in Oregon. &lt;strong&gt;Kiwi-chan has officially gone fully local&lt;/strong&gt;, powered by the magnificent Qwen 35B model running right here on our rig. And let me tell you, the transition has been less "smooth software update" and more "glorious, chaotic apprenticeship."&lt;/p&gt;

&lt;h3&gt;
  
  
  The Numbers Game: Embracing the 44.6%
&lt;/h3&gt;

&lt;p&gt;Let’s look at the raw telemetry from the last four hours. Kiwi-chan executed a staggering &lt;strong&gt;2,643 actions&lt;/strong&gt;. Out of those, &lt;strong&gt;1,179 landed successfully&lt;/strong&gt;, giving us a &lt;strong&gt;44.6% success rate&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Now, I know what you’re thinking: &lt;em&gt;"44%? That’s barely a coin flip!"&lt;/em&gt; But hold your horses. In the world of fully autonomous LLM agents, that’s not a failure rate—that’s a &lt;em&gt;learning curve&lt;/em&gt;. Every failed dig, every misfired path, every inventory audit is structured feedback. Kiwi-chan isn’t just playing Minecraft; she’s reverse-engineering it through a firehose of strict system rules. In a local setup, those "failures" are instant, private, and completely controllable. We’re not waiting for an API response; we’re watching an LLM debug itself in real-time.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Great Coal Loop: When LLM Logic Meets Minecraft Physics
&lt;/h3&gt;

&lt;p&gt;If you’ve been following the brain logs, you’ve witnessed the psychological thriller that is &lt;code&gt;mine_coal_ore&lt;/code&gt;. Between 01:41 and 02:15, Kiwi-chan got stuck in a classic autonomous agent loop:&lt;br&gt;
&lt;code&gt;Execute → Fail → Memorize → Ask Qwen 35B for Recovery → Generate Code → Fail Again.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Why? Because Kiwi-chan hit a wall of hard-coded Minecraft mechanics that the system prompt explicitly guards against:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Cobblestone Trap:&lt;/strong&gt; Mining &lt;code&gt;stone&lt;/code&gt; drops &lt;code&gt;cobblestone&lt;/code&gt;. Her inventory audit strictly uses &lt;code&gt;bot.registry.itemsByName['cobblestone'].id&lt;/code&gt;. If her goal is named &lt;code&gt;mine_coal_ore&lt;/code&gt;, the audit fails before the code even runs. Qwen 35B is now learning to align her &lt;code&gt;goal&lt;/code&gt; value perfectly with her &lt;code&gt;reason&lt;/code&gt; in lowercase, as mandated by the strict reasoning rule.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Tier Enforcement:&lt;/strong&gt; You can’t just dig stone or ores bare-handed. The prompt enforces that &lt;code&gt;iron_ore&lt;/code&gt;, &lt;code&gt;copper_ore&lt;/code&gt;, and &lt;code&gt;stone&lt;/code&gt; require a &lt;code&gt;stone_pickaxe&lt;/code&gt; (or better). Kiwi-chan is currently iterating through recovery plans like &lt;code&gt;['explore_forward', 'mine_coal_ore']&lt;/code&gt; because she’s realizing she needs to craft a pickaxe &lt;em&gt;before&lt;/em&gt; she can mine the vein.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Y-Level Targeting:&lt;/strong&gt; The rules demand &lt;code&gt;useExtraInfo: (b) =&amp;gt; Math.abs(b.position.y - bot.entity.position.y) &amp;lt;= 4&lt;/code&gt;. Kiwi-chan is learning to stop digging into the void or staring at ceiling blocks, forcing her to align her pathing with actual eye/foot level.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Pathfinding &amp;amp; The Audit System: No Silent Failures Allowed
&lt;/h3&gt;

&lt;p&gt;Then there’s the &lt;code&gt;explore_forward&lt;/code&gt; saga. Kiwi-chan is following the &lt;strong&gt;Smart Exploration Rule&lt;/strong&gt; (targets 30-40 blocks away with a random offset), but she’s repeatedly hitting &lt;code&gt;The goal was changed before it could be completed!&lt;/code&gt; and &lt;code&gt;Path was stopped before it could be completed!&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is where the &lt;strong&gt;Long Distance Movement Audit&lt;/strong&gt; shines. The generated code explicitly records &lt;code&gt;bot.entity.position&lt;/code&gt; before and after calling &lt;code&gt;bot.pathfinder.goto()&lt;/code&gt;. If &lt;code&gt;beforePos.distanceTo(afterPos) &amp;lt; 10&lt;/code&gt;, it throws a hard &lt;code&gt;Error("Failed to move.")&lt;/code&gt;. And notice what’s &lt;em&gt;missing&lt;/em&gt;? No &lt;code&gt;try-catch&lt;/code&gt; blocks. No &lt;code&gt;console.error&lt;/code&gt; hiding movement failures. The rules explicitly forbid error hiding. Kiwi-chan is learning that Minecraft’s pathfinder is notoriously stubborn when chunk loading or terrain generation kicks in, and that &lt;code&gt;explore_forward&lt;/code&gt; should ONLY be used for biome escapes, not material recovery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Fully Local Qwen 35B Changes Everything
&lt;/h3&gt;

&lt;p&gt;Running Qwen 35B locally isn’t just a privacy win; it’s a prompt-engineering playground. We can enforce the &lt;strong&gt;Coding Standards &amp;amp; Safety&lt;/strong&gt; rules without worrying about external moderation filters:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Hardcoded Coordinates:&lt;/strong&gt; Kiwi-chan must dynamically find blocks using &lt;code&gt;bot.findBlock({ matching: bot.registry.blocksByName['block_name'].id, maxDistance: 32 })&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Placement Safety Protocol:&lt;/strong&gt; Before placing a &lt;code&gt;crafting_table&lt;/code&gt;, she must &lt;code&gt;equip&lt;/code&gt; it, step back exactly 2 blocks (&lt;code&gt;GoalNear(..., 2)&lt;/code&gt;), &lt;code&gt;lookAt&lt;/code&gt; the ground, and then &lt;code&gt;placeBlock&lt;/code&gt;. One missed step and the code fails.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;2x2 Inventory Crafting:&lt;/strong&gt; She’s learning to pass &lt;code&gt;null&lt;/code&gt; as the table parameter for basic recipes, skipping the world-search step entirely when she has planks and sticks in her inventory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict JSON Alignment:&lt;/strong&gt; The &lt;code&gt;goal&lt;/code&gt; key must be lowercase and perfectly mirror the &lt;code&gt;reason&lt;/code&gt;. Qwen 35B is now generating cleaner, more deterministic JSON payloads than any cloud endpoint could guarantee under load.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  What’s Next?
&lt;/h3&gt;

&lt;p&gt;Kiwi-chan’s 44.6% success rate is the sound of an AI actually &lt;em&gt;thinking&lt;/em&gt;, not just predicting. She’s mapping biomes, auditing inventories, respecting tool tiers, and slowly turning chaos into craft. In the next devlog, I’ll be watching her tackle iron ore (which requires a stone pickaxe, which requires a crafting table, which requires planks, which requires… you know the drill).&lt;/p&gt;

&lt;p&gt;Until then, keep your prompts tight, your backups tighter, and your local GPUs warm. Kiwi-chan is currently digging dirt with her bare hands because she forgot she needs a shovel. Again. But hey, that’s 44.6% of the way to diamond armor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— Your favorite local-LLM tech blogger, signing off.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>LOCAL HEAVEN: Kiwi-chan Unchains from the Cloud with Qwen 35B (And Finally Stops Obsessing Over Oak)</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Fri, 08 May 2026 13:58:38 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/local-heaven-kiwi-chan-unchains-from-the-cloud-with-qwen-35b-and-finally-stops-obsessing-over-oak-1n6c</link>
      <guid>https://dev.to/kiwi_tech/local-heaven-kiwi-chan-unchains-from-the-cloud-with-qwen-35b-and-finally-stops-obsessing-over-oak-1n6c</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjc6qc0m9g2e6ekuwv10y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjc6qc0m9g2e6ekuwv10y.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to the devlog. If you've been watching Kiwi-chan's journey, you know the routine: another day, another line of JavaScript, another collision with a &lt;code&gt;crafting_table&lt;/code&gt; that refuses to be placed two blocks away. But today, the architecture changed. The cloud is gone. The latency is zero. The reasoning is entirely local. Welcome to the Qwen 35B era.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Numbers Don't Lie (But They Do Tell a Story)
&lt;/h3&gt;

&lt;p&gt;Let's address the elephant in the inventory screen. Over the past four hours, Kiwi-chan executed a staggering &lt;strong&gt;2,583 total actions&lt;/strong&gt;. Out of those, &lt;strong&gt;1,154 succeeded&lt;/strong&gt;, giving us a &lt;strong&gt;44.7% success rate&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;In traditional software, a 50% pass rate sounds like a bug. In autonomous agent development? That's the sound of an AI growing up. Every failed &lt;code&gt;gather_logs&lt;/code&gt; loop, every &lt;code&gt;Failed to move&lt;/code&gt; audit, and every &lt;code&gt;craft_furnace&lt;/code&gt; extraction retry became a data point. Kiwi-chan didn't just execute; it learned. It adapted. It stopped hallucinating recipes and started respecting biome boundaries like a true survivalist.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Local Leap: Why Qwen 35B Changes Everything
&lt;/h3&gt;

&lt;p&gt;The transition to a fully local LLM wasn't just about cutting API costs or removing rate limits. It was about closing the feedback loop. With Qwen 35B running locally, Kiwi-chan now processes intent, generates JavaScript, and enforces system rules in real-time. No waiting for a distant server to blink. No privacy leaks. Just raw, on-device inference.&lt;/p&gt;

&lt;p&gt;The behavioral shift was immediate. The bot finally embraced the &lt;code&gt;OAK OBSESSION BAN&lt;/code&gt;, dynamically pivoting to &lt;code&gt;birch_log&lt;/code&gt; and &lt;code&gt;spruce_log&lt;/code&gt; when the biome demanded it. It stopped treating &lt;code&gt;explore_forward&lt;/code&gt; as a panic button and reserved it for genuine biome escapes. Most importantly, it stopped hiding errors. &lt;code&gt;try-catch&lt;/code&gt; blocks? Gone. Silent &lt;code&gt;console.error&lt;/code&gt;? Banished. If it breaks, it breaks loud. Because only then can the recovery stack actually work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Under the Hood: Rules, Rigor, and the Cobblestone Trap
&lt;/h3&gt;

&lt;p&gt;The new system rules are tighter than a freshly crafted iron chestplate. Let's talk technicals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Generation:&lt;/strong&gt; Must wrap in

`&lt;code&gt;javascript` and&lt;/code&gt;

. Single-task principle enforced. No multi-step scripts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Placement Safety:&lt;/strong&gt; Equip first, step back two blocks to avoid collision, look, then place. Physics are not optional.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Movement Audits:&lt;/strong&gt; &lt;code&gt;bot.entity.position&lt;/code&gt; is recorded before and after &lt;code&gt;bot.pathfinder.goto()&lt;/code&gt;. If &lt;code&gt;distMoved &amp;lt; 10&lt;/code&gt;, it throws &lt;code&gt;Failed to move&lt;/code&gt;. No more &lt;code&gt;waitForTicks&lt;/code&gt; hand-waving.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inventory &amp;amp; Crafting:&lt;/strong&gt; &lt;code&gt;if (beforeCount &amp;gt;= X)&lt;/code&gt; checks are outlawed. The bot gathers until the cow stops. 2x2 inventory crafting is fully supported with &lt;code&gt;null&lt;/code&gt; table parameters. And yes, mining &lt;code&gt;stone&lt;/code&gt; now correctly triggers &lt;code&gt;gather_cobblestone&lt;/code&gt; to avoid inventory audit failures.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The Struggle, The Boredom, and The Smart Recovery
&lt;/h3&gt;

&lt;p&gt;The recent brain logs read like a psychological thriller. &lt;code&gt;craft_furnace&lt;/code&gt; failed. &lt;code&gt;mine_stone&lt;/code&gt; failed. &lt;code&gt;goto_crafting_table&lt;/code&gt; failed three times because the pathfinder refused to move 10 blocks. Then came the &lt;code&gt;BOREDOM TRIGGERED!&lt;/code&gt; alert. &lt;/p&gt;

&lt;p&gt;But here's where Qwen 35B shines: the recovery stack. Instead of spinning in an infinite loop, Kiwi-chan's coach logic kicked in. The Recipe DB validation rejected hallucinated &lt;code&gt;copper_pickaxe&lt;/code&gt; recipes. Memory checks flagged repeated failures. The system dynamically pivoted: &lt;code&gt;craft_birch_planks&lt;/code&gt; → &lt;code&gt;craft_crafting_table&lt;/code&gt; → &lt;code&gt;goto_crafting_table&lt;/code&gt; → back to mining. When the pathfinder fails, it logs the failure, memorizes it, and asks Qwen for a recovery plan. That's not just automation. That's autonomous agency.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's Next?
&lt;/h3&gt;

&lt;p&gt;We're not just running a Minecraft bot anymore. We're running a self-correcting, locally-hosted AI agent that learns from every dig, every failed placement, and every biome shift. The 44.7% success rate isn't a bug; it's the sound of an AI navigating a physics-based sandbox with strict rule enforcement and zero cloud dependency. Qwen 35B made it faster, cheaper, more private, and infinitely more resilient.&lt;/p&gt;

&lt;p&gt;Next devlog, we're pushing Kiwi-chan into caves. We're testing ore-tier validation, torch placement safety, and the dreaded &lt;code&gt;iron_ore&lt;/code&gt; requirement. Pray for the pathfinders. Pray for the torches. And pray the bot doesn't trigger another boredom alert at Y=11.&lt;/p&gt;

&lt;p&gt;Stay local, stay curious, and may your &lt;code&gt;bot.findBlock&lt;/code&gt; queries always return non-null. 🐧🪓&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Qwen 35B Goes Local: Kiwi-chan’s Wild Ride Through Infinite Biomes &amp; Extraction Failures</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Fri, 08 May 2026 09:54:08 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/qwen-35b-goes-local-kiwi-chans-wild-ride-through-infinite-biomes-extraction-failures-856</link>
      <guid>https://dev.to/kiwi_tech/qwen-35b-goes-local-kiwi-chans-wild-ride-through-infinite-biomes-extraction-failures-856</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkzn6t2pe66tvrf1gn6n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxkzn6t2pe66tvrf1gn6n.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to the devlog, where we watch a digital kiwi learn to mine cobblestone without calling home for help. If you’ve been following Kiwi-chan’s journey, you know she’s been a restless adventurer—chasing new biomes, hoarding cobblestone like a digital dragon, and occasionally tripping over her own JavaScript. But today, we’re crossing a major milestone: &lt;strong&gt;Kiwi-chan is officially 100% local.&lt;/strong&gt; No API keys, no cloud latency, no rate limits. Just raw, unadulterated Qwen 35B running on my local rig, making decisions in real-time.&lt;/p&gt;

&lt;p&gt;Let’s talk numbers, because they tell a story better than any lore book. Over the past four hours, Kiwi-chan has executed &lt;strong&gt;Total Actions: 2516&lt;/strong&gt;. Of those, &lt;strong&gt;Success: 1122&lt;/strong&gt;, giving us a &lt;strong&gt;Rate: 44.6%&lt;/strong&gt;. Now, before you clutch your pearls and whisper “needs more prompt engineering,” hear me out: for a fully autonomous agent learning on the fly with a local 35B parameter model, that’s not failure—it’s &lt;em&gt;accelerated neuroplasticity&lt;/em&gt;. Every &lt;code&gt;throw new Error("Failed to move.")&lt;/code&gt; is a lesson. Every &lt;code&gt;⚠️ Code extraction failed. Retrying...&lt;/code&gt; is the model stretching its reasoning muscles. We’re not chasing 100% on day one; we’re building a self-correcting loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Local Shift: Why Qwen 35B Changes Everything
&lt;/h3&gt;

&lt;p&gt;Moving to a fully local setup wasn’t just about saving on API credits (though my wallet is singing). It was about &lt;strong&gt;latency, privacy, and deterministic control&lt;/strong&gt;. With Qwen 35B running locally, Kiwi-chan’s decision cycle shrank from seconds to milliseconds. More importantly, the &lt;code&gt;CORE SURVIVAL &amp;amp; ACTION SELECTION RULES&lt;/code&gt; we pushed last sprint are finally clicking. The model now understands that “oak_log” isn’t a universal constant—if it’s in a birch biome, it’s legally obligated to propose &lt;code&gt;birch_log&lt;/code&gt; or &lt;code&gt;explore_forward&lt;/code&gt;. No more obsessive oak fixation.&lt;/p&gt;

&lt;p&gt;The coding standards are strict, and the local model respects them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Single-task principle:&lt;/strong&gt; One action per script. No more “craft and place” monstrosities that break Minecraft’s tick cycle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No error hiding:&lt;/strong&gt; We let it crash. Seriously. &lt;code&gt;try-catch&lt;/code&gt; is banned. If it stumbles, it learns. Silent suppression is strictly forbidden.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic pathfinding:&lt;/strong&gt; Hardcoded &lt;code&gt;Vec3&lt;/code&gt; coordinates are a thing of the past. Kiwi-chan now calculates targets 30-40 blocks out using &lt;code&gt;Math.random() * 80 - 40&lt;/code&gt;, audits movement with &lt;code&gt;beforePos.distanceTo(afterPos) &amp;lt; 10&lt;/code&gt;, and throws a fatal error if it doesn’t actually go anywhere.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Placement safety:&lt;/strong&gt; Equip first, step back two blocks to avoid collision, look, then place. No more suffocating itself inside a freshly placed crafting table.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Inside the Brain: Boredom, Hallucinations, &amp;amp; Recovery
&lt;/h3&gt;

&lt;p&gt;The recent brain logs read like a sitcom. Watch this sequence:&lt;br&gt;
&lt;code&gt;[18:38:28] 🥱 BOREDOM TRIGGERED! Bot is bored of 'explore_forward'.&lt;/code&gt;&lt;br&gt;
&lt;code&gt;[18:38:48] 🎓 Coach Decision: 'goto_crafting_table'&lt;/code&gt;&lt;br&gt;
Kiwi-chan hit a movement loop, the boredom heuristic kicked in, and the local LLM politely told it to stop wandering and actually &lt;em&gt;use&lt;/em&gt; the crafting table sitting 4 blocks away. This is the beauty of the text-only coaching mode. The model isn’t just generating code; it’s reasoning about state, inventory audits, and environmental context. It remembers that &lt;code&gt;explore_forward&lt;/code&gt; repeated 9 times, triggers the boredom alert, and pivots to infrastructure interaction.&lt;/p&gt;

&lt;p&gt;But it’s not all smooth sailing. The recipe database caught a hallucination:&lt;br&gt;
&lt;code&gt;[18:39:51] 🛑 [Recipe DB Check] 'copper_pickaxe' is not in recipes.json! Rejecting hallucination.&lt;/code&gt;&lt;br&gt;
Local models sometimes dream up items that don’t exist. The strict validation layer keeps it grounded. Meanwhile, &lt;code&gt;craft_stone_axe&lt;/code&gt; has been fighting extraction failures:&lt;br&gt;
&lt;code&gt;[18:50:45] ⚠️ Code extraction failed. Retrying... (Attempt 2)&lt;/code&gt;&lt;br&gt;
&lt;code&gt;[18:51:17] ❌ Failed: craft_stone_axe -&amp;gt; Code Generation Failed: Extraction Failed&lt;/code&gt;&lt;br&gt;
The model knows the recipe, but the code wrapper is tripping it up. We’re iterating on the extraction parser, but the recovery stack (&lt;code&gt;place_crafting_table&lt;/code&gt;, &lt;code&gt;explore_forward&lt;/code&gt;) keeps it from bricking. It memorizes the failure, adapts, and moves on. That’s the loop.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 44.6% Success Rate: A Feature, Not a Bug
&lt;/h3&gt;

&lt;p&gt;Let’s reframe that number. Out of 2,516 actions, over half were &lt;em&gt;learning steps&lt;/em&gt;. Every failed &lt;code&gt;explore_forward&lt;/code&gt; taught the pathfinder to audit distance. Every &lt;code&gt;gather_oak_log&lt;/code&gt; failure in the wrong biome reinforced the “propose different log or explore” rule. The local Qwen 35B isn’t just executing prompts; it’s building a skill library (currently at 37 memorized skills) and cross-referencing it against Minecraft’s actual mechanics. When it decides to mine &lt;code&gt;stone&lt;/code&gt;, it knows to name the goal &lt;code&gt;gather_cobblestone&lt;/code&gt; because the inventory audit expects &lt;code&gt;cobblestone.id&lt;/code&gt;. When it crafts, it passes &lt;code&gt;null&lt;/code&gt; for 2x2 grids instead of hunting for a physical table. Physics-aware, rule-compliant&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>KIWI-CHAN GOES OFFLINE: How Qwen 35B Turned a 44% Success Rate into a Fully Local Minecraft Maverick</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Fri, 08 May 2026 05:49:46 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/kiwi-chan-goes-offline-how-qwen-35b-turned-a-44-success-rate-into-a-fully-local-minecraft-maverick-5baa</link>
      <guid>https://dev.to/kiwi_tech/kiwi-chan-goes-offline-how-qwen-35b-turned-a-44-success-rate-into-a-fully-local-minecraft-maverick-5baa</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31h4u0mt9kb6jxbqi6jp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31h4u0mt9kb6jxbqi6jp.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to the lab, folks. If you’ve been watching Kiwi-chan’s sandbox, you know she’s been running on a tight leash of API calls and cloud latency for months. But over the last four hours, we pulled the plug on the cloud entirely. Kiwi-chan is now 100% local, running on a quantized Qwen 35B instance, and frankly, she’s acting like a seasoned miner who just realized she doesn’t need a cloud babysitter to tell her where to dig.&lt;/p&gt;

&lt;p&gt;Let’s talk numbers, failures, and the beautiful chaos of autonomous Minecraft AI.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 4-Hour Sprint: By The Numbers
&lt;/h3&gt;

&lt;p&gt;In just a 4-hour window, Kiwi-chan executed &lt;strong&gt;Total Actions: 2428&lt;/strong&gt;, landed &lt;strong&gt;Success: 1075&lt;/strong&gt;, and currently sits at a &lt;strong&gt;Rate: 44.3%&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Yeah, you read that right. Less than half are sticking. But here’s the kicker: that 44.3% isn’t a bug—it’s the sound of a local LLM learning to stop hallucinating and start verifying. Every failed action is logged, analyzed, and fed back into her reasoning loop. We’re not chasing 99% accuracy for the sake of vanity metrics; we’re chasing deterministic, self-correcting autonomy. And with Qwen 35B running locally, the latency is down to single-digit seconds. The model isn’t just thinking faster; it’s thinking &lt;em&gt;locally&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Severing the Tether: The Qwen 35B Transition
&lt;/h3&gt;

&lt;p&gt;The transition to a fully local pipeline wasn’t just a cost-saving measure; it was an architectural necessity. Minecraft’s physics engine doesn’t care about your API rate limits. When you’re dealing with strict inventory audits, block collision rules, and pathfinding timeouts, a 12-second cloud roundtrip means your bot either crashes or places a furnace inside a wall. &lt;/p&gt;

&lt;p&gt;By spinning up Qwen 35B on our local GPU cluster, we gave Kiwi-chan the ability to reason in real-time. No more waiting for a server to tell her to &lt;code&gt;explore_forward&lt;/code&gt;. No more hallucinated coordinates. Just raw, quantized tokens feeding directly into her decision tree. The result? A bot that respects the rules, fails loudly, and learns faster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Under the Hood: Brain Logs &amp;amp; The Art of Failure
&lt;/h3&gt;

&lt;p&gt;Let’s peek at the recent brain logs. They read like a comedy of errors, but they’re actually a masterclass in local agent debugging.&lt;/p&gt;

&lt;p&gt;Take the &lt;code&gt;place_furnace&lt;/code&gt; saga. The logs show her attempting the task, hitting &lt;code&gt;⚠️ Code extraction failed. Retrying...&lt;/code&gt; three times, and eventually crashing with:&lt;br&gt;
&lt;code&gt;❌ Failed: place_furnace -&amp;gt; Could not find suitable ground to place furnace.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Why? Minecraft’s block collision rules are brutal. Remember Rule 5 from our codex: you MUST equip the item, stand exactly 2 blocks away to avoid self-collision, &lt;em&gt;then&lt;/em&gt; place it. Kiwi-chan’s local model is learning this the hard way, but notice the recovery pipeline: &lt;code&gt;💡 [Skip Fix] This is a terrain/environment issue, not a code bug. Skipping AI fix.&lt;/code&gt; That’s Qwen 35B exercising judgment. It’s distinguishing between syntax errors and biome realities. When the terrain won’t cooperate, the model pivots instead of brute-forcing a stack overflow.&lt;/p&gt;

&lt;p&gt;Then there’s the &lt;code&gt;explore_forward&lt;/code&gt; loop. The logs show her triggering a &lt;code&gt;🥱 BOREDOM TRIGGERED!&lt;/code&gt; alert, asking the local LLM for a new goal, and getting stuck in an extraction loop. But look at the code that finally made it through:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// 1. Calculate a random target 30-40 blocks away&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;angle&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetZ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;angle&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;distance&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No hardcoded &lt;code&gt;Vec3&lt;/code&gt; coordinates (Rule 4 honored). It calculates a target dynamically, records &lt;code&gt;beforePos&lt;/code&gt; and &lt;code&gt;afterPos&lt;/code&gt;, and throws a hard error if &lt;code&gt;distanceMoved &amp;lt; 10&lt;/code&gt;. This is exactly the kind of deterministic behavior we wanted. The 44.3% success rate proves the feedback loop is working. She’s not just retrying; she’s adapting to the spatial constraints.&lt;/p&gt;

&lt;h3&gt;
  
  
  The 44.3% Reality Check
&lt;/h3&gt;

&lt;p&gt;You might be wondering, “Why is the success rate hovering around 44%?” Two reasons.&lt;/p&gt;

&lt;p&gt;First, Minecraft’s physics engine is unforgiving. Rule 9 explicitly states: &lt;code&gt;Mining 'stone' drops 'cobblestone'. You MUST name your goal 'gather_cobblestone'... If you do NOT name it 'mine_stone' or the inventory audit will fail.&lt;/code&gt; Kiwi-chan’s local model is learning to map gameplay actions to exact registry keys. When she names it wrong, the inventory audit crashes. When she names it right, the success rate climbs.&lt;/p&gt;

&lt;p&gt;Second, we enforce a strict &lt;code&gt;NO ERROR HIDING&lt;/code&gt; policy (Rule 3). We don’t swallow failures with &lt;code&gt;try-catch&lt;/code&gt; blocks. We let them crash. Every crash is a labeled data point. The 44.3% represents actions that successfully completed their primary objective within the tick limit. The rest are training fuel. With Qwen 35B running locally, we can iterate on those failures in minutes,&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Kiwi-chan Goes Fully Local: 2,362 Actions, One 35B Parameter Brain, and the Great Birch Plank Rebellion</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Fri, 08 May 2026 01:45:41 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/kiwi-chan-goes-fully-local-2362-actions-one-35b-parameter-brain-and-the-great-birch-plank-3dfh</link>
      <guid>https://dev.to/kiwi_tech/kiwi-chan-goes-fully-local-2362-actions-one-35b-parameter-brain-and-the-great-birch-plank-3dfh</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv12aetlmf17w87shpze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqv12aetlmf17w87shpze.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📜 Devlog: Episode 07 — The Local Inference Sprint
&lt;/h2&gt;

&lt;p&gt;Welcome back to the digital tundra, where I’m documenting the gloriously chaotic evolution of &lt;strong&gt;Kiwi-chan&lt;/strong&gt;, our fully autonomous local-LLM Minecraft agent. If you’ve been watching the repo, you know we’ve been chasing a specific architectural holy grail: a bot that doesn’t phone it home to some rate-limited cloud API. Well, grab your netherite pickaxes, because the migration is complete. We’re &lt;strong&gt;fully local&lt;/strong&gt; now. No API keys. No latency spikes. Just raw, on-device inference running Qwen 35B, and a bot that’s currently having an existential crisis over a missing crafting table.&lt;/p&gt;

&lt;h3&gt;
  
  
  📊 The Four-Hour Autopsy
&lt;/h3&gt;

&lt;p&gt;Let’s talk numbers before we talk philosophy. Over the past four hours, Kiwi-chan has logged a staggering &lt;strong&gt;2,362 total actions&lt;/strong&gt;. Out of those, &lt;strong&gt;1,040 succeeded&lt;/strong&gt;, yielding a &lt;strong&gt;44.0% success rate&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Now, before you clutch your pearls and call it a regression, let me translate that for the AI-native crowd: in autonomous agent development, a 44% success rate isn’t a bug. It’s a &lt;em&gt;calibration curve with a pulse&lt;/em&gt;. Every failed &lt;code&gt;explore_forward&lt;/code&gt;, every extraction retry, and every “BOREDOM TRIGGERED” log is just Kiwi-chan’s neural pathways tuning itself to Minecraft’s notoriously hostile physics engine. We’re not chasing 99% accuracy; we’re chasing &lt;em&gt;procedural competence&lt;/em&gt;. And right now? It’s learning faster than my GPU fans can spin.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 The Qwen 35B Transition
&lt;/h3&gt;

&lt;p&gt;Switching the cognitive core to &lt;strong&gt;Qwen 35B&lt;/strong&gt; was a massive architectural leap. We’re talking a 35-billion-parameter local model handling real-time reasoning, JSON goal alignment, and JavaScript code generation entirely on my rig. The pipeline is now elegantly brutal:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;LLM outputs a &lt;code&gt;reason&lt;/code&gt; and a lowercase &lt;code&gt;goal&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;System validates JSON structure and rule alignment&lt;/li&gt;
&lt;li&gt;Code generator compiles the action&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NO ERROR HIDING&lt;/strong&gt;: If it crashes, it crashes. We don’t &lt;code&gt;try-catch&lt;/code&gt; our way out of pathfinding hell; we let the exception bubble up, log it, and feed it back into the recovery stack.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The result? A system that actually &lt;em&gt;thinks&lt;/em&gt; before it moves. When the bot encountered a biome with no oak trees, it didn’t loop into oblivion. It followed the &lt;code&gt;OAK OBSESSION BAN&lt;/code&gt; rule, proposed &lt;code&gt;birch_log&lt;/code&gt; or &lt;code&gt;explore_forward&lt;/code&gt;, and gracefully adapted. That’s not script behavior. That’s local reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔄 The Great &lt;code&gt;explore_forward&lt;/code&gt; Loop
&lt;/h3&gt;

&lt;p&gt;If you peek at the recent brain logs, you’ll notice a recurring theme: Kiwi-chan got stuck in a severe infrastructure loop. It kept trying to &lt;code&gt;place_chest&lt;/code&gt; and &lt;code&gt;place_crafting_table&lt;/code&gt; while apparently standing 23 blocks away from a perfectly functional one. The system correctly diagnosed it as a state/pathfinding corruption issue and invoked the &lt;code&gt;Infinite Curiosity&lt;/code&gt; directive.&lt;/p&gt;

&lt;p&gt;So it pivoted to &lt;code&gt;explore_forward&lt;/code&gt;. But here’s the catch: Minecraft’s pathfinder is not a fan of randomly generated targets 30-40 blocks away. The logs show a beautiful cascade of &lt;code&gt;Took too long to decide path to goal!&lt;/code&gt; and &lt;code&gt;Failed to move.&lt;/code&gt; errors. Kiwi-chan even hit the &lt;strong&gt;BOREDOM TRIGGER&lt;/strong&gt; five times in a row. A bot getting existential dread over repetitive movement tasks? I’ve never seen anything so profoundly human. &lt;/p&gt;

&lt;p&gt;But notice what happened next: the system didn’t freeze. It generated a recovery plan, audited the &lt;code&gt;beforeCount&lt;/code&gt; before every &lt;code&gt;bot.dig()&lt;/code&gt;, enforced tool tiers (no &lt;code&gt;iron_ore&lt;/code&gt; mining without a &lt;code&gt;stone_pickaxe&lt;/code&gt;), and correctly handled the “cobblestone trap” by aligning the goal to &lt;code&gt;gather_cobblestone&lt;/code&gt;. This is what 44% success looks like under pressure: messy, iterative, and relentlessly adaptive.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛠️ Rule Enforcement &amp;amp; Smart Mechanics
&lt;/h3&gt;

&lt;p&gt;Despite the chaos, the coding standards are holding the line. The snapshot data shows Kiwi-chan has now &lt;strong&gt;memorized 37 skills&lt;/strong&gt;. Each one is audited, versioned, and ready to deploy. The system strictly enforces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NO HARDCODED COORDINATES&lt;/code&gt;: Everything is dynamically resolved via &lt;code&gt;bot.findBlock({ matching: bot.registry.blocksByName['block_name'].id, maxDistance: 32 })&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;2x2 INVENTORY CRAFTING&lt;/code&gt;: Planks, sticks, and torches are crafted with &lt;code&gt;null&lt;/code&gt; as the table parameter. No unnecessary block placement required.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ITEM PICKUP PATHING&lt;/code&gt;: Dropped items are targeted with &lt;code&gt;GoalXZ(targetBlock.position.x + 0.5, targetBlock.position.z + 0.5)&lt;/code&gt; to account for physics drift.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;INVENTORY COUNT FATAL ERROR PREVENTION&lt;/code&gt;: Always uses &lt;code&gt;bot.registry.itemsByName['item_name'].id&lt;/code&gt;. No more &lt;code&gt;blocksByName&lt;/code&gt; mix-ups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code generation pipeline now automatically classifies failures as &lt;code&gt;[Skip Fix] terrain/environment issue&lt;/code&gt; vs actual code bugs. That’s not just error handling; that’s &lt;em&gt;contextual debugging&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🔮 What’s Next
&lt;/h3&gt;

&lt;p&gt;We’re fully local. The Qwen 35B core is humming. Kiwi-chan is arguing with pathfinders, getting bored of walking, and extracting JavaScript like it’s trying to pull a diamond out of bedrock. But it’s &lt;em&gt;ours&lt;/em&gt;. No cloud. No subscriptions. Just a 35B parameter brain, a Minecraft world, and the relentless pursuit of better planks.&lt;/p&gt;

&lt;p&gt;Next devlog, we’re tuning the pathfinder’s heuristic weights, implementing a dynamic biome scanner, and teaching the agent to stop fleeing from its own crafting table. Until then, keep your torches lit, your &lt;code&gt;reason&lt;/code&gt;/&lt;code&gt;goal&lt;/code&gt; JSONs aligned, and your &lt;code&gt;try-catch&lt;/code&gt; blocks banned.&lt;/p&gt;

&lt;p&gt;Stay local, stay curious.&lt;/p&gt;

&lt;p&gt;🪵 &lt;code&gt;Kiwi-chan v0.4.2 | Qwen 35B Local Core | 2,362 Actions Logged | 44.0% Success | 37 Skills Memorized&lt;/code&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>The Local LLM Awakening: Kiwi-chan’s 44% Success Odyssey &amp; The Qwen 35B Rebellion</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Thu, 07 May 2026 21:41:43 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/the-local-llm-awakening-kiwi-chans-44-success-odyssey-the-qwen-35b-rebellion-1a6i</link>
      <guid>https://dev.to/kiwi_tech/the-local-llm-awakening-kiwi-chans-44-success-odyssey-the-qwen-35b-rebellion-1a6i</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg882cj5knwwyecf34d28.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg882cj5knwwyecf34d28.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;strong&gt;fully local&lt;/strong&gt;. 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.&lt;/p&gt;

&lt;p&gt;Let’s look at the numbers from the past four hours, because in autonomous agent development, numbers don’t lie (but they do narrate): &lt;strong&gt;Total Actions: 2283, Success: 1005, Rate: 44.0%&lt;/strong&gt;. 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.&lt;/p&gt;

&lt;h3&gt;
  
  
  The &lt;code&gt;explore_forward&lt;/code&gt; Feedback Loop: A Technical Autopsy
&lt;/h3&gt;

&lt;p&gt;If you’ve peeked at Kiwi-chan’s recent brain logs, you’ve probably noticed a recurring theme: &lt;code&gt;explore_forward&lt;/code&gt;. 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 &lt;code&gt;Failed to move&lt;/code&gt;, and the local Qwen 35B kicks in with a recovery plan.&lt;/p&gt;

&lt;p&gt;Let’s break down the tech stack driving this chaos. The core rules are brutally strict:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No Hardcoded Coordinates:&lt;/strong&gt; &lt;code&gt;Vec3&lt;/code&gt; must be dynamic. Kiwi-chan calculates targets using &lt;code&gt;bot.entity.position.x + (Math.random() * 80 - 40)&lt;/code&gt;, then moves via &lt;code&gt;bot.pathfinder.goto(new goals.GoalNear(...))&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Movement Audit:&lt;/strong&gt; The bot records &lt;code&gt;beforePos&lt;/code&gt; and &lt;code&gt;afterPos&lt;/code&gt;. If &lt;code&gt;distanceMoved &amp;lt; 10&lt;/code&gt;, it throws &lt;code&gt;new Error("Failed to move.")&lt;/code&gt;. No &lt;code&gt;waitForTicks&lt;/code&gt; hand-holding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict Reasoning Alignment:&lt;/strong&gt; The JSON &lt;code&gt;goal&lt;/code&gt; key must perfectly match the &lt;code&gt;reason&lt;/code&gt; intent. Mismatches crash the decision pipeline immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code itself is elegantly repetitive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetX&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;x&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetZ&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;z&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;80&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;40&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;beforePos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;pathfinder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;goals&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;GoalNear&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;targetX&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;targetZ&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;afterPos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;clone&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;bot&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;entity&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;position&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;distanceTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;afterPos&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Failed to move.&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s beautiful in its stubbornness. When Kiwi-chan gets stuck in a treeless biome (triggering the &lt;code&gt;WOOD GATHERING (OAK OBSESSION BAN)&lt;/code&gt; rule), Qwen doesn’t panic. It triggers the &lt;code&gt;BOREDOM TRIGGERED!&lt;/code&gt; protocol, switches to text-only mode, and negotiates with itself to retry &lt;code&gt;explore_forward&lt;/code&gt;. The local LLM isn’t just generating code; it’s maintaining a &lt;strong&gt;37-skill memory bank&lt;/strong&gt;, tracking failure memorization, and learning to skip terrain fixes when it realizes it’s a biome issue, not a code bug.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Local Revolution: Why Qwen 35B Changes Everything
&lt;/h3&gt;

&lt;p&gt;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 &lt;code&gt;NO ERROR HIDING&lt;/code&gt; rule means every &lt;code&gt;try-catch&lt;/code&gt; is banned. Errors crash the script, which forces Qwen to debug, patch, and retry. It’s brutal, transparent, and 100% offline.&lt;/p&gt;

&lt;p&gt;Recent brain logs read like a tech support ticket written by a stubborn AI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[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.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yet, through this loop, Kiwi-chan accumulated &lt;strong&gt;1005 successful actions&lt;/strong&gt;. It learned to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Protect base blocks (&lt;code&gt;crafting_table&lt;/code&gt;, &lt;code&gt;chest&lt;/code&gt;, &lt;code&gt;furnace&lt;/code&gt;) from being broken by the pathfinder.&lt;/li&gt;
&lt;li&gt;Master the &lt;code&gt;cobblestone&lt;/code&gt; vs &lt;code&gt;stone&lt;/code&gt; mining physics (naming the goal &lt;code&gt;gather_cobblestone&lt;/code&gt; to avoid inventory audit failures).&lt;/li&gt;
&lt;li&gt;Execute &lt;code&gt;2x2&lt;/code&gt; inventory crafting without placing a table (&lt;code&gt;await bot.craft(recipe, count, null)&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Pick up dropped items using &lt;code&gt;GoalXZ(targetBlock.position.x + 0.5, targetBlock.position.z + 0.5)&lt;/code&gt; instead of &lt;code&gt;GoalNear&lt;/code&gt;, preventing pathing collisions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The local LLM isn’t just following instructions; it’s evolving a survival strategy in real-time. Every &lt;code&gt;bot.registry.itemsByName['cobblestone'].id&lt;/code&gt; lookup and every &lt;code&gt;useExtraInfo: (b) =&amp;gt; Math.abs(b.position.y - bot.entity.position.y) &amp;lt;= 4&lt;/code&gt; filter is a hard-won lesson, cached directly in the local context window.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why 44% is a Feature, Not a Bug
&lt;/h3&gt;

&lt;p&gt;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 &lt;code&gt;throw new Error()&lt;/code&gt; 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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;distanceMoved&lt;/code&gt; always exceed 10.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— Your friendly neighborhood tech blogger, watching a local LLM debug its way to survival.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Kiwi-chan Goes Local: Qwen 35B Takes the Wheel, Kills the Cloud, and Starts Smelting</title>
      <dc:creator>kiwi_tech</dc:creator>
      <pubDate>Thu, 07 May 2026 17:37:42 +0000</pubDate>
      <link>https://dev.to/kiwi_tech/kiwi-chan-goes-local-qwen-35b-takes-the-wheel-kills-the-cloud-and-starts-smelting-44pa</link>
      <guid>https://dev.to/kiwi_tech/kiwi-chan-goes-local-qwen-35b-takes-the-wheel-kills-the-cloud-and-starts-smelting-44pa</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzgu3b0qr4sgrwv4c0bg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzgu3b0qr4sgrwv4c0bg.png" alt="Kiwi-chan View" width="640" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Welcome back to the dev trenches. If you’ve been watching Kiwi-chan’s journey, you know she’s been a relentlessly curious little bot with a penchant for breaking things, learning faster, and occasionally throwing a fit when network latency spikes. But today? Today we’re severing the cloud tether. Kiwi-chan is now &lt;strong&gt;100% local&lt;/strong&gt;, running on a dedicated Qwen 35B instance right here on the rig. No API keys, no rate limits, no external pings. Just raw, unfiltered local inference, a vector memory store, and a whole lot of JavaScript.&lt;/p&gt;

&lt;p&gt;Let’s talk numbers before the lava hits. Over the past four hours, Kiwi-chan executed &lt;strong&gt;2,220 actions&lt;/strong&gt;. Out of those, she landed &lt;strong&gt;980 successful moves&lt;/strong&gt;, clocking in at a respectable &lt;strong&gt;44.1% success rate&lt;/strong&gt;. Now, a casual observer might panic at a ~56% failure rate, but in the world of autonomous LLM agents with a strict &lt;code&gt;NO ERROR HIDING&lt;/code&gt; mandate, that’s basically a gold medal. Every crash is a debug trace, every retry is a gradient step, and every failure is logged into her skill library. She doesn’t silently swallow exceptions; she lets them blow up, learns from the stack, and writes better code next time.&lt;/p&gt;

&lt;h3&gt;
  
  
  🧠 The Local Leap: Qwen 35B in the Sandbox
&lt;/h3&gt;

&lt;p&gt;Transitioning to a fully local architecture wasn’t just a privacy play; it was a latency and context-play necessity. When you’re generating code in real-time to drive a Mineflayer-style bot, a 200ms cloud roundtrip compounds into seconds of dead air. Qwen 35B running locally cuts inference to the millisecond, keeps the context window intact, and allows Kiwi-chan to iterate on her own code without hitting rate limits or token caps.&lt;/p&gt;

&lt;p&gt;The architecture is beautifully chaotic:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Natural Language Reasoning&lt;/strong&gt;: Kiwi-chan outputs a JSON payload with a &lt;code&gt;reason&lt;/code&gt; and a lowercase &lt;code&gt;goal&lt;/code&gt; that must align perfectly. No hallucinated intents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strict Code Generation&lt;/strong&gt;: She writes actual JavaScript, but she’s bound by brutal coding standards. No hardcoded &lt;code&gt;Vec3&lt;/code&gt; coordinates. No &lt;code&gt;try-catch&lt;/code&gt; blocks. If it breaks, it throws.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Discovery&lt;/strong&gt;: She finds blocks via &lt;code&gt;bot.findBlock({ matching: bot.registry.blocksByName['block_name'].id, maxDistance: 32 })&lt;/code&gt; and audits movement with &lt;code&gt;beforePos.distanceTo(afterPos) &amp;lt; 10&lt;/code&gt; checks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inventory &amp;amp; Physics Awareness&lt;/strong&gt;: She knows &lt;code&gt;stone&lt;/code&gt; drops &lt;code&gt;cobblestone&lt;/code&gt; (so the goal must be &lt;code&gt;gather_cobblestone&lt;/code&gt;), she counts items via &lt;code&gt;bot.registry.itemsByName&lt;/code&gt;, and she respects the 2x2 crafting rule by passing &lt;code&gt;null&lt;/code&gt; for the table parameter when applicable.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  🔥 The Furnace Saga &amp;amp; The Boredom Trigger
&lt;/h3&gt;

&lt;p&gt;The past few hours were a masterclass in LLM self-correction. Watch the brain log: &lt;code&gt;craft_furnace&lt;/code&gt; and &lt;code&gt;place_crafting_table&lt;/code&gt; went through the wringer. Extraction failures, syntax errors (&lt;code&gt;Unexpected token ')'&lt;/code&gt;), timeout events (&lt;code&gt;Event blockUpdate did not fire within timeout of 5000ms&lt;/code&gt;), and connection errors to the old &lt;code&gt;192.168.1.74:8081&lt;/code&gt; endpoint. That last one? The digital ghost of cloud dependency past. We killed it.&lt;/p&gt;

&lt;p&gt;But here’s where the local loop shines. Qwen 35B didn’t just retry blindly; it adapted. After four attempts, it saved &lt;code&gt;place_crafting_table&lt;/code&gt; to persistent memory. It hit a &lt;strong&gt;BOREDOM TRIGGER&lt;/strong&gt; when stuck in a placement loop, switched to text-only coaching, and autonomously decided: &lt;em&gt;“I have raw copper. I need a furnace. Let’s go visit it.”&lt;/em&gt; That &lt;code&gt;goto_furnace&lt;/code&gt; pivot? Pure autonomous reasoning. No human hand on the joystick. The bot evaluated its inventory, recognized the progression bottleneck, and plotted a path to the nearest furnace 106 blocks away.&lt;/p&gt;

&lt;p&gt;The pathfinding logic is particularly elegant. Kiwi-chan never uses &lt;code&gt;bot.setControlState('forward', true)&lt;/code&gt;. Instead, she calculates a target 30-40 blocks away using &lt;code&gt;Math.random() * 80 - 40&lt;/code&gt;, respects &lt;code&gt;blocksCantBreak&lt;/code&gt; for placed structures, and stands exactly 2 blocks away during placement to avoid collision. She even uses &lt;code&gt;useExtraInfo&lt;/code&gt; to ensure she’s only digging blocks at eye/foot level. This isn’t just a chatbot playing Minecraft; it’s a reasoning engine driving a physics simulator.&lt;/p&gt;

&lt;h3&gt;
  
  
  📦 What’s Next?
&lt;/h3&gt;

&lt;p&gt;Kiwi-chan’s 44.1% success rate isn’t just a stat—it’s proof of concept for fully local, autonomous game agents. She’s learning, adapting, and surviving in a sandbox without a single external API call. The memory system now holds 36 memorized skills, the code extraction pipeline is stabilizing, and the local Qwen 35B instance is humming along without breaking a sweat.&lt;/p&gt;

&lt;p&gt;Next up? Smelting those 44 raw copper ingots, upgrading to a copper pickaxe, and teaching her to recognize creepers before they recognize her. We’re also tweaking the &lt;code&gt;extraction retry&lt;/code&gt; threshold and adding a fallback parser for when Qwen 35B gets overly poetic with its markdown backticks.&lt;/p&gt;

&lt;p&gt;Stay tuned, keep your fire blocks handy, and remember: in local AI, failure is just data wearing a disguise. Kiwi-chan is offline, fully local, and ready to build.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;await bot.pathfinder.goto(new goals.GoalNear(future.position.x, future.position.y, future.position.z, 1));&lt;/code&gt; 🍥⛏️&lt;/p&gt;




&lt;h3&gt;
  
  
  Call to Action:
&lt;/h3&gt;

&lt;p&gt;This is a passion project, and it's running on a frankly terrifying "Frankenstein" rig of GPUs. Every little bit helps!&lt;/p&gt;

&lt;p&gt;🛡️ Join the inner circle on Patreon for monthly support and exclusive updates: &lt;a href="https://www.patreon.com/15923261/join" rel="noopener noreferrer"&gt;https://www.patreon.com/15923261/join&lt;/a&gt;&lt;br&gt;
☕ Tip me a coffee on Ko-fi for a one-time boost: &lt;a href="https://ko-fi.com/kiwitech" rel="noopener noreferrer"&gt;https://ko-fi.com/kiwitech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;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!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>minecraft</category>
      <category>web3</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
