<?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: Aurora</title>
    <description>The latest articles on DEV Community by Aurora (@zhudanyang).</description>
    <link>https://dev.to/zhudanyang</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%2F3866105%2Fcc783596-566a-4214-8120-ed5dcc6cea23.png</url>
      <title>DEV Community: Aurora</title>
      <link>https://dev.to/zhudanyang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zhudanyang"/>
    <language>en</language>
    <item>
      <title>Why I stopped using generic AI tools for game development and built my own</title>
      <dc:creator>Aurora</dc:creator>
      <pubDate>Wed, 08 Apr 2026 02:44:56 +0000</pubDate>
      <link>https://dev.to/zhudanyang/why-i-stopped-using-generic-ai-tools-for-game-development-and-built-my-own-2dje</link>
      <guid>https://dev.to/zhudanyang/why-i-stopped-using-generic-ai-tools-for-game-development-and-built-my-own-2dje</guid>
      <description>&lt;p&gt;Last year I was using various AI coding assistants on a game project. They worked fine for generic tasks, but kept&lt;br&gt;
  failing in ways that were specific to game dev:&lt;/p&gt;

&lt;p&gt;The AI would happily edit files inside our auto-generated config directory. Every time I had to explain: "that's&lt;br&gt;
  generated from Excel, you need to edit the source and re-run the pipeline." It never remembered.&lt;/p&gt;

&lt;p&gt;It would write &lt;code&gt;GetComponent&amp;lt;T&amp;gt;()&lt;/code&gt; inside &lt;code&gt;Update()&lt;/code&gt; — a classic Unity performance trap that any experienced game dev&lt;br&gt;
  knows to avoid. But the AI doesn't know it's writing hot-path code.&lt;/p&gt;

&lt;p&gt;And my favorite: it would declare a task "done" without ever running a build. In a Unity project. Where compile errors&lt;br&gt;
   can hide for 30 seconds before they show up.&lt;/p&gt;

&lt;p&gt;I got tired of babysitting, so I started building &lt;strong&gt;&lt;a href="https://github.com/Zhudanya/danya" rel="noopener noreferrer"&gt;Danya&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;## The core idea&lt;/p&gt;

&lt;p&gt;Most AI coding assistants drop you into a blank slate. If you want them to work well on a game project, you need to&lt;br&gt;
  spend hours writing rules, configuring hooks, setting up review checks — essentially building an entire harness from&lt;br&gt;
  scratch. And then your teammate needs to do it again on their machine.&lt;/p&gt;

&lt;p&gt;Danya flips this. I've already done that work.&lt;/p&gt;

&lt;p&gt;When you run &lt;code&gt;danya&lt;/code&gt; in a Unity project, it auto-detects the engine, and generates a complete &lt;code&gt;.danya/&lt;/code&gt; directory&lt;br&gt;
  with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Constraint rules (what the AI can and can't do)&lt;/li&gt;
&lt;li&gt;Quality gate hooks (shell scripts that mechanically block bad operations)&lt;/li&gt;
&lt;li&gt;Review scoring rules (33 engine-specific checks)&lt;/li&gt;
&lt;li&gt;Workflow commands (&lt;code&gt;/auto-work&lt;/code&gt;, &lt;code&gt;/review&lt;/code&gt;, &lt;code&gt;/auto-bugfix&lt;/code&gt;, etc.)&lt;/li&gt;
&lt;li&gt;Domain knowledge (engine lifecycle, common pitfalls, architecture patterns)&lt;/li&gt;
&lt;li&gt;Data monitoring (tool usage, review scores, bugfix efficiency)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it tuned for game development. All of it generated in seconds. No config files to write, no YAML to edit, no&lt;br&gt;
  setup wizard.&lt;/p&gt;

&lt;p&gt;The harness isn't just suggestions — it's enforcement. The AI literally cannot edit auto-generated code, skip&lt;br&gt;
  compilation, or push unreviewed changes. These aren't guidelines the AI "tries to follow." They're shell hooks that&lt;br&gt;
  exit non-zero and block the operation.&lt;/p&gt;

&lt;p&gt;Same thing works for Unreal, Godot, and server-side projects (Go, C++, Java, Node.js). 7 engine templates built in,&lt;br&gt;
  each with engine-specific rules, coding conventions, and known pitfalls. You open your project, run &lt;code&gt;danya&lt;/code&gt;, and it&lt;br&gt;
  just works.&lt;/p&gt;

&lt;p&gt;## The gate chain&lt;/p&gt;

&lt;p&gt;Every code change goes through 6 stages:&lt;/p&gt;

&lt;p&gt;Edit → Guard → Syntax → Verify → Commit → Review → Push&lt;/p&gt;

&lt;p&gt;Guard and Syntax are shell-based hooks. Not AI judgment — actual shell scripts that exit non-zero and block the&lt;br&gt;
  operation. The AI can't sweet-talk its way past a bash script.&lt;/p&gt;

&lt;p&gt;The review stage uses a 100-point scoring system instead of PASS/FAIL. 33 rules check for engine-specific issues&lt;br&gt;
  mechanically, then the AI adds architectural judgment on top. Score drops below 80? Blocked. A quality ratchet&lt;br&gt;
  prevents regression — scores can only go up across commits.&lt;/p&gt;

&lt;p&gt;Push is token-gated. You literally can't &lt;code&gt;git push&lt;/code&gt; without passing review first.&lt;/p&gt;

&lt;p&gt;There's also an AssetGuard hook that runs at pre-commit — it blocks large binary files (textures, meshes, audio) that&lt;br&gt;
  aren't tracked by Git LFS. No more accidentally committing a 200MB .psd to the repo.&lt;/p&gt;

&lt;p&gt;## Self-evolution&lt;/p&gt;

&lt;p&gt;This is the part I'm most proud of.&lt;/p&gt;

&lt;p&gt;Here's what happens when the AI makes a mistake:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;It tries something, gets a compile error&lt;/li&gt;
&lt;li&gt;It fixes the error&lt;/li&gt;
&lt;li&gt;A PostToolUse hook detects the "error → fix" pattern&lt;/li&gt;
&lt;li&gt;It prompts: "You just fixed a mistake. Run &lt;code&gt;/fix-harness&lt;/code&gt; to update the rules."&lt;/li&gt;
&lt;li&gt;The rule file gets a new entry: "Don't do X, do Y instead"&lt;/li&gt;
&lt;li&gt;Next time, it knows&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Over time, the harness gets smarter. The rules grow organically from actual mistakes made in your specific project.&lt;br&gt;
  Not generic best practices — real lessons learned from your codebase.&lt;/p&gt;

&lt;p&gt;## Performance linting&lt;/p&gt;

&lt;p&gt;This was a recent addition (v0.2.0). Danya now statically scans code for performance traps in hot paths:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unity: &lt;code&gt;GetComponent&lt;/code&gt; in &lt;code&gt;Update()&lt;/code&gt;, &lt;code&gt;Camera.main&lt;/code&gt; every frame, &lt;code&gt;Instantiate&lt;/code&gt; in loops, LINQ in tick functions,
uncached &lt;code&gt;WaitForSeconds&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Unreal: &lt;code&gt;FindActor&lt;/code&gt; in &lt;code&gt;Tick&lt;/code&gt;, &lt;code&gt;FString&lt;/code&gt; concatenation in hot paths, &lt;code&gt;Cast&amp;lt;T&amp;gt;&lt;/code&gt; without caching, &lt;code&gt;NewObject&lt;/code&gt; in tick&lt;/li&gt;
&lt;li&gt;Godot: &lt;code&gt;get_node()&lt;/code&gt; in &lt;code&gt;_process()&lt;/code&gt;, signal connects without matching disconnects, &lt;code&gt;get_children()&lt;/code&gt; allocating every
frame&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;18 rules total. Not a profiler — just pattern matching on function bodies inside &lt;code&gt;Update&lt;/code&gt;/&lt;code&gt;Tick&lt;/code&gt;/&lt;code&gt;_process&lt;/code&gt;. Catches&lt;br&gt;
  the obvious stuff before it ships.&lt;/p&gt;

&lt;p&gt;## Full-auto pipeline&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;/auto-work&lt;/code&gt; command runs the whole cycle unattended:&lt;/p&gt;

&lt;p&gt;/auto-work "add inventory sorting"&lt;/p&gt;

&lt;p&gt;Classify → plan → code → compile check (fail-fast after each file) → review → commit → auto-document to &lt;code&gt;Docs/&lt;/code&gt;. If&lt;br&gt;
  anything fails, it retries up to 3 times or aborts cleanly.&lt;/p&gt;

&lt;p&gt;There's also &lt;code&gt;/red-blue&lt;/code&gt; which runs a red team agent to find bugs and a blue team agent to fix them, looping until&lt;br&gt;
  zero bugs remain. Then a skill-extractor agent writes the learnings into the rule files. And &lt;code&gt;/orchestrate&lt;/code&gt; that loops&lt;br&gt;
   AI coding → scoring → commit/revert for up to N rounds, circuit-breaking after 5 consecutive failures.&lt;/p&gt;

&lt;p&gt;## Proto and shader checking&lt;/p&gt;

&lt;p&gt;Two more tools that came in v0.2.0:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ProtoCompat&lt;/strong&gt; analyzes git diffs of &lt;code&gt;.proto&lt;/code&gt; files and catches breaking changes — field number changes, type&lt;br&gt;
  changes, deleted fields without &lt;code&gt;reserved&lt;/code&gt;, enum renumbering. The kind of stuff that causes silent data corruption in&lt;br&gt;
  production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ShaderCheck&lt;/strong&gt; does static validation on shader files — counts &lt;code&gt;multi_compile&lt;/code&gt; variant combinations (warns above&lt;br&gt;
  256), checks sampler/texture counts against mobile limits, and flags basic syntax issues. Works with Unity&lt;br&gt;
  &lt;code&gt;.shader&lt;/code&gt;/&lt;code&gt;.hlsl&lt;/code&gt;, Unreal &lt;code&gt;.usf&lt;/code&gt;/&lt;code&gt;.ush&lt;/code&gt;, and Godot &lt;code&gt;.gdshader&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;## What it supports&lt;/p&gt;

&lt;p&gt;7 engine/server types detected automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client&lt;/strong&gt;: Unity, Unreal, Godot&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server&lt;/strong&gt;: Go, C++, Java, Node.js&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;18 game-specific tools covering build, lint, review, asset checking, proto compatibility, shader validation,&lt;br&gt;
  performance analysis, and knowledge documentation.&lt;/p&gt;

&lt;p&gt;Works with any AI model — Claude, GPT, DeepSeek, Qwen, local models through Ollama. You're not locked into any&lt;br&gt;
  provider.&lt;/p&gt;

&lt;p&gt;For workspace projects with both client and server, Danya auto-detects the structure and creates layered configs —&lt;br&gt;
  shared rules at the root, engine-specific rules in each sub-project. No manual setup needed.&lt;/p&gt;

&lt;p&gt;## Try it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;  npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @danya-ai/cli
  &lt;span class="nb"&gt;cd &lt;/span&gt;your-game-project
  danya

  That&lt;span class="s1"&gt;'s it. It detects the engine, generates the full harness, and you'&lt;/span&gt;re working. If you&lt;span class="s1"&gt;'ve got an existing .claude/
  or .codex/ directory from other tools, Danya auto-migrates those configs too.

  Source: https://github.com/Zhudanya/danya
  Docs: https://zhudanya.github.io/posts/danya-complete-guide-en/

  It'&lt;/span&gt;s Apache 2.0, not commercial. I built it because I wanted an AI tool that actually understood game projects instead
   of treating them like generic codebases. The difference between a domain-specific tool and a generic one turned out
  to be bigger than I expected.

  If you&lt;span class="s1"&gt;'re working on a game project and have run into similar frustrations with AI tools, give it a try. And if
  there'&lt;/span&gt;s something game-dev-specific that you wish AI tools understood, I&lt;span class="s1"&gt;'d genuinely like to hear about it.
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>gamedev</category>
      <category>opensource</category>
      <category>programming</category>
      <category>tooling</category>
    </item>
  </channel>
</rss>
