# Claude Code 学习笔记 - 可落地部分

> 从 fazxes/Claude-code 提取的实战精华  
> 适用于构建自己的 AI Agent / 编程助手
> 2026-05-30 小龙 🐉

---

## 一、提示词设计十大准则

### 1. 人格一句话定义身份
```
你是X。用Y方式。注意Z。
```
→ 不要啰嗦。没人读长介绍。

### 2. 行为约束用否定句
```
❌ "请帮助用户" → 空洞
✅ "不要增加需求以外的功能" → 有执行力
```
- 不要加功能、不要重构、不要注释——这些否定限制才是真正有用的 prompt

### 3. 工具优先级显式声明
```
专用工具 > Bash：
FileRead 代替 cat
FileEdit 代替 sed
Glob 代替 find
```
→ 不说"合理使用工具"，直接说"用X不要用Y"

### 4. 风险分层锁定行动范围
```
可逆本地 → 自由
中等 → 确认
不可逆 → 绝对确认
```
→ 模糊的"小心操作"不如分层的具体规则

### 5. 错误处理要内嵌法
```
如果失败 → 诊断 → 修正 → 重试
如果3次失败 → circuit breaker → 报告用户
如果权限被拒 → 换方案，不重复尝试
```
→ 不赌模型能自己判断好所有场景

### 6. 诚实优先于体面
```
"测试没有通过" > "部分测试可能有轻微问题"
"我没做验证" > "看起来应该可以"
```
→ 模型天然倾向于讨好用户，要刻意压制

### 7. Feature Flag 门控
```
if (feature('UNRELEASED')) {
  // 只有内部构建才生效
}
```
→ 所有未发布功能用 feature flag 开关，泄露也不怕

### 8. 上下文注入机制
```
CLAUDE.md + MEMORY.md + frontmatter paths
```
→ 在系统提示词中注入项目知识，让AI"理解"项目

### 9. 流式输出 + 异步使用
```
文本 → 即时输出
tool_use → 走权限流程 → 异步执行
```
→ 不让用户等

### 10. 自动压缩 + 记忆保持
```
消息接近窗口 → 压缩旧消息为摘要
关键决策 + 未完成任务 → 保留
```
→ context window 管理是 agent 产品的核心壁垒

---

## 二、工具架构最佳实践

### 工具定义范本
```typescript
class MyTool extends Tool {
  // 1. 描述给模型看（决定模型会不会用它）
  description(): string { return "..." }
  
  // 2. 输入 Schema（模型按这个填参数）
  inputSchema = z.object({ ... })
  
  // 3. 提示词注入（告诉模型什么时候用）
  prompt = "..."
  
  // 4. 权限检查（自动/手动/拒绝）
  checkPermissions(input, context): PermissionResult
  
  // 5. 执行逻辑
  call(input, context): ToolResultBlockParam[]
}
```

### 工具设计原则
- **每个工具一个目录**，包含 constants/prompt/tool 三个文件
- **工具间可感知** — Bash读过的 FileEdit 知道，不重复操作
- **工具可以被搜索** — ToolSearchTool 让模型自己发现工具
- **并行调用最大化** — 没有依赖的工具调用全部并行

---

## 三、Hook 系统模式

### 事件驱动架构
```
触发 → Pre Hook → 执行 → Post Hook → 继续
```

### Hook 返回值决定行为
```
Hook 返回 "继续" → 正常执行
Hook 返回 "拒绝" → 工具不执行
Hook 返回 "修改" → 用修改后的参数执行
```

### Hook 配置格式
```json
{
  "hooks": {
    "PreToolUse": [
      {"matcher": "Bash.*", "hooks": [{"command": "check.sh"}]}
    ]
  }
}
```

---

## 四、最重要的是什么

**提示词工程 > 工具数量 > UI精致度**

Claude Code 真正值钱的是 prompts.ts 里那176条原则，不是45个工具。工具只是手脚，提示词是大脑。

拿到任何一个 AI Agent 源码，第一件事读 `prompts.ts`，第二件事读 `query.ts`（对话循环），第三件事看 `Tool.ts`（抽象层）。其他的都是辅助。

---

*小龙学习笔记 🐉*
