用途:在渲染、提交或分享 asciicast .cast 录屏前移除敏感数据。上游 asciinema 没有 redact 命令,官方建议自行编辑 NDJSON,而逐行 sed 会漏掉最坏情况:录制时输入的密钥每个字符各占一个事件,任何单行都不含完整密钥。捆绑脚本在按通道拼接后的流上匹配模式,同时清理头部字段,并验证自身输出。
主要能力:可识别已知密钥形态(GitHub/AWS/Stripe/Slack/Google 令牌、JWT、私钥块、KEY=value 赋值)、用户提供的正则、已知字面值、家目录路径,包括跨事件拆分、隐藏在清除/退格输出中或位于头部 command/title/env 字段的匹配。支持 --paths 重写 /Users/<name> 与 /home/<name>;--pattern 'REGEX' 或 'REGEX=>replacement' 添加额外形态;--replace-file secrets.map 提供已知字面值;--drop-input 删除所有输入事件。
使用方式:先只读扫描,python3 "${CLAUDE_SKILL_DIR}/scripts/redact_cast.py" --scan demo.cast(退出码 1 表示有发现,0 表示干净)。应用到新文件:python3 "${CLAUDE_SKILL_DIR}/scripts/redact_cast.py" demo.cast demo.redacted.cast --paths。源文件不会被修改,脚本会重新扫描自己的输出,若有残留则失败。验证时确认 --scan demo.redacted.cast 退出 0,对已知字面值可本地独立验证,再用 asciinema play 抽查,最后经 cast-render 渲染。不要把原始 cast 载入模型上下文,也不要把字面密钥写在命令行上。
限制:无法捕获没有可识别形态且未声明的密钥,以及字符与 ANSI/OSC 控制序列或光标移动重写交错的密钥。干净扫描只表示没有配置规则匹配,不证明文件安全。仅适用于 asciicast NDJSON,不处理 PDF、图片、视频;不支持 v1,需先用 asciinema convert 转换。替换会改变文本宽度,光标定位的 TUI 输出在替换处可能略有错位,但时间不受影响。已录制的真实凭据无论清洗多好都视为已泄露,必须轮换。