🤖claude code底层代码引出的agent,skill,prompt编写指南
type
Post
status
Published
date
Apr 3, 2026
slug
claude-code-agent-skill-prompt-guide
summary
从Claude Code源码出发,详解Agent、Skill、Prompt、Hook的完整编写指南,涵盖目录结构、配置体系、参数替换、记忆系统、金融研究和数据分析实战案例。
tags
开发
工具
category
技术分享
icon
password
Comment

快速入门 — 目录结构与配置体系

从源码出发,理解 Claude Code 完整的文件加载机制,建立正确的心智模型。

1.1 两层目录结构

Claude Code 在两个层级读取配置:用户级~/.claude/)和项目级.claude/)。项目级优先级更高,本地覆盖文件(*.local.*)优先级最高。
⚠️ 关键陷阱:Skill 文件必须放在子目录中:.claude/skills/<n>/SKILL.md。直接放 .claude/skills/name.md 将无法被识别。这是 loadSkillsDir.ts 的加载逻辑决定的。

1.2 Settings 优先级

配置按以下顺序合并,后者覆盖前者。Managed(策略)设置优先级最高,无法被用户或项目覆盖。
优先级
来源
路径示例
说明
1(最低)
Built-in defaults
代码内置默认值
2
User settings
~/.claude/settings.json
用户全局配置
3
Project settings
.claude/settings.json
项目配置,可提交
4
Local settings
.claude/settings.local.json
本地覆盖,不提交
5(最高)
Managed / Policy
/etc/claude-code/managed-settings.json
企业策略,强制生效

1.3 CLAUDE.md 加载机制

CLAUDE.md 文件按固定顺序加载,越晚加载优先级越高(模型更关注后出现的指令)。
重要参数(源码核实)
参数
含义
MAX_MEMORY_CHARACTER_COUNT
40000
单个 CLAUDE.md 文件建议字符上限
MAX_INCLUDE_DEPTH
5
@include 嵌套最大深度
HTML 注释
自动剥离
块级 <!-- ... --> 会被 stripHtmlComments() 移除
@include 语法
CLAUDE.md 中可用 @ 前缀引入其他文件,支持多种路径形式:
glob 作用域规则(paths: frontmatter)
.claude/rules/ 目录中的 .md 文件可以用 paths: frontmatter 控制该规则仅在操作匹配路径时注入,节省 token。

1.4 settings.json 与 Hooks 配置

~/.claude/settings.json 控制全局行为,其中最重要的是 hooks。Hooks 是在 Claude 执行工具调用前后自动运行的 shell 命令。
⚠️ 关键警告:Hook 命令通过 stdin 接收 JSON 输入,必须用 jq 解析,不能使用 {{file_path}} 这类模板变量语法。
Hook 类型完整参考
时机
事件
典型用途
PreToolUse
工具调用前
验证、拦截危险操作
PostToolUse
工具调用后
自动格式化、lint、测试
Notification
通知时
桌面推送、Slack 消息
Stop
会话结束
最终检查、日志归档
SubagentStop
子 Agent 结束
汇总 sub-agent 结果
Hook 命令可选字段
字段
类型
说明
timeout
number (秒)
超时时间,防止卡住
statusMessage
string
执行时显示在 spinner 的消息
async
boolean
后台执行,不阻塞 Claude
asyncRewake
boolean
后台执行,exit code 2 时唤醒模型
once
boolean
只执行一次,然后移除
if
string
权限规则语法的条件过滤

自定义 Agent 完全指南

基于 loadAgentsDir.ts 源码,掌握 Agent frontmatter 的每个字段及其精确行为。

2.1 Agent Frontmatter 完整参考

Agent 文件放置于 .claude/agents/<n>.md~/.claude/agents/<n>.md
字段
类型
默认值
源码核实行为
name
string
必填
Agent 的唯一标识符
description
string
必填
模型据此决定何时自动调用该 Agent
tools
string[]
undefined(=所有工具)
缺省=ALL;[]=无工具
disallowed-tools
string[]
[]
明确禁止的工具列表
model
string
继承父级
'inherit' 使用父级模型
effort
string/int
normal
支持 low/medium/high 或整数
memory
string
user/project/local 三种作用域
omitClaudeMd
boolean
false
true=不加载 CLAUDE.md 层级
max-turns
number
最大对话轮数
isolation
string
在独立 git worktree 中运行
background
boolean
false
始终作为后台任务运行
hooks
HooksSettings
{}
Agent 专属 hooks
skills
string[]
[]
预加载的 skill 名称列表

2.2 关键设计模式(来自内置 Agent)

Pattern A:只读快速探索 Agent
disallowed-tools(而非 tools)限制写操作,使 Agent 自动获得新增只读工具。omitClaudeMd: true 跳过 CLAUDE.md 加载,节省 token。
💡 为什么用 disallowed-tools 而非 tools:若用白名单,未来新增只读工具需手动添加。用黑名单只需列出写操作工具。
Pattern B:通用全能 Agent
Pattern C:带跨会话记忆的专业 Agent
Pattern D:带内联 Hook 的 TDD Agent

2.3 Agent Prompt 编写原则

来自 prompt.ts 的指导:
  • Brief the agent like a smart colleague who just walked into the room
  • Explain what you're trying to accomplish and why
  • Terse command-style prompts produce shallow, generic work
  • Never delegate understanding — Don't write "based on your findings, fix the bug"
⚠️ Fork Agent 注意:不应在 fork agent 上设置 model(不同模型无法复用父级的 prompt cache)。

Skill 编写实战

基于 loadSkillsDir.tsskillify.ts,掌握可复用工作流的完整编写方法。

3.1 文件位置规范

Skill 文件必须放在子目录中:

3.2 关键区别:Agent 与 Skill 的工具默认行为

⚠️ 最重要的陷阱
- Agenttools 缺省 → 所有工具可用
- Skillallowed-tools 缺省 → 没有任何工具!
Skill 必须显式声明 allowed-tools

3.3 参数替换语法

Skill 支持参数化,通过 frontmatter 的 arguments 字段声明参数名,在 body 中用 $name 语法引用。

3.4 allowed-tools 权限规则语法

模式
类型
匹配示例
Bash
tool-wide
任何 bash 命令
Bash(git commit)
exact match
只有 git commit
Bash(git:*)
prefix match
git add、git push 等
Bash(npm run *)
wildcard
npm run test、npm run build
Read(*.py)
wildcard
只读取 Python 文件
Write(src/**)
wildcard
只写 src/ 目录下的文件
💡 最小权限原则:不要懒惰地写 Bash,应精确声明需要的命令范围。

3.5 when_to_use 编写规则

when_to_use 是告诉模型何时自动调用该 Skill 的关键字段。Start with "Use when..." and include trigger phrases。

3.6 完整 Skill 模板

📝 Skill 步骤标注规范
- **Success criteria**:每个步骤必须包含
- **Artifacts**:该步骤产生的数据
- **Human checkpoint**:需要暂停等待用户确认
- **Rules**:硬性约束

Prompt Engineering — 基于源码的最佳实践

4.1 System Prompt 组装顺序

4.2 高质量 CLAUDE.md 编写模式

💡 结构建议:Tech Stack 声明技术栈,Architecture 列出目录职责,Rules 列出不可违反的约定,用 @path 引入专项规则。总字符数建议在 40000 以内。

4.3 精细化注入:glob 作用域规则

当某些规则只对特定类型的文件有意义时,用 paths: frontmatter 实现条件注入,节省 token。

4.4 记忆系统精确参数

常量
含义
ENTRYPOINT_NAME
'MEMORY.md'
记忆入口文件名
MAX_ENTRYPOINT_LINES
200
MEMORY.md 最大行数
MAX_ENTRYPOINT_BYTES
25,000
MEMORY.md 最大字节数
💡 MEMORY.md索引文件:每条记忆一行,详情保存在同目录下其他 .md 文件中。

4.5 Agent 记忆作用域详解

Scope
路径
提交 git
说明
user
~/.claude/agent-memory/{type}/MEMORY.md
跨项目通用
project
.claude/agent-memory/{type}/MEMORY.md
可以
项目专属,团队共享
local
.claude/agent-memory-local/{type}/MEMORY.md
机器专属

4.6 CLAUDE.md 最佳实践清单

核心原则:技术栈声明明确版本,架构文档列出目录职责,不可破坏的约定,引用专项规则,glob 条件注入,本地覆盖放 CLAUDE.local.md
常见错误:在用户级写项目特定规则、MEMORY.md 超过 200 行、忘记 .gitignore、Hook 中用模板语法、Skill 文件不在子目录中。

Hook 系统 — 基于源码的精确指南

Hook 是 Claude Code 的自动化引擎。

5.1 27 个 Hook 事件

类别
事件名
触发时机
工具生命周期
PreToolUse, PostToolUse, PostToolUseFailure
工具调用前、成功后、失败后
用户交互
Notification, UserPromptSubmit, Elicitation
通知、用户提交、模型请求输入
会话生命周期
SessionStart, SessionEnd, Stop, StopFailure
会话开始/结束
子 Agent
SubagentStart, SubagentStop
子 Agent 启动和结束
上下文压缩
PreCompact, PostCompact
压缩前后
权限
PermissionRequest, PermissionDenied
权限请求和拒绝
配置/文件
ConfigChange, FileChanged, CwdChanged
配置和文件变化

5.2 4 种 Hook 类型

  • command hook:执行 shell 命令,通过 stdin 接收 JSON
  • prompt hook:用 LLM 评估条件(仅 PreToolUse/PostToolUse/PermissionRequest)
  • agent hook:运行有工具访问权的子 Agent
  • http hook:POST JSON 到远程端点

5.3 Hook stdin/stdout JSON 格式

stdin(Claude Code → Hook):
stdout(Hook → Claude Code):

5.4 if 字段 — 权限规则语法过滤器

模式
匹配内容
"Bash(git *)"
所有 git 命令
"Bash(npm test)"
仅精确匹配 npm test
"Write(*.py)"
写入 Python 文件时

5.5 asyncRewake — 异步纠错机制

asyncRewake: true 表示 Hook 在后台运行,当进程以 exit code 2 退出时,自动唤醒模型修复。

5.6 源码验证的 Hook 配置示例

自动格式化异步 Lint + asyncRewake提交前安全扫描记录 Bash 命令Python 文件后运行测试会话结束通知 — 详见各示例代码块。

5.7 7 步 Hook 验证流程

  1. Dedup 检查
  1. 构建命令(用 jq 提取,不用 xargs)
  1. 管道测试
  1. 写入 JSON
  1. 验证语法
  1. 实际触发验证
  1. 交接
⚠️ settings.json 中的 JSON 语法错误会静默禁用该文件的所有配置!

提高写代码能力 — 配置优化

6.1 模型选择策略

模型
适用场景
opus
复杂架构设计、深度推理
sonnet
日常编码、主开发工作
haiku
快速搜索、轻量 Agent、只读探索

6.2 omitClaudeMd 优化

适合只读搜索/分析 Agent、安全审计 Agent、格式检查 Agent。

6.3 disallowed-tools 黑名单优于 tools 白名单

当 Claude Code 增加新工具时,Agent 自动获得访问权限。

6.4 TDD 工作流 — Agent + Hook 联动

将 TDD Agent 与 PostToolUse Hook 结合,实现每次代码写入后自动运行测试。

6.5 并行代码审查 — 三 Agent 模式

  • 代码复用审查 Agent
  • 代码质量审查 Agent
  • 效率审查 Agent

6.6 CLAUDE.md 编码标准注入

包括 Immutability、Error Handling、File Size、Functions、Input Validation、Security 等标准。

金融研究实战

7.1 金融研究 Agent

使用 memory: project 持久化分析结论,model: opus 获得最深推理能力。

7.2 /analyze-stock Skill

6 步完整流程:Data Collection → Technical Analysis → Fundamental Analysis → Risk Assessment → Investment Thesis → Report Generation

7.3 多 Agent 市场研究工作流

并行三维度:Macro Analysis + Sector Analysis + Sentiment Analysis

7.4 /portfolio-analysis Skill

5 步流程:Load Portfolio → Risk Metrics → Diversification Analysis → Performance Attribution → Recommendations

数据分析实战

8.1 数据分析 Agent

使用 memory: local 保护隐私,max-turns: 40 支持复杂多步探索。

8.2 /eda Skill

6 步 EDA 流程:Load → Data Quality → Distribution → Correlation → Outlier Detection → Report

8.3 数据清洗 Skill

6 步清洗流程:Profile → Missing Values → Fix Types → Remove Duplicates → Handle Outliers → Save Output

8.4 SQL 分析 Skill

5 步 SQL 流程:Load Data Source → Understand Question → Write SQL → Validate → Save Results

8.5 Hook:Python 语法验证(asyncRewake 模式)

💡 语法正确 → exit 0 → 静默通过。语法错误 → exit 2 → asyncRewake 唤醒 Claude 自动修复。

8.6 完整数据分析工作流

  1. 用户输入:/eda ./data/sales.csv
  1. Skill 触发:EDA Skill 加载
  1. Agent 执行:数据分析 Agent 接管
  1. Hook 监控:Python 语法验证自动运行
  1. 自动修复:asyncRewake 唤醒修复
  1. 输出:report.md + PNG 图表
💡 设计小结memory: local 保护隐私;max-turns: 40 支持复杂探索;每个 Skill 步骤都有 Success criteria;asyncRewake Hook 形成静默自修复闭环。
AI 日报 | 2026-04-03AI 日报 | 2026-04-01
Loading...