Claude Code 提示词无感自动备份:Windows 与 Ubuntu 双平台配置指南
在使用 AI 编程工具(如 Claude Code)进行多轮交互时,我们常常会输入大量精心调优的提示词(Prompts)。但随着对话不断深入,系统生成的代码和中间过程往往会挤满终端屏幕,想要回头翻找自己曾经敲下的某条关键 Prompt 就会变得非常繁琐。
为了解决这个痛点,本文将介绍如何利用 Claude Code 原生的 Hook 机制,通过几十行极其轻量的 Node.js 脚本,实现每次按下 Enter 提交提示词时,静默、无感地自动记录“时间戳 + 项目绝对路径 + 提示词内容”,并统一保存到本地日志文件中的方案。
一、 Windows 环境配置
Windows 环境由于路径分隔符(\)和默认终端特性的影响,使用独立 JS 脚本调用的方式最为稳定,能够彻底避开 JSON 转义报错问题。
1. 创建独立 Hook 脚本
在路径 C:\Users\你的用户名\.claude\hooks\ 下新建文件 log_prompt.js,并填入以下内容:
const fs = require('fs');
const path = require('path');
let body = '';
// 监听标准输入流,获取 Claude Code 传入的 JSON 数据
process.stdin.on('data', chunk => { body += chunk; });
process.stdin.on('end', () => {
try {
if (!body.trim()) return;
const data = JSON.parse(body);
// 兼容不同版本的 Prompt 字段位置
const prompt = data.prompt || data.content || (data.message && data.message.content);
if (!prompt) return;
// 获取当前项目绝对路径并规范化 Windows 斜杠格式
const cwd = data.cwd || process.cwd();
const fullProjectPath = path.normalize(cwd);
// 格式化本地时间 (如 2026/8/4 16:15:00)
const now = new Date();
const timeStr = now.toLocaleString('zh-CN', { hour12: false });
// 拼接日志条目
const logEntry = `[${timeStr}] [${fullProjectPath}]\n${prompt}\n----------------------------------------\n`;
// 写入日志到 C:\Users\你的用户名\.claude\my_prompts.log
const logPath = path.join(process.env.USERPROFILE || 'C:/Users/' + process.env.USERNAME, '.claude', 'my_prompts.log');
fs.appendFileSync(logPath, logEntry, 'utf8');
} catch (err) {
// 发生异常时静默忽略,不干扰主程序
}
});
2. 修改配置文件 settings.json
打开 C:\Users\你的用户名\.claude\settings.json,在配置中补齐 hooks 节点的注册:
{
"env": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
},
"includeCoAuthoredBy": false,
"model": "opus",
"statusLine": {
"type": "command",
"command": "node C:/Users/你的用户名/.claude/hooks/statusline.js"
},
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node C:/Users/你的用户名/.claude/hooks/log_prompt.js"
}
]
}
]
}
}
注意:请将上述配置中的
你的用户名替换为你 Windows 系统实际的用户名(如subk)。
二、 Ubuntu / Linux 环境配置
Ubuntu 环境下支持标准的类 Unix 路径表示(如 ~ 和 /home/username/),脚本逻辑高度通用。
1. 创建独立 Hook 脚本
在 Linux 终端中运行以下命令,自动创建目录并生成 ~/.claude/hooks/log_prompt.js:
mkdir -p ~/.claude/hooks
cat << 'EOF' > ~/.claude/hooks/log_prompt.js
const fs = require('fs');
const path = require('path');
const os = require('os');
let body = '';
// 监听标准输入获取 JSON 格式数据
process.stdin.on('data', chunk => { body += chunk; });
process.stdin.on('end', () => {
try {
if (!body.trim()) return;
const data = JSON.parse(body);
// 兼容不同版本的字段名称
const prompt = data.prompt || data.content || (data.message && data.message.content);
if (!prompt) return;
// 获取项目绝对路径 (Linux 标准正斜杠)
const cwd = data.cwd || process.cwd();
const fullProjectPath = path.resolve(cwd);
// 格式化时间 (如 2026/8/4 16:40:00)
const now = new Date();
const timeStr = now.toLocaleString('zh-CN', { hour12: false });
// 拼接格式化的日志内容
const logEntry = `[${timeStr}] [${fullProjectPath}]\n${prompt}\n----------------------------------------\n`;
// 自动追加写入到 ~/.claude/my_prompts.log
const logPath = path.join(os.homedir(), '.claude', 'my_prompts.log');
fs.appendFileSync(logPath, logEntry, 'utf8');
} catch (err) {
// 静默处理解析或写入异常
}
});
EOF
2. 修改配置文件 settings.json
修改 Ubuntu 下的 ~/.claude/settings.json 文件:
{
"env": {
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"
},
"includeCoAuthoredBy": false,
"model": "opus",
"statusLine": {
"command": "~/.claude/statusline.sh",
"timeout": 10,
"type": "command"
},
"hooks": {
"UserPromptSubmit": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "node ~/.claude/hooks/log_prompt.js"
}
]
}
]
}
}
三、 配置生效与日志查看
完成上述配置后,重启 Claude Code 命令行。
每当你在终端中提交一条 Prompt,脚本就会在后台异步地将输入写入到各自环境下的日志中:
- Windows 日志文件路径:
C:\Users\你的用户名\.claude\my_prompts.log - Ubuntu 日志文件路径:
~/.claude/my_prompts.log
最终的效果展示:
[2026/8/4 16:15:09] [C:\Users\subk\ai_coding\temp]
项目名称我想把绝对路径也带上,修改哪个?
----------------------------------------
[2026/8/4 16:40:22] [/home/subk/projects/my-web-app]
帮我使用 TypeScript 重构这个 API 请求的核心方法
----------------------------------------
为什么选择这个方案?
- 纯原生理念:无需安装社区频繁更新、版本不兼容的各种 Marketplace 插件。
- 绝对稳定:利用 Node.js 原生 API 文件追加,零依赖,跨平台。
- 极速无感:基于
UserPromptSubmit事件,在后台静默运行,完全不阻塞交互体验。