先看运行状态,再取业务内容

Claude Code以JSON格式返回时,外层对象可能包含运行状态、会话和用量信息,业务结果不一定就是整个对象。普通文字结果与指定Schema的结构化结果,也需要读取不同字段。

本篇针对自己的脚本怎样消费CLI输出,不是Messages API的响应解析教程。两者的封装、字段与权限路径不同,不能把一套解析器直接换个端点就用。

明确你使用的输出模式

官方编程调用文档使用claude -p配合--output-format json;若同时指定--json-schema,结构化结果位于structured_output。普通文本结果可从result读取。

先记录完整调用参数和输出格式,才能解释结果。stream-json是事件流,与这里单个JSON对象的读取方式不同;不能把多行事件直接交给一次JSON.parse,或只挑最后一行假装中间没有失败。

CLI封装与业务结果分两层;先核对模式:单个json与stream-json不同;再检查成功标志:失败文本不能当作正常结果;选择对应字段:result或structured_output;最后核对业务:函数名需能回到目标文件
本站原创示意图:CLI封装与业务结果分两层。离线构造封装;未执行真实Claude Code请求。查看大图 ↗

用两份封装练习提取

虚构封装A:type为result,subtype为success,is_error为false,structured_output为{"functions":["sum"]}。虚构封装B的subtype是error_during_execution、is_error为true。第一份可进入业务校验,第二份不能因有result字符串就当成功。

文末例子只接受本教程已知的成功形状。缺少成功标志、缺少要求的字段或出现未知类型时拒绝,便于版本升级后先检查实际封装,而不是默认为成功。

如何运行本地解析器

把代码存为headless-envelope-check.mjs,用Node.js 22或24 LTS执行:node headless-envelope-check.mjs --demo。第一行accepted:true,value包含functions数组;第二行accepted:false。不会启动Claude Code或发起付费请求。

接入时把自己实际捕获的完整stdout交给函数,并记录进程退出码。函数只解析JSON形状,调用进程是否成功退出仍需由你的进程管理代码检查;不能忽略非零退出码。

接真实命令时限制任务与权限

首次试运行只给一个无敏感信息、无写入要求的小文件,让任务返回该文件确实存在的函数名称。原始材料、CLI成功标志与业务Schema应分别验收,函数名存在也不能自动推断实现正确。

非交互模式不意味着可以绕过工具权限。遇到授权、超时或轮数限制,应记录状态并停止或转人工;不要为了消除提示直接关闭权限检查。CLI原始JSON可能含任务信息,日志应按需要脱敏。

解析成功仍不是完成业务

例子的stillNeedsBusinessValidation始终为true。正式应用还需要检查functions确为字符串数组、函数属于目标文件,以及结果是否关联本次任务。本地测试只覆盖封装选择和失败分支,没有真实CLI调用、账户授权或端到端验收。

参考资料与核验范围

资料核对日期:2026年10月19日。以下为官方原始资料;产品入口和可用范围仍以当前账户为准。

1. [官方资料1](https://code.claude.com/docs/en/headless)