跳转到主要内容
explain --json 以一个 JSON 对象返回命令的决策结果,以及每个分析步骤的跟踪。脚本从顶级字段读取决策,需要细节时再遍历跟踪。选项和退出码见 explain。
跟踪并不自动适合分享。请先阅读分享跟踪之前。

ExplainResult

effectiveCapabilities

effectiveCapabilities 是以 fail_closed、paranoid_rm 和 paranoid_interpreters 为键的记录。每个值包含: 各项能力改变什么,见模式。

ruleActivation

只有当相关规则受某项能力控制时,才会出现 ruleActivation。相关规则指匹配到的规则,或者在其级别或能力开启时就会匹配的规则。 人类可读输出把它显示为一行:。

ExplainTrace

记录跟踪从不改变决策。CC Safety Net 会限制过长的跟踪:缩短较长的文本值,并丢弃超出上限的步骤。

TraceStep 变体

先用 type 确定变体,再读取它的其他字段。 temp-root-relaxation 何时适用,见临时根目录放宽。

recurse 原因

recurse.reason 取以下八个值之一:shell-wrapper、interpreter、busybox、shell-eval、shell-trap、shell-stdin、shell-heredoc 或 heredoc-file。 heredoc-file 表示命令运行了一个脚本,而该脚本由同一命令中前面的 heredoc 写出。见分析器能看穿的写法。

script-file 步骤

sh deploy.sh 或 ./deploy.sh 这类命令会产生 script-file 步骤。path 就是命令中书写的那个路径,bytes 是文件大小。脚本内部的命令不再产生后续步骤,也没有任何字段携带脚本文本。见从文件运行的脚本。 如果脚本由同一命令中的 heredoc 写出,记录的则是原因为 heredoc-file 的 recurse 步骤,这一步会携带正文。

transparent-wrapper 步骤

分析过程看穿用 rule wrapper add 注册的命令时,会出现 transparent-wrapper 步骤。wrapper 是包装器名称,output 是被包装命令的 token 列表。每个候选各产生一个步骤,紧接在被包装命令的分析之前。

跟踪顺序

典型的跟踪以 parse 开头。之后每个片段依次出现 env-strip 或 leading-tokens-stripped,然后是包装器检测步骤 shell-wrapper、interpreter、busybox 和 transparent-wrapper,最后是 rule-check 或 custom-rules-check。嵌套命令表现为带 depth 的 recurse 步骤。 下面四种保护会在评估器运行之前阻止命令。此时跟踪只含一个合成的 rule-check 步骤,没有 parse 步骤,假定每条跟踪都以 parse 开头的脚本必须处理这种情况:

分享跟踪之前

脱敏只移除可识别的凭证形式,使用的模式列表与审计日志相同。文件路径、主机名、IP 地址、用户名、项目或客户名称,以及格式无法识别的机密都会原样保留。请用占位凭证和占位路径复现问题,通读完整输出后再分享。
parse 步骤会记录原始命令字符串和解析出的每个 token。以下字段同样携带原始文本:
  • fallback-scan.tokensScanned、dangerous-text.token、strict-unparseable.rawCommand
  • shell-wrapper.innerCommand、interpreter.codeArg、recurse.innerCommand、transparent-wrapper.output
  • script-file.path、worktree-relaxation.gitCwd、temp-root-relaxation.gitCwd、cwd-change.segment
configSource 是绝对路径,通常位于你的主目录内。 漏洞报告中可以附上 explain 输出。如果你提供的文本中某种凭证格式没有被脱敏,这属于普通 bug,请提交公开的 GitHub issue,不必按漏洞报告。
最后修改于 2026年10月27日