新闻详情

新闻详情

首页 / 资讯中心 / 详情

Claude Code 明文存储风险治理:用 CLAUDE_CODE_SKIP_PROMPT_HISTORY 与 cleanupPeriodDays 管住工程风险

发布时间:2026/9/29 20:46:20来源:尧图网络
Claude Code 明文存储风险治理:用 CLAUDE_CODE_SKIP_PROMPT_HISTORY 与 cleanupPeriodDays 管住工程风险
1. 为什么 Claude Code 的明文存储值得你花十分钟处理Claude Code 明文存储风险治理这件事说白了就是一句话Claude Code 会把你的会话记录、命令输出、工具返回结果以明文形式写到本地磁盘上。它不会在本机做静态加密能保护这些文件的基本只有操作系统的文件权限。你可能会想本地文件而已能有多大问题问题在于Claude Code 是一个 agentic coding 工具它要读文件、跑命令、调工具而这些东西的输出全都会进入会话转录文件。如果某次调试时你让它读了.env或者某条命令把 token 打印到了终端这个值就会被写进projects/project/session.jsonl这类文件里。这不是模型记忆突然变危险了而是一个很朴素的工程事实凡是被读进上下文、被命令输出、被工具返回的内容都有机会进入会话转录文件。Claude Code 支持/resume、跨会话上下文、调试复盘、历史提示召回这些体验都依赖持久化。但开发者日常工作里最敏感的东西也常常离代码最近——.env、数据库连接串、云厂商 access key、GitHub token、npm token、OAuth client secret、临时 bearer token都可能出现在同一台开发机、同一个 repository、同一个终端窗口里。所以这篇内容聚焦的不是Claude Code 安不安全这种大而空的问题而是从两个具体的配置项切入CLAUDE_CODE_SKIP_PROMPT_HISTORY和cleanupPeriodDays。我会给出可复制的settings.json骨架配上验证动作让你能确认配置真的生效了。适合谁看适合所有把 Claude Code 用在真实项目里的开发者尤其是那些项目里带.env、带生产凭据、带客户数据的人。如果你只是拿它写写 demo、跑跑学习项目那默认配置够用但只要你开始碰真实系统的凭据这篇就值得你跟着做一遍。2. 前置准备TaoToken 接入与 Claude Code 环境确认在动手改配置之前先把接入层理清楚。Claude Code 本身是一个客户端工具它需要连到模型服务才能工作。我这边用的是 TaoToken 提供的接入方式官网入口是 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 。如果你还没配好先去控制台拿一个 API Key地址在 https://taotoken.net/console?utm_sourcetaotoken_aicg_blog_endutm_contentconsoleutm_campaignrewrite Key 的管理页面在 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 。拿到 Key 之后你需要确认 Claude Code 能正常跑起来。最直接的方式是设好环境变量然后发一条最简单的请求。这里要注意环境变量的设置方式取决于你的 shell我用的是 zsh所以写在~/.zshrc里如果你用 bash就写~/.bashrc。# 设置 TaoToken 接入地址和 Key export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY你的_TaoToken_API_Key # 重新加载 shell 配置 source ~/.zshrc # 验证 Claude Code 能正常响应 claude -p 回复 ok 两个字母即可如果这条命令返回了ok说明接入层没问题。接下来才是重点确认 Claude Code 的本地数据目录结构。默认情况下Claude Code 的数据放在~/.claude/下面核心目录包括路径内容是否自动清理~/.claude/projects/project/session.jsonl会话转录文件受 cleanupPeriodDays 控制~/.claude/history.jsonlprompt 历史不自动清理~/.claude/feedback-bundles/反馈包手动管理~/.claude/settings.json全局配置不适用你可以先看一眼当前目录里有什么# 查看 Claude Code 数据目录大小 du -sh ~/.claude/ # 列出 projects 下的会话文件 ls -lh ~/.claude/projects/ # 查看 history.jsonl 的行数 wc -l ~/.claude/history.jsonl这一步的目的是建立基线。你得先知道现在有多少数据、放在哪里后面配置改完才能对比验证。如果你看到projects/下面已经有一堆.jsonl文件而且时间跨度很长那说明默认的 30 天清理周期对你来说可能偏长。3. 可复制配置settings.json 骨架与两个关键参数Claude Code 的配置分几个层级全局的~/.claude/settings.json、项目级的.claude/settings.json、以及企业级的 managed settings。我们这里主要动全局配置因为cleanupPeriodDays和权限规则这类东西放在全局更省事。项目级配置适合放跟具体仓库相关的 deny 规则。先给一个完整的settings.json骨架你可以直接复制到~/.claude/settings.json{ cleanupPeriodDays: 7, permissions: { deny: [ Read(.env), Read(.env.*), Read(**/.env), Read(**/.env.*), Read(**/*.pem), Read(**/id_rsa), Read(**/id_ed25519), Read(**/.aws/credentials), Read(**/.config/gcloud/**), Read(**/credentials.json), Read(**/service-account*.json), Bash(cat .env*), Bash(printenv*), Bash(env), Bash(export *) ], ask: [ Bash(curl *), Bash(wget *) ] } }这个骨架里cleanupPeriodDays设成了 7。官方默认值是 30最小值是 1设成 0 会被校验拒绝。7 天对大多数项目是个折中既保留了最近一周的调试复盘能力又不至于让明文副本长期滞留。如果你的项目敏感度更高可以降到 3 甚至 1。permissions.deny这块是运行时约束不是温柔提醒。官方文档明确说了deny 规则优先于 ask 和 allow而且 prompt 或 CLAUDE.md 里的自然语言要求并不能改变实际允许的工具访问。所以别指望写一句请不要读取 .env就完事得用 deny 规则把敏感路径挡在工具层外。这里我同时限制了Read和Bash因为 Claude Code 读文件不一定非要通过 shellRead、Grep、Glob这些只读工具默认看起来低风险但读取本身就可能造成二次记录。然后是CLAUDE_CODE_SKIP_PROMPT_HISTORY。这个不是写在settings.json里的而是环境变量。它的作用是在任何模式下跳过 transcript 和 prompt history 写入。设置方式# 在 shell 配置里加上这一行 export CLAUDE_CODE_SKIP_PROMPT_HISTORY1 # 重新加载 source ~/.zshrc如果你只在特定场景下想关闭持久化可以写一个单独的 shell 函数或者 alias比如# 定义一个安全模式启动函数 claude-secure() { CLAUDE_CODE_SKIP_PROMPT_HISTORY1 claude $ }这样你平时用claude保持默认体验遇到敏感任务时用claude-secure环境本身替你做安全分流不需要每次靠记忆做选择。另外非交互模式下还可以用--no-session-persistence或者在 Agent SDK 里把persistSession设为false。CLI reference 里写得很清楚--no-session-persistence会禁用 session persistence使 session 不保存到磁盘也不能 resume而且只适用于 print mode。这里有个取舍要提前说清楚关闭持久化以后Claude Code 的体验会变得更短期不能依赖本地 transcript 恢复上下文也少了历史召回的便利。对安全要求高的项目这个代价可以接受对日常开发项目可以只在敏感任务中启用。4. 验证请求确认配置真的生效了配置写完不代表生效得验证。验证分两步先确认cleanupPeriodDays起作用了再确认CLAUDE_CODE_SKIP_PROMPT_HISTORY真的阻止了写入。第一步验证清理周期。先记录当前会话文件的数量和时间戳# 记录当前状态 ls -lh ~/.claude/projects/ | tee /tmp/claude_before.txt wc -l ~/.claude/history.jsonl然后启动一次 Claude Code随便问一个问题让它产生一个新的会话文件claude -p 用一句话解释什么是 JSONL 格式退出后再检查一次# 对比前后变化 ls -lh ~/.claude/projects/ | tee /tmp/claude_after.txt diff /tmp/claude_before.txt /tmp/claude_after.txt你应该能看到新增了一个.jsonl文件。这个文件就是本次会话的转录。如果你把cleanupPeriodDays设成了 7那么启动时 Claude Code 会清理超过 7 天的会话文件。你可以手动造一个旧文件来测试# 创建一个时间戳为 10 天前的测试文件 touch -d 10 days ago ~/.claude/projects/test-project/old-session.jsonl # 启动 Claude Code触发清理 claude -p test # 检查旧文件是否被删除 ls ~/.claude/projects/test-project/old-session.jsonl如果返回No such file or directory说明清理逻辑生效了。第二步验证CLAUDE_CODE_SKIP_PROMPT_HISTORY。先记录当前history.jsonl的行数然后用安全模式启动一次# 记录当前行数 BEFORE$(wc -l ~/.claude/history.jsonl) echo Before: $BEFORE # 用安全模式启动 CLAUDE_CODE_SKIP_PROMPT_HISTORY1 claude -p 这条不应该被记录 # 再次检查行数 AFTER$(wc -l ~/.claude/history.jsonl) echo After: $AFTER # 如果 BEFORE 和 AFTER 相等说明写入被跳过了同时检查projects/目录下有没有新增文件# 查看最近 1 分钟内修改的文件 find ~/.claude/projects/ -mmin -1 -type f如果没有任何输出说明 transcript 写入也被跳过了。这两个验证动作做完你就能确认配置真的在起作用而不是我以为它生效了。5. 本篇常见错排查配置过程中最容易踩的坑我整理了几个高频问题。问题一cleanupPeriodDays设成 0 被拒绝。官方校验规则是最小值为 1设成 0 不会报错但会被忽略实际行为可能回退到默认值。如果你想要启动即清理设成 1 就行别设 0。问题二deny 规则写了但没生效。最常见的原因是路径匹配模式不对。Claude Code 的 permission 规则用的是 glob 风格Read(.env)只匹配当前目录下的.env不匹配子目录里的。要匹配所有层级的.env得用Read(**/.env)。另外deny 规则要放在permissions.deny数组里不是permissions.allow。放错位置的话规则会被当成允许项处理。问题三CLAUDE_CODE_SKIP_PROMPT_HISTORY设了但 history.jsonl 还在增长。先确认环境变量真的被加载了echo $CLAUDE_CODE_SKIP_PROMPT_HISTORY如果输出为空说明 shell 配置没生效检查你是不是写在了正确的配置文件里以及有没有source。另外要注意这个变量只影响新的会话已经写入的历史不会被删除。如果你想让已有的history.jsonl也清掉得手动处理# 备份后清空 cp ~/.claude/history.jsonl ~/.claude/history.jsonl.bak ~/.claude/history.jsonl问题四项目级配置覆盖了全局配置。Claude Code 的配置是分层合并的项目级的.claude/settings.json会覆盖全局的同名配置项。如果你在全局设了cleanupPeriodDays: 7但项目里设了cleanupPeriodDays: 30那在这个项目里就是 30。排查的时候记得检查项目目录下有没有.claude/settings.json。问题五managed settings 的 deny 不能被本地覆盖。企业环境下管理员可能通过 managed settings 下发了 deny 规则。这种情况下你本地的allow规则是覆盖不了的。如果你发现某个路径明明没在本地 deny 里但就是读不了大概率是 managed settings 在起作用。这个不是 bug是设计如此。问题六--no-session-persistence在交互模式下不生效。这个参数只适用于 print mode也就是claude -p这种非交互调用。如果你在交互式会话里加这个参数它会被忽略。交互模式下要用CLAUDE_CODE_SKIP_PROMPT_HISTORY。6. 把明文存储纳入日常工程习惯配置改完、验证通过之后剩下的就是把它变成习惯。我的做法是把不同风险等级拆成不同的 shell 入口普通开发终端用默认的claude生产排障终端、客户环境终端固定用claude-secure。这样不需要每次靠记忆做选择环境本身替我做安全分流。另外claude project purge这个命令值得记住。它可以删除某个 project 的 transcripts、auto memory、per-session tasks、debug、file history 条目并过滤history.jsonl里的匹配 prompt lines。官方文档说它会展示 deletion plan并支持 dry run。适合在项目交付、客户环境排障结束、临时敏感任务完成后使用。手动删目录当然也能做但命令式清理更容易被写进团队 runbook也更容易在离职交接、设备回收、项目归档时执行。如果你想把安全配置和 repository 模板绑在一起可以在项目模板里放基础 permissions禁止读取.env、.pem、私钥和 credential 目录。企业项目模板里额外降低cleanupPeriodDays为 shell 命令加审计前缀或 hooks。官方 permissions 文档提到permission rules 可以 check into version control 并分发给组织开发者managed settings 里的 deny 也不能被本地 allow 覆盖。这对企业很重要因为安全不应该完全依赖个人习惯。最后说一个心智模型上的转变。Claude Code 不是一个只会回答问题的聊天框它更像一个坐在开发机旁边的自动化同事会读文件、会运行命令、会保存工作记录、会在下次接着干。这样的系统必须有记忆但记忆不能不设边界。cleanupPeriodDays管保留多久CLAUDE_CODE_SKIP_PROMPT_HISTORY和--no-session-persistence管要不要落盘permission deny rules 管哪些东西根本不许读sandbox 管 shell 能走到哪里secret rotation 管事故后的止血。这几件事合在一起才是 Claude Code 明文存储的正确打开方式。如果你还没配好接入层先去 https://taotoken.net/api-keys?utm_sourcetaotoken_aicg_blog_endutm_contentapi-keysutm_campaignrewrite 拿个 Key接入文档在 https://taotoken.net/doc?utm_sourcetaotoken_aicg_blog_endutm_contentdocutm_campaignrewrite 。想先试试模型对话效果的可以直接用 https://taotoken.net/chat?utm_sourcetaotoken_aicg_blog_endutm_contentmodel-chatutm_campaignrewrite 。长期跑编码任务或者 Agent 的Coding Plan 在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_contentcoding-planutm_campaignrewrite 。把配置做扎实比事后补救省心得多。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Markdown 编辑器选型与高效写作工作流:从语法到导出的完整指南 2026/9/29 22:18:00

Markdown 编辑器选型与高效写作工作流:从语法到导出的完整指南

如果用一句话概括我这几年写东西的习惯,那就是:能 Markdown 就绝不用 Word。方案、周报、读书笔记、公众号草稿、技术文档,甚至毕业论文的初稿,我都是在 Markdown 编辑器里写完,再按需导出成 PDF 或 Word。最开始只是嫌…

阅读更多 →
共享凭据紧急熔断与一键夺权:企业密码管理器(安当SYP)在突发安全事件中的秒级冻结实践 2026/9/29 22:18:00

共享凭据紧急熔断与一键夺权:企业密码管理器(安当SYP)在突发安全事件中的秒级冻结实践

一、为什么特权共享凭据必须能"秒级熔断" 在很多企业的真实环境里,"共享账号"不是例外,而是常态。财务共用一个网银操作员号,供应链审核组共用一个采购平台账号,车企研发外包团队共用一台跳板机的域账号&…

阅读更多 →
自然语言驱动Blender建模,Antigravity+MCP快速构建智慧仓储数字孪生场景 2026/9/29 22:17:59

自然语言驱动Blender建模,Antigravity+MCP快速构建智慧仓储数字孪生场景

先说个可能有点反直觉的结论:一套看起来很唬人的智慧仓储数字孪生场景,最耗时间的往往不是渲染,不是动画,而是最基础的那批3D资产建模和场景装配。传统做法里,建模师照着平面图一点点拉墙、摆货架、布库位,…

阅读更多 →
牛客笔试会录屏吗?判定吃的是每 30 到 40 秒一张的截图 2026/9/29 22:17:26

牛客笔试会录屏吗?判定吃的是每 30 到 40 秒一张的截图

先交代位置。我们在做面试和笔试的实时辅助工具,这两年拆了不少考试端的前端和客户端,也一直在拿各家助手那句「完全隐身」去对照实测。下面写的是拆出来和查到的结果,落点只有一个:对方那一侧到底在采什么。 这篇讲在线笔试&…

阅读更多 →
国产codex技术研发进展与应用场景全景解析 2026/9/29 22:17:20

国产codex技术研发进展与应用场景全景解析

科研路上最浪费时间的不是实验失败,而是“工具焦虑”——下载一堆软件,用到一半弃坑,效率反而更低。这篇只挑4款真正高频、互补的工具,第一个重磅拆解切问学术(文献全链路救星),其余三款覆盖管理…

阅读更多 →
179、MLIR的Profiling(性能分析)与Timing(计时)Pass 2026/9/29 22:17:20

179、MLIR的Profiling(性能分析)与Timing(计时)Pass

MLIR的Profiling(性能分析)与Timing(计时)Pass 上周帮团队调一个AI推理引擎的算子性能问题,模型跑在自研NPU上,某个卷积算子的延迟比预期高了3倍。常规手段——插桩、打印时间戳、甚至用perf去抓——都试了,结果发现瓶颈不在计算本身,而在MLIR编译后的IR调度上。那个调…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉