跳到主要内容

Tokenless CLI 参考

English

tokenless CLI 可独立压缩 Schema 和响应、进行 TOON 编解码、取回 Stash 内容、检查工具环境并查询统计。Agent Adapter 在内部调用同一组能力。

命令总览

命令用途
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 mcp serve启动提供取回工具的 MCP stdio 服务

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

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

压缩单个 OpenAI Function Calling Schema:

tokenless compress-schema -f tool.json

压缩 JSON 数组:

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

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

参数说明
-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 copilot-shell --session-id session-001

compress-response

压缩 JSON 响应:

tokenless compress-response -f response.json

默认会移除名称完全匹配且区分大小写的黑名单字段、null、空字符串/数组/对象,包括数组中的空项;随后截断长字符串、长数组和超过配置嵌套深度的值。常用参数:

参数默认值说明
-f, --file <path>stdin输入文件
--truncate-strings-at <n>4096字符串截断阈值
--truncate-arrays-at <n>32数组元素保留上限
--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 随后回退到环境变量或默认路径

覆盖阈值:

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

默认删除的字段名为:

debug, trace, traces, stack, stacktrace, logs, logging

字段匹配和截断会改变模型看到的响应表示。处理关键 Payload 前,应先保存样例并对比压缩结果。

Stash 只作用于字符串、数组尾部和深层子树截断。黑名单字段、null 和空值会直接移除,不会生成取回标记。

大多数 Adapter 会覆盖这些独立 CLI 默认值。共享 Shell 策略使用 655361288;其他结构化工具策略使用 10485766553632。内容读取类工具会被跳过。详见框架集成 · Adapter 处理规则

compress-toondecompress-toon

JSON 转 TOON:

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

TOON 转 JSON:

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

往返验证:

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

compress-toon 支持 --agent-id--session-id--tool-use-id。编码后无收益时会输出原 JSON,且不记录该次统计。

retrieve

压缩输出中出现以下标记时,说明被截断的内容已写入 Stash:

<<tokenless:0123456789abcdef01234567>>

使用裸 Hash 取回:

tokenless retrieve 0123456789abcdef01234567

也可以粘贴包含标记的整行文本:

tokenless retrieve \
'<... 12 items truncated, retrieve with <<tokenless:0123456789abcdef01234567>>'

覆盖数据库:

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

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

mcp serve

启动 stdio MCP 服务:

tokenless mcp serve

服务暴露 tokenless_retrieve 工具,让支持 MCP 的 Agent 无需执行 Shell 命令即可取回 Stash 内容。MCP 服务必须使用与压缩流程相同的用户和 Stash 数据库。

env-check

检查单个工具:

tokenless env-check --tool Shell

检查全部已声明工具:

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

状态含义:

状态含义
READY必需依赖、推荐依赖、配置和权限均满足
PARTIAL必需依赖和权限已满足,但缺少推荐依赖、配置项或网络检查
NOT_READY缺少必需依赖或权限,不应重复调用该工具
UNKNOWN依赖规范中没有该工具

自动修复:

tokenless env-check --tool Shell --fix

--fix 只尝试修复缺失的必需依赖,不会安装推荐依赖。它可能调用系统包管理器、安装依赖或创建链接。应先阅读普通检查输出,并在明确接受环境变更后使用;需要管理员权限时,按输出提示操作。

stats

tokenless stats summary
tokenless stats summary --json
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>

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

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 错误时,参阅故障排查