行知絮语

知行合一,步履不辍。

IT技术

Claude Code 提示词无感自动备份:Windows 与 Ubuntu 双平台配置指南

2026年08月04日 admin 4 阅读

在使用 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 请求的核心方法
----------------------------------------

为什么选择这个方案?

  1. 纯原生理念:无需安装社区频繁更新、版本不兼容的各种 Marketplace 插件。
  2. 绝对稳定:利用 Node.js 原生 API 文件追加,零依赖,跨平台。
  3. 极速无感:基于 UserPromptSubmit 事件,在后台静默运行,完全不阻塞交互体验。