emi.higgins

ai-readiness repo checklist (the bare minimum)

date
tags
ai, agents, checklist, claude
links
dev.to

TL;DR
coding agents are like a new hire thats also left out of every important meeting. they see a repo's code and its commit history, but everything else (team coding standards, naming rules, insight into why a service talks to another one the way it does, etc) lives somewhere they can't read. I've set up a lot of repos for claude code and other coding agents at this point, and this post are the starting point conventions I keep coming back to.

my (non-exhaustive, always in-progress) basic conventions:

the model isn't the bottleneck, its the context. and catching a violation when the code is generated is always better than catching it during review.

lessons learned: a rule in prose is a suggestion, and a stale rule is worse than a missing one.


a coding agent opens your repo and sees exactly 2 things: the code and the commit history. everything else, it guesses. these are the standards I use so it doesn't have to. they assume claude code, but most carry over to any agent that reads an instructions file at the repo root.

the instructions file

- `docs/architecture.md` — **read before changing anything in `src/`.** how the services talk to each other, and why
- `docs/status.md` — **read first.** what's done, in progress, and next
- `src/api/` — HTTP handlers, one file per resource
- `scripts/` — build, test, and seed scripts; use these instead of running tools directly
Enter fullscreen mode Exit fullscreen mode

rules

enforcement

a rule in prose is a suggestion. anything that has to hold gets enforced by something that doesn't depend on the agent remembering it.

blocked_runners="jest|eslint|tsc|vitest|mocha|prettier"

if echo "$command" | grep -qE "(^|[;&|]\s*)(npx\s+|pnpx\s+)?(${blocked_runners})(\s|$)"; then
  # deny with: "Do not run test runners directly. Use the project's npm/pnpm scripts
  # instead (e.g., 'npm run test:unit', 'npm run lint'). Check CLAUDE.md for the correct commands."
Enter fullscreen mode Exit fullscreen mode

a list of what broke

project status and scratch space

docs drift from the code the moment nobody is required to update them. so status gets one home, and updating it is part of done.

## acceptance criteria
- [ ] endpoint returns 404 for unknown IDs, with a test
- [ ] `docs/status.md` updated to match
Enter fullscreen mode Exit fullscreen mode

skills

only when the project earns it — for most repos this is overkill.

name: add-endpoint
description: Add a new REST endpoint with its handler, validation, and tests. Use when asked to
  "add an endpoint" or "expose X over the API". NOT for changing the database schema (use
  write-migration).
Enter fullscreen mode Exit fullscreen mode

when it doesn't work

an agent loses MCP access with no error. the tools: allowlist in agent frontmatter doesn't support wildcards — mcp__server__* is read as a literal tool name. restrict with disallowedTools: instead. permission rules in settings.json do support wildcards, which is why it's easy to assume frontmatter does too.

the agent confidently follows an outdated rule. a stale rule is worse than no rule, because the agent trusts it. keep one source file other agents point at instead of copies, and put the anti-drift instruction in the file itself: "when either side changes, re-sync so the two don't drift."

limits

none of this makes the agent right, only informed, and hooks and validators catch only what someone wrote a check for. it's per-repo too — conventions shared across repos need a shared home, like a plugin, or they drift.

Comments and reactions on dev.to →


← all posts