Articles
Longer pieces on software craft and on working with AI coding agents, newest first. Each one links to the tenets it draws on.

Cursor rules with examples for five languages
Where Cursor's .mdc rules go and how alwaysApply, globs and description decide when each one loads, with real rules for five languages.

Pre-commit hooks for people and coding agents
Pre-commit hooks run your checks before each commit. Set them up in five languages, run the same check in Claude Code's hooks and keep CI as the final gate.

Refactoring with a coding agent in small steps
Refactoring changes code's structure and keeps its behaviour. With a coding agent: tests first, one named refactoring at a time and checks after every step.

SOLID principles, with examples in five languages
SOLID principles explained, each with a short example in TypeScript, JavaScript, Python, Java and PHP, and where the Prickles canon differs.

Spec-driven development with specs agents can run
Spec-driven development means writing the spec before the code. With a coding agent, the spec only helps if the agent can run it. Here's how, with an example.

Technical debt examples and how to stop adding it
Technical debt means extra work on every change because the code is in the wrong shape. Examples in five languages and how to stop adding it with lint gates.

Vibe coding best practices for cleaning up an app
To clean up a vibe-coded app, add a lint gate first, record what fails as a baseline, then have your coding agent fix one area at a time while the gate checks.

CLAUDE.md vs AGENTS.md and which agent reads each
Claude Code reads CLAUDE.md and most other coding agents read AGENTS.md. Here's which file each agent reads and how to keep one copy for all of them.