the thing that fixed it for me is splitting the prompt into 3 tiny layers:
1. the “this never changes” layer
this is your permanent rules, constraints, tone, safety, whatever. it never updates. it never gets rewritten. the model only reads it.
2. the “task logic” layer
this is the part that changes per task. instructions, goals, steps, formats. it can update without touching layer 1.
3. the “runtime / moment to moment” layer
this is where the actual conversation happens so none of the noise overwrites your core rules.
this sounds obvious but separating these three stops like 80 percent of drift. it also makes it super easy to port the whole structure into other models. i first saw a version of this pattern in one of the god of prompt consistency builds and it kinda clicked how important architecture is vs just clever phrasing.
if u want i can share a copy-paste template for the 3-layer setup too.