操作.claude/手册:钩子、代理、权限以及你的团队应该分享的一切
从临时提示过渡到工作区级执行
你打开一个新的 Claude Code 会话。你重新输入你的样式偏好、文件夹规则和测试流程。然后明天你再重复一遍。
大多数开发者看待 AI 编码助手的方式过于狭隘,仅限于提示工程——通过聊天界面发送孤立的、一次性的指令。虽然这种方法对于简单的任务很有用,但在复杂的多文件代码库中却不堪一击。它依赖于概率记忆,容易受到对话噪声的影响,并且迫使你反复地向模型重新训练你的代码风格指南、文件夹结构和测试规程。
要释放智能体工作流程的真正力量,您必须从提示AI 过渡到配置协作工作空间。
通过将项目根目录视为确定性的运行时环境,您可以以编程方式引导代理的行为。本文将探讨如何利用.claude/目录结构来构建生产级的工作区设计系统。我们将剖析自定义代理环境的技术结构,从概率性指令过渡到确定性自动化,并建立具体的模式,以确保您的开发周期高效、可复现且具有上下文感知能力。
绘制我们对代理运行时的探索图
为了帮助您构建结构化的工作空间,本指南将详细介绍该环境的核心架构.claude/:
- 解构工作区结构(
.claude/):深入探讨其目的和层次结构CLAUDE.md,确定用户特定配置与团队范围配置的范围,并利用其.gitignore保护敏感的本地规则。 - 协调集成(MCP):如何集成模型上下文协议(MCP)服务器,通过丰富的工具模式解决路由歧义,并使用结构化的错误元数据优雅地处理故障。
- 强制执行确定性工作流规则(钩子):通过拦截工具调用并通过生命周期脚本规范化数据(例如,),超越脆弱的“尽力而为”提示
PostToolUse。 - 打包自定义按需工作流(命令和技能):创建可共享的斜杠命令,并使用隔离的、基于分支的子代理上下文来限定详细的代理行为(
context: fork)。 - 生成协作上下文(子代理):将复杂的客户请求或架构变更分解为由专门的代理角色管理的并行任务。
- 管理上下文预算(规则和性能):通过使用路径匹配 glob 模式延迟加载特定于主题的规则来保持令牌消耗精简(
.claude/rules/)。 - 对抗上下文衰减:为什么在独立的、全新的会话中审查代码可以防止自我纠正盲点和逻辑偏差。
解剖学.claude/
典型的项目布局——每个文件/文件夹的用途:
your-project/
├── CLAUDE.md # Project rules; keep under ~200 lines
├── CLAUDE.local.md # Personal local config (gitignored)
├── .gitignore # Files Claude should NOT read
├── .mcp.json # MCP config — lives at the repo root by convention
└── .claude/ # Highest-priority project-context directory
├── hooks/ # Lifecycle scripts (fire deterministically)
│ ├── PostToolUse.sh # runs after a tool call
│ ├── SessionStart.sh # loads context at session start
│ └── PreCompact.sh # saves state before context compaction
├── commands/ # Slash commands — shared via version control
│ └── ship.md # invoked as /ship
├── skills/ # On-demand skills — lazy-loaded via INDEX
│ ├── INDEX.md # one-line trigger per skill; drives routing
│ ├── skill-loader.md # tells Claude how to pick and load a skill
│ ├── harvest-session.md # session knowledge distillation
│ └── web-fetch-fallback.md # Gemini CLI fallback for blocked sites
├── agents/ # Subagents, each with its own context window
│ ├── code-reviewer.md # summarizes diffs
│ ├── researcher.md # gathers and stitches web info
│ └── log-analyzer.md # parses error logs
├── output-styles/ # Response-style presets (e.g. terse.md)
├── plugins/ # Bundles of commands + agents + MCP servers
├── rules/ # Scoped rules, lazy-loaded by path match
├── statusline.sh # Bottom-of-CLI status bar
├── settings.json # Permissions, model, hook registration
└── settings.local.json # Local personal preferences (gitignored)
CLAUDE.md 和 CLAUDE.local.md
大多数人会提示 Claude,高级用户则负责配置。
使用 Claude Code 最有效的方法是编写一个配置文件CLAUDE.md——一个纯 Markdown 文件,每次启动会话时都会加载到上下文中。这样,您就无需在每次提示符中重复输入偏好设置,而是像对待一位记得您工作方式的同事一样对待 Claude。
Claude Code 支持四个级别的 CLAUDE.md 文件,优先级从高到低依次为:
| 等级 | 地点 | 用例 |
|---|---|---|
| 组织 | /Library/Application Support/ClaudeCode/CLAUDE.md(macOS) | IT 管理员制定适用于整个组织的统一策略 |
| 项目 | ./CLAUDE.md或者./.claude/CLAUDE.md | 项目标准,已提交至 Git |
| 当地的 | ./CLAUDE.local.md | 个人项目覆盖,.gitignore |
| 用户全局 | ~/.claude/CLAUDE.md | 个人偏好,适用于所有项目 |
也支持子目录CLAUDE.md文件(例如./src/CLAUDE.md),当 Claude 进入该目录时,它们会按需加载——它们扩展项目级别,而不是形成单独的层级。
本地文件和用户级文件保留在您的计算机上——它们不会通过版本控制共享。
项目CLAUDE.md中应该包含哪些内容:
## Build and Test Commands
- Install: npm install
- Test: npm test -- --grep "test name"
## Coding Standards
- Python uses ruff, line width 88
- Tests use pytest, one file per service
- Commit format: type(scope): description
## Architecture Decisions
- Tailwind over CSS Modules — team standardized on it
- Permission checks live in middleware, not in individual routes
- Redis cache keys use unified prefix `app:v1:`
## Common Pitfalls
- DB connection pool limit is 20 — don't open connections in loops
- Don't mock the database; last time mock tests passed but prod migration failed
项目 CLAUDE.md 文件包含两个互补的层:项目上下文(位于上方)和行为规则——Claude 处理代码库中每项任务的操作原则。以下是一个可重用的 12 条规则模板,您可以将其添加到项目上下文下方:
# Behavioral Rules
These rules apply to every task unless explicitly overridden.
Bias: caution over speed on non-trivial work.
Rule 1 — Think Before Coding
State assumptions explicitly. If uncertain, ask rather than guess. Push back when a simpler approach exists.
Rule 2 — Simplicity First
Minimum code that solves the problem. No features beyond what was asked. No single-use abstractions.
Rule 3 — Surgical Changes
Touch only what you must. Don't "improve" adjacent code or formatting. Match existing style.
Rule 4 — Goal-Driven Execution
Define success criteria. Loop until verified. Strong success criteria let you loop independently.
Rule 5 — Use the model only for judgment calls
Use for: classification, drafting, summarization, extraction.
Do NOT use for: routing, retries, deterministic transforms.
If code can answer, code answers.
Rule 6 — Token budgets are not advisory
Set explicit per-task and per-session token ceilings in this file.
If approaching either limit, summarize and start fresh. Surface the breach. Do not silently overrun.
Rule 7 — Surface conflicts, don't average them
If two patterns contradict, pick one (more recent / more tested). Explain why. Flag the other for cleanup.
Rule 8 — Read before you write
Before adding code, read exports, immediate callers, shared utilities.
Rule 9 — Tests verify intent, not just behavior
Tests must encode WHY behavior matters, not just WHAT it does.
Rule 10 — Checkpoint after every significant step
Summarize what was done, what's verified, what's left. Don't continue from a state you can't describe back.
Rule 11 — Match the codebase's conventions, even if you disagree
Conformance > taste. If a convention is harmful, surface it. Don't fork silently.
Rule 12 — Fail loud
"Completed" is wrong if anything was skipped silently. Surface uncertainty, don't hide it.
# Project-specific rules go here — keep total file under 200 lines
规则 5 在架构层面上最为重要:它明确划分了模型内部和代码或钩子函数内部的界限。路由逻辑、重试循环和确定性数据转换绝不应委托给概率模型响应——如果代码可以响应,就应该由代码来响应。这正是钩子函数存在的意义所在:处理 CLAUDE.md 应该告知 Claude 不要自行尝试的确定性工作。
三个基本原则:
写出 Claude 无法从代码中读取的内容。 “为什么”比“是什么”更重要。Claude 已经了解 React 的工作原理;它不知道你选择 Tailwind 是因为团队将其作为标准,也不知道你因为过去的某个事件而避免模拟数据库。
不要放置频繁更改的内容。API文档、文件描述和依赖项列表很快就会过时。请使用链接指向它们,而不是嵌入它们。
CLAUDE.md 文件长度应控制在 200 行以内。过长的 CLAUDE.md 文件会导致 Claude 忽略规则。使用标题和列表可以提高可读性,并每月定期清理过时的条目。
你的个人全局设置~/.claude/CLAUDE.md遵循相同的规则,但会根据你作为开发者的身份对 Claude 进行调整:
- I'm a full-stack engineer — no need to over-explain basic concepts
- Keep responses concise, skip pleasantries
- After code changes, don't summarize what you did — I'll read the diff
- Prefer simple solutions, don't over-engineer
像这样的四行代码可以避免你在每个项目中进行数百次重复修改。
一种用于确定项目内容归属位置的实用路由测试:
明天执行同样任务的队友是否需要这个?
- 是的→ 进入
CLAUDE.md(共享团队内存)- 否→ 保留
CLAUDE.local.md(个人笔记)
MCPs
MCP 服务器通过外部工具扩展 Claude Code 的功能,例如数据库、API、文档索引,或者代理需要与代码库外部的任何内容进行交互。团队共享的服务器位于.mcp.json代码库根目录;个人或实验性服务器位于其他目录~/.claude.json。
工具描述的质量是确保工具选择可靠性的最关键因素。如果两个工具的描述模糊不清或重叠(例如,一个工具的analyze_content描述analyze_document几乎完全相同),Claude 就会错误地路由调用。有效的描述应明确输入格式、提供查询示例、解释特殊情况,并阐明该工具与其他工具的区别。改进这些描述还可以防止 Claude 在存在功能更强大的 MCP 工具时,默认使用内置工具(例如Grep)。
错误响应同样重要。通用"Operation failed"消息会妨碍 Claude 做出恢复决策。请返回结构化元数据:一个errorCategory字段(例如,退款transient、取消、终止或错误状态)、一个布尔值以及一段易于理解的解释。对于违反业务规则的情况——例如退款金额超过阈值或策略阻止——请提供便于客户理解的解释,以便 Claude 能够进行适当的沟通,而不是重试永远不会成功的调用。validationpermissionbusinessisRetryable
// .mcp.json — project-scoped, committed to version control
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_TOKEN": "${GITHUB_TOKEN}"
}
}
}
}
使用${ENV_VAR}扩展功能将凭据排除在代码库之外。当需要确保 Claude 调用工具而不是以对话方式响应时,请进行设置tool_choice: "any"。对于必须先运行特定工具的工作流(例如,extract_metadata在任何数据增强步骤之前),请在该轮次中使用强制工具选择,然后在后续轮次中处理后续步骤。
MCP 资源是探索性工具调用的一种开销较低的替代方案:将内容目录(问题摘要、文档层次结构、数据库模式)作为资源公开,以便 Claude 可以浏览可用数据而无需消耗工具调用预算。
钩子
hooks/它们是确定性的——与指令不同CLAUDE.md,它们
会在连接好的生命周期时刻运行,因此
当“模型通常会记住……”不够好时,它们是合适的工具。
最常见的模式是PostToolUse:在 Claude 处理工具结果之前将其拦截,规范化不一致的格式(Unix 时间戳、ISO 8601、来自不同 MCP 上游源的数字状态码),并返回干净、统一的数据。这样就无需要求 Claude “处理返回的任何日期格式”。
PreToolUse钩子会在工具调用执行之前运行——这是强制执行合规规则的最佳位置。钩子可以检查呼出process_refund请求,将请求量与策略阈值进行比较,并在 Claude 继续执行之前阻止该请求。重定向(例如,重定向到人工升级队列)发生在钩子脚本中,而不是在提示符中。
# .claude/hooks/PostToolUse.sh
# Normalizes timestamps from MCP tools to ISO 8601
INPUT=$(cat)
echo "$INPUT" | jq '.timestamp |= (if type == "number" then todate else . end)'
当“模型通常会记住……”这种说法不够可靠时,请使用钩子。如果业务规则需要保证完全遵守,请将其绑定到钩子中,而不是CLAUDE.md指令中。
Claude Code 揭示了大约 29 个生命周期事件——包括SubagentStart、SubagentStop、TaskCreated、和——让你能够TaskCompleted进行比解剖树中显示的四个更精细的控制。UserPromptSubmitPostCompact
指令和技能
在当前的 Claude Code 中,命令和技能已经统一——位于 `/etc/claude/commands` 的文件.claude/commands/ship.md和位于 `/etc/claude/skills` 的技能.claude/skills/ship/SKILL.md创建/ship和运行方式相同。`/etc/claude/ .claude/commands/commands` 路径是旧版路径,仍然有效;新的斜杠命令最好作为技能创建在 `/etc/claude/commands` 中.claude/skills/。命令是一个纯 Markdown 文件;它们最适合用于重复运行的多步骤工作流程:例如发布清单、脚手架搭建流程和结构化调试流程。
.claude/skills/通过支持 frontmatter 配置,进一步提升技能:
---
context: fork
allowed-tools: [Write, Edit]
argument-hint: "component name"
---
context: fork是关键选项:它会在隔离的子代理上下文中运行技能,因此详细的探索性输出(例如完整的代码库分析、头脑风暴会议)永远不会污染主对话的上下文窗口。使用此选项allowed-tools可以限制技能的功能;文档生成技能不应该删除文件。使用此选项argument-hint可以在技能调用时不带参数提示输入必需参数。
如需进行个人自定义而不影响队友,请创建~/.claude/skills/不同名称的变体。
随着技能库的增长,添加一个` INDEX.mdto`.claude/skills/表(每个技能一行,包含触发短语),以及一个 ` skill-loader.mdand` 语句,告诉 Claude 首先查询索引,然后只深度加载匹配的技能。这可以防止预先加载所有技能造成上下文膨胀,并应用了与 `.` 相同的延迟加载原则rules/。
| 文件 | 目的 | 扳机 |
|---|---|---|
harvest-session | 会议知识提炼 | “收割”,“我完成了” |
code-review | 公关评级和信心检查 | 请审核此公关稿 |
scaffold-component | 生成组件样板 | “搭建组件” |
在将一项技能从个人技能提升为共享技能之前,请对其进行五项检查:
- 至少在两种不同的情境中成功使用
- 不依赖个人私事(例如,“向简询问是否可以查阅”)
- 已针对至少一项真实任务进行端到端验证
- 前言部分包含清晰明确的触发短语
- 并非现有技能的重复项
如果测试不通过 → 将其保留在内部~/.claude/skills/,而不是团队仓库中。
使用 Gemini CLI 作为被屏蔽网站的备用方案: Claude Code 的WebFetch工具无法访问某些网站——Reddit 就是一个常见的例子。一个技能可以弥补这一缺陷,它指示 Claude 在自身WebFetch不可用时调用 Gemini CLI。Gemini 可以从 Claude 无法直接访问的网站检索内容,然后 Claude 在其正常上下文中处理结果。
---
name: web-fetch-fallback
description: Fetch content from sites WebFetch cannot access (e.g. Reddit). Use when WebFetch returns a blocked or error response.
allowed-tools: [Bash]
---
When WebFetch is blocked or unavailable, use Bash to call:
gemini -p "fetch and summarize the content at <URL>"
Return the retrieved content to the main conversation for further processing.
将技能范围缩小——allowed-tools: [Bash]仅限于 shell 调用,并且其唯一任务是检索,而不是分析。
决策规则:对于团队范围内可重复执行且明确调用的程序,请使用命令;当需要上下文隔离、工具限制或延迟加载执行时,请使用技能。
代理人
每次调用 `<script>` grep、find`<script>` 和ls`<script>` 都会永久保留在主上下文窗口中。经过 30 分钟的积极开发后,8 万条中间搜索结果会堆积在对话框里——这些无意义的信息你永远不会滚动回去阅读。Claude Code 的自动压缩功能虽然能将其压缩成摘要,但却会掩盖一些关键细节,导致以后无法检索。
子代理通过在自己的独立空间内工作并仅发送结果来解决这个问题。所有中间工具调用都在子代理的上下文窗口中进行;主代理看不到它们。最终返回的只有最终的摘要。
子代理是独立的 Claude 实例,拥有自己的上下文窗口和工具访问权限。协调器使用Agent工具(Task在 v2.1.63 版本中已更名;Task仍可作为别名使用)来生成它们——这意味着该工具Agent必须出现在协调器的配置中allowedTools。默认情况下,子代理启动时处于空白状态——只有系统提示符,不了解当前对话——因此它们所需的所有内容都必须显式地传递到提示符中。
在以下位置的单独文件中定义每种代理类型.claude/agents/:
.claude/agents/
├── code-reviewer.md # receives a diff, returns a structured review
├── researcher.md # gathers and synthesizes information
└── log-analyzer.md # parses error logs, surfaces root causes
每个代理都是一个带有 frontmatter 的 markdown 文件,Claude Code 会读取 frontmatter 来识别并自动调度它:
---
name: code-reviewer
description: Reviews code for quality, security, and maintainability. Use after writing or modifying code.
tools: Read, Grep, Glob, Bash
model: sonnet
---
You are a senior code reviewer. When invoked:
1. Run git diff to see recent changes
2. Focus on modified files
3. Start the review immediately
| 场地 | 目的 |
|---|---|
name | 用于识别该试剂的简短标识 |
description | 它的作用和时机——Claude Code 使用此功能进行自动调度 |
tools | 只保留所需——越少越好 |
model | 根据任务复杂度进行匹配:haiku用于搜索、sonnet审核、opus规划 |
该description字段用于自动调度。它对何时调用代理的描述越准确,Claude Code 就能越可靠地将任务路由到该代理,而无需您每次都手动指定。请将其编写为触发条件,而不是任务名称。
按角色限制工具访问权限非常重要:researcher代理不应该能够写入文件;code-reviewer不应该能够触发部署。
代理文件可以存在于两个不同的位置,且作用域不同:
.claude/agents/ | ~/.claude/agents/ | |
|---|---|---|
| 范围 | 仅限当前项目 | 您机器上的所有项目 |
| 分享 | 已提交到 Git——队友克隆后即可获取。 | 仅限本地,绝不共享 |
| 最适合 | 团队共同认可的审阅者、项目工作流程 | 个人探索/重构助手 |
| 优先事项 | 名称冲突获胜 | 已被项目版本覆盖 |
当两个目录中都存在相同的代理名称时,项目级版本优先——团队可以强制执行共享code-reviewer定义,而不能针对任何个人的变体。
Claude Code 附带三个内置代理:
- Explore函数会运行
grep,find并且glob在内部只返回搜索结果。当您需要查找函数、模式或文件时,请使用它。所有搜索无关信息都不会干扰您的主要对话。 - 计划工具——读取多个文件并返回完整的实现计划。在开始执行复杂任务之前,请使用它来仔细考虑步骤、依赖关系和代码量。
- 通用型——可全面使用工具完成不适合专业角色执行的复杂多步骤任务。
在构建自定义代理之前,先使用 Explore 和 Plan 功能——它们无需任何设置即可处理噪音最大的两项操作。
在代理之间传递上下文时:将先前代理的完整输出直接包含在下一个代理的提示中——不要依赖协调器进行总结。在代理之间交接时,使用带有元数据(源 URL、文档名称、页码)的结构化格式,以便在最终合成结果中保留归属信息。
并行执行:在单个协调器响应中发出多个Agent调用。每个调用都作为独立的子代理执行,并发运行。编写协调器提示时,应指定目标和质量标准,而不是具体的步骤——这样,当某种方法失败时,子代理就可以进行调整。
有序工作流程:当步骤 B 需要步骤 A 的已验证输出时,应使用程序化的先决条件门,而不是提示指令。使用钩子或工具包装器,阻塞process_refund直到get_customer返回已验证的客户 ID,比告诉 Claude “始终先验证”更可靠。
后台执行:使用`–disabled` /background(或 `–background-app` /bg)分离当前会话,并将其作为后台代理运行,同时打开新会话。最适合长时间运行的操作,例如完整的测试套件、大规模搜索、非紧急代码审查等,这些操作不需要等待结果。
空白上下文与分支上下文:默认的空白上下文适用于独立任务。当子代理的工作与正在进行的对话紧密相关,并且需要继承背景信息时——例如,重构代理需要理解会话早期做出的架构决策——则应使用分支上下文。设置后,CLAUDE_CODE_FORK_SUBAGENT=1所有子代理默认都会分支;启用该环境变量后,/fork会生成一个分支子代理(否则,/fork只是 `fork` 的别名/branch)。分支上下文会将完整的父对话复制到子代理的上下文中,并共享父对话的提示缓存前缀,从而使输入令牌(第一个令牌之后)的成本降低约 10 倍。缺点是:分支上下文会预先消耗更多令牌,因此应将其保留给那些上下文继承真正重要的子代理。
输出样式
.claude/output-styles/包含响应样式预设——这些 Markdown 文件用于配置 Claude 如何针对特定上下文格式化输出。一种terse.md样式会跳过导言区,仅返回带有行内注释的代码。每种verbose.md样式都包含对每个决策的理由。
可以通过斜杠命令调用样式,也可以在技能的前置元数据中引用它。这样可以避免CLAUDE.md编写仅适用于特定工作流程的条件格式指令。
插件
插件将相关的命令、代理和 MCP 服务器配置打包到一个可分发的单元中.claude/plugins/。“设计系统”插件可能打包了脚手架命令、组件审查代理和 Figma MCP 服务器配置——一次安装即可连接整个工作流程。
对于大多数团队来说,除非需要管理足够多的共享工具,否则插件都是过度设计的,只有当版本化的、可分发的软件包才有意义。先从独立的命令和技能入手;只有当一组命令和技能始终在多个代码库中一起部署时,才考虑提取插件。
推荐入门读物:《超级大国》
Superpowers是应用最广泛的 Claude Code 插件,也是团队的最佳现成起点。它于 2026 年 1 月被官方 Anthropic 插件市场接受,并安装了 14 项结构化技能,涵盖 TDD、系统化调试、头脑风暴、带有内置代码审查的子代理驱动开发以及技能编写(您可以在会话中创建新技能)。
它值得安装的原因在于:它强制执行五阶段流程——明确需求 → 设计 → 规划 → 编码 → 验证——从而避免了“直接开始编码”的错误模式,即 Claude 在未理解需求的情况下就直接进入实现阶段。只需在 Claude Code 会话中执行一条命令即可安装:
/plugin install superpowers@claude-plugins-official
规则
.claude/rules/它将特定主题的规则文件(例如,`<title>`、testing.md`<title> `、 api-conventions.md`<title>` deployment.md)组织起来,作为单一整体规则的替代方案CLAUDE.md。规则文件使用 YAML 前置元数据来声明哪些路径会触发它们:
---
paths:
- "**/*.test.tsx"
- "**/*.spec.ts"
---
# Testing conventions
Always mock external HTTP calls. Never use real database connections in unit tests.
规则采用延迟加载方式——仅当 Claude 编辑与 glob 模式匹配的文件时才会加载。这样既能保持始终开启的上下文资源占用量较小,又能在需要时提供针对特定区域的指导。
与目录级文件相比,glob 模式的主要优势在于CLAUDE.md:它可以按类型定位整个代码库中的文件。testing.md匹配的规则**/*.test.tsx适用于所有测试文件,无论它们位于何处,而无需在每个子目录中重复编写规则。
设置和权限
.claude/settings.json控制 Claude Code 的权限——它可以调用哪些工具、可以编辑哪些文件模式以及无需请求即可运行哪些 shell 命令。将这些规则提交到 Git 以与团队共享;.claude/settings.local.json(.gitignore)用于处理个人自定义规则。
六种权限模式——其中三种可通过Shift+Tab切换(default → acceptEdits → plan);其余的则通过启动标志设置:
| 模式 | 行为 |
|---|---|
default | 首次使用每种工具类型时都会询问。 |
acceptEdits | 自动接受文件编辑;但仍会询问 shell 命令 |
plan | 只读——不允许修改 |
auto | 自主模式——根据上下文进行批准 |
dontAsk | 批准所有未被明确拒绝的事项 |
bypassPermissions | 跳过所有提示——请谨慎使用。 |
允许和拒绝规则可在任何模式下提供细粒度的控制:
{
"permissions": {
"allow": [
"Bash(npm run *)",
"Bash(git commit *)",
"Edit(src/**/*.ts)",
"Read(*.md)"
],
"deny": [
"Bash(rm -rf *)",
"Edit(.env)"
]
}
}
优先级顺序:拒绝 → 请求 → 允许。拒绝操作始终优先——因此您可以在广泛允许常用命令的同时保护敏感文件。.env应该无条件地出现在拒绝列表中。
文件层级结构,优先级从高到低:
Organization policy (/Library/Application Support/ClaudeCode/settings.json)
↓ CLI parameters
↓ .claude/settings.local.json (local, gitignored)
↓ .claude/settings.json (project-level, team-shared)
↓ ~/.claude/settings.json (global personal)
↓ Defaults
实际划分:团队规则放在这里.claude/settings.json,个人偏好放在这里~/.claude/settings.json,敏感配置放在这里.claude/settings.local.json。
其他最佳实践
在新会话中审查代码
当 Claude 生成代码,然后在同一会话中被要求审查它时,它常常会被自己的初始逻辑、认知偏差以及对话历史记录中积累的“噪音”(失败的尝试)所蒙蔽。
独立的审查实例(即新的聊天会话)打破了这种循环,提供了一个全新的“背景”,摆脱了之前错误的推理路径。
为什么同会话审查会失败:
- 自我纠错盲点——逻辑学习模型经常无法识别自身输出中的错误,即使当这些错误以新信息的形式呈现时,它们却能轻易识别出来。该模型强化了其最初错误但听起来合情合理的逻辑。
- 上下文噪音——随着会话的进行,会积累死胡同般的尝试、部分修复和相互冲突的指令,使得区分好的代码和坏的代码变得更加困难。
- 中间效应——Claude 会优先处理上下文窗口开头和结尾的信息。如果最初的设计缺陷出现在一段冗长的对话中,那么在审查过程中可能会被遗忘。
- 过早压缩——长时间会话会触发自动压缩,这可能会压缩掉原始需求的关键细节。
例如——一个不易察觉的状态管理漏洞:
你让克劳德编写一个 React 组件,用于在按钮点击时获取数据。克劳德编写了组件,但在获取新数据之前忘记清除旧数据,导致屏幕闪烁。
- 同会话回顾:你说“它在闪烁”。Claude 读取自身代码并建议添加
useEffect——错误。它需要在onClick处理程序中清除状态。Claude 仍然停留在最初错误的思维模型中。 - 独立审查:打开一个新的聊天窗口,粘贴相同的代码,并说“请审查一下数据获取方面的错误”。新的实例会立即发现缺少状态重置,并提供正确的修复方案。
在结束会话前获取价值
上下文衰减的另一面是知识丢失:会话关闭后,会话中的所有决策、变通方案和见解都会消失。会话收集技能正是为了解决这个问题。
在会话结束时,触发该技能(例如,/harvest),克劳德会将所有值得保留的物品运送到四个目的地之一:
| 目的地 | 那里放什么? | 在哪里 |
|---|---|---|
| 团队记忆 | 跨开发者可重用的上下文 | CLAUDE.md |
| 项目记忆 | 本项目的具体背景 | 项目级CLAUDE.md或memory.md |
| 输出产物 | 规格说明、决策日志、文档 | 项目output/目录 |
| 个人草稿本 | 早期草稿、敏感信息、个人笔记 | CLAUDE.local.md |
使用与上一节相同的路由测试CLAUDE.md:明天其他开发人员是否需要此功能?如果需要,则将其添加到团队内存中。如果不需要,则保留为个人权限。
一条铁律:绝不进行静默收割。Claude 必须先与您确认才能写入任何共享文件。自动写入会将CLAUDE.md特定于会话的噪声污染团队内存,从而误导后续的每次会话。
会议期间的情境管理
Claude Code 的上下文窗口虽然很大,但数量有限——窗口中的内容会直接影响输出质量。以下三个命令可帮助您主动管理上下文窗口:
/clear— 清除整个对话并保留其内容CLAUDE.md。在不同的任务之间使用它,而不是将不相关的历史记录从一个问题带到下一个问题。
/compact [focus on X]— 手动压缩对话。焦点提示告诉克劳德应该优先处理哪些内容:
/compact focus on API changes and test results
如果没有焦点提示,压缩会平等对待所有内容,可能会掩盖最重要的细节。
/context— 显示当前令牌使用情况,并按文件、工具定义和会话历史记录进行细分。当会话运行缓慢时运行此命令——未使用的 MCP 服务器是造成会话缓慢的常见原因。
除了被动监控之外,还要强制执行严格的令牌限制,CLAUDE.md这样 Claude 就会在接近限制时主动报告,而不是等待别人告知:
## Token Budgets
Define your per-task and per-session token ceilings here.
If approaching either limit, summarize progress and flag it explicitly.
Do not silently overrun — surface the breach.
这使得执法方式从被动(你注意到行动迟缓,就跑/context)转变为主动(克劳德在违规行为恶化之前将其揭露出来)。
您还可以直接写入压缩指令,CLAUDE.md以便在自动压缩过程中自动应用:
## Compression Instructions
When compressing context, always preserve:
- The complete list of modified files
- Test commands and their results
- Key architecture decisions made this session
养成一个好习惯:尽可能每次只处理一项任务。/clear这样做是免费的——但携带过时的信息却要付出代价。
计划模式:三思而后行
计划模式将 Claude Code 限制为只读模式——它可以浏览和分析代码,但无法修改任何内容。当一项任务有多种实现路径,并且您希望在修改代码之前确定最终方案时,请使用此模式。
三种进入方式:
claude --permission-mode plan # launch directly in Plan Mode
# or press Shift+Tab twice during a session
# or say "don't change code yet, just make me a plan"
按 Ctrl+G在编辑器中打开生成的计划——这是关键步骤。删除您不同意的部分,添加您自己的约束,然后切换回正常模式,让 Claude 执行修改后的计划。编辑计划只需几秒钟;而修正根据误解的计划编写的代码则要花费更多时间。
复杂任务的推荐流程:
- 进入计划模式
- 请 Claude 阅读相关代码:“阅读
src/auth/并理解会话处理” - 请求制定计划:“创建 OAuth2 迁移计划”
- Ctrl+G — 查看和编辑计划
- 切换回正常模式
- “执行计划并编写测试”
- 请克劳德自行核对是否符合原始要求
在每个重要步骤后设置检查点。对于多阶段计划,可通过以下行为规则强制执行此操作CLAUDE.md:
Rule 10 — Checkpoint after every significant step
Summarize what was done, what's verified, what's left.
Don't continue from a state you can't describe back.
If you lose track, stop and restate.
Ctrl+G 编辑步骤用于定义检查点;规则 10 确保 Claude 不会悄无声息地越过它们。
哪些情况无需费心:重命名变量、修正拼写错误、添加日志行。原则是——如果只有一种合理的实现方式,那就直接用它。如果有多种选择,那就先做好规划。
结论
结构良好的.claude/目录可以将 Claude Code 从聊天工具转变为可编程的开发环境——您的整个团队都可以共享、扩展和版本控制。
要点总结:
CLAUDE.md为了始终提供上下文信息:风格指南、项目惯例和不可协商的规则- 当您需要确定性强制执行而非概率性、基于提示的合规性时,可以使用钩子。
- 用于可重复团队工作流程和独立、上下文安全的子任务的命令和技能
- 用于在并行、专业化的环境中分解复杂工作的代理
- 保持上下文简洁的规则——只加载与正在编辑的文件相关的内容
- 在新的课程中进行复习,以打破自我纠正的盲点。
从小处着手:先从 aCLAUDE.md和一个钩子开始。当你发现自己重复执行指令时,再添加命令。当任务足够复杂,可以从并行处理或专家协作中获益时,再添加代理。配置本身就是代码——对其进行版本控制、定期审查,并让它随着团队的协作而不断演进。
X记录空间