Best practices for two or more developers working on the same project, each running their own Claude Code instance.
Shared config via git, personal state stays local.
Everything in .claude/ (without "local" in the name) is your team contract.
Everything with "local" or under ~/.claude/ is personal.
| Artifact | Location | Committed? | Purpose |
|---|---|---|---|
CLAUDE.md |
Project root | Shared | Team instructions, standards, build commands |
.claude/settings.json |
Project .claude/ |
Shared | Permissions, hooks, MCP servers |
.claude/rules/ |
Project .claude/ |
Shared | Scoped rules by topic or file path |
.claude/skills/ |
Project .claude/ |
Shared | Project-specific skills and commands |
.claude/agents/ |
Project .claude/ |
Shared | Custom subagent definitions |
CLAUDE.local.md |
Project root | Personal | Your personal project preferences |
.claude/settings.local.json |
Project .claude/ |
Personal | Your permission overrides |
~/.claude/ |
Home directory | Personal | Global config, rules, skills |
| Auto memory | ~/.claude/projects/ |
Personal | Each dev accumulates their own learnings |
.claude/rules/ for scoped team rules
testing.md, api-conventions.md, security.md — shared via git. Personal preferences go in ~/.claude/rules/ (not shared).
.claude/settings.json. Personal hooks go in .claude/settings.local.json.
~/.claude/projects/. For team knowledge, promote it into CLAUDE.md or .claude/rules/ instead.
CLAUDE.md, .claude/settings.json, rules, and skills like code changes — review them in pull requests.
Auto memory lives in ~/.claude/projects/ (outside your repo) — no gitignore needed for it.
STATE.md tracks active feature, tier, gate, and branchdocs/builds/ holds build logs per featuredocs/build-layers.md tracks layer progress/build-featuredocs/stakeholders.md — who's involved, roles, contact channelsdocs/operating-model.md — roles, responsibilities, handoffsdocs/automation-inventory.md — scheduled tasks with ownersdocs/playbooks/ — SOPs for repeatable tasksdocs/cadence.md — recurring cycles with next-run datesdocs/sessions/ enable async handoff between devssources/manifest.md tracks ingested sourceswiki/index.md is the topic map.claude/skills/, the other gets the change on next git pull. Treat skill changes like code — PR them.
.claude/settings.json affects both devs. Discuss hooks before committing them.
CLAUDE.md, not memory.
Steps to get your colleague up and running on a shared project:
CLAUDE.md, .claude/settings.json, .claude/rules/, and .claude/skills/ are committed
CLAUDE.local.md and .claude/settings.local.json to .gitignore
claude — it picks up all shared config automatically
CLAUDE.local.md for personal preferences