编程智能体的对话不仅能记录已完成的工作,也能成为审计线索。Claude Code 保存的会话记录包含提示词、工具调用、输出和错误。检查这些记录,可以发现浪费令牌或反复中断任务的使用习惯。开发者有两种实用方法:扫描本地文件,快速诊断问题;或者将记录转为结构化数据,以便持续审计。

从本地扫描开始

Claude Code 将会话记录保存为 JSONL 文件,即每行包含一条 JSON 记录的格式。这些记录可能包含对话轮次和智能体所用工具的深层嵌套信息,手动浏览并不容易。默认情况下,Claude Code 会在 30 天后删除本地会话记录。想要研究更长期的规律,就需要在清理期限到来前保存相关记录。

要快速检查,开发者可以让 Claude Code 找到本地会话记录目录,并使用专门的扫描技能,从文件中提取统计数据和反复出现的问题。有用的输出应是一份范围有限的问题清单,而不是把完整对话全部交给模型。一次本地扫描检查了 2026 年 8 月 19 日至 9 月 23 日的 3,967 份会话记录,发现了几个不同的问题:

  • 在无需交互式提示的无头运行中,343 次 PowerShell 调用有 337 次因无法处理权限确认提示而失败。
  • 在 236 次智能体错误中,225 次涉及嵌套委派时触及并发子智能体数量上限。
  • 令牌消耗最多的 1% 会话占总令牌消耗的 62%。令牌是模型读取和生成文本时处理的单位。

这些数字指向不同的排查方向。权限失败需要检查命令如何获得批准;嵌套委派需要限制智能体能启动多少个子智能体;令牌消耗集中则需要仔细查看异常冗长的会话。扫描能指出从哪里查起,但它本身不能证明所提出的任何配置修改一定有效。

中性色调的桌面上,杂乱的数据条带与分类排列的错误标记并列,呈现本地活动审计

▲ 本地智能体活动快速审计

直接扫描很方便,因为它利用的是机器上已有的文件。随着归档规模扩大,弱点也会显现:让编程智能体处理大量原始会话记录,可能消耗数十万个输入令牌;只抽查少数文件,又可能漏掉反复出现的错误。一次性扫描是很好的起点,却不太适合比较多个项目、跨越数月的规律。

为重复审计建立结构化归档

第二种方法将存储、处理和分析分开。在 Claude Code 删除较旧的本地文件之前,开发者可以把选定的会话记录归档到 Databricks Unity Catalog Volume。一个示例归档使用了 62 个大型 JSONL 文件。用于处理大规模数据集的 Apache Spark 从中读取了 396,404 条记录,并识别出 2,241 个不同的会话。

随后,一个使用 Python 和 Apache Spark 的 PySpark 笔记本将嵌套记录整理成三张 Delta 表:会话、对话轮次和工具调用。Delta 表提供可查询的结构化存储,无需反复将原始会话记录发送给语言模型。会话 ID、时间戳、工具名称、错误类别和执行时长等字段,使开发者能够比较智能体活动中的特定环节。

Databricks Genie Code 可以协助准备笔记本,并处理会话记录结构之间的差异。在后续分析中,一个模型上下文协议(MCP)服务器将 Claude Code 连接到 Databricks Genie 和 Databricks SQL。MCP 是让 AI 助手使用外部工具的一种方式。Claude Code 不必将底层文件读入对话,而是可以请求汇总结果;Databricks 运行 SQL 查询,从表中筛选并统计记录,再返回结果。

一项结构化查询检查了 3,450 条工具调用错误记录。其中数量最多的三个已报告类别是:

错误类别 数量 含义
exit_code 946 命令以错误状态结束
hook_block 506 已配置的防护规则阻止了调用
path_not_found 500 工具尝试使用不存在的路径

仅凭数量不足以成为移除防护规则的理由。调用被阻止,可能是保护措施发挥了作用,也可能是误判;开发者更改安全设置前,需要检查具体案例。

匿名会话记录包拆分为对话记录和工具记录,旁边是一棵受保护的文件夹目录树

▲ 会话记录的结构化存储与分析

归档也带来了数据处理责任。会话记录可能包含代码、提示词、API 密钥、凭证或敏感的公司信息。在上传到云端之前,应检查并清理记录,限制归档的访问权限,并审查服务提供商的数据保护条款。Databricks 表示,客户输入和输出不会用于训练第三方基础模型,但这一承诺不能取代对会话记录内容的审查。

将发现转化为具体调整

只有影响智能体后续会话,审计才有意义。在所检查的配置中,审计结果促成了 CLAUDE.md 全局指令新增 38 行,也推动了 settings.json 中权限设置和启动钩子的修改。这些改动分别针对不同的失败模式,而不是采用一项笼统的修复措施。

针对路径错误,指令要求 Claude Code 不要猜测文件位置,并在编辑前使用 ls 或按文件名模式搜索的 glob 检查目录。一个 SessionStart 钩子在每次会话开始时运行 Python 脚本,提供两级深度的目录结构图。这样,智能体在首次操作文件前就能了解代码库的目录情况。

针对命令格式错误,规则要求智能体把多行或引号繁多的复杂 Bash、PowerShell 命令写入临时脚本,而不是以行内字符串的形式执行。审计发现了 290 次与转义和多行引号有关的意外文件结束错误。权限设置预先批准了部分非破坏性的 Git 命令,同时将并行子智能体批次限制为最多 20 项任务,以应对过度的嵌套委派。

每项调整都应通过后续会话检验。错误次数下降,可能说明某条规则值得保留;如果出现新的工作受阻模式,则可能需要修改规则。历史日志能为这些决定提供依据,但配置不会在无人审查的情况下自行改进。

让下一次审计发挥作用

首先检查本地会话记录是否含有敏感内容,以及审计所需的记录是否即将进入 Claude Code 的 30 天清理期限。用范围有限的本地扫描找出最频繁或代价最高的问题。如果重复审计值得建立更大的归档,就把记录整理为会话、对话轮次和工具调用,让查询无需重读完整对话也能定位错误。然后对规则或工作流程做一项小而具体的调整,并利用未来的日志查看同样的失败是否再次发生。

把智能体会话记录转化为规则改进的两种方式 否 是 在30天清理前保存会话记录 是否要长期比较多个项目? 限定范围扫描本地记录 脱敏归档后整理成表用SQL汇总错误 修改一条规则或设置 在后续会话中检查同类失败是否减少
▲ 把智能体会话记录转化为规则改进的两种方式