I’ve been using coding agents daily for the past year or so, and a constant problem I’ve been trying to address is making the agent as fluent as possible with my project so it can produce results like an experienced coworker would.
I wanted the agent to know which specific components the system has and how they relate to each other, without manually pointing to files. To produce code that meets my established conventions and expectations, and to really trust it when it says “it works now”.
But most importantly, I wanted it to be familiar with my way of thinking and past decisions, so when we start a new session, it won’t feel like we are starting from scratch.
At first, I was spending a huge amount of time on a single prompt, trying to provide the agent with everything I knew and explaining my intent as I would to a coworker. It worked surprisingly well - the agent could do miracles when it had the right reasoning at the right time. But it wasn’t scalable. So I started reverse engineering what “right reasoning and understanding at the right time” really means.
The models, the harnesses, and the tools were getting better by the day. But after a few months and after I tried pretty much everything - from creating rules in the early days, to extracting artifacts from sessions and providing them back to the agent through slash commands or MCP tools, and finally to utilising skills today - the same problem kept breaking the habit: the overhead of capturing context at the exact moment you have it. You finish a session, you're tired, the context is at its peak freshness, and that's precisely when you have to stop and document something in a separate file. Nobody does it consistently. I didn't either.
So I thought the problem could be solved through automation, and I tried some hacks using Claude hooks and native Git hooks. When I introduced this in my team, it was chaos - the quality of what we were capturing went down dramatically, and it became clear that forcing the capture was making it worse, not better.
The problem wasn't the habit. It was that I was treating something that evolves as something that sits still.
Then one evening, I was looking at a branch diff, trying to reconstruct why I had made a particular decision two weeks earlier. The commit said:
fix(auth): handle token refresh edge case
Useful. But it told me nothing about why I had done it that specific way and not the more obvious one. The reasoning was gone.
... continue reading