How I Use LLMs For Coding ======================== I'd self-describe as an intermediate user. My setup isn't the most sophisticated, but I do try to apply the assistants to a wide variety of tasks. Vast majority of the time I'm using claude code. ## Some General Opinions ### Keep it Vanilla I've spent some time tricking out my harness. I've come to the conclusion that this type of stuff is "productivity procrastination". The models and harnesses are continuously getting better. Time invested here trying to improve things beyond the baseline probably has an extremely short lifecycle and will either quickly be implemented in the harness itself or the models will get better and make it irrelevant. ### Test Things Out I keep a few commits and prompts around and periodically test what comes out of my setup against those baselines. Things like CLAUDE.md, etc. tend more be "suggestions" as opposed to "guardrails", and it's helpful to see what actually changes when you modify guidance or add additional skills instead of just going off of vibes. ### Limitations - I find default settings to be: - excessively defensive. - much more imperative than is my preference. - good at producing code that *looks* engineered (e.g. lots of formal data types, lots of tests but they assert the implementation) - Even with guidance and tweaking, I have not found that the models are good at synthesizing concepts that simplify the understanding of a problem. - For example, there's a tendency to add more if/else branches instead of figuring out the right interface and polymorph-ing over it. ## How do I use it I try to keep things relatively simple because the harnesses have consistently been implementing features that I want in the weeks or months after I first want them. The main functionality I want is to be able to easily inject useful context into a session quickly across either harness (`codex` or `claude`). I've actually settled on using skills for this: it's an easy way to give a short name and a slash command to a chunk of context that you want to quickly inject into a session. I maintain: - In my dotfiles, an `agents/` folder that contains a `skills/` folder. - I have individual skills implemented in a way that's relatively harness-neutral. - This is symlinked to `~/.agents` where codex picks it up, and is also symlinked to `~/.claude/skills` - I've versioned my user-level `.claude/` folder in my dotfiles and only track `settings.json` and `CLAUDE.md`. - I've versioned my user-level `.codex/` folder in my dotfiles and only track `config.toml` and `AGENTS.md`. This lets me easily set some user global context and quickly inject context of different kinds into a session with a relatively lightweight footprint that's harness-neutral and relatively future-proof to the features they might develop.