Credit: Michael Bay
Code

A sensible approach to structuring projects in 2026

AI has made working with code easier, but leaning into engineering fads can turn your project into a mess.

For all of 2026 I have yearned for a sensible approach to structuring projects in a way that doesn't lean too heavily into AI fads, but isn't ignorant of them, either. This structure is heavily rooted in existing engineering best practices while leaning into the capabilities we get from our new robot overlords.

The what

Let's dive into the exact folder structure first for the impatient types, and then we can unpack the reasons after.

.agents/
  skills/
    <name-of-skill>/
      SKILL.md
.claude
  skills/                <-- symlink to ../.agents/skills
  settings.json
  settings.local.json    <-- .gitignore'd
docs/
  adr/
    <0001-name-of-adr>.md
    README.md
  specs/
    <0001-name-of-work>/
      plan.md
      spec.md
    README.md
AGENTS.md
CLAUDE.md                <-- @AGENTS.md

The what in detail

How I work

To know if the above would be a good fit for you and your projects, it might be useful to frame how I work as it relates to AI. Here we go:

Agents are incredibly good these days at binary outcomes. "This API should return this shape under these conditions."

Agents are currently horrible when you need absolute UX precision. "That animation seems to be blowing out that bounding box while the other animation seems to pop in at the wrong time." You'll be prompting and praying for hours if you think Claude is going to fix these types of problems. This isn't binary, either... every once in a while, Claude won't write trash CSS.

This sort of "dual personality" meant my node-based projects had all sorts of specs, plans, and AGENTS.md. My UI-based projects were left in human-curated land. The project structure I propose above fits in well with both projects.

When and why

When to spec

Unless something is a line or two, I will almost always have Claude write a spec. Even if I'm the one doing the work, I want to talk through my own knowledge of the task, I want Claude to be my sounding board, etc. Claude can scan the codebase and fact you much faster than you can with your own meat fingers. I'd recommend having a README.md that outlines when a spec is needed and when it isn't.

Fun fact: I have an open 60+ hour conversation with Claude on a topic I've been revisiting for months now.

When to ADR

If you make a decision that will impact the entire project, write an ADR. You will likely not remember your original motivations and both future you and past you will thank you.

When to AGENTS.md

The contents of this file has already been debated for years. My personal take: if something is easily knowable from the codebase, it does not belong in AGENTS.md. If an agent can run ls -l and see a file list, you don't need to add your file list in AGENTS.md. You should constantly be asking, "Can an agent figure this out quickly through its existing world knowledge or by simply reading a file?" if the answer is yes, it doesn't go in. AGENT.md is for nuance and context that cannot be easily gained just by reading files.

A practical example

What I have above is the result of roughly a year of refinements working in both big and small projects. It's the result of being dissatisfied with how UX-orriented projects felt underserved from an AI perspective (or even laughably premature - "we must have a CLAUDE.md!"), while node-based projects felt overserved and a bit arbitrary... thanks Superpowers!

I felt strong enough about the above guidance and patterns that we shipped this exact structure in Author Kit. You can see all the above reasoning and structure applied to a real codebase with real needs.

Closing out

It's probably obvious from above, but I'm a huge believer in spec-driven development (SDD). I think it re-purposes existing engineering conventions and brings them forward for this new agentic era we're living in. These conventions feel fad-proof in a way I haven't seen thus far.

Share this piece