Designing AI Maintainable Code
Why This Post Exists #
AI tools are great at writing code, but they’re terrible at picking up where you left off. You paste in part of a script, ask for help, and the model fumbles because it doesn’t know what it’s looking at.
It’s not necessarily a model problem — it’s a context problem.
I started adding small hints to my projects to help the AI stay oriented: a few comments, a metadata file, a sentence or two at the top. The results were immediately better. Less wasted time. Smarter suggestions. Fewer “let me explain this again” moments.
Eventually, I realized this could be a pattern — one that’s simple, repeatable, and helpful across projects. In the future, it could even power IDE plugins and quality-oriented pipeline actions.
What I Mean by AI-Maintainable Code #
This isn’t about writing documentation for ChatGPT. It’s not about crafting prompts or retraining models. It’s just adding a layer of context that lives alongside your code — enough for an LLM to understand what’s happening without you having to spell it out every time.
Call it metadata. Call it signposting. The point is: you’re making the code more legible to a machine that doesn’t know the backstory.
The Core Pattern (The AI-Meta Layer) #
Here’s the basic structure I use:
| Element | Purpose |
|---|---|
ai_context.yml/json |
Short, structured overview of the project: what it does, how it flows, where to start (yml preferred for token optimization) |
@ai: comments |
Inline notes about intent, not implementation |
README.ai.md |
(optional) A conversational explanation for the AI: purpose, pipeline, weird parts |
breadcrumbs.ai |
(optional) A lightweight changelog focused on “why” more than “what” |
These files are not just for the AI in the moment — they’re also friendly to embedding and vector search. If you’re using a retrieval-augmented (RAG) setup, you can index them to improve multi-file understanding and scoped responses.
This isn’t a heavy lift. Most files are 5–10 lines. Add what helps, ignore what doesn’t.
A Quick Example #
One of my scripts takes a Wikipedia article, summarizes it with an LLM, generates voiceover with say, and stitches it into a video with ffmpeg.
With no context, the AI kept guessing wrong about which part did what. After adding a one-liner comment at the top (# @ai: summarize → narrate → video), a short ai_context.yml, and a few purpose comments inline, it started suggesting useful edits instead of hallucinating new pipelines.
This isn’t magic. It’s just giving the AI a fighting chance.
Why This Helps #
- Fewer repeats – you don’t need to re-explain your project every time
- Better AI responses – edits are scoped to what you actually meant
- Scales well – other devs and future you benefit too
- No lock-in – this works with any LLM, anywhere
It’s a small effort with a big return — especially if you use AI tools regularly.
If You Want to Try It #
There’s a GitHub repo with the v0.1 spec and a starter template.
If you’re curious:
- Add an
@ai:line to one script header - Create a tiny
ai_context.ymlwith the basic flow - Run a real AI session against it and see what changes
That’s enough to feel the difference.
Optional: Bootstrap Prompt for Your LLM #
In the future, tooling can grab a bootstrap prompt directly from something like ai_bootstrap_prompt.txt.
For now, just consider inviting your LLM to work with your code using a quick intro like this:
This project follows the AI-maintainable code pattern. It includes structured context files and inline annotations (`@ai:`) to help you understand the project's purpose, flow, and key relationships. Use those to ground your reasoning before making changes or asking clarifying questions.
Final Thought #
At the end of the day, LLMs are just machines. If we want useful output, they need useful input.
Structure matters. Intent matters. And context — more than anything — matters.
… Huh. Maybe they’re like us, afterall. :)