2.1.235 精确二进制运行证据指南¶
这份文档解决一个具体问题:静态源码能说明“客户端写了哪些分支”,但不能单独说明“这个发布二进制在受控输入下实际走了哪条分支”。analysis/runtime-probes/*.json 因而不是测试日志堆积,而是把重要机制转换为可重复观察的状态变化。
所有探针都绑定同一目标:Claude Code 2.1.235,发布二进制 SHA-256 83b8f806f6f2eea316cfe246628e6c23374711d868f1fd0409db551b877b7748。模型端使用本地受控 Messages 服务,文件、设置、HOME、MCP 和 OTLP collector 均位于临时隔离环境。探针验证客户端请求装配、状态机、工具控制与本地持久化,不声称本地 mock 等价于 Anthropic 服务端。
JSON 字段怎么读¶
| 字段 | 含义 | 能证明什么 | 不能证明什么 |
|---|---|---|---|
target |
目标版本、二进制 SHA-256、发布文件占位路径 | 探针没有误用 PATH 中的其他版本 | 二进制来源之外的发布流水线 |
capturedAt |
本次探针完成时间 | 报告不是手工抄写的无时间结果 | 未来版本行为 |
environment |
OS、架构、Node 版本 | 结果在哪个平台真实执行 | 其他平台自动等价 |
commands |
可复现命令,敏感路径和值用稳定占位符表示 | 入口参数、开关和执行模式 | 命令字符串本身不代表分支成功 |
input |
mock 响应、临时文件、设置层或 collector 的受控输入 | 触发条件没有依赖真实用户环境 | 真实模型质量、账号 entitlement |
literalOutput |
CLI 或 collector 的归一化原始结果 | 用户或协议端实际看到什么 | 未记录的内部中间状态 |
observed |
请求次数、header、模型序列、文件字节、session ID 等观察值 | 机制的状态转换和副作用 | 服务端收到请求后的内部实现 |
beforeAfter |
domain roots 在命令前后的 path、mode、bytes 与 SHA-256 | dry-run 是否改写目标、失败前哪些文件已经持久化 | 未列入 root 或 CLI bootstrap 之外的系统状态 |
exitStatus |
每个命令的进程退出状态 | CLI 成功、受控失败或预算终止 | 单靠 0 不能证明语义正确 |
checks |
从以上字段计算的验收断言 | 报告为何判定 PASS | 断言集合之外的泛化结论 |
pass |
所有要求检查是否通过 | 本报告满足当前探针合同 | 整个产品没有其他故障 |
判断顺序必须是:先确认 target,再读 commands 和 input,然后联合检查 literalOutput、observed、exitStatus,最后才看 checks/pass。只读一个 pass: true 会丢掉失败分类、请求次数和副作用边界。
Agent Loop 与会话状态机¶
工具结果不是 UI 事件,而是下一轮模型输入¶
probe.agent-loop-tool-feedback 在第一轮让 mock 模型返回完整 Read tool use。CLI 读取包含 AGENT_LOOP_FILE_MARKER 的真实临时文件;第二个 Messages 请求同时出现原 tool_use 和同 ID 的 tool_result,最后输出 TOOL_EXECUTION_OK、exit 0。
这证明 tool_use_id 是跨“模型流 -> 本地执行 -> 下一轮模型决策”的关联键。工具卡片出现在终端不是闭环完成的充分条件;只有配对结果进入下一请求,模型才真正观察到执行结果。
Resume、compact、fork 是三种不同变换¶
probe.resume-history:恢复请求包含初始 prompt、初始 assistant result 和当前 prompt,证明 resume 重建持久消息历史。probe.manual-compaction-boundary:/compact产生system:compact_boundary,trigger=manual、preTokens=104;随后 fork 请求保留摘要,移除 compact 前 prompt、tool-use ID 和旧 assistant result。probe.session-fork-identity:fork 得到新 session ID,但保留 compact summary 与当前 fork prompt。
因此 resume 恢复的是同一 transcript 身份,compact 改写送模的逻辑历史,fork 则从现有逻辑状态创建新的持久身份。三者都不复活旧进程,也不撤销已发生的外部动作。
Stop hook 和 maxTurns 管的是循环,不是 HTTP attempt¶
probe.stop-hook-reentry 让第一次 Stop hook 阻止结束并提供反馈。反馈进入第二个 Messages 请求,第二次模型决策成功结束。probe.max-turns-terminal 则设置 maxTurns=1:第一个模型请求选择的工具与 PostToolUse 均完成,但不会再发第二个模型请求,最终 subtype 为 error_max_turns、exit 1。
这两个结果把四个计数对象分开:用户 turn、Agent/model iteration、HTTP attempt、tool batch。Stop hook 可以要求再进行一次 Agent 决策;maxTurns 限制新的模型 iteration,却不会中途抹掉已完成的工具副作用。
请求、认证与缓存¶
同一个 endpoint,两种 credential 产生两种 wire shape¶
probe.request-bearer-auth:ANTHROPIC_AUTH_TOKEN产生Authorization: Bearer $TOKEN,不发送x-api-key。probe.request-api-key-auth:只有ANTHROPIC_API_KEY时发送x-api-key: $API_KEY,不发送Authorization。
这证明 credential source 在 request builder 之前已经完成选择。报告故意不保存真实 token,只保留 header 形状占位符;它验证客户端选择和装配,不验证远端凭据有效性。
Prompt cache 开关改变实际请求体¶
probe.request-cache-shape 的默认请求包含 3 个 cache_control,并声明 Read schema。probe.prompt-cache-disable 对同类请求设置 DISABLE_PROMPT_CACHING=1 后计数变为 0,命令仍成功。
这证明 prompt cache 不是只有配置常量:开关会改变发出的 wire body。它仍不能证明服务器命中缓存;命中和费用需要响应 usage 的 cache token 字段。
设置、权限与沙箱¶
设置优先级需要运行值,而不是文件名推测¶
probe.settings-layer-precedence 构造 user、project、local 和 --settings 四层不同 model 值:全量加载时 flag 值 claude-opus-4-6 胜出;去掉 flag 后 local 值 claude-opus-4-5 胜出;--setting-sources user 后只剩 user 的 claude-haiku-4-5。
这个探针证明 CLI flag > local > project > user 的已触发路径。macOS managed policy 使用固定系统目录,探针没有伪造管理员目录,因此 managed > CLI 仍由静态分支与官方文档证明,报告明确保留这一平台边界。
Hook deny 发生在工具本体之前¶
probe.hook-deny-feedback 让 PreToolUse 返回 deny。第二个模型请求收到同 ID 的 error tool result 和 hook 原因,临时文件 marker 没有出现在结果中,说明 Read 本体没有成功执行。拒绝是模型可观察结果,不是 Agent Loop 崩溃。
Permission bypass 不等于绕过 OS sandbox¶
probe.sandbox-filesystem-enforcement:在bypassPermissions下,工作区内写入成功;denyWrite路径没有产生文件,工具结果为 error。probe.sandbox-network-enforcement:严格空域名表下,Bash 请求本地 HTTP 地址失败,受控 server 的 hit count 为 0。
这证明 permission decision 与 sandbox enforcement 是两层控制。前者决定是否询问/放行工具,后者限制已经启动的子进程能触及的文件和网络对象。
Permission TUI 的按键结果必须落到授权范围,而不只是截图¶
probe.tui-shift-tab-comment-scope 在 40x120 的 xterm-256color PTY 中启动精确 2.1.235 二进制,使用隔离 HOME、配置目录、工作区和本地 Messages stub。模型侧按真实前置条件依次请求 Read(first) -> Edit(first) -> Read(second) -> Edit(second);两个文件都只位于临时工作区。
第一次 Edit 对话框先按 Tab 进入 Yes comment,写入 COMMENT_MARKER,再发送终端字节 ESC [ Z(Shift+Tab)。此前和此后的主请求数都为 2,两个文件仍分别为 FIRST_ORIGINAL、SECOND_ORIGINAL:快捷键没有 settle 当前权限请求,也没有执行 Edit。随后显式按 Enter 才把第一个文件改为 FIRST_CHANGED;第二次 Edit 仍出现权限对话框且可用 Escape 拒绝,第二个文件保持 SECOND_ORIGINAL。这同时证明 Shift+Tab 没有误批准当前 Edit,也没有留下 session-wide edit grant。
probe.tui-quick-arrow-enter-selection 重新启动全隔离会话,在第一个权限框把 Down 和 Enter 放进同一次 PTY write。初始焦点是“仅本次允许”,Down 后的新焦点是 session acceptEdits;结果两个文件都变成 *_CHANGED,第二次 Edit 没有再次弹框,五次主请求链完整结束。若 Enter 仍读取旧 render snapshot,它只会批准第一次,第二次 Edit 必然停在权限框。因此这里验证的是 selection state 的实时读取和该 permission dialog primitive 的实际授权后果,而不是根据屏幕箭头猜测选中项。
报告有意不把另外两个 release fix 升级为 Probe:多行 highlight 需要终端模拟器重建最终 screen 和 ANSI style 坐标,原始 PTY 字节流不是规范化画面;Vim panel 恢复需要跨组件卸载/重挂载观察 mode 与 cursor 的无歧义快照。两者已有 Static 状态所有权和转换证据,但在这些观测器补齐前仍保持 Boundary。
Embedded Grep:regex 编译、context printer 与 Agent Loop 是三个观察点¶
embedded-grep.json 先把目标锁定到 2.1.235 和发布 SHA-256,再证明 native executable 通过 argv0=rg 暴露 ripgrep 14.1.1 (rev fdb5e06cce)。这不是 PATH 里的系统 rg,也不是从 release note 推测出的版本字符串。
probe.embedded-grep-pathological-fast-fail 给 embedded engine 输入 a{1,1000000000} 和单行 fixture,外部 deadline 为 3 秒。观测结果是空 stdout、exit 2、没有 timeout,stderr 逐字为:
报告同时保存 elapsed milliseconds、maximum resident set size 与 peak memory footprint。本次最大 RSS 约 229 MiB,低于 512 MiB 验收线;该值包含大体积 native executable 的映射与运行时页,所以它是“进程有界完成”的证据,不是 regex heap allocation 的精确归因。
probe.embedded-grep-max-count-context 对同一 engine 和同一 7 行 fixture 分别执行 -m 1 -A 2、-m 1 -C 2。前者返回命中行 2 加行 3-4,后者再带行 1;第二个 match 位于行 5,没有越过 match cap。这里验证的是 searcher/context printer 的原始 stdout 和 exit status。
probe.grep-tool-error-feedback 再启动本地 Messages stub。首个 request 真实广告 Grep schema;模型先搜索 1,217-byte 长行,下一 request 收到同 tool ID 的 long.txt:1:[Omitted long matching line],再执行病态 pattern,第三个 request 收到同 ID 的 is_error 与 compiled-size 错误,最后仍以 EMBEDDED_GREP_TOOL_OK、exit 0 结束。这把 engine failure 和 Claude Code 的 tool-result/Agent-Loop 行为接了起来。
有意保留的可达性边界:首个 request 的 Grep.input_schema.properties 没有 -m 或 max_count,因此不能让 mock 模型伪造该字段。-m/-A/-C 由相同精确二进制的 embedded engine 入口验证;这证明发布说明描述的 engine 能力,不证明模型通过当前 Grep schema 可直接设置 match cap。
Retry 与模型 fallback¶
529 和 400 不属于同一重试类别¶
probe.http-retry-classification 对 529 返回序列 529,529,200,CLI 共请求三次后成功;对受控 400 只请求一次并 exit 1。CLAUDE_CODE_MAX_RETRIES=2 表示初次尝试之外最多再进行两次,不是总请求数为二。
Fallback 在耗尽主模型重试后切换¶
probe.model-fallback-sequence 的请求模型序列为:
前三个主模型请求收到 529,第四个请求使用 --fallback-model 指定的备用模型并成功。这个结果证明本路径的顺序,不应泛化为所有错误都在三次后 fallback;400、认证、计费、请求尺寸和 transport 有独立分类。
MCP、子 Agent 与后台状态¶
MCP generation refresh 有装配延迟¶
probe.mcp-generation-refresh 观察到初始化、首次 tools/list、工具调用、notifications/tools/list_changed、第二次 tools/list 和新增工具。probe.mcp-refresh-delay 进一步记录:第二个 Messages 请求仍只有旧 schema,第三个请求才出现新工具。
因此 MCP server 的工具表变化会推进 generation 并失效缓存,但不会修改已经装配或正在发送的请求。动态刷新按请求边界生效。
Plugin Skill 与 LSP 是两条不同的装载闭环¶
probe.plugin-skill-load 用 --plugin-dir 装入一个隔离插件。第一个 Messages request 的 Skill listing 出现 probe-plugin:probe-skill;模型调用 Skill 后,CLI 先回灌同 ID 的 Launching skill acknowledgement,再把 Skill 正文 marker 注入第二个 request。也就是说,Skill 的 tool_result 证明 dispatch 已接受,真正的指令内容另行进入下一轮上下文,二者不能混成一个字段。
probe.plugin-lsp-roundtrip 在同一插件中声明 stdio LSP server。首个 request 没有携带 LSP schema,符合 deferred tool surface;受控模型随后发出 LSP tool use 后,CLI 实际完成:
initialize -> initialized -> textDocument/didOpen
-> textDocument/definition(line=0, character=0)
-> paired tool_result -> shutdown
工具输入使用编辑器坐标 line=1, character=1,server 收到协议坐标 0,0。最终 result 是 PLUGIN_SKILL_LSP_OK、exit 0。这个 Probe 证明 session plugin、Skill dispatch、LSP process 和 result feedback 的客户端闭环;它不证明任意第三方 language server 的语义正确,也不把 deferred schema 写成首轮常驻 schema。
子 Agent 的启动确认不是最终结果¶
probe.subagent-isolation 观察到 child 使用自己的 prompt、工具集合和 Messages 请求,且不包含 parent prompt。probe.subagent-notification-feedback 记录父循环收到:
第一项只证明任务已启动,第二项才携带完成结果。主 Agent 若把 async launch ACK 当作结论,会在 child 仍运行时错误结束或重复派发。
当前官方网络文档还说明 background agent 由独立 supervisor 承载。该主张已登记为 Public,但本组探针没有启动长期 supervisor 或证明重启后的 durability,因此不升级成后台持久化 Probe。
遥测与隐私¶
probe.telemetry-otlp-redaction 启动本地 /v1/logs HTTP/JSON collector。默认运行收到 user-prompt event,但 user_prompt 为 <REDACTED>,原 marker 不存在;设置 OTEL_LOG_USER_PROMPTS=1 后,第二次导出包含原 prompt marker。
probe.telemetry-raw-api-default、probe.telemetry-raw-api-inline 和 probe.telemetry-raw-api-file 继续复用同一个 collector 和受控 Messages stub:
- 不设
OTEL_LOG_RAW_API_BODIES时,普通 OTLP logs 仍导出,但没有api_request_body/api_response_bodyevent,request/response marker 均未进入 collector; - 设为
1时,collector 同时收到 request/response body event,两个 marker 都在 inlinebody中; - 设为
file:$RAW_BODY_DIR时,本地写出 2 个 request JSON 和 1 个 response JSON,collector 只收到body_ref与长度,不含正文 marker。
五次 CLI 和五次 collector export 都返回 exit 0,目标二进制 SHA-256 仍为 83b8f806f6f2eea316cfe246628e6c23374711d868f1fd0409db551b877b7748。
这证明了四件事:OTLP logs exporter 可达、实际使用 HTTP/JSON、prompt event 会发送、正文默认隐藏且可显式开启。它不代表一方 analytics、Datadog、error reporting 共享同一字段或同一脱敏策略;各 transport 必须分别分析。
Project purge 与 conversation import¶
project-data-lifecycle.json 以 schema 2 保存 7 份完整 env -i execution contract,在互不共享的临时 HOME、配置目录和目标 cwd 中执行,目标始终是同 SHA-256 的 2.1.235;69/69 checks 必须全部为 true:
project purge --all --dry-runexit0,计划删除 projects、tasks、debug、file-history 和 history 共 5 项;所有 planned/excluded fixture 的 mode、bytes 和 SHA-256 不变。shell-snapshots/与 backups 只报告警告,不进入删除 plan。- 独立
project purge --all -yexit0并真实删除上述 5 个 owned target;shell snapshot 和 backup fixture 的 metadata/content hash 保持,CLI bootstrap 新建文件继续单列。 - JSON archive
--dry-runexit0,报告conversations=1 messages=2 projects=1 docs=1,目标 cwd 和 transcript root 都没有新增条目。 - 同一 JSON 去掉 dry-run 后 exit
0,写出 1 个0600transcript,user/assistant UUID 与parentUuid因果链保持;project prompt 写为project-instructions.md,输入CLAUDE.md降权为imported-CLAUDE.md。 - ZIP fixture 在所有真实内容写完后发现 manifest 把 2 条 message/1 个 doc 错报成 3/2。命令 exit
1并输出IMPORT_MANIFEST_MISMATCH,但 transcript、project instructions、imported-CLAUDE.md和imported-AGENTS.md全部留存。 - 离线
import codex --dry-run命中tengu_import内置 false,逐字报告该 build 尚不可用并 exit1;fixture 和 Claude config 没有 apply 写入。真实账号 rollout 尚未验证。
Purge 场景还暴露了一个所有权细节:命令自己的 dry-run 没改 domain 数据,但普通 CLI bootstrap 创建了 .claude.json 和自动 backup。因此报告把 domain delta 与 startup delta 分开,避免把“purge 不删除”夸大成“整个进程绝对不落盘”。JSON/ZIP transcript 又在替换随机路径后计算 canonical bytes/hash,双跑去除 capturedAt 后逐字稳定。完整 fixture、literal stdout/stderr、exit、精确 path/mode/content hash、UUID parent chain 和 before/after 清单见报告;脚本为 probe_project_data_lifecycle.mjs。
Doctor、更新与 Remote Control 边界¶
probe.exact-binary-identity 保证所有控制探针先核对版本和 SHA-256。probe.lifecycle-doctor-update 进一步观察:
DISABLE_UPDATES=1 claude update输出管理员禁用更新提示并 exit 0;doctor报告 native2.1.235、commit、darwin-arm64、bundled search、auto-update gate 和损坏的 settings 文件;doctor本身不启动模型会话。
probe.remote-control-custom-endpoint-boundary 在 ANTHROPIC_BASE_URL 指向受控自定义 endpoint 时,doctor 明确报告 Remote Control 只支持 api.anthropic.com,同时报告 feature evaluation 被非必要流量开关禁用。这个 Probe 证明“为什么不可用”的客户端诊断,不证明一次已登录的真实 Remote Control 成功连接。
probe.feature-override-unreachable 在同一隔离环境中额外设置:
命令仍 exit 0,并逐字输出:
- Feature-flag evaluation disabled (disabled by CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC)
- Remote Control rollout could not be verified for this account (no server response this session)
受控输入让在线求值关闭;若本地 override 分支可达,gate reader 会在 disabled 判断前返回 true。实际结果没有把 rollout 变成 enabled,与 readable source 中提前 return 和 override no-op 相互印证。这个 Probe 只证明 2.1.235 的该本地 override 没有激活 tengu_ccr_bridge,不证明真实账号的在线 flag 值。
原生兼容重建¶
probe.native-original-compatible 对 arm64 原始与独立重建模块运行相同 contract 和输入。报告共 23 个检查项,本次其中 22 项是真实原版/兼容对照,1 项是最低覆盖审计;22 项对照细分为 14 exact、5 normalized-semantic、3 schema-and-invariants,没有 environment-boundary。不能把覆盖审计也写成行为双跑。
第二份 native-reconstruction-x86.json 使用 universal Node 的 x86_64 slice 经 Rosetta 运行。其方法是 validated-artifacts-and-runtime:5 个 supplied compatible .node 均被验证为独立 regular x86_64 Mach-O、未复用原版 hash,并通过 x86_64 加载与 N-API 导出合同。Rust x86_64-apple-darwin target 与 Swift --triple x86_64-apple-macosx 只保存在 buildRecipes,报告没有同次构建的 literal output/exit status。发布物中只有 computer-use-input.node 和 computer-use-swift.node 含原版 x86_64 slice,因此同输入行为对照严格限制在这两个模块:19 项真实行为比较加 1 项覆盖 guard 全部 PASS。audio、image、URL 三个 compatible x86 artifact 只有 provenance/load/export 证据,不伪装成原版 x86 行为双跑。
匹配的 export、错误和行为合同只说明兼容实现可以替代这些已覆盖调用,不会把 reconstructed/ 变成 Anthropic 原始 Rust/Swift/C++ 源码。
网络 Proxy、CA 与 mTLS¶
network-proxy-tls.json 使用本地 HTTPS Messages service、两个 CONNECT proxy、一日测试 CA 和 client certificate 驱动精确 2.1.235 二进制:
- 无 extra CA 时 literal result 为
API Error: Unable to connect to API: Self-signed certificate detected...,exit1,HTTPS server 在 HTTP 层零命中;加入NODE_EXTRA_CA_CERTS后 result 为NETWORK_OK,exit0。 - 同时设置
https_proxy=$A与HTTPS_PROXY=$B时,只有 A 收到 CONNECT;加入no_proxy=localhost后两个 proxy 的计数都不增加,请求仍为NETWORK_OK。 https_proxy=proxy.invalid:8080缺 scheme 时 exit1,API server 零 marker,证明配置在受控请求前 fail closed。- 加入
CLAUDE_CODE_CLIENT_CERT/KEY后 result 为MTLS_OK,exit0,server 观察到 authorized client CN=Claude Probe Client。
这 14 项检查只证明主 Messages HTTPS transport;不证明 Axios、undici、WebSocket、AWS、MCP、子进程或 CCR relay。OTLP HTTP logs由下一组独立报告验证。22 个专属伪造用例会拒绝改写版本/SHA、check、命令 marker、exit/result、API/proxy 命中、mTLS peer、TLS setup 或 Boundary。
OTLP HTTP logs 的 effective network owner¶
otlp-tls.json 先用 Node客户端证明普通 HTTPS、TLS 1.2和强制 mTLS三种 collector都返回 200,再让精确 2.1.235 二进制跑 15 个隔离进程。每个进程都先完成受控 Messages请求并返回 OTLP_TLS_MODEL_OK、exit 0,因此 collector零命中不能被“业务请求没运行”解释。
最重要的结果是配置 owner 与变量表面不同。设置 signal/common OTEL_EXPORTER_OTLP_*_CERTIFICATE 后,collector仍零 HTTP并记录 TLS错误;换成 NODE_EXTRA_CA_CERTS 后收到一次 POST /v1/logs。OTLP client cert/key pair同样没有进入 mTLS handshake,而 CLAUDE_CODE_CLIENT_CERT/KEY 让 server观察到 authorized CN=Claude OTLP Probe Client;只给 Claude client cert不给 key时仍被 server拒绝。
Proxy臂把 collector.invalid 的 CONNECT定向到本地 collector,同时设置冲突的小写/大写 proxy。小写 proxy收到一次规范化 CONNECT collector.invalid:$TLS_PORT,大写零命中,collector POST成功。由此可见 OTLP HTTP logs实际使用 Claude注入的通用 Kol() agent,而不是 bundled OTLP library较低优先级的 environment agent。
30 个 required checks全部通过,26 个专属伪造分别攻击 signal CA假成功、global CA成功删除、OTLP client假发送、Claude mTLS authorization/CN、proxy owner、literal result与 Boundary,均被拒绝。NODE_TLS_REJECT_UNAUTHORIZED=0 只是一条诊断对照,不能作为修复。报告不覆盖 OTLP gRPC、metrics、traces、collector retention/remote delivery或 CCR relay。
Plugin Evaluation 免费两臂 Smoke¶
plugin-evaluation.json 用一个本地插件、1 个 case、1 次 with run、1 次 without run、免费 regex grader 和本地 Messages stub 驱动精确二进制。command literal为 plugin eval ... --ablation with-without --runs 1 --threshold 1 --no-publish --no-scaffold,exit 0;CLI literal输出规范化为 Wrote $RESULT_JSON 和 Report: $HTML_REPORT。
两臂分数都是 1、Delta=0、partial=false。with request独有 PLUGIN_EVAL_WITH_ARM_HOOK_MARKER,without request明确没有,证明不是只在 aggregate JSON 中换标签;JSON/HTML 均写为 mode 0644。23 个专属伪造用例会拒绝 arm、score、Delta、partial、hook context、plugin problem、路径和 Boundary 篡改。
本 Probe 不测真实模型或插件质量,不运行 LLM/baseline paid judge,不触发 cost ceiling,也不证明 claude.ai report publish/retention;Eval 的 temp sandbox 仍不是 OS/网络隔离。
Probe 结论索引¶
| Claim ID | 报告 | 核心状态变化 |
|---|---|---|
probe.agent-loop-tool-feedback |
agent-loop-tool-result-resume.json |
Read 执行结果按 tool ID 回灌下一请求 |
probe.resume-history |
agent-loop-tool-result-resume.json |
resume 恢复旧 prompt/result 并加入新 prompt |
probe.request-bearer-auth |
runtime-controls.json |
bearer 使用 Authorization,移除 API key header |
probe.request-cache-shape |
runtime-controls.json |
默认 request 含 3 个 cache marker 和 Read schema |
probe.hook-deny-feedback |
runtime-controls.json |
PreToolUse deny 阻止工具并回灌 error result |
probe.stop-hook-reentry |
runtime-controls.json |
Stop block 反馈触发下一次模型决策 |
probe.max-turns-terminal |
runtime-controls.json |
工具完成后以 error_max_turns 结束,不再请求模型 |
probe.mcp-generation-refresh |
mcp-refresh.json |
list_changed 触发重新 list 并注册新工具 |
probe.mcp-refresh-delay |
mcp-refresh.json |
新工具到第三个 Messages request 才可见 |
probe.subagent-isolation |
subagent-loop.json |
child 有独立 prompt、tools 和 API call |
probe.subagent-notification-feedback |
subagent-loop.json |
async ACK 与 completed notification 分离 |
probe.exact-binary-identity |
runtime-controls.json |
版本和发布 SHA-256 一致 |
probe.native-original-compatible |
native-reconstruction.json |
原始/兼容 arm64 contract;22 项真实对照、0 项环境边界、1 项覆盖审计 |
probe.native-x86-build-load |
native-reconstruction-x86.json |
稳定 claim ID;5 个 supplied compatible x86_64 artifact 完成 provenance、Rosetta 加载和导出合同,recipe 不构成本次 build attestation |
probe.native-x86-original-compatible |
native-reconstruction-x86.json |
原版有 x86 slice 的 Input/Swift 两模块完成 19 项同输入行为对照和覆盖 guard |
probe.network-proxy-routing |
network-proxy-tls.json |
小写 proxy 优先、NO_PROXY 绕过、非法 proxy 在 API 命中前拒绝 |
probe.network-extra-ca |
network-proxy-tls.json |
自签失败 exit 1,加入 extra CA 后 Messages 请求成功 exit 0 |
probe.network-mtls-client-identity |
network-proxy-tls.json |
client cert/key 进入 TLS handshake,server 观察授权 CN |
probe.telemetry-otlp-effective-ca-owner |
otlp-tls.json |
OTLP专用 CA零 HTTP;NODE_EXTRA_CA_CERTS 使 JSON collector成功 |
probe.telemetry-otlp-effective-mtls-owner |
otlp-tls.json |
OTLP client pair未发送;Claude global pair产生授权 CN |
probe.telemetry-otlp-proxy-routing |
otlp-tls.json |
外部 collector经小写 CONNECT proxy成功,大写值未使用 |
probe.telemetry-otlp-failure-isolation |
otlp-tls.json |
exporter TLS失败不改变 Agent success envelope或 exit 0 |
probe.plugin-evaluation-free-ablation |
plugin-evaluation.json |
with/without 各 1 run,免费 grader 都得 1,Delta 0;with 请求独有 plugin hook context |
probe.project-purge-dry-run |
project-data-lifecycle.json |
purge 计划 5 项但不改 planned/excluded domain bytes;bootstrap 文件单列 |
probe.project-purge-positive |
project-data-lifecycle.json |
独立 --all -y 删除 5 个 owned target,保留 shell snapshot/backup 原字节并单列 bootstrap |
probe.project-conversation-import |
project-data-lifecycle.json |
JSON dry-run 零 domain 写入;真实导入写 0600 transcript、父链、instructions 与降权 CLAUDE.md |
probe.project-import-manifest-mismatch |
project-data-lifecycle.json |
ZIP manifest mismatch exit 1 前 transcript 与 reserved project 文件已经持久化 |
probe.config-import-gate |
project-data-lifecycle.json |
离线内置 false 阻断 config import,精确诊断且零 apply 写入 |
probe.settings-layer-precedence |
settings-resilience.json |
flag、local、project、user 运行优先级可观察 |
probe.http-retry-classification |
settings-resilience.json |
529 重试,400 不重试 |
probe.model-fallback-sequence |
settings-resilience.json |
主模型三次 529 后切备用模型 |
probe.telemetry-otlp-redaction |
telemetry-otlp.json |
OTLP prompt 默认脱敏,显式开关后包含正文 |
probe.telemetry-raw-api-default |
telemetry-otlp.json |
raw-body gate 默认不产生 request/response body event |
probe.telemetry-raw-api-inline |
telemetry-otlp.json |
inline 模式将受控 request/response 正文送入 collector |
probe.telemetry-raw-api-file |
telemetry-otlp.json |
file 模式本地落正文,collector 只收 body_ref |
probe.sandbox-filesystem-enforcement |
sandbox-enforcement.json |
workspace 写入成功,denyWrite 不落盘 |
probe.sandbox-network-enforcement |
sandbox-enforcement.json |
空 allowlist 下目标 server 零命中 |
probe.tui-shift-tab-comment-scope |
tui-regressions.json |
Shift+Tab 退出备注但不执行 Edit,也不留下 session grant |
probe.tui-quick-arrow-enter-selection |
tui-regressions.json |
同批 Down+Enter 选择实时焦点,并使第二个 Edit 继承 session grant |
probe.manual-compaction-boundary |
agent-loop-tool-result-resume.json |
手工 compact 产生 boundary 并替换旧结构历史 |
probe.session-fork-identity |
agent-loop-tool-result-resume.json |
fork 使用新 session ID 并继承 summary |
probe.checkpoint-rewind-positive |
checkpoint-rewind.json |
Edit 后 file rewind 恢复原字节且零模型请求 |
probe.request-api-key-auth |
runtime-controls.json |
API key 使用 x-api-key,移除 Authorization |
probe.prompt-cache-disable |
runtime-controls.json |
禁用 prompt caching 后 cache marker 为零 |
probe.lifecycle-doctor-update |
lifecycle-doctor.json |
更新 gate 与 doctor 多故障域诊断可达 |
probe.remote-control-custom-endpoint-boundary |
lifecycle-doctor.json |
自定义 endpoint 明确阻断 Remote Control |
probe.feature-override-unreachable |
lifecycle-doctor.json |
内部环境 override 未在 disabled gate 前把 rollout 变成 true |
probe.plugin-skill-load |
plugin-skill-lsp.json |
Plugin Skill listing、dispatch acknowledgement 与正文注入分离 |
probe.plugin-lsp-roundtrip |
plugin-skill-lsp.json |
deferred LSP 经 stdio 完成 1-based/0-based 坐标与结果闭环 |
probe.embedded-grep-pathological-fast-fail |
embedded-grep.json |
病态 regex 在 deadline 内以固定 compiled-size limit 和 exit 2 结束,RSS 有界 |
probe.embedded-grep-max-count-context |
embedded-grep.json |
-m 1 停止新 match 后仍逐字完成 -A 2 / -C 2 context |
probe.grep-tool-error-feedback |
embedded-grep.json |
长行被明确省略,病态 regex 以配对 is_error 回灌后循环继续 |
仍然保留的边界¶
这些探针没有证明:真实 Anthropic 服务端的缓存命中算法、账号风控评分、远端模型路由、feature flag 实时值、Remote Control entitlement、云端 session orchestration、所有 macOS/Linux 版本的 sandbox 等价性,以及任何已在生产构建前删除的源代码。
新增版本时必须重跑同一探针合同,并比较命令、受控输入、literal output、exit status、请求序列和 required checks。只比较 pass 或 JSON 文件哈希,会把真正的机制变化和时间戳变化混在一起。