Skills are only one artifact. Teams that only debate the model miss the other levers: repo instructions, hooks, skills, plugins, MCP servers, and LSPs.
Give Claude enough context to know where to look, then load deeper docs only when the task needs them. AGENTS.md / CLAUDE.md should be indexes, not manuals. Root files are for routing, critical gotchas, and broad conventions. Subdirectory files are for local commands and local rules. Skills are for reusable expertise or specialized workflows that should load on demand.
Project instruction files load automatically, so a bloated root file becomes a recurring tax and competes with the task. Anthropic's large-codebase guidance says successful deployments keep root context focused, layer subdirectory context, scope test/lint commands locally, and use skills for on-demand expertise.
How progressive disclosure works in practice
Skills are fine. The artifact matters less than the habit. Three concrete moves do most of the work:
- Keep the root
AGENTS.md / CLAUDE.md short, ideally under ~60 lines. It loads on every prompt, so every line is a recurring tax on every turn. Vercel's evals found that compressing a sprawling instructions file into a short, static routing table outperformed dynamic skill retrieval (100% vs 79% pass rate). Treat the root file as the table of contents, not the book.
- Make the root file a routing table. A small map of "if the user is asking about X, read
@path/to/X-guide.md first." Claude reads the table, follows the pointer, and only then does the deeper file enter context. The detailed doc stays out of the prefix until a task actually needs it. The vault's own AGENTS.md is a working example, a 3-column routing table plus a 5-step workflow, everything else lives behind @-pointers.
- Put
AGENTS.md files in subdirectories too. As Claude traverses the repo to do the work, it discovers the local AGENTS.md for that subtree and loads its rules in context. That gives you discovery-time progressive disclosure for free, root-level rules apply everywhere, subdirectory rules apply only when Claude is actually working in that subtree. Anthropic's large-codebases guidance specifically calls this layering pattern out as what successful deployments do.
If your root file is more than a screenful, the progressive-disclosure principle is being violated, no matter how many skills you've installed.
Capture lessons after long or wandering sessions
When a session ran long because you had to redirect Claude, or you noticed it took several turns to figure out what you actually wanted, that's a signal the harness is missing something. Don't just close the laptop, the next session will repeat the same exploration.
Before ending the session, ask Claude for a short lessons-learned doc while the context is still fresh. Capture what was unclear, what convention was missing, what tool it had to discover, and what the answer should look like next time. Save it as a normal vault note (something like lessons/<topic>.md), then add a row to the root AGENTS.md routing table pointing the relevant task at it via @lessons/<topic>.md. The next time Claude touches that area of the codebase, the routing table sends it to the lesson before it starts guessing.
When Claude had to write custom code to get your goal done, turn that code into a reusable tool for the next session. Make it a small script in your repo, built agent-aware following Justin Poehnelt's rewrite-your-CLI-for-agents pattern (a describe subcommand, --json output, meaningful exit codes, no interactive prompts). A lessons doc is a hint. A tool enforces the lesson each time it runs. Update these tools often as the work changes.
This is the manual sibling of the Stop-hook pattern Anthropic recommends in the large-codebases post (where a Stop hook reflects on the session and proposes CLAUDE.md updates automatically). Dan Shipper made the same argument at the AI Engineer Code Summit 2025, "persist the learning from every session back into AGENTS.md." When an agent fails or wanders, the fix often belongs in AGENTS.md as a new routing-table row, convention, or workflow step, not just in your head.
The claude-code-setup plugin
claude-code-setup is Anthropic's first-party recommender for harness configuration. It ships as a skill in the official marketplace and Claude invokes it to scan your codebase and recommend the top 1-2 automations across five categories:
- MCP Servers: external integrations (context7 for docs, Playwright for frontend).
- Skills: packaged expertise (Plan agent, frontend-design).
- Hooks: automatic actions (auto-format, auto-lint, block sensitive files).
- Subagents: specialized reviewers (security, performance, accessibility).
- Slash Commands: quick workflows (
/test, /pr-review, /explain).
The skill is read-only by design, it analyzes but doesn't modify anything. You get a tailored list of "here is what would help most for this repo," then decide what to actually install. It surfaces missing setup without committing you to a change.
Hooks are not just gates, they're how the harness improves itself
Most teams think of hooks as scripts that prevent Claude from doing something wrong (block writes to a path, enforce lint, intercept a dangerous command). Anthropic's large-codebase post highlights the more valuable use:
- Stop hooks can reflect on what happened during a session and propose
CLAUDE.md updates while the context is fresh. The harness gets better after each task instead of decaying.
- Start hooks can load module-specific context dynamically, so every developer gets the right setup for the part of the codebase they're touching without manual configuration.
- PreToolUse / PostToolUse hooks enforce linting and formatting deterministically, more consistent than asking Claude to remember an instruction.
Repeated manual correction belongs in a hook. Repeated context loading belongs in a hook. Lessons from a session should go into the harness, not stay in your head.
Configuration review every 3 to 6 months
Instructions written for the current model can work against a future one. Anthropic specifically calls this out, a CLAUDE.md rule that tells Claude to break every refactor into single-file changes may have helped an older model stay on track, but it prevents a newer one from making coordinated cross-file edits it now handles well. Skills and hooks built to compensate for specific model limitations become overhead once those limitations no longer exist.
Plan to review the harness every 3 to 6 months, and definitely whenever performance feels like it has plateaued after a major model release. Cut anything that's compensating for a problem the current model doesn't have. Run claude-code-setup during the review pass for a second opinion on what's still missing.