A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Claude Code自动提示词优化Hook:谷歌提示词圣经 + 5任务元提示词 | Auto prompt optimization Hook for Claude Code
Role-first + Outcome-contract + Tagged structure → 自动执行的 Hook
🔗 GitHub仓库:https://github.com/KimYx0207/HookPrompt
老金的开源知识库,实时更新群二维码:https://my.feishu.cn/wiki/OhQ8wqntFihcI1kWVDlcNdpznFf
把 role-first、结果契约和结构化提示词变成自动执行的 Hook 你随便说两句大白话,AI自动翻译成专业提示词
这个不行、报错了、帮我看看 这类短但有任务意图的输入现在会触发优化好的、继续、ok 等纯确认回复仍然跳过优化additionalContext,保留用户可见的完整提示词优化体验#、##、图片路径等被渲染成标题HOOKPROMPT_COMPACT_CONTEXT=1 时才使用短后台展示契约📝 原始输入 / 🔄 优化后的理解 / ✅ 优化后的完整提示词.codex/hooks.json 和 .codex/hooks/user-prompt-submit.jshookSpecificOutput.additionalContext,避免被错误包装成只显示给 UI 的 systemMessageprompt 字段,不会把整包事件 JSON 当成用户需求优化<MANDATORY_FORMAT_INSTRUCTION> 确保回复始终以固定格式开头📝 **原始输入**: 开头,否则视为Hook失效test-hook.js 4/4 测试用例全部通过,验证了过滤逻辑和优化触发机制messages 数组中的用户消息messages 数组、prompt 字段)和纯文本格式/clear、/help 等)messages 数组格式和纯文本格式的输入/clear、/help、/commit 等)/clear 被误解为项目清理操作的问题UserPromptSubmit键名(PascalCase)和数组结构test-hook.js用于本地测试hook功能$HOME和项目目录双重查找用户发消息:"做个登录"
↓
Hook拦截
↓
调用 role-first + outcome-contract 优化逻辑
↓
输出优化后的专业提示词:
📝 原始输入:做个登录
🔄 优化后的理解:
- Context: Web应用,生产级安全
- Task: 实现JWT认证+bcrypt加密
- Format: 完整代码+测试
✅ 优化后的完整提示词:[详细的专业提示词]
↓
Claude收到优化后的版本
↓
Claude自动执行任务
提示词Hook/
├── .claude/
│ ├── hooks/
│ │ ├── user-prompt-submit.js ← Node.js版(推荐,跨平台)
│ │ └── user-prompt-submit.sh ← Bash版(Mac/Linux)
│ ├── prompt-optimizer-meta.md ← 优化提示词模板
│ ├── settings.json ← Hook配置(当前项目)
│ ├── settings.json.example-windows ← Windows配置示例
│ └── settings.json.example-unix ← Mac/Linux配置示例
├── .codex/
│ ├── hooks/
│ │ └── user-prompt-submit.js ← Codex适配入口
│ └── hooks.json ← Codex Hook配置
└── test-hook.js ← 测试工具(验证hook功能)
node test-hook.js(可选,验证功能)# 复制整个.claude目录到你的项目
cp -r .claude /你的项目根目录/
如果你的项目使用 Codex,也复制 .codex:
cp -r .codex /你的项目根目录/
重要:确保settings.json使用正确的格式(见下方)
Windows:
# 复制到全局配置目录
Copy-Item -Recurse .claude\hooks $HOME\.claude\hooks
Copy-Item .claude\prompt-optimizer-meta.md $HOME\.claude\
Mac/Linux:
# 复制到全局配置目录
mkdir -p ~/.claude/hooks
cp .claude/hooks/* ~/.claude/hooks/
cp .claude/prompt-optimizer-meta.md ~/.claude/
chmod +x ~/.claude/hooks/*.sh
然后编辑 ~/.claude/settings.json(如果不存在就创建):
Windows用户:
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "node",
"args": ["C:/Users/你的用户名/.claude/hooks/user-prompt-submit.js"]
}
]
}
]
}
}
Mac/Linux用户(Node.js版):
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "node",
"args": ["~/.claude/hooks/user-prompt-submit.js"]
}
]
}
]
}
}
Mac/Linux用户(Bash版):
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash",
"args": ["~/.claude/hooks/user-prompt-submit.sh"]
}
]
}
]
}
}
⚠️ 重要:
- 键名必须是
UserPromptSubmit(PascalCase),不是user-prompt-submit- 值必须是数组,包含hooks对象
- 必须包含
type: "command"字段
| 输入类型 | 是否优化 |
|---|---|
Claude Code内置命令(/clear、/help等) | ❌ 不优化 |
短诊断 / 修复意图(这个不行、报错了、帮我看看) | ✅ 优化 |
| 无任务含义的短输入 | ❌ 不优化 |
| 简单回复("好的"、"继续") | ❌ 不优化 |
| 正常需求描述 | ✅ 优化 |
优化完成后,Claude会自动执行任务,不需要二次确认。
Codex 的 UserPromptSubmit 会把 hook 的标准输入包装成 JSON。Node.js 版本会提取其中的 prompt 字段,并输出:
{
"hookSpecificOutput": {
"hookEventName": "UserPromptSubmit",
"additionalContext": "..."
}
}
不要把优化内容重新包装成 systemMessage。systemMessage 主要用于 Codex UI/事件提示,不等同于给模型追加开发者上下文。
你说:
做个登录功能
Hook优化后:
📝 **原始输入**:做个登录功能
🔄 **优化后的理解**:
- **Context(上下文)**:Web应用,资深全栈工程师,生产级安全要求
- **Task(任务)**:实现完整的用户登录功能
- **Format(格式)**:完整代码文件 + 测试用例
✅ **优化后的完整提示词**:
[详细的专业提示词...]
你说:
这是什么?
输出:原样输出,不浪费时间优化。
项目中提供了两个配置示例文件:
.claude/settings.json.example-windows - Windows平台配置.claude/settings.json.example-unix - Mac/Linux平台配置临时禁用:重命名settings.json为settings.json.bak
切换Bash版本(Mac/Linux):
修改.claude/settings.json中的command和args:
{
"hooks": {
"UserPromptSubmit": [
{
"hooks": [
{
"type": "command",
"command": "bash",
"args": [".claude/hooks/user-prompt-submit.sh"]
}
]
}
]
}
}
编辑 .claude/prompt-optimizer-meta.md:
使用提供的测试脚本验证hook功能:
node test-hook.js
测试脚本会:
prompt 字段)⚠️ 重要提示:本次更新是为了适配 Claude Code v2.1.23 引入的 Hook 协议变更。旧版 Hook 脚本在新版 CLI 中会失效,表现为无响应或报错。
如果您遇到 Hook 无法工作的问题,可能是由于 Claude Code 版本更新导致的协议不兼容。以下是关键的修复总结:
旧版本协议将事件名暴露在外层,Claude Code 2.1.23+ 强制要求所有上下文相关字段必须包裹在 hookSpecificOutput 中。
❌ 错误结构(旧版):
return {
hookEventName: "UserPromptSubmit", // ❌ Claude Code 2.1.23+ 会忽略此字段
hookSpecificOutput: { ... }
};
✅ 正确结构(新版):
return {
hookSpecificOutput: {
hookEventName: "UserPromptSubmit", // ✅ 必须包裹在内部
additionalContext: "..."
}
};
在 Windows 环境下,使用相对路径可能导致 Hook 脚本无法被找到。
❌ 风险配置(相对路径):
"args": [".claude/hooks/user-prompt-submit.js"]
✅ 推荐配置(绝对路径):
建议使用绝对路径,或确保 cwd 上下文正确。
"command": "node",
"args": ["C:/Absolute/Path/To/.claude/hooks/user-prompt-submit.js"]
症状:输入提示词后没有看到任何优化输出
检查步骤:
验证配置格式:
.claude/settings.json 中键名是 UserPromptSubmit(不是 user-prompt-submit)hooks 对象type: "command" 字段运行测试脚本:
node test-hook.js
如果测试失败,说明hook脚本本身有问题
检查Node.js:
node -v
确保已安装Node.js
重启Claude Code:配置更改后需要重启
查看错误日志:
%TEMP%\hook-prompt-optimizer.log/tmp/hook-prompt-optimizer.log原因:settings.json配置格式错误
解决方法:
UserPromptSubmit(PascalCase).claude/settings.json.example-windows.claude/settings.json.example-unix可能原因:
检查方法:
node test-hook.js解决方法:使用Node.js版本(推荐)
node 命令.claude/settings.json.example-windows解决方法:
chmod +x .claude/hooks/*.sh
最小化测试:
# 直接运行hook脚本测试
echo "帮我写一个登录功能" | node .claude/hooks/user-prompt-submit.js
应该输出JSON格式的响应
查看日志:
# Windows
type %TEMP%\hook-prompt-optimizer.log
# Mac/Linux
cat /tmp/hook-prompt-optimizer.log
验证JSON格式: hook输出必须是有效的JSON,格式如下:
{
"hookSpecificOutput": {
"additionalContext": "..."
}
}
或空对象 {}
user-prompt-submit.js ⭐⭐⭐Hook的核心脚本(Node.js版):
user-prompt-submit.shHook的Bash版本(Mac/Linux):
prompt-optimizer-meta.md ⭐⭐⭐优化提示词模板:
settings.jsonHook配置文件:
把 role-first、结果契约、结构化标签和验证计划,变成自动执行的流程。
你不用记住所有规则。
你不用每次都手写目标、范围、验收和验证计划。
你不用纠结短句到底要不要优化:有任务意图就触发,纯确认就跳过。
Hook帮你全干了。
现在你可以:
Have fun! 🚀
Give Claude Code memory that evolves with your codebase via hooks and LLM-compiled knowledge
Blocks dangerous git and shell commands from being executed by AI coding agents
Rule enforcement plugin — save rules with natural language, enforce with 17 lifecycle hooks
MCP server plugin for voice input and output in Claude Code