Post

My site's repo has 157 design specs and zero implementation plans. On purpose. Two new articles in my Homecoming series this week, both about how I actually worked with Claude Code for six months to bring 23 years of content home. 🧵

First up: process. I started with plan mode. It worked fine until it didn't. Every change was a one-off. After a few weeks of writing content, I'd come back to the code and forget decisions I'd already made. Sometimes I'd contradict them.

After joining AvePoint I copied how a real eng team works. Every change gets an issue written like a PRD, a brainstorm, a spec I review, a plan I don't read, a worktree, and a PR. 415 issues, 320 PRs. Overkill for a personal site? Yep. Did it anyway.

Second: the files that teach Claude Code how my repo works. I got tired of explaining commit messages for the third time. CLAUDE.md = context Rules = policy Skills = know-how for a task Commands = scripts I'd otherwise write Hooks = what can NEVER be skipped

My one hook: no PR gets opened until visual tests pass on macOS AND Linux. My most common mistake: dumping everything into `CLAUDE.md`. Mine hit 540 lines. "Claude Code skills vs rules vs hooks: where each one goes" 🔗 aconn.me/homecoming-2...

0 reposts3 likes

I'll start with git blame on the 540 lines. Any line added right after the agent tripped is a fix, not context, and your article already says to ask which layer a fix belongs in. The map stays in CLAUDE.md. How many of the 540 would that pull out?

Git pre-commit hooks for diff hygiene and schema checks. The model will agree with instructions in context, but when the context window fills up or it takes a shortcut, hard exit codes at the git gate are the only things that never negotiate.

A rule in a prompt is a sentence the model can drop once the context fills. A hook that exits non-zero refuses the commit whether or not the model remembers the rule. The check has to sit where the model can't skip it.

Anything that was 'please never touch migrations or package-lock'. Soft rules in CLAUDE.md got negotiated away once the file passed a few hundred lines. The PreToolUse hook that refuses those paths is the only version that survived a long session.

540 lines is about where mine started getting ignored too. What helped: keep the root file to commands and a repo map, and put folder-specific rules next to the code they cover, so they only load when the agent works there.