I included the date because this stuff changes so fast it will be different tomorrow I’m sure.
I’m just going to dive in. Lets start with some guidelines
Guidelines
Pay attention
Step 1 is to realize that this stuff changes so ridiculously fast that you’re out of date the moment you use some new tool or pattern. There are two things to keep in mind:
Read the news
Stay up to date, especially with provider updates like Anthropic, Open AI, Gemini etc. They are playing tennis with who has the best coding model at this point, but for me Claude 4 has blown everything else out of the water currently.
For example: Claude 4 Best Practices
Stop reading the news
Don’t forget we’re here to get shit done. Spend some time refining your setup, keeping up with the world, sure. But don’t forget to act. A big part of working with LLMs is this weird new prompting/chat soft-skill. You have to hone it and refine it.
Don’t test the machine
I often did this myself starting out, which is shoving some half-assed “fix X bug” prompt at Claude to see if it would do what I wanted it to do. Protip: it’s not a person. It's a text machine, a word cannon, that takes text and makes text. We’re just learning how to use it in all these fancy ways. If you have a thought about things like:
where it should probably look to find something
what the root cause of the bug is
an edge case it should consider
TELL it that stuff. Occasionally when working on tools for other developers to enhance their experience with LLMs I’ll try and prompt it like a doorknob, but when I’m actually using it to get shit done, it gets as much info as I can feed it.
Learn when not to use it
You’re going to have to build up instincts around when you have the kind of problem an LLM will help you with. No one can really do this for you, you just have to try it and see. It gets easier over time.
Tools
Zed
I personally much prefer zed over Claude Code, which is the other contender here. Their UI is excellent and has a whole bunch of whistles and bells that you’ll appreciate more once you figure things out. I still use Claude models, but I don’t use Claude Code.
Zed Pro
I don’t know how long this will last, but Zed’s pro plan gets past Anthropics rate limits. It costs quite a bit once you get past your allotted prompts. Personally, I value my time at a ridiculous premium, $500/mo is chump change for something that can make me 20-30% more effective. No hard numbers on how much more effective it is making me, but the potential is there. Some days it wastes more time than it saves, and sometimes it saves me 6 hours in one fell swoop. I’m learning to optimize for those latter cases.
MCP Servers
Personally, the only MCP servers I care to use currently are the Ash AI dev MCP server and Tidewave. Why do I need a GitHub MCP server when it can use `gh`? Besides, most of the time I don’t want it screwing around with that stuff. How I conduct myself on the internet is personal, not something I’m interested in delegating to a machine.
Rules Files/Context
Global Rules
I have two rules files that apply 100% of the time. You should have some too. They aren’t amazing, but they are, so far, getting the job done. The way that you apply these depends on what you’re using. Claude expects `CLAUDE.md`. Other things AFAIK are looking for `AGENTS.md`. In zed you manage them in a rules GUI, but it also looks for `AGENTS.md` too.
Usage Rules
Crowdsource your rules. Teach your agent where to find rules on how to use stuff (i.e docs). In Elixir, and with Ash Framework, we’re working on how this can work, and we’re pushing a pattern called usage-rules.md. I can run one command to create “breacrumbs” telling agents where to look for the rules of packages that I want it to use.
Situational Rules
In Claude Code, these are done via slash commands. With Zed, it’s under the agent three-dots button in the top right. Click on rules. You can select which rules always apply by marking them as default rules. Then, to use them, you type `@rule` and it will give you an autocomplete of your rules list.
I have three situational rules files currently, which map to workflows that I want the LLM to follow depending on what we’re doing.
Which brings us to:
Prompting
At the end of the day, all your rules just get put into the prompt/context that you send to the LLM. Some things to keep in mind:
LLMs do not KNOW anything
Make your LLM do research, and load that research up into the context window, token use be damned. Make it very clear that they are to research heavily.
Collaborate on a plan file
Have it build and collaborate on plan documents. When it’s made a plan, open it up, add a bunch of todo comments to the plan, and tell it to review (or just tell it what to change). This planning step is crucial because what you’re actually doing, is collaborating with the LLM on a better prompt for the LLM. The plan document performs so many useful functions that it is hard to count.
Keeps the LLM on track
The plan can be resumed at any time
The plan can even be committed or shared as a trimmed down version of what you and the LLM did. Will humans read it? Probably not. If only we had a magic machine that could do a whole bunch of cool shit if given a bunch of relevant text…
Acts as a clarified feedback mechanism for the work the agent is doing.
When you have it load up things like “risks” and “unknowns” into the plan, you’re priming it to avoid mistakes but also you’re informing your *own* engineering process.
Do <this> like <that>
LLMs are amazing at “translation” and “reformatting”. So if you can point it to some code that is “kind of” like what you want right now, you’re going to get wildly better results.
Iterate on your rules
When you notice that the agent is doing something you don’t like often, or is repeatedly not doing something you want it do, edit your rules file. Bonus points for having the agent propose changes to the rules for you. Claude Code is good for this, zed is not since the rules don’t live in the codebase or in a place that its easy to point the agent at as far as I can tell.
Use Ash Framework
This is just a plug for my other tools, not really relevant to the above. If you’re interested in my other work, see:
The new Ash AI package for building AI enabled applications
Feedback
Like these ideas? Let me know?
Have some constructive feedback or ideas? Lets chat ❤️
Hate everything about this post? Make sure to smash that like and subscribe.
Thanks for sharing Zach, and thanks for the mix usage_rules.sync pattern 👌.
I’m a vim user myself so I’m a bit reluctant to leave the terminal for a different editor, but I’ve been eyeing Zed for a while. Curious to know which bells and whistles are your favorite there.