Most teams adopting Claude Code get the basics right in the first week โ install the CLI, authenticate, run a few tasks. The teams that actually transform their engineering velocity are the ones that go deeper. These are the 20 Claude Code best practices we've refined across real enterprise deployments: financial services firms running compliance-sensitive code reviews, healthcare platforms automating documentation pipelines, and engineering organisations doing 10-year-old legacy migrations at speed. Note that Claude Code covers the terminal workflow โ if you're also looking to cut developer overhead on architecture reviews, technical docs, and sprint prep, our Claude Cowork for software developers guide covers the complementary desktop layer.
These aren't theoretical. Every tip here came from production friction, a customer support ticket, or a post-mortem on why Claude did something unexpected. If you're serious about deploying Claude Code at enterprise scale, this is the operating manual we wish existed when we started.
What you'll learn: CLAUDE.md configuration, sub-agent architecture, hooks, MCP server setup, security governance, cost optimisation, and team workflow patterns โ 20 concrete tips covering everything between "it works" and "it's production-ready."
Part 1: CLAUDE.md Configuration Best Practices
The CLAUDE.md file is where the difference between a mediocre and an expert Claude Code deployment begins. It's Claude's operating brief for your codebase โ and most teams underuse it. Our complete CLAUDE.md configuration guide goes deeper, but here's the critical foundation.
The most effective CLAUDE.md files read like technical onboarding documentation: they explain why the codebase is structured the way it is, what invariants must be preserved, and how decisions were made. A CLAUDE.md that just lists "always use TypeScript strict mode" is weaker than one that explains your service boundary design, your testing philosophy, and which patterns are legacy versus intentional. Claude reasons better from context than from constraints.
In a monorepo with a Python ML service, a Node API, and a React frontend, a single root CLAUDE.md gets noisy fast. Place a CLAUDE.md in each sub-directory. The root file covers repo-wide rules (branching strategy, PR conventions, security requirements); each sub-directory file covers its specific language, framework, and test patterns. Claude reads all applicable files in scope, composing them at runtime โ so you get context-appropriate behavior without polluting the root.
# /CLAUDE.md (root) ## Repo Structure - /api โ Node 20, Express, Prisma ORM - /ml โ Python 3.12, PyTorch, FastAPI - /web โ React 19, Vite, Tailwind ## Global Rules - All PRs must pass pre-commit hooks - Never commit secrets or API keys - Branch convention: feat/JIRA-123-short-description # /api/CLAUDE.md ## API Service Context - Prisma schema is source of truth for data models - Use Zod for all request validation - All endpoints require JWT middleware except /health
Explicitly list prohibited actions in your CLAUDE.md. This is especially important in regulated industries. A financial services client of ours added a section titled "DO NOT under any circumstances" that listed actions like modifying schema migration files, touching the secrets management module, or changing SSL certificate paths. Claude respects these hard stops because they're framed as engineering invariants, not just preferences.
Always specify how to run tests and lint in your CLAUDE.md. Without this, Claude may guess โ and guessing means running npm test when you use pnpm run test:unit, or running pytest without the required --asyncio-mode=auto flag. Every minute Claude spends resolving a wrong command invocation is a minute it's not solving your actual problem.
Part 2: Sub-Agent Architecture
Claude Code's ability to spin up sub-agents is the feature that separates simple task automation from genuine engineering systems. Used correctly, sub-agents let you parallelise work, isolate context, and prevent one large task from consuming your entire context window. Our deep dive on sub-agents covers orchestration patterns in detail.
Context window management is the discipline that separates professional Claude Code deployments from amateur ones. If a task involves reading multiple large files, making changes across multiple modules, and then running tests โ that's a sub-agent task. The orchestrating agent keeps a high-level view; sub-agents handle the implementation detail. This architecture also means failures in one sub-task don't contaminate the main agent's reasoning.
When invoking a sub-agent, your prompt should specify: the specific files it has permission to touch, what "done" looks like (including how to verify), and what to do if it hits an ambiguity. A sub-agent that can wander into adjacent files and "fix things while it's there" is a sub-agent that will cause unexpected diffs and failed reviews. Scope discipline is the single biggest driver of sub-agent reliability in production.
Claude Code can run multiple sub-agents in parallel. When you're updating documentation across five service directories and none of them share state, run them concurrently โ you'll complete the task in the time it takes for one. But when sub-agent B needs the output of sub-agent A (e.g., running tests after a refactor), chain them sequentially and pass outputs explicitly. Treating concurrency as the default and sequencing as the exception will cut your task completion time by 40โ60% on large codebases.
Are your engineers getting the most from Claude Code sub-agents?
Most teams use Claude Code as a solo assistant. We architect multi-agent workflows that handle entire feature cycles autonomously. Our Claude Code enterprise deployment service includes an architecture review and sub-agent workflow design session.
Book a Free Strategy Call โPart 3: Hooks and Automation
Claude Code hooks let you attach logic to the events in Claude's workflow โ before a tool is called, after a response is generated, when a session starts. This is where Claude Code stops being a coding assistant and starts being a programmable engineering workflow engine. Our guide to Claude Code hooks covers the full event model.
A PreToolCall hook fires before Claude executes any tool โ including file writes, shell commands, and API calls. Use this to add policy enforcement: check that Claude isn't about to write to a protected directory, verify the branch name follows your convention, or block rm -rf patterns entirely. One financial services client uses a PreToolCall hook to route all planned file changes through a change-log audit trail before they're executed. This isn't Claude being restricted โ it's Claude operating inside your existing governance framework.
# Example PreToolCall hook (hooks.yaml)
hooks:
- event: PreToolCall
matcher: "tool.name == 'Write' or tool.name == 'Edit'"
command: "./scripts/validate-write-permissions.sh"
timeout: 5s
on_failure: block
The single highest-leverage hook in most codebases: automatically run your test suite after every file change Claude makes. Not at the end of the session โ after every individual write. This surfaces failures immediately, before Claude has moved on to writing five more files based on assumptions that break due to the first change. The feedback loop compresses from "end of task" to "after each action," which dramatically improves the quality of multi-step refactors.
Hooks run synchronously in Claude's workflow. A hook that takes 30 seconds to complete means a 30-second pause on every tool call. Validate quickly. If you need heavy validation (full test suites, static analysis), run them asynchronously and report back via a summary hook rather than blocking. Target sub-5-second hook execution for anything in the hot path. Reserve slow hooks for PostSession events that don't block iterative work.
Part 4: MCP Server Integration
MCP (Model Context Protocol) is what turns Claude Code from a code editor into a system that understands your entire engineering environment. Done right, MCP servers give Claude access to your Jira backlog, your CI/CD system, your internal APIs, and your observability stack โ all without exporting credentials into prompts. Our MCP server setup guide for Claude Code covers the architecture in depth.
The fastest path to production MCP integration is to expose your internal systems as read-only tools first. Claude can query your Jira board, read Confluence docs, and pull from your internal package registry without any write risk. This gives immediate value โ Claude understands your project context without you pasting it into prompts โ and it builds organisational confidence before you grant write access to production systems. Add write-capable MCP tools only after you've reviewed audit logging, authentication scoping, and approval workflows.
Every MCP server that accesses an external system should authenticate with the minimum permissions required. A Jira MCP tool that can only read issues in a specific project is far safer than one authenticated as a service account with global Jira admin. Scope credentials at tool registration time. This is especially critical in enterprises where MCP tool outputs may be visible in shared Claude Code sessions โ the blast radius of a misconfigured tool should be bounded, not systemic.
Claude can't use MCP tools effectively if it doesn't know what they do or when they're appropriate. Add a section to your CLAUDE.md describing available MCP tools, their purpose, and when to invoke them. For example: "Use the jira-query tool to look up ticket context before implementing a feature. Never invent acceptance criteria โ always read the ticket first." This transforms your MCP tools from capabilities that sometimes get used into tools that get used systematically.
Part 5: Security and Governance
Claude Code security isn't about locking Claude down until it's useless. It's about giving Claude maximum capability within a defined boundary that your security team has signed off on. Our Claude Code enterprise security guide covers the full policy framework, but here's the operational core.
In environments where Claude Code runs on systems with access to internal networks, use Claude Code's network access controls to restrict outbound traffic. Claude Code can be configured to allow-list specific hosts (e.g., your npm registry, your internal pypi mirror, your CI system) and block all others. This prevents a class of supply chain and exfiltration risks that are otherwise hard to audit. Pair this with your existing egress firewall rules rather than treating Claude Code's controls as the only layer.
Claude Code supports isolated git worktrees โ separate working copies of your repository where Claude can make changes without touching your main branch checkout. For any task involving large-scale refactors, dependency upgrades, or schema migrations, have Claude work in a worktree first. You review the diff on a clean branch. Nothing touches your working tree until you explicitly merge. This eliminates the risk of interrupted long-running tasks leaving your working directory in a broken state.
In regulated industries, you need to know who ran Claude, on which codebase, with what instructions, and what changes resulted. Claude Code's session logging captures this. Route logs to your SIEM or centralised log management system. For HIPAA, SOC 2, and ISO 27001 environments, this is non-negotiable. The good news: Claude Code's session logs are structured JSON, which means they're trivially parseable by your existing log pipeline. If you need help building a Claude governance framework, this is something we implement routinely.
Part 6: Team Workflow and Adoption
The best Claude Code configuration in the world fails if your engineers don't use it consistently. Adoption patterns matter as much as technical configuration โ arguably more, because a well-adopted basic setup produces more value than a sophisticated setup nobody trusts.
Different tasks benefit from different interaction patterns. For well-defined, mechanical tasks (adding tests, updating types, generating boilerplate), use Claude Code headlessly โ fire and forget, review the diff. For ambiguous tasks (architectural refactors, debugging unknown failures), use interactive mode and review Claude's reasoning at each step. For documentation, use Claude Code with explicit file scope. Training your team to match mode to task type is the highest-leverage soft skill in Claude Code adoption.
CLAUDE.md should be in version control and reviewed like any other engineering documentation. When a pattern emerges that Claude gets wrong repeatedly, add it to CLAUDE.md. When a new convention is adopted (a new testing library, a new deployment pattern), update CLAUDE.md on day one. The teams with the best Claude Code results are the ones who treat CLAUDE.md maintenance as part of their engineering culture, not an afterthought. Budget 30 minutes per sprint for CLAUDE.md review.
Claude Code produces code faster than human review can keep up with โ if you let it. The right mental model is Claude Code as a very fast junior engineer whose output is always reviewed before merging. Define PR policies that apply to Claude-assisted code the same as human code. Some teams add a "claude-assisted" label to PRs so reviewers know to apply slightly more scrutiny to structural decisions. This preserves the velocity gain while maintaining code quality ownership where it belongs: with your engineers.
Cycle time, PR throughput, test coverage trends, and time-to-close on bug tickets โ these are the metrics that tell you whether Claude Code is working. "Engineers feel more productive" is a lagging indicator. Most teams running Claude Code at scale see a 30โ50% reduction in cycle time for well-defined feature work within 60 days of a properly configured deployment. If you're not tracking baselines before you roll out, you won't be able to make the business case for expanding it. Start your measurement framework on day one.
Get a Claude Code deployment that actually works in production
We've applied every one of these best practices across 50+ enterprise deployments. Our Claude Code enterprise service includes CLAUDE.md architecture, MCP server setup, hooks design, and governance framework โ delivered in a 4-week sprint.
Talk to a Claude Architect โKey Takeaways
The 20 Claude Code best practices in brief: Write CLAUDE.md like an onboarding doc (1). Use nested files for monorepos (2). List prohibited actions explicitly (3). Pin test commands (4). Use sub-agents for large context (5โ7). Enforce security via PreToolCall hooks (8). Auto-run tests with PostToolCall (9). Keep hooks fast (10). Build read-only MCP first (11). Use scoped credentials (12). Document MCP tools in CLAUDE.md (13). Enable network isolation (14). Use isolated worktrees (15). Log sessions for compliance (16). Match task to interaction mode (17). Maintain CLAUDE.md like living docs (18). Pair with PR review, not replace it (19). Measure cycle time and PR throughput (20).