跳到主要内容

Tokenless CLI 参考

tokenless CLI 开放统一的 content-aware 压缩命令、直接 Schema/JSON/TOON 操作、Stash 恢复、环境状态与统计。共享 Agent Hook 使用 tokenless compress;直接命令继续用于脚本和 诊断。

命令总览​

命令用途
tokenless compress执行一个 Protocol v2 生命周期操作
tokenless compress-schema压缩 Function Calling 工具 Schema
tokenless compress-response压缩 JSON/API/工具响应
tokenless compress-toon将 JSON 编码为 TOON
tokenless decompress-toon将 TOON 解码为 JSON
tokenless retrieve取回被截断并写入 Stash 的 Payload
tokenless env-check报告旧版环境检查已硬关闭
tokenless stats查询和控制本地统计

使用当前安装版本的帮助查看最终参数定义:

tokenless --help
tokenless <command> --help

通用输入规则​

压缩和编解码命令支持两种输入方式:

tokenless compress-response --file response.json

cat response.json | tokenless compress-response
  • -f 是 --file 的缩写。
  • 不传 --file 时必须通过 stdin 提供输入。
  • 单次输入上限为 64 MiB。
  • JSON 相关命令要求输入为合法 JSON。
  • 压缩后没有 Token 收益时,CLI 向 stderr 说明原因,并输出原文。
  • compress-schema、compress-response、compress-toon 和 retrieve 按字节原样写出 Payload: 不添加也不去除末尾换行符。因此透传和无收益场景会逐字节复现输入,比较 stdout 与输入负载 即可可靠判断是否发生了压缩或编码。对压缩类命令而言,Active 模式下写出的字节等于统计记录的 after 文本;Dry-run 模式(TOKENLESS_COMPRESSION_ENABLED=0)下两者并不相同,因为 stdout 保留 原文,而统计把更小的预测候选记为 after_text。所以 Dry-run 记录的 after_chars 与 after_tokens 描述的是预测节省,而不是实际写出的字节(见最小有效 Payload)。

最小有效 Payload​

compress-schema 和 compress-response 没有固定的最小输入大小。对于每个通过输入 规则的合法 JSON,CLI 都会生成候选结果,并用同一个启发式规则估算两者的 Token 数:每个 CJK 字符计一个 Token,其他字符每四个计一个 Token 并向上取整。在 Active 模式下,只有候选结果的 估算值严格小于原文(after < before)时才会输出候选结果;否则 stdout 输出原文,stderr 报告 did not reduce size,且不写入统计记录。在 Dry-run 模式 (TOKENLESS_COMPRESSION_ENABLED=0 或 compression_enabled=false)下,stdout 始终输出 原文;候选结果更小时,如果已启用 Stats 或 SLS 记录,则把它记为预测节省。

因此,盈亏平衡点取决于内容和 JSON 结构,而不只取决于字节数或字符数。带缩进和换行 的小 JSON Payload 仍可能通过格式压紧而缩小,已经紧凑的较大 Payload 也可能原样透传。 下文的描述、字符串、数组和深度阈值只决定单项转换何时触发,并不是整个 Payload 的最小大小。 Agent Adapter 还可能在启动 CLI 前应用独立的大小门槛,详见 Adapter 处理规则。

compress​

compress 是共享 Agent Hook 使用的严格 Protocol v2 Transport。命令名保持不变,但 Wire 格式有意不兼容 Protocol v1。每个 Envelope 顶层严格只有四个字段:请求使用 protocol_version、operation、attribution、input,响应把 input 换为 result。 Envelope 和操作 Payload 中的未知字段都会被拒绝。

PostTool 示例:

jq -n \
--rawfile content build.log \
'{
protocol_version: 2,
operation: "post_tool",
attribution: {
agent_id: "my-agent",
session_id: "session-42",
tool_use_id: "tool-7"
},
input: {
result_kind: "tool",
tool_name: "Bash",
content: $content,
status: "success",
content_origin: "command_output",
command: "cargo build",
output_optimization: "none",
capabilities: {
replace_output: true,
recovery: {kind: "none"},
replace_with_text: true
}
}
}' \
| tokenless compress \
| jq '{operation, result: (.result | {disposition, content_type, applied_operations, recoverability, output})}'

操作:

operation必填 input 事实结果
before_modeltools、排除工具后的模型可见上下文、工具替换能力,以及 Integration 是否已有 Marker 授权恢复变换后的工具与排序后的可见 Marker Hash
pre_tool工具名、参数、明确的命令字段,以及参数替换/阻止能力参数、passthrough/replace_arguments/block_and_suggest Action,以及 none/rtk 输出优化状态
post_toolResult Kind、工具名、内容、状态、明确 Content Origin、上游输出优化状态和输出能力Output、Disposition、检测类型、实际操作、Recoverability、Token 计数和 Stash Keys
retrieveHash 或 Marker,以及模型当前可见的 Marker 集合授权后的规范化 Hash 和字节级一致 Payload

只有 post_tool 会进入 PostToolPipeline。当前生产路由为:

  • Retrieve Result 和 Interrupted/Denied 调用绕过压缩。
  • RTK 输出默认绕过压缩;只有完整执行回执确认字节未变且调用成功,Core 才恢复原命令并继续路由。 PostTool 必须在 command 中传入注册的完整执行命令;命令缺失或被修改时保留旁路。 输出已改变或无法确认时保留旁路;Token 估算持平不能授权回退。回执状态失败会发出警告并保留 旁路,不会使 PostTool 操作失败。
  • Tool Error 原样透传,并可携带限长 additional_context 诊断。
  • 成功 JSON 使用 JsonCompressor,并可能选择 Compact JSON 或 TOON。
  • 已识别的成功构建/测试命令输出使用 BuildLogCompressor,可选择 Terminal Cleanup 和可恢复的 Routine Progress Reduction。
  • 成功 CSV/TSV 在宿主支持任意文本替换时使用 TabularCompressor。只有字符数和估算 Token 数同时减少时才应用保留全部单元格的完整压紧,否则原样透传;无需 Stash 或恢复能力。 文件来源结果透传;见CSV/TSV 压紧。
  • 其他内容类型在对应领域 Compressor 接入前原样透传。

只有 disposition: "applied" 表示 output 与原文不同。dry_run、passthrough、 no_savings、recoverability_unavailable、timeout 和 tool_error 都携带原始内容。 JSON 的 content_type 现在是 json;applied_operations 报告实际发生的变换,而不是配置的 Compressor 列表。

before_model 和 post_tool 必须提供 capabilities.recovery:{"kind":"none"}、 {"kind":"shell"} 或 {"kind":"tool","name":"tokenless_retrieve"}。Tool 名称限 1–64 个 ASCII 字母、数字、下划线或连字符。未知字段、缺失 recovery 和旧的 retrieval_available 布尔字段均会被拒绝,Core 与调用方必须一起更新;协议版本保持 2。只有静态 Tool 能启用 BeforeModel Schema 的可恢复截断;Shell 恢复用于 PostTool,不新增或改变 Agent 工具。

退出码属于 Transport 契约:

  • 0:正常操作结果,包括透传、无收益、Dry-run、Recoverability 不可用、RTK 不适用和 Tool Error。
  • 1:操作失败,包括 RTK Timeout、未授权/缺失 Retrieve、Stash 或 Pipeline 失败。错误写入 stderr,不输出 Response JSON。
  • 2:JSON 格式错误、不支持的协议版本,或 Envelope/Payload Shape 无效。

pre_tool 从 PATH 和支持的安装布局解析独立打包的 rtk;低于 0.35.0 的候选会被跳过, 并继续尝试后续打包位置。已识别的 Cargo、pytest、npm/Jest、Go 和 Make 构建/测试命令,以及 包含已识别原生 find 调用的整条命令保持原生形式,使其输出只有一个 PostTool 所有者。 find 保护覆盖直接调用,以及 RTK 的内置前缀:env、command、exec、noglob、nocorrect、 builtin、timeout、time、nice、nohup 和 uv run,支持嵌套和 Shell 反斜杠换行续行。 进程 Wrapper 参数按随包 RTK 的语法识别,未知参数会停止识别。设置 TOKENLESS_SEARCH_PATH_SHARING_ENABLED=0 后仍保持此行为。不会读取自定义 hooks.transparent_prefixes, 此类前缀下的 find 仍可能被 RTK 改写;其他受支持命令也仍可由 RTK 改写。Agent-facing retrieve 在读取 Stash 前根据 visible_markers 授权 请求 Hash。下文的独立 tokenless retrieve 是受信本地运维入口,不要求模型可见性上下文。

随包提供的 RTK 命令​

Tokenless 随包提供 RTK 0.49.0。以下行为适用于该二进制;如果 PATH 中更靠前的 位置存在兼容的 rtk,实际使用的版本可能不同。直接使用这些命令时,可通过 rtk --version 检查版本。

搜索 Flag​

rtk grep 将原生搜索 Flag 转交给 grep:-l 列出匹配文件名,-m N 限制每个 文件的匹配数量。它们不再表示 RTK 的行长度或显示数量限制。要控制 RTK 的显示限制, 请在 Pattern 前使用长选项 --max-len 和 --max。原先 RTK 提供的 -t / --file-type 选项已移除;按文件类型过滤时,使用 rtk rg -t rust 调用 ripgrep 的原生功能。向 rtk grep 传入 -t 现在会显示底层 grep 不支持该选项的错误。

rtk grep -l 'TODO' src/*.rs
rtk grep -m 3 'TODO' src/*.rs
rtk grep --max 20 --max-len 120 'TODO' src/*.rs
rtk rg -t rust 'TODO' src/

Shell 重写​

RTK 支持跨多行处理已支持的命令,并对 Pipeline 应用保守规则。它可以重写受支持的 最后一级;当下游全部是 head、tail 或 cat 等允许的显示命令时,也可以重写 受支持的输出生产者。统计或解析原始输出的 Pipeline 可能保持原样,不能保证每个 Shell 表达式都会被重写。sudo 命令保持原样透传,自动重写不会将 RTK 插入特权命令。

使用 rtk rewrite 'COMMAND' 可以查看建议的重写结果,而不执行命令。 Tokenless 按上文规则让已识别的构建/测试命令及已识别的原生 find 调用(包括含此类调用的整条复合命令) 跳过 RTK 改写。PostTool 可以共享有净收益的纯路径列表;混合输出和不支持的 find 格式保持原样。

输出恢复​

在默认 RTK 配置下,受支持的 Filter 会将至少 500 字节的失败输出及明确截断的输出 保存到本地 SQLite 恢复存储。出现恢复提示时,使用提示中的 Hash 执行 rtk recall HASH;rtk recall --full HASH 请求全部已保存的输出,--from、 --lines 和 --grep 可缩小返回范围。rtk recall --list 列出保留的条目。 存储受容量及过期策略限制,因此 Recall 不是永久归档。已有的旧版 tee 配置继续 使用基于文件的恢复模式。

RTK 恢复状态以宿主 OS 用户为作用域,不按 Tokenless 租户或 Session 隔离。 Linux 默认存储是 $XDG_DATA_HOME/rtk/recall.db;未设置 XDG_DATA_HOME 时使用 ~/.local/share/rtk/recall.db。TOKENLESS_DATA_DIR 不会改变此位置。共用同一 OS 用户及 RTK 存储的 Session 可以列出并恢复彼此保留的输出。在命令执行环境中 设置 RTK_RECALL_DB 可以选择独立存储,设置 RTK_RECALL=0 可以禁用恢复。 独立路径不构成同一用户下的 OS 权限边界。

RTK Recall Hash 属于 RTK 的存储。Tokenless Stash Marker 应使用 tokenless retrieve HASH;这两个恢复命令不能互换。

compress-schema​

压缩单个 OpenAI Function Calling Schema:

tokenless compress-schema -f tool.json

压缩 JSON 数组:

cat tools.json | tokenless compress-schema --batch

接受的输入条目形态(按条目自动识别):

  • OpenAI function 包装:{"function": {"name", "description", "parameters"}}
  • 直接 Schema:{"name", "description", "parameters"}
  • Gemini / copilot-shell 包装:{"functionDeclarations": [{"name", "description", "parameters" \| "parametersJsonSchema"}, ...]};copilot-shell 的 BeforeModel hook 以该形态下发工具声明(llm_request.config.tools)。包装内的声明逐个压缩(参数 schema 优先取 parametersJsonSchema,其次取 parameters),包装本身及其同级字段原样保留。

输入本身是数组时会自动使用 batch 处理。

包含顶层 tools 数组的完整请求对象也受支持,其中的 Function Calling 定义可以是 OpenAI {"function": {...}} Wrapper、Gemini {"functionDeclarations": [...]} 工具对象, 或裸 {name, description, parameters} 定义。该结构不要传 --batch;非函数工具及 tools 之外的字段会原样保留。

tokenless compress-schema -f request.json

常用参数:

参数说明
-f, --file <path>输入文件;省略时读 stdin
--batch把输入作为 Schema 数组处理
--agent-id <id>统计中的 Agent 标识
--session-id <id>统计中的 Session 标识
--tool-use-id <id>统计中的工具调用标识
--no-stash不保存被截断的描述;截断将不可逆
--stash-db <path>覆盖 Stash 数据库;无效路径会被拒绝为覆盖值,并回退到环境变量或默认路径

默认处理规则:

项目默认值
函数描述最大长度256 字符
参数描述最大长度160 字符
删除 examples是
删除 title是
移除描述中的围栏代码和行内代码,再合并空白是
最大递归深度32

示例:

tokenless compress-schema -f tools.json --batch \
--agent-id demo-agent --session-id session-001

compress-response​

压缩 JSON 响应:

tokenless compress-response -f response.json

JSON 格式压紧保留全部字段,包括 debug/trace/logs,并在每层保留 null、空字符串/数组/对象。数组空项保留原来的位置。Record Reduction 和显式字符串、数组、深度限制仍可在既有恢复策略下省略内容。常用参数:

参数默认值说明
-f, --file <path>stdin输入文件
--truncate-strings-at <n>4096字符串截断阈值
--truncate-arrays-at <n>32触发数组截断的长度阈值;保留前 n 个元素。对象记录数组改用记录缩减(见下文)
--array-tail-preserve <n>8截断数组时从尾部保留的元素数;0 禁用尾部保留。不适用于对象记录数组
--max-depth <n>8最大嵌套深度
--agent-id <id>cli统计中的 Agent 标识
--session-id <id>—统计中的 Session 标识
--tool-use-id <id>—统计中的工具调用标识
--no-stash关闭禁用可逆 Stash
--stash-db <path>~/.tokenless/stash.db覆盖 Stash 数据库;无效路径会被拒绝为覆盖值,CLI 随后回退到环境变量或默认路径

数组截断会保留 --truncate-arrays-at 个头部元素和 --array-tail-preserve 个尾部元素,并在两者之间插入截断标记。只有当数组长度超过首尾窗口之和时才会丢弃中间元素:默认配置下单条命令可保留 n + 8 个元素(外加截断标记);当两个窗口覆盖整个数组时,所有元素都会保留且不插入标记。设置 --array-tail-preserve 0 可恢复纯头部截断。

对象记录数组是例外:任何包含至少 33 个 JSON Object 的数组都会按 32 条记录的基础预算进行缩减,并追加一个取回标记,与 --truncate-arrays-at 和 --array-tail-preserve 的取值无关。选取会保留前 4 条和后 4 条记录、携带错误或异常信号的记录、数值异常记录,以及其余记录的稳定采样;关键记录可以突破基础预算。完整原始数组作为一个条目写入 Stash,可通过 tokenless retrieve 恢复。记录缩减依赖 Stash,因此使用 --no-stash 时会保留此类数组的全部记录而不做缩减。

覆盖阈值:

tokenless compress-response -f response.json \
--truncate-strings-at 2048 \
--truncate-arrays-at 16 \
--max-depth 6

格式压紧只改变格式;宿主接受文本且往返校验保留值与类型时,也可选择 TOON 表示。显式截断和 Record Reduction 会生成有界视图。处理关键 Payload 前,应先保存样例并对比压缩结果。

Stash 会保存 Record Reduction 使用的完整原始数组、被截断的字符串、其他截断数组中被丢弃的中间段和深层子树。尾部元素直接保留在输出中,不进入 Stash。字段不会仅因名称或值为空而被删除。

大多数 Adapter 会覆盖这些独立 CLI 默认值。共享 Shell 策略使用 65536、128、8;其他结构化工具策略使用 1048576、65536、32。内容读取类工具会被跳过。详见Agent 集成 · Adapter 处理规则和用户手册 · 压缩的触发条件与阈值。

compress-toon 与 decompress-toon​

JSON 转 TOON:

echo '{"name":"Alice","age":30}' | tokenless compress-toon --min-toon-chars 0

短于 500 字符的负载默认原样透传:TOON 对小型 JSON 的节省近乎为零,因此 CLI 应用与 Adapter Hook 相同的最小长度。传入 --min-toon-chars 0 可对任意有 token 收益的负载编码。输入会先通过 JSON 校验再做长度判断,因此低于阈值的非法 JSON 仍会以退出码 2 失败。

TOON 转 JSON:

printf 'name: Alice\nage: 30\n' | tokenless decompress-toon

往返验证:

echo '{"name":"test","value":42}' \
| tokenless compress-toon --min-toon-chars 0 \
| tokenless decompress-toon

两个命令都支持从文件读取输入,而不必使用标准输入:

tokenless compress-toon --file payload.json
tokenless decompress-toon --file payload.toon

-f 是 --file 的简写形式。不指定时从标准输入读取,这正是上面示例的用法。

compress-toon 支持 --agent-id、--session-id、--tool-use-id 和 --min-toon-chars。当负载低于最小长度、含有 TOON 无法精确承载的数值(1e-400、-0.0、1e3,或超出 f64 精度的小数),或编码后无收益时会输出原 JSON,且不记录该次统计。这类透传场景退出码仍为 0,stderr 上的提示仅供参考:在脚本等自动化场景中,请通过比较 stdout 与输入负载来判断是否发生了编码,不要依赖 stderr。透传和无收益场景会在 stdout 上逐字节原样复现输入(不添加、不去除末尾换行符),任何字节差异都说明负载已被编码;作为兜底,也可以检查 stdout 是否仍为合法 JSON。

retrieve​

压缩输出中出现以下按需操作提示时,说明被省略的内容已写入 Stash:

12 passing-test lines omitted. If needed, run in shell: tokenless retrieve 0123456789abcdef01234567

使用裸 Hash 取回:

tokenless retrieve 0123456789abcdef01234567

AgentScope 使用实际配置的静态 Tool,而不是 Shell 命令:

12 passing-test lines omitted. If needed, call tool tokenless_retrieve with hash_or_marker=0123456789abcdef01234567

历史 Marker 仍可读取,但不再生成:

tokenless retrieve '<<tokenless:0123456789abcdef01234567>>'

覆盖数据库:

tokenless retrieve 0123456789abcdef01234567 \
--stash-db ~/.tokenless/stash.db

Hash 必须是 24 个十六进制字符,且不区分大小写。SQLite Stash 默认 TTL 为一小时,最多保留 10,000 个有效条目。超过 TTL、被容量策略淘汰、使用 --no-stash、处于 dry-run、写入失败或数据库路径不一致时都无法取回。

env-check​

Tool Ready 已硬关闭。文本输出只报告这一状态,不会读取规范或改变环境。 任何环境变量都无法重新启用它。

所有 JSON 调用都只返回三个字段:

{"tool":"Shell","status":"UNKNOWN","enabled":false}

tool 是指定的工具名、all 或 checklist。硬关闭契约绝不会包含休眠旧版 清单的 tools 或 summary 字段。

报告单个工具对应的硬关闭状态:

tokenless env-check --tool Shell

报告全部工具或清单模式的硬关闭状态:

tokenless env-check --all
tokenless env-check --all --json
tokenless env-check --checklist
tokenless env-check --checklist --json

自动修复:

tokenless env-check --tool Shell --fix

硬旁路生效期间,--fix 不会调用包管理器或修改环境。如果未来重新设计并启用,保留的旧版实现只会尝试修复缺失的必需依赖。

stats​

只读 HTTP 查询​

对已有统计数据库运行独立查询服务:

tokenless stats serve --data-dir /var/lib/tokenless \
--credential-file /run/secrets/tokenless-query

这两个路径均为部署占位值。--data-dir 必须是包含 stats.db 的绝对目录, 服务不会创建或迁移数据库。--credential-file 包含非空、无空格的 ASCII Bearer 凭据(含末尾换行最多 4096 字节),启动时读取,轮换后需要重启服务。 通过凭据文件或 Kubernetes Secret 挂载;AgentSight 后端使用该凭据, 用户登录仍由 AgentSight 自己处理。

默认监听 127.0.0.1:7397。使用 --listen <address>:<port> 指定私有服务端点。 远程传输需通过私有网络或 TLS 反向代理保护;该监听器提供 HTTP,不提供 TLS。非 loopback 监听会在启动时警告。Unix 凭据文件建议 使用仅所有者可访问的 0600 权限;group/other 权限会触发启动警告,但不会阻止 服务启动。批量请求先鉴权,再读取请求体。

匹配到损坏记录时返回 HTTP 500,包含 error.code=invalid_record、 error.record_id 和 error.field,不返回无效值或内容。修复指定源记录后重试。 手动使用 before_id=<record_id> 可检查旧记录,但会主动遗漏数据,不能作为 完整统计。鉴权后先识别路由,未知路径(包括尾斜杠)在检查方法前返回 404。 两个 GET 路由也支持 HEAD,沿用相同的查询校验和状态,但不返回响应体。 HTTP 405 响应包含已识别路由的 Allow: GET, HEAD 或 Allow: POST。

启动时若源库缺少 idx_tool_use_id,会警告一次:在新版原生 recorder 打开该库前, tool 查询可能扫描全表。服务仍正常启动,不创建索引或迁移源库。

接口查询选项或 JSON 请求体响应
GET /v1/stats/recordslimit(默认 50,最多 100)、before_id、session_id、tool_use_idschema_version: 1、records、next_before_id
GET /v1/stats/records/<id>include_content=true 请求已存储的 text/outputschema_version: 1、record
POST /v1/stats/records/queryJSON:tool_use_ids(1–128 个非空 ID,每个最多 1024 字节)、limit(1–100)、可选 before_id;请求体最多 1 MiBschema_version: 1、records、next_before_id

所有请求需要 Authorization: Bearer <credential>。缺失、错误或重复凭据 返回 401,不接受 cookie 或查询参数中的凭据。数据响应使用 Cache-Control: no-store。

列表不包含内容。详情返回显式请求的全部已存储内容,content_included 区分未请求内容与内容未存储时的 null。响应超过 8 MiB 时返回 413,不会 静默截断。保留原始记录时间和字段,包括历史缺失的 mode 以及 RTK 记录。 分页用于浏览当前数据库,不提供清空或替换数据库后的恢复能力。

错误格式为 {"schema_version":1,"error":{"code":"..."}}:无效查询返回 400,记录或路由不存在返回 404,其他方法返回 405,损坏记录返回 500, 数据库不可用或不受支持返回 503。CLI/hook 退出后,服务仍可查询已提交记录。 停止查询服务不影响压缩。

本地命令​

tokenless stats summary
tokenless stats summary --json
tokenless stats summary --limit 1000
tokenless stats list --limit 20
tokenless stats show <record-id>
tokenless stats diff <record-id>
tokenless stats diff --session <session-id>
tokenless stats status
tokenless stats enable
tokenless stats disable
tokenless stats clear --yes

双跑对比:

tokenless stats summary --compare <baseline-session> <active-session>

Session ID 不存在时以非零退出码失败,而不是输出 0% 对比,行为与 stats diff --session 一致。stats summary --limit 必须为正整数;--limit 0 会在解析阶段被拒绝,行为与 stats diff --limit 一致。

stats summary --json 的百分比字段(chars_saved_percent、tokens_saved_percent)与 --compare --json 的 saved_percent 都按节省量除以原始未压缩量计算;summary 与 compare 字段会把节省量钳制为 0,而 stats diff --json 保留负值。详见效果度量 → 节省率字段定义。

查看单条记录,或一次工具调用中可确认衔接的阶段:

tokenless stats diff <record-id> -U 5
tokenless stats diff --session <session-id> \
--tool-use-id <tool-use-id>

stats show 会输出存储的完整 before/after 文本;stats diff 用于解释估算节省并显示变化行。主要选项如下:

选项适用范围行为
<record-id>单条记录与 --session 冲突
--session <id>Session显示仅含指标的总览
--tool-use-id <id>Session展开一次工具调用;必须配合 --session
-l, --limit <n>Session 总览最多显示的链路数,默认 20
--sort saved|timeSession 总览默认按节省量降序,也可按时间从新到旧
-U, --context <n>内容差异每处变化周围的未变化行数,默认 3
--no-color文本输出关闭 ANSI 颜色
--json所有范围输出 schema 1.0 JSON 和结构化 diff hunks

任一端内容不可用或超过 1 MiB 时不生成内容差异,渲染的 hunk 最多 500 行。单记录和 tool-use 差异可能包含存储的源文本,使用共享终端或收集输出时注意敏感信息。完整说明见效果度量和配置与数据隐私。

stats status 只报告本地统计和 SLS 开关及其来源,因为当前状态读取路径没有读取 compression 开关,所以不显示 compression_enabled。该设置应检查 TOKENLESS_COMPRESSION_ENABLED 和 ~/.tokenless/config.json。

错误与降级​

  • CLI 错误写入 stderr,并以非零状态退出。
  • Hook/Plugin 通常捕获错误并透传原始响应。
  • 无压缩收益不是错误;CLI 会输出原文。
  • Stash 写入失败时压缩可能继续,但相关截断内容无法取回。

遇到输入、数据库或 Adapter 错误时,参阅故障排查。