详解我的 Claude Code 配置 —— 规则文件、插件、Hooks、状态栏、记忆系统,以及串联它们的工作流。

Claude Code 是我每天用得最多的开发工具,横跨 Rust、Python、TypeScript 和 C# 项目,一天几百条消息。折腾了几个月,现在这套配置比任何 IDE 插件都顺手。这篇文章把整套配置拆开讲讲。
所有东西都在 ~/.claude/ 下面:
~/.claude/
├── CLAUDE.md # 全局指令(每次会话自动加载)
├── settings.json # 权限、Hooks、插件、状态栏
├── rules/ # 10 个规则文件(代码风格、Git、安全等)
├── projects/ # 按项目的持久化记忆
│ └── <project>/memory/
│ ├── MEMORY.md # 记忆索引
│ ├── user-profile.md
│ └── ...
├── skills/ # 自定义技能(深度调研等)
│ ├── SKILL.md
│ └── templates/
├── statusline-command.sh # 自定义状态栏脚本
├── update-pricing.sh # 自动抓取 Anthropic 定价
└── cache/
└── model-pricing.env # 缓存的定价数据
每次会话都会加载这个文件。我在里面写了:
CLAUDE.md 只做索引,不堆内容。一大坨文字反而容易被忽略。
~/.claude/rules/ 下 10 个文件:
| 文件 | 管什么 |
|---|---|
coding-style.md | 单一职责、函数不超过 50 行、注释说"为什么" |
git-workflow.md | 祈使句 commit、功能分支、提交前跑 linter |
security.md | 不提交密钥、参数化 SQL、仅 HTTPS |
testing.md | 正常路径 + 边界 + 错误路径,各语言测试框架 |
rust.md | anyhow/thiserror、禁止 unwrap()、Service<R: Repository> 模式 |
python-django.md | Django 5 + DRF、mssql-django、managed = False、用 uv 不用 pip |
api-design.md | RFC 9457 错误格式、游标分页、所有路径带限流 header |
patterns.md | Repository 模式、分层错误处理 |
performance.md | 模型选择(Sonnet 80%、Opus 深度推理、Haiku 子代理) |
agents.md | 何时委派子代理、并行执行、插件到任务的映射 |
全局生效,所有项目通用。项目还可以有自己的 CLAUDE.md 做本地覆盖。
写一次规则,就不用再重复了。Claude 会自己在 Rust 提交前跑 cargo clippy,Python 项目用 uv,API 错误格式严格走 RFC 9457。
一共 12 个插件,官方和第三方都有。
官方插件(来自 claude-code/plugins 和 claude-plugins-official):
/commit、/commit-push-pr)/simplify)第三方插件:
第三方插件通过 settings.json 的 extraKnownMarketplaces 装:
{
"extraKnownMarketplaces": {
"interface-design": {
"source": {
"source": "github",
"repo": "Dammyjay93/interface-design"
}
}
}
}agents.md 里还有张映射表,让 Claude 知道什么场景该用什么插件:
| 任务 | 插件 |
|---|---|
| 规划功能 | /feature-dev 或 Plan 模式 |
| 审查代码 / PR | /code-review |
| 简化代码 | /simplify |
| 构建前端 UI | /frontend-design |
| Git 提交 | /commit |
| 提交 + 推送 + PR | /commit-push-pr |
| Rust 诊断 | rust-analyzer-lsp |
| 浏览器测试 | playwright |
Hooks 在 Claude 使用工具前后跑 shell 命令。
PreToolUse —— 任何 Bash 调用前提醒一下:
{
"matcher": "Bash",
"hooks": [{
"type": "command",
"command": "echo '⚠️ Confirm branch and remote before pushing'"
}]
}matcher 按工具名过滤。想按参数过滤(比如只拦 git push)可以加 if 字段。我这里保持简单。
PostToolUse —— 编辑文件后,按扩展名提醒跑对应的 linter:
FILE=$(echo "$CLAUDE_TOOL_INPUT" | jq -r '.file_path // empty')
if [[ "$FILE" == *.rs ]]; then
echo "Reminder: run cargo clippy"
elif [[ "$FILE" == *.cs ]]; then
echo "Reminder: run dotnet build"
elif [[ "$FILE" == *.py ]]; then
不阻塞,就是拍一下肩膀。但确实能拦住不少问题。
settings.json 里的允许/拒绝列表:
允许(自动批准):
Read、Edit、Write、Glob、GrepBash(受拒绝列表约束)WebFetch、WebSearch拒绝(硬性封堵):
rm -rf /、git push --force、git reset --hard、git clean -fdd、mkfs、shutdown、reboot、chmod 777npm publish、cargo publish、curl | bashcat ~/.ssh/*、cat *id_rsa*Claude 就算产生幻觉想跑危险命令,也执行不了。这个在出事之前就该配好。
我最喜欢的自定义。终端底部一行,该看的都在:
[Opus 4.6] misoto22-site | main | 45k 12k | 32% (57k/200k) | $0.45 | 12m30s | 3f +42 -8
从左到右:
费用是从缓存的定价算出来的。一个小脚本每天自动从 Anthropic 定价页抓一次,解析 HTML 表格,存到本地:
if [ ! -f "$PRICING_CACHE" ] || \
[ "$(( $(date +%s) - $(stat -f %m "$PRICING_CACHE") ))" -gt 86400 ]; then
bash "$PRICING_SCRIPT" &>/dev/null & # 缓存超过 24 小时自动刷新
fi不需要 API key。我盯得最多的其实是上下文颜色条 —— 变黄了就该 /compact 了。
记忆在会话之间留存,按项目存在 ~/.claude/projects/<project>/memory/。每条记忆是个带 frontmatter 的 markdown 文件:
---
name: user-profile
description: 用户身份、技术栈和工作偏好
type: user
---
Inovit 全栈开发(汽车轮毂/轮胎/零件行业)...分四类:
MEMORY.md 做索引:
User
- user-profile.md — 用户身份、技术栈和工作偏好
Feedback
- feedback-patterns.md — 行为纠正:pnpm 不是 npm,发布前验证 API 合规性
Project
- project-decisions.md — 跨项目架构决策
Reference
- toolchain.md — 本地开发环境版本信息这些记忆会产生实际影响。Claude 知道我是中文母语者、喜欢简短回复、Efision 项目用 5 层 Clean Architecture 和 Service<R> 泛型、上次在 pnpm 项目里跑了 npm 被我纠正过。这些细节会积累,慢慢改变 Claude 处理任务的方式。
技能是 ~/.claude/skills/ 下的 SKILL.md 文件。和插件不同,技能就是纯 markdown —— 一步一步告诉 Claude 怎么做。用 /<技能名> 调用。
用得最多的是 /ship。一个命令,从改动到 PR 合并:
gh pr checks,10 分钟超时。CI 挂了就读日志、修、推、再等,最多重试 2 次整个流程定义在一个 markdown 文件里,没有代码。Claude 按步骤走,搞不定就停下来问。一条 /ship 顶过去 5-10 条手动命令。
还有个深度调研技能 —— 8 步,把一个模糊问题变成结构化报告:
说"深度调研"、"对比分析"就能触发。中间成果存在 ~/Downloads/research/<topic>/,不会丢。还自带报告模板保持格式统一。
另外还有几个从 interface-design 插件 symlink 过来的设计技能 —— /arrange、/audit、/critique、/distill、/normalize —— 全局可用,不绑定项目。
每个项目有自己的 CLAUDE.md。比如我个人网站的:
pnpm(不是 npm)content/blog/ 下的 MDX 文件@/i18n/navigation(不是 next/link)全局规则管通用标准,项目规则管本地约定。cd 到不同仓库,Claude 自动切换上下文。
CLAUDE.md + 项目 CLAUDE.md + 规则 + 记忆自动加载。/compact。~/.claude/rules/ 跨会话跨项目生效。提示词关掉对话就没了。rm -rf、--force、publish 这些,在你需要之前就该封掉。这套配置大多是从实际踩坑来的 —— 不该发生的 force-push、pnpm 项目里跑了 npm、上下文用到一半代码写了一半。每条规则背后都有个教训。