Claude Code 与 IDE 补全工具的本质区别在于:它运行在终端,能读取整个仓库、执行命令、修改文件、运行测试,并在失败后自主迭代。本文从架构原理讲到工程化落地,给出可运行的配置与脚本。
Claude Code 的本质是一个 ReAct 循环:观察(读文件、看报错)→ 决策(选工具)→ 执行(改代码、跑命令)→ 回灌(把结果加回上下文),直到任务完成。
它内置的工具集包括:Read、Write、Edit、Bash、Grep、Glob、WebFetch。每次工具调用都会把结果注入上下文,形成闭环。
npm install -g @anthropic-ai/claude-code
cd your-project
claude企业环境通过环境变量接入网关:
export ANTHROPIC_API_KEY="sk-ant-..."
export ANTHROPIC_BASE_URL="https://your-gateway.example.com"CLAUDE.md 在每次启动时自动加载,是约束模型行为的核心手段。分层优先级:~/.claude/CLAUDE.md → 项目根 → 子目录。
# 项目约定
- 技术栈:TypeScript + Node 20 + pnpm
- 测试:vitest,提交前必须 `pnpm test`
- 禁止修改 prisma/migrations/
- 新增函数必须有 JSDoc 与类型注解
- 错误处理统一使用 AppError
- 禁止使用 any,必要时用 unknown + 类型守卫这份文件把团队规范前置到模型决策阶段,比事后 review 高效得多。
{
"permissions": {
"allow": ["Read", "Grep", "Glob", "Bash(git diff:*)"],
"deny": ["Bash(rm:*)", "Bash(curl:*)", "Bash(git push:*)"],
"ask": ["Write", "Edit"]
}
}deny 优先于 allow。把 Write/Edit 放入 ask 意味着每次改动都需人工确认,适合生产仓库;个人项目可放宽以提升效率。
claude
> /init # 自动生成 CLAUDE.md
> /review # 审查当前改动
> /compact # 压缩上下文,释放 token
> /cost # 查看本次会话开销claude -p "为 src/utils/date.ts 补充单元测试" \
--output-format json \
--allowedTools "Read,Edit,Bash(pnpm test:*)"--allowedTools 是最小权限的关键:只放开必要工具,杜绝误操作。--output-format json 便于程序化消费结果。
claude -p "查看最近3次提交,总结改动并生成 CHANGELOG 条目" \
--allowedTools "Bash(git log:*),Read,Write"能自主完成"读 diff → 归纳 → 写文件"的链路,是发布流程的天然助手。
claude --resume # 恢复指定会话
claude --continue # 继续最近一次对话Skill 是 Markdown 定义的可复用能力单元,放在 .claude/skills/ 下。
.claude/skills/api-review/
├── SKILL.md
└── scripts/check_openapi.py---
name: api-review
description: 审查 REST API 设计,检查命名、状态码、幂等性与安全性
---
# API 审查 Skill
## 触发条件
当用户要求审查 API 设计或新增接口时使用。
## 执行步骤
1. 用 Grep 找出所有路由定义
2. 检查命名是否符合 REST 规范、状态码是否语义正确
3. 运行 `python scripts/check_openapi.py` 校验 schema
4. 输出问题清单,按严重程度分级
## 输出格式
| 严重度 | 文件 | 问题 | 建议 |配套脚本:
# scripts/check_openapi.py
import json, sys
def check(path):
spec = json.load(open(path))
issues = []
for p, methods in spec.get("paths", {}).items():
for m, op in methods.items():
if not op.get("responses", {}).get("200"):
issues.append(f"{m.upper()} {p} 缺少 200 响应")
if not op.get("summary"):
issues.append(f"{m.upper()} {p} 缺少 summary")
return issues
if __name__ == "__main__":
for i in check(sys.argv[1]):
print(f"[WARN] {i}")Skill 的价值在于把口头规范变成可执行流程,让每次审查标准一致。
Hook 在工具调用前后触发,exit 2 会阻断并把错误回灌给模型,触发自动修复。
#!/usr/bin/env bash
# hooks/post-edit.sh —— 编辑后自动 lint
set -e
FILE=$(jq -r '.tool_input.file_path' < /dev/stdin)
if [[ "$FILE" == *.ts ]]; then
pnpm eslint "$FILE" --fix || exit 2
fi{
"hooks": {
"PostToolUse": [
{ "matcher": "Edit", "command": "hooks/post-edit.sh" }
]
}
}这条机制把"改完再跑 lint"变成"改的同时自动校验",是质量前移的关键。
通过 MCP(Model Context Protocol),Claude Code 能读取工单、查询数据库、操作内部平台。
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "@acme/mcp-jira"],
"env": { "JIRA_TOKEN": "${JIRA_TOKEN}" }
}
}
}deny 优先,破坏性命令一律禁止。--output-format json 落盘,记录每次操作。/compact 定期压缩,长任务拆分。Claude Code 的专业用法,不在"让它写代码",而在用 CLAUDE.md 注入规范、用 Skill 固化经验、用 Hook 自动验收、用 MCP 打通系统。当这套体系建成,它就从个人助手升级为团队的工程基础设施。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。