自定义配置 | Token 优化 | 工具链联动 | 批量自动化
| 文件 | 位置 | 作用 |
|---|---|---|
settings.json | ~/.claude/settings.json | 全局权限、工具策略、Hook 配置 |
config.json | ~/.claude/config.json | 用户偏好(主题、模型、输出风格) |
CLAUDE.md | 项目根目录 | 项目专属上下文和指令 |
.claudeignore | 项目根目录 | Claude 忽略的文件模式 |
keybindings.json | ~/.claude/keybindings.json | 键盘快捷键自定义 |
# === 创建专业的 settings.json ===
cat > ~/.claude/settings.json << 'JSONEOF'
{
"permissions": {
"allow": [
"Bash(git:status,git:diff,git:log,git:add,git:commit,git:branch)",
"Bash(npm:test,npm:run,npm:ls,npm:install,npm:update)",
"Bash(node:*,python:*,python3:*)",
"Bash(ls:*,cat:*,find:*,grep:*,wc:*,head:*,tail:*)",
"Bash(mkdir:*,cp:*,mv:*,touch:*)",
"Bash(which:*,echo:*,env:*,pwd:*)",
"Read(/home/**)",
"WebSearch",
"WebFetch"
],
"deny": [
"Bash(rm:-rf:*)",
"Bash(sudo:*)",
"Bash(chmod:777:*)",
"Bash(curl:*|bash*,wget:*|bash*)",
"Bash(>: /dev/*,dd:*)",
"Bash(git:push:--force*,git:reset:--hard*)",
"Read(/etc/passwd,/etc/shadow,/root/**)"
],
"defaultMode": "ask"
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash(rm:*)",
"hook": "warn",
"message": "⚠️ 即将执行删除操作"
}
]
},
"model": "claude-sonnet-4-6",
"theme": "dark",
"outputStyle": "default"
}
JSONEOF
配置字段详解
* 和 **ask | accept | deny)# === 在项目根目录创建 CLAUDE.md ===
cd ~/my-project
cat > CLAUDE.md << 'EOF'
# 项目上下文
## 技术栈
- 后端:Node.js 20 + Express 4.x
- 数据库:PostgreSQL 15
- 测试:Jest + Supertest
## 代码规范
- 使用 const 优先,需要重新赋值时用 let
- 所有异步操作使用 async/await
- 错误处理统一使用 AppError 类
- API 响应格式:{ success: boolean, data?: any, error?: { message, code } }
## 目录约定
- src/routes/ — 路由定义(薄层,只做路由映射)
- src/controllers/ — 业务逻辑处理
- src/models/ — 数据库模型
- src/middleware/ — 中间件
- src/utils/ — 工具函数
## 禁止操作
- 不要修改数据库 schema 文件
- 不要删除 tests/ 下的任何文件
- 不要改动 package.json 的依赖版本
EOF
# === 使用任务分层方法 ===
# 第一层:需求分析(独立会话)
claude -p "分析这个电商项目的代码,列出需要重构的模块,按优先级排序" > refactor-plan.txt
# 第二层:按计划逐个模块执行(多个独立会话)
claude
# 会话:重构用户模块(根据 refactor-plan.txt 第1项)
# /exit
claude
# 会话:重构订单模块(根据 refactor-plan.txt 第2项)
# /exit
# 第三层:整体验证(独立会话)
claude -p "运行 npm test,列出所有失败的测试,逐个修复"
# 让 Claude 审查自己的输出
"请你完成以下任务后,用 // REVIEW 注释标注你可能不确定的地方,
并在最后列出你觉得需要我确认的决策点。
任务:重构 src/services/payment.js"
# 双重检查模式
"先分析这段代码的问题,给出修复方案。
然后,用怀疑的态度重新审视你的修复方案,
找出可能存在的边界情况遗漏。"
# === 开启高精度输出的提示词技巧 ===
# 要求逐行解释
"逐行解释这个函数,包括每一行的:
- 作用
- 可能的异常
- 与上下行的关系"
# 要求给出多种方案对比
"对于这个需求,给出 3 种不同的实现方案:
方案A:最简实现(10行以内)
方案B:最健壮实现(完整错误处理)
方案C:最优性能实现
并为每个方案标注优缺点"
# 要求标注置信度
"回答以下问题,对于每个结论标注你的置信度(高/中/低),
对于低置信度的结论,说明为什么不确定。"
# === 利用 CLAUDE.md 做跨会话记忆 ===
# 在 CLAUDE.md 中记录重要决策
cat >> CLAUDE.md << 'EOF'
## 会话决策记录(2026-06-12)
- 决定使用 JWT 而非 Session 认证(原因:无状态,适合微服务)
- 数据库连接池大小设为 20(压测结论)
- API 版本前缀统一为 /api/v2/
EOF
# 下次会话 Claude 会自动读取这些决策
每次对话中,Claude 需要将全部对话历史作为输入发送,这消耗 input token。你的代码文件、系统提示也计入 input token。输出消耗 output token。
优化核心:减少不必要的输入,提高输出的有效信息密度。
# === 为大型项目创建 .claudeignore ===
cat > .claudeignore << 'EOF'
# 依赖目录(最大的上下文杀手)
node_modules/
venv/
.venv/
vendor/
__pycache__/
# 构建产物
dist/
build/
.next/
.nuxt/
output/
# 压缩文件
*.min.js
*.min.css
*.bundle.js
*.map
# 锁文件
package-lock.json
yarn.lock
pnpm-lock.yaml
# 媒体文件
*.png
*.jpg
*.svg
*.mp4
# 测试覆盖率
coverage/
.nyc_output/
# 日志
*.log
logs/
# IDE 配置
.vscode/
.idea/
EOF
# === Token 消耗对比 ===
# ❌ 低效:一次会话跨多个模块
# "先改用户模块,再改订单模块,最后改支付模块"
# → 上下文累积 100K+ token
# ✅ 高效:一个会话聚焦一个模块
# 会话1:只改用户模块 → 40K token
# /clear
# 会话2:只改订单模块 → 35K token
# /clear
# 会话3:只改支付模块 → 30K token
# ❌ 低效
"分析所有代码"
# Claude 可能读取 200 个文件,150K token
# ✅ 高效
"只分析 src/api/ 目录下的 5 个路由文件"
# Claude 只读 5 个文件,10K token
# === 根据任务选择模型 ===
# 简单任务 → Haiku(最快、最便宜)
claude -p "把这段 JSON 格式化" --model claude-haiku-4-5-20251001
# 日常开发 → Sonnet(默认、平衡)
claude -p "写一个 Express 路由处理函数"
# 复杂分析 → Opus(最强、最贵)
claude -p "分析这个分布式系统的一致性问题" --model claude-opus-4-8
# 在交互模式中,定期检查 token 消耗
/cost
# 当使用超过 50% 时,主动压缩
/compact
# 如果即将切换话题,直接清空
/clear
# === 超大项目(500+ 文件)的使用策略 ===
# 1. 创建完善的 .claudeignore
# 2. 使用 CLAUDE.md 预加载关键信息
# 3. 按子目录分模块使用 Claude
# cd ~/big-project/packages/frontend && claude # 只做前端
# cd ~/big-project/packages/backend && claude # 只做后端
# 4. 每个模块维护自己的 CLAUDE.md
# 5. 使用 -p 模式做快速任务,避免打开交互会话
# === 模式1:用 Claude 生成命令,shell 执行 ===
claude -p "生成一个查找所有大于 100MB 文件的 find 命令" | bash
# === 模式2:Shell 收集信息,Claude 分析 ===
find . -name "*.js" -exec wc -l {} + | sort -rn | head -20 | \
claude -p "分析哪些 JS 文件最长,是否需要拆分"
# === 模式3:Claude 生成脚本,直接执行 ===
claude -p "生成一个检查服务器磁盘空间的 bash 脚本" > check-disk.sh
chmod +x check-disk.sh
./check-disk.sh
# === 用 Claude 生成 Python 数据处理脚本 ===
cat data.csv | claude -p "生成一个 Python 脚本来分析这个 CSV" > analyze.py
python3 analyze.py
# === 管道:Python 输出 → Claude 分析 ===
python3 fetch-data.py | claude -p "分析这些数据,生成摘要报告"
# === Claude 编写 + 调试 Python ===
cd ~/my-python-project && claude
# "写一个 data_processor.py 处理 CSV 文件"
# "运行 python3 data_processor.py,如果有错误请修复"
# === 一条管道完成 git 工作流 ===
# 1. 查看改动
git diff
# 2. 让 Claude 生成 commit message
git diff --staged | claude -p "生成 conventional commit message" | \
xargs -I {} git commit -m "{}"
# 3. 让 Claude 生成 PR 描述
git log main..HEAD --oneline | claude -p "生成 Pull Request 描述"
# 4. 让 Claude 做 code review
git diff main..HEAD | claude -p "审查这些改动,指出潜在问题"
# === 创建 release.sh ===
cat > release.sh << 'SCRIPT'
#!/bin/bash
set -e
echo "📦 开始发布流程..."
# 1. Claude 分析改动并生成版本号建议
VERSION=$(git log $(git describe --tags --abbrev=0 2>/dev/null || echo HEAD)..HEAD --oneline | \
claude -p "根据这些 commit,按 semver 规范建议下一个版本号(只输出版本号如 1.2.3)" --no-color)
echo "📌 版本号:$VERSION"
# 2. Claude 生成 CHANGELOG
git log $(git describe --tags --abbrev=0 2>/dev/null || echo HEAD)..HEAD --oneline | \
claude -p "根据 commit 历史生成 CHANGELOG.md 条目" > /tmp/changelog-entry.md
# 3. 确认
echo "=== CHANGELOG ==="
cat /tmp/changelog-entry.md
read -p "确认发布 v$VERSION? (y/n) " CONFIRM
[ "$CONFIRM" != "y" ] && exit 0
# 4. 打 tag 并推送
git tag "v$VERSION"
git push && git push --tags
echo "✅ v$VERSION 已发布"
SCRIPT
chmod +x release.sh
# === dev-bootstrap.sh:一键初始化开发环境 ===
cat > ~/scripts/dev-bootstrap.sh << 'EOF'
#!/bin/bash
# 用法:dev-bootstrap.sh <项目名> <技术栈>
PROJECT=$1
STACK=${2:-express}
mkdir ~/projects/$PROJECT && cd ~/projects/$PROJECT
git init
claude -p "初始化一个 $STACK 项目,项目名:$PROJECT。
1. 创建基础目录结构
2. 初始化包管理器
3. 创建入口文件
4. 创建 .gitignore
5. 创建 README.md
6. 初始化 git commit" --print
echo "✅ 项目 $PROJECT 已就绪"
EOF
chmod +x ~/scripts/dev-bootstrap.sh
# === auto-fix.sh:自动修复常见问题 ===
cat > ~/scripts/auto-fix.sh << 'EOF'
#!/bin/bash
# 在项目根目录执行:auto-fix.sh
echo "🔍 分析项目问题..."
claude -p "分析当前项目:
1. 检查 package.json 是否有安全漏洞的依赖
2. 检查是否有 ESLint 错误
3. 检查是否有未使用的依赖
4. 给出修复建议" --print
echo ""
read -p "是否自动修复? (y/n) " FIX
[ "$FIX" != "y" ] && exit 0
claude -p "根据上面的分析,自动修复所有可以安全修复的问题。
跳过需要人工判断的架构性修改。" --print
echo "✅ 修复完成"
EOF
chmod +x ~/scripts/auto-fix.sh
# === gen-docs.sh:一键生成项目文档 ===
cat > ~/scripts/gen-docs.sh << 'EOF'
#!/bin/bash
cd "$(git rev-parse --show-toplevel 2>/dev/null || echo .)"
mkdir -p docs
echo "📝 生成 API 文档..."
claude -p "分析项目中的 API 接口,生成 docs/API.md" --print > docs/API.md
echo "📝 生成架构文档..."
claude -p "分析项目架构,生成 docs/ARCHITECTURE.md" --print > docs/ARCHITECTURE.md
echo "📝 生成贡献指南..."
claude -p "根据项目结构生成 CONTRIBUTING.md" --print > CONTRIBUTING.md
echo "✅ 文档生成完毕: docs/"
EOF
chmod +x ~/scripts/gen-docs.sh
~/scripts/ 目录下统一管理~/scripts/ 加入 PATH