跳到主要内容

Tokenless Agent 集成

Tokenless 通过 Plugin、Hook 和 Extension 接入具体 Agent 产品。本文只说明产品 Adapter。 Python SDK 及其 AgentScope 专用子文档放在 Python SDK 指南 下。

当解析器无法保留某个 JSON 数字的值时,PostTool 会保持整个响应原样。其他响应仍可进行清理和 Record Reduction;Core 仅在 TOON 解码后保留相同的值与类型时采用它。

Agent Adapter 支持矩阵​

Agent 产品值Tool Ready命令重写行为响应交付方式TOONSchema
cosh-ngcosh已硬关闭替换受支持的 Shell 输入Cosh-NG 替换受支持的 JSON 结果;旧版 Copilot Shell 透传对可替换文本由 Pipeline 选择Common Hook 仅接受无损结果
OpenClawopenclaw已硬关闭替换 exec 命令输入在模型消费前替换单文本工具结果Core 为可替换文本选择—
Hermeshermes已硬关闭阻止第一次调用并建议使用 Core 返回的改写命令替换已接受的结果或追加错误指引;支持 Marker 命令恢复对可替换文本由 Core 选择—
Qoderqoder已硬关闭输出改写后的 Shell 输入通过 updatedToolOutput 替换输出对可替换文本由 Pipeline 选择—
千问办公(macOS)qwenwork—替换原生 Bash 和工作区 Shell 输入替换符合条件的完整结果;仅提供遥测的 MCP 包装工具透传对可替换文本由 Pipeline 选择—
Claude Codeclaude-code已硬关闭替换 Bash 输入2.1.121 及以上替换输出;否则透传对可替换文本由 Pipeline 选择—
Codexcodex已硬关闭替换受支持的 Shell 输入保留原文;仅对识别出的环境失败追加上下文——
DeepSeek Harnessdsh未注册未注册把已接受的单文本结果委托给 Core;支持 Marker 命令恢复对可替换文本由 Core 选择未注册
OpenCodeopencode已硬关闭替换 Bash 输入替换工具输出对可替换文本由 Pipeline 选择✅
Qwen Codeqwencode已硬关闭输出改写后的 Shell 输入宿主没有替换字段,因此透传——
QwenPawqwenpaw—替换 execute_shell_command 的输入在 AgentScope 中间件链中替换工具结果的文本块对可替换文本由 Core 选择✅

“—”表示该能力不可用:当前 Adapter 没有注册,或当前宿主版本不会运行;对应的 Tokenless CLI 命令仍可能可用。

Cosh-NG 使用的 Adapter 值为 cosh,扩展仍使用现有的 .copilot-shell 目录。

Schema 压缩到达模型路径的方式因宿主而异:cosh 与 Cosh-NG 触发 BeforeModel Hook;OpenCode 通过其 tool.definition 插件 Hook 逐个压缩工具定义(MCP 工具不经过该 Hook);Qwen Code 的清单声明了 BeforeModel Hook,但当前 Qwen Code 版本在注册时会跳过这一未知事件名,Schema Hook 实际不会运行,因此矩阵标记为不可用。该条目保留注册,未来 Qwen Code 版本实现该事件后会自动生效。

这些 Adapter 仍会注册 Tool Ready,但会在检查、修复或阻断之前无条件硬退出,任何运行时设置都无法重新启用。工具执行后的失败归因不受影响。

additionalContext 是追加型 Hook 字段。共享 Hook 不会把压缩副本放入其中,否则原文 仍然可见,总 Context 反而增加;该字段只用于追加环境错误指引。统计记录只能证明压缩候选 内容变小了,不能单独证明宿主已经从模型请求中移除原文。

Adapter 处理规则​

共享 Cosh-NG、Qoder、千问办公、Claude Code 和 OpenCode PostTool Hook 会向 tokenless compress 发送一个 post_tool 请求。当宿主可以替换结果,且裸 tokenless 能从 Shell 的 PATH 解析时,Marker 可以提示模型通过已有 Shell Tool 恢复省略内容;否则 Core 只接受无损候选。 所有非 applied Disposition 都保留原文。当前路由如下:

内容当前共享 Hook 行为
JSON无损结构清理;文本替换槽还会考虑 TOON
需要 Record Reduction 或字符串、数组、深度截断的 JSON仅在 Marker 命令恢复可用时应用;否则以 recoverability_unavailable 拒绝候选
来自命令输出的构建/测试/包管理日志终端输出清理与常规进度缩减;每段省略都带有就地取回标记
宿主支持文本替换时的 CSV/TSV 表格仅在字符数和估算 Token 数同时减少时做保留全部单元格的整表压紧,否则透传;不写 Stash,无需恢复能力
路径共享开启且宿主支持文本替换时,带行号的 API 搜索记录,或非文件来源命令/API 结果中的纯路径列表无损共享连续路径或目录前缀;保留全部已收到记录,无需 Stash 或恢复调用
显式开启 TOKENLESS_DIFF_COMPRESSION_ENABLED(默认关闭)且宿主支持文本替换时,来自命令输出的 Git Diff按 Hunk 选择裁剪未变更上下文;保留全部变更行,完整原文经 Stash 可取回,收益过小的候选会被拒绝
宿主支持文本替换且 Stash 恢复可用时,来自命令输出或 API 响应(不含文件读取)的完整 HTML 文档;默认开启,TOKENLESS_HTML_EXTRACTION_ENABLED=0 关闭主内容转写为 Markdown,视图头部写明移除计数;完整原文经 Stash 可取回,收益过小的候选会被拒绝
长纯文本、Stack Trace、源码、Unknown对应领域 Compressor 接入前原样透传

内容检测、PostTool 200 字符门禁、基于工具来源的阈值、诊断、TOON 选择和最终接受均属于 Core 策略。Hook 只把宿主对象映射为 v2 字段;它可以跳过明显不是 JSON 的 Skill 文件,避免 无意义地启动子进程。

Common BeforeModel Hook 同样没有 Marker 授权恢复路径。当前 Schema 变换均为有损,因此 Core 原样返回 Tools。OpenCode 独立的逐工具定义路径和直接 compress-schema 命令不受影响。

OpenClaw、Hermes 与 DeepSeek Harness 已把 PostTool 决策委托给 Core。独立 compress-response 命令继续作为显式 JSON 清理入口。

对于 JSON 响应清理,Adapter 按以下方式把宿主工具映射为 Core 的内容 Origin:

类别Adapter 默认行为
内容读取类,包括 Read/Glob/Grep/LSP/NotebookRead 别名跳过响应压缩
Shell/exec字符串 65,536 字符、数组保留 128 项、深度 8
其他结构化工具字符串 1,048,576 字符、数组保留 65,536 项、深度 32

Common Hook、OpenClaw 与 Hermes 的 PostTool 大小门禁、基于工具来源的阈值和 TOON 选择均归 Core。只有宿主槽支持文本且 Core 找到更小的合法表示时才会使用 TOON。独立 compress-toon CLI 和 SDK TOON 路径继续使用文档规定的默认门槛,CLI 可通过 --min-toon-chars 为单次调用降低阈值。Codex 和 Qwen Code 当前的 PostToolUse 契约不能 替换原始模型可见输出,因此不运行响应压缩或 TOON。

Common Hook 与 OpenClaw 会把 RTK 所有权传给匹配的 PostTool 调用。Hermes 为兼容旧宿主版本 采用阻止后建议重试;最终结果 Hook 会从 Hermes 实际执行的命令中识别带 Attribution 的 RTK Wrapper(含可选的执行批次参数)。只有完整回执确认成功调用的输出字节未变,Core 才恢复 PostTool,并用保存的原命令 检查文件来源。宿主必须在 PostTool 的 command 中传回注册的完整执行命令;命令缺失或被修改, 以及输出已改变或无法确认时,均保持旁路。三种 Adapter 在回执查询前均为 RTK 输出声明 recovery: none,因此回退仅接受无损候选,不会为这些调用启用 Stash/retrieve 恢复。

Claude Code 需要 2.1.121 或更高版本才能使用 updatedToolOutput。版本更旧或无法确定时,响应压缩会关闭,以免重复注入原文。结构化工具输出会保留宿主 Schema,不会转换成文本 TOON;以字符串承载的 JSON 在 TOON 更小时可以使用 TOON。

千问办公(Windows x64 本地模式)​

Tokenless 可在千问办公中自动精简受支持的命令和工具输出,保留文件读取原文。 Windows 支持范围为 x64 上的千问办公 1.3.2 本地会话,需要安装 Node.js/npm 和 Python 3.10+。不支持 Windows ARM64 和安全工作区/VM 会话,其他 Windows Agent 尚未验证。

Windows 安装包尚未发布,目前需按 Windows 构建说明构建并安装本地 npm 包。

安装 npm 包后,退出千问办公,在 PowerShell 中执行:

$adapter = Join-Path (npm root -g) 'anolisa-tokenless/adapters/tokenless/qwenwork/scripts/lifecycle.ps1'
& $adapter -Action detect
& $adapter -Action install

重启千问办公,在应用内按需启用 Tokenless 插件,再开启新的本地会话。 之后照常使用千问办公,受支持的输出会自动精简。

如果找不到 Python,可在上述命令后添加 -Python 'C:/path/to/python.exe'。 千问办公安装在自定义位置时,先将 TOKENLESS_QWENWORK_APP 设置为包含 QwenWorkCN.exe 的目录,再执行安装命令。

卸载时先退出千问办公,执行以下命令后再重启应用:

& $adapter -Action uninstall

千问办公(macOS)​

qwenwork Adapter 面向千问办公 QwenWorkCN,与 Qoder CLI、Qwen Code、QwenPaw 独立。 已在 QwenWorkCN 1.2.5 的 macOS 本地会话中实测 Bash 改写、完整 MCP 响应替换、 JSON 转 TOON 输出及 Read 透传。适配器也接受 QwenWorkCN 1.3.2 中观察到的 macOS 工作区 Shell 契约。Linux VM 执行仍不受支持,Hook 在非 macOS 环境直接透传。

PreToolUse 匹配 Bash、mcp__workspace__bash 和 mcp__qw-builtin__mcp_workspace_bash,使用 RTK 改写受支持的命令。PostToolUse 不设置工具 matcher: 符合条件的完整 Bash 及非 Bash 结果进入公共策略。mcp_list、mcp_get、mcp_call 仅包含遥测信息的回调保持透传,避免用遥测替换真实内容;完整的 mcp_call 响应仍可正常压缩。 被接受的结果通过 updatedToolOutput 替换原文;对象和数组保留类型,文本槽可以使用 TOON。 文件内容保护、不支持内容透传及 RTK 去重规则保持不变。统计使用独立 Agent ID qwenwork, 不注册 Tool Ready 或 Schema Hook。

工作区 Shell 的结果恰好包含一个普通 MCP 文本块时,内容进入文本槽,支持 JSON 转 TOON。 多个块、混合媒体或带注解的块数组保持透传,其他 MCP 工具保留已有结构化结果处理。 工作区 Shell 的统计及 Pre/Post 去重状态保存在 <cwd>/.tokenless;原生 Bash 保留原有数据位置。 独立安装在插件内提供 bin/ 时,适配器使用这些二进制。模型 Shell 不会继承 Hook 的环境, 因此工作区 Shell 或插件私有二进制不声明裸 tokenless retrieve 恢复能力,PostTool 只应用无损压缩。

先通过 anolisa install tokenless 安装 Tokenless。本 Adapter 需要 Bash、Python 3.9+ 和 Tokenless 二进制。命令改写需要 RTK,响应压缩不依赖 RTK;缺少 RTK 会显示警告。 确保桌面会话能够找到这些二进制,而不只是交互式终端能够找到。

安装或升级前退出千问办公,然后执行:

anolisa adapter scan
anolisa --dry-run adapter enable tokenless qwenwork
anolisa adapter enable tokenless qwenwork
anolisa adapter status tokenless

CLI 将自包含插件复制到 ~/.qwenworkcn/plugins-custom/tokenless 并记录文件归属。 完成后重启千问办公、开启新会话,并在应用内检查插件激活状态。 status 验证应用存在及受管理文件完整性,加载和激活状态保持 unknown。 旁加载不修改 settings、权限、数据库或禁用/阻止列表。兼容性基线为 1.2.5 原生 Bash 和 1.3.2 工作区 Shell; 其他版本会显示兼容性未验证的警告。

TOKENLESS_QWENWORK_APP 指定非默认应用 Bundle;TOKENLESS_QWENWORK_HOME 指定数据目录。 默认在 /Applications 和 ~/Applications 查找应用,数据目录为 ~/.qwenworkcn。 使用绝对路径(支持开头的 ~)。status、disable 和重新 enable 时保持同一数据目录; 需要迁移时,先使用原配置 disable。不要指向 Qoder CLI 或 Qwen Code 的配置目录。

CLI 不接管没有自身 receipt 的已有安装。若此前使用随包脚本或 make qwenwork-install, 先用原脚本卸载,再通过 CLI 启用(按实际安装位置调整资源路径):

bash ~/.local/share/anolisa/adapters/tokenless/qwenwork/scripts/uninstall.sh
anolisa adapter enable tokenless qwenwork

CLI 管理的副本使用以下命令卸载:

anolisa --dry-run adapter disable tokenless qwenwork
anolisa adapter disable tokenless qwenwork

卸载不依赖应用、源 Bundle 或 Hook 运行依赖仍然存在。只移除未修改的 receipt 归属文件及 空插件目录,无关文件保留。修改过的文件会被保留,同时保留清理失败的 receipt: 恢复或移除报告的冲突后重试。重新 enable 拒绝覆盖用户修改;复制中断会保留 receipt, 供重试或清理。卸载后同样需要重启应用。

随包脚本及源码 Checkout 的 make qwenwork-install / make qwenwork-uninstall 仍是独立的备选方式。CLI 副本不包含这些生命周期脚本及其归属标记。两种方式均不调用 内嵌 Qoder CLI 或未公开的桌面 API。需要恢复独立脚本管理时,先 disable CLI 管理的 Adapter,再使用独立安装器。

DeepSeek Harness 原生处理路径​

DSH Bundle 要求 Node.js 22 或更高版本,并需要兼容的 DSH profile。应在同一条 enable 命令中列出全部目标 profile,随后使用其中一个名称启动 DSH。

anolisa adapter enable tokenless dsh \
--profile web \
--profile headless
dsh --profile web

--profile 是必填且可重复的参数。每次 enable 或 re-enable 都会把本次参数视为 完整目标集合。旧 receipt 中已有但新命令没有列出的 profile 会卸载 Bundle,因此 每次都要列出需要继续使用 Tokenless 的全部 profile。ANOLISA 会把选择的 profile 和解析后的 DSH home 写入 adapter receipt。后续 status、disable 和 re-enable 会 继续操作同一棵 profile 目录树。

Plugin 在 DSH 的 tools/post-execute Waterfall 上运行,并把包含一个文本块、可替换的 根调用结果发送给 tokenless compress。内容检测、JSON 与 Build Log 压缩、TOON 选择、 大小门禁、基于工具来源的阈值和最终接受均由 Core 负责。不受支持的内容域与文件内容结果会 透传。当裸 tokenless 能从 DSH Shell 的 PATH 解析到 Core 调用选中的同一个可执行文件时,Marker 可以提示模型执行一条独立的 tokenless retrieve 命令;成功的恢复输出会绕过压缩。多文本块、图片、Code Mode 子调用的 成功结果,以及后续 Waterfall Listener 已替换的 Canonical Value 均保持不变。CLI 缺失、 失败或超时也会保留原始内容。

DSH 会从模型 Shell 命令中移除继承的 TOKENLESS_* 环境变量。Adapter 会发布选定数据目录 以及可选统计库和 Stash 库路径的受控别名,让 Core 与 Shell 使用同一份恢复状态。默认状态 位于会话工作区下的 .tokenless。Adapter 会创建内容为 * 的 .tokenless/.gitignore,避免完整工具文本与 Stash Payload 被 git add -A 纳入提交。 如需自定义,应在启动 DSH 前设置 TOKENLESS_DATA_DIR、TOKENLESS_STATS_DB 或 TOKENLESS_STASH_DB,路径必须是其 Shell 沙箱可访问的绝对路径;自定义路径需要按仓库策略 自行保护并排除。

在 $DSH_HOME/profiles/<profile>/cordis.patch.yml 中覆盖安装后的 row,然后重启 对应的 DSH profile。

- id: anolisa-tokenless
config:
responseCompressionEnabled: true
timeoutMs: 5000
maxBuffer: 4194304

后续 DSH patch layer 会替换该 row 的完整 config 值。Plugin 会为省略的 key 提供 默认值,因此只需写出准备修改的 key。

配置项默认值行为
responseCompressionEnabledtrue控制响应压缩。设为 false 后,环境错误归因仍保持启用。
tokenlessBin$TOKENLESS_BIN,随后使用 tokenless选择 Tokenless CLI 可执行文件。非空 Plugin 配置优先于环境变量。Marker 恢复还要求 Shell PATH 中的裸 tokenless 解析到同一个文件。
timeoutMs3000限制一次 Tokenless 子进程的运行时间,单位为毫秒。只接受正整数。
maxBuffer2097152限制捕获的子进程输出,单位为 byte。只接受正整数。
agentIddsh设置 Tokenless 统计记录中的 Agent Attribution。

Plugin 把 DSH 内置的读取/搜索工具映射为 file_content,命令工具映射为 command_output,未知工具映射为 api_response。这些映射只描述宿主事实,后续策略由 Core 决定。即使压缩关闭,DSH 原始失败和结构化命令失败仍会交给 Core 做环境诊断。 后续 Waterfall Listener 替换 Canonical value 后,Tokenless 只检查该替换值,且不会对其 应用内容压缩。

完整触发条件(压缩开关、最小响应长度、受支持的压缩域、严格变小保护)与阈值含义见用户手册 · 压缩的触发条件与阈值。

通过 anolisa 管理(推荐)​

这些命令需要 ANOLISA 组件记录。如果 Tokenless 是通过 YUM 直接安装的, 继续操作前先记录该 RPM。

sudo yum install anolisa
sudo anolisa --install-mode system adopt tokenless

YUM 安装的 CLI 位于 sudo 可见的系统路径。get.agentic-os.sh 安装在用户 目录中的 CLI 可能会被 sudo 的 secure_path 隐藏。

后续 adapter 命令请用拥有目标 Agent 配置的用户执行。user scope 的 adapter 操作可以读取已采纳的 system 软件包,同时把框架改动留在当前用户的配置中。

1. 扫描 Agent 产品​

anolisa adapter scan

如果目标框架未出现,先确认其 CLI 或应用已经安装,再重新扫描。

2. 启用一个 Adapter​

anolisa adapter enable tokenless <framework>

例如:

anolisa adapter enable tokenless cosh
anolisa adapter enable tokenless openclaw
anolisa adapter enable tokenless hermes
anolisa adapter enable tokenless qoder
anolisa adapter enable tokenless claude-code
anolisa adapter enable tokenless codex
anolisa adapter enable tokenless opencode
anolisa adapter enable tokenless qwencode
anolisa adapter enable tokenless qwenpaw
anolisa adapter enable tokenless dsh \
--profile web \
--profile headless

只需启用实际使用的 Agent 产品。多个产品应分别执行并验证各自的命令。DSH 的全部 目标 profile 应写在同一条 enable 命令中。

DeepSeek Harness 按 profile 管理,因此必须至少提供一个 --profile。每个名称应与 dsh --profile <profile> 使用的名称一致,不带 profile 的通用命令会被拒绝。 后续 enable 或 re-enable 必须再次列出需要保留的全部 profile。

执行 OpenClaw adapter enable 或 tokenless 的 OpenClaw install.sh 即同意 插件声明的能力。两个入口仅在 plugins install --help 列出完整的 --accept-capabilities 参数时传递它,以兼容旧版宿主。独立的 install.sh 也只在安装器仍声明该参数有效时传递 --dangerously-force-unsafe-install; 将其列为 deprecated no-op 的宿主(OpenClaw 2026.6.5+)不再收到该参数, 安全扫描改由 security.installPolicy 决定。

对于 OpenClaw,anolisa 会先尝试普通安装,默认不会加入 unsafe-install 覆盖参数。如果 OpenClaw 的安全扫描拒绝此 Plugin,应先阅读其报告;确认接受风险后,才显式重试:

anolisa adapter enable tokenless openclaw \
--allow-unsafe-plugin-install

如果当前 OpenClaw 不支持底层覆盖参数,或已把它标记为无效的废弃选项,anolisa 会拒绝上述参数;此时应按照错误中的 security.installPolicy 指引处理。

组件软件包可以安装在 system scope,adapter receipt 仍由当前用户管理。只有 目标框架配置和 receipt 都明确归 root 所有时,才需要使用 sudo。

3. 检查状态​

anolisa adapter status tokenless
anolisa doctor tokenless

完成后重启目标 Agent CLI 或 IDE。已经运行的会话通常不会动态载入刚安装的 Hook/Plugin。

4. 禁用​

anolisa adapter disable tokenless <framework>

请用启用 adapter 的同一用户执行禁用操作。只有 root 管理的 receipt 需要在 两个操作中都使用 sudo。

禁用后重启目标 Agent。卸载 Tokenless 前必须先释放所有已启用的 Adapter。

npm 安装后的手动接入​

npm 的 postinstall 脚本会尝试把 Adapter 资源复制到:

~/.local/share/anolisa/adapters/tokenless/

应确认该目录确实存在。Adapter 复制属于补充步骤,失败时只输出警告,不会让二进制安装失败;因此可能出现命令可用但这里没有资源副本的情况。目录缺失时应检查 npm postinstall 警告,并优先改用 anolisa 管理的安装。

npm 安装不会创建 anolisa 组件安装记录,因此不要假设 anolisa adapter enable 能管理这次安装。OpenClaw、Hermes、Qoder、Claude Code、Codex、OpenCode、Qwen Code 和 QwenPaw 可以运行各自的安装脚本:

bash ~/.local/share/anolisa/adapters/tokenless/<framework>/scripts/install.sh

例如:

bash ~/.local/share/anolisa/adapters/tokenless/claude-code/scripts/install.sh
bash ~/.local/share/anolisa/adapters/tokenless/opencode/scripts/install.sh

卸载相同 Adapter:

bash ~/.local/share/anolisa/adapters/tokenless/<framework>/scripts/uninstall.sh

脚本会调用框架自身的 Plugin/Extension 机制;按照脚本输出完成重启。安装脚本缺失、失败或框架版本不兼容时,优先改用 anolisa 管理的安装方式。

在安装器仍执行安全扫描的宿主上,OpenClaw 安装脚本会带 --dangerously-force-unsafe-install 调用 plugins install,因为 Plugin 通过 Node.js 子进程 API 启动 tokenless 和 rtk 二进制;将该参数列为 deprecated no-op 的宿主不再收到该参数,安全扫描由 security.installPolicy 决定。运行前应审查已安装的 Adapter 源码和 OpenClaw 安全策略。如果策略不允许该覆盖参数,就不要安装此 Plugin。

npm + Cosh-NG​

Cosh-NG 使用 Extension 目录,不提供单独的 scripts/install.sh。将 npm 安装的共享资源复制到用户 Extension 目录:

mkdir -p ~/.copilot-shell/extensions/tokenless
cp -R ~/.local/share/anolisa/adapters/tokenless/common/hooks \
~/.local/share/anolisa/adapters/tokenless/common/commands \
~/.local/share/anolisa/adapters/tokenless/common/cosh-extension.json \
~/.copilot-shell/extensions/tokenless/

完成后重启 Cosh-NG。移除前先退出 Cosh-NG,并确认目标目录确实是本次 npm 安装创建的 Tokenless Extension。

Agent Adapter 生效提示​

Cosh-NG​

Extension 在启动时发现。启用后重启 Cosh-NG,并运行一个 Shell 工具任务,再使用 tokenless stats list 检查记录。

OpenClaw​

要求 OpenClaw 2026.6.6 或更高版本,并显式启用 Tokenless 插件。插件通过声明的工具结果 middleware,在同轮模型请求之前替换支持的文本结果;不另外压缩持久化副本。

安装脚本会在旧版宿主上使用上文说明的 OpenClaw unsafe-install 覆盖参数。确认风险并安装后,重启 Gateway。Plugin 代码默认启用响应压缩和 RTK 重写;Core 会选择符合条件的无损 TOON 候选。由于底层检查已硬关闭,Plugin 的 Tool Ready 选项当前不会生效。

Tokenless 只处理 OpenClaw 交付的结果。2026.8.2 等旧版宿主只要注册了适用的结果 middleware,就会在回调前将每个文本块裁剪到 100,000 个 UTF-16 Code Unit,即使 middleware 不返回替换内容也是如此。过大的 details 也可能被截断,丢失退出状态等 字段。Fail-open 保留的是收到的结果,无法恢复宿主已经移除的文本或元数据。因此,被 截断的 JSON 可能直接透传而不压缩。这些宿主仍在该限制内受支持。

如需在此边界接收完整的原生文本结果,建议使用包含 上游提交 2f620b970a04 的 OpenClaw 构建。已验证构建和此前发布版均报告 2026.10.2,仅凭版本字符串不能 确认修复是否存在。旧式嵌套 toolResult 归一化、工具自身和下游模型上下文预算仍可能 限制输出。Tokenless 不会自动读取保存完整输出的文件,也不能恢复已丢弃的尾部。 设置 post_tool_enabled: false 可停止 Tokenless 注册该 middleware;其他插件仍可能 注册自己的 middleware。

可选的 selective-claw 上下文引擎在 plugins.entries.selective-claw.config 中配置, 与响应压缩适配器的配置相互独立:

{
"plugins": {
"entries": {
"selective-claw": {
"config": { "enabled": true, "freshTailTurns": 3, "dbPath": "~/.openclaw/selective-claw.db" }
}
}
}
}

~/ 会展开为当前用户的主目录。未设置 dbPath 时,归档为 OPENCLAW_STATE_DIR 下的 selective-claw.db;该环境变量未设置时使用 ~/.openclaw。将插件的 enabled 选项设为 false 时,不打开数据库,也不注册上下文引擎或召回工具。

Hermes​

Plugin 在 Hermes 新会话中生效。重启 Hermes 后先执行 Shell 工具任务验证阻止后重试改写, 再执行返回 JSON 的工具验证结果替换。当裸 tokenless 能从 Shell 的 PATH 解析时,Marker 可以提示 Hermes 执行 tokenless retrieve;成功的恢复结果不会再次进入压缩。

Qoder​

Qoder IDE 和 qodercli 可能缓存 Plugin 配置。启用或升级后应完全重启 IDE。若出现旧 Hook 路径错误,参阅Qoder Plugin 缓存问题。

Claude Code​

Marketplace Plugin 在 Claude Code 重启后生效,也可以按照安装脚本提示刷新 Plugin。

Codex​

Plugin 在新的 Codex 会话中加载。关闭旧会话并重新启动后验证行为。Codex 的 PostToolUse Hook 不能替换或抑制原始输出,因此 Plugin 不追加压缩内容,也不记录响应压缩候选,只对识别出的环境失败追加上下文。真正的首轮节省来自 RTK 在执行前重写受支持的 Shell 命令。

DeepSeek Harness​

原生 Bundle 会在选定的 DSH profile 启动时加载。启用 Bundle 或修改 profile patch 后,重启 dsh --profile <profile>,运行一个返回可压缩 JSON 的工具,再检查 tokenless stats list。禁用命令是 anolisa adapter disable tokenless dsh。 receipt 已经记录 profile 名称,因此 disable 不再接受 --profile。

OpenCode​

Schema 压缩使用宿主提供给模型的 JSON Schema,并保留运行时参数校验器。 仅提供运行时校验器的宿主会跳过 Schema 压缩;响应压缩和命令重写仍然可用。

OpenCode 启动时会自动加载配置目录下的 Plugin。通过 ANOLISA 管理安装时,使用:

anolisa adapter enable tokenless opencode
anolisa adapter status tokenless
anolisa adapter disable tokenless opencode

内置 driver 按 OPENCODE_CONFIG_DIR、XDG_CONFIG_HOME/opencode、~/.config/opencode 的顺序解析配置目录。它不读取 TOKENLESS_OPENCODE_CONFIG_DIR;如需与独立脚本共用自定义目录, 请设置 OPENCODE_CONFIG_DIR,禁用时也保持相同的目录设置。

上述 Bundle 生命周期脚本仍可用于 npm 和手工安装,源码构建可使用 make opencode-install。 这些脚本额外支持 TOKENLESS_OPENCODE_CONFIG_DIR,其优先级最高。两种方式都会创建 plugins/tokenless.js,并拒绝覆盖冲突的文件或链接。ANOLISA enable 会将已存在且指向同一 插件源文件的链接纳入 receipt 管理,之后 disable 会删除该链接。链接按原目录展开相对路径后, 必须与记录的源路径一致;通过目录别名或不同安装前缀指向源文件的链接会作为冲突保留。 这样可以确保源目录删除后仍能清理。

通过 ANOLISA 启用前,请使用原安装 profile 以及原有的 PREFIX 或 SHARE_DIR 覆盖值 卸载冲突的独立链接。例如,在 Tokenless 源码目录中移除使用默认 system 前缀安装的链接:

make opencode-uninstall INSTALL_PROFILE=system PREFIX=/usr
anolisa adapter enable tokenless opencode

两条命令都应保持原配置目录设置。如果使用 Bundle 中的 scripts/uninstall.sh,请运行 原 adapter Bundle 内的脚本;若设置了 ANOLISA_ADAPTER_DIR,它也必须与原目录匹配。 从其他前缀卸载会保留链接,输出 warning 并以 0 退出;启用前请确认链接已移除。如果原 Bundle 已不可用,请用 readlink 检查 plugins/tokenless.js,仅手动移除确认过的旧符号链接, 保留无关文件和目录。

若要恢复独立脚本管理,请先完成 anolisa adapter disable tokenless opencode,包括所有 待恢复的操作。清理成功前应保留错误中报告的恢复目录;独立脚本不会恢复 ANOLISA 的 receipt 或 journal。之后再运行 make opencode-install 或 Bundle 中的 scripts/install.sh。

启用或禁用后请重启 OpenCode:已有进程会保留加载的插件及其工具输出替换行为,直到重启。 启用并重启后,执行一次工具调用,再运行 tokenless stats list 检查统计记录。

Qwen Code​

Extension 在新的 Qwen Code 会话中加载。重启后执行一次工具调用验证。

QwenPaw​

该 Adapter 是一个 QwenPaw Plugin:anolisa adapter enable tokenless qwenpaw 和自带的安装脚本都会执行 qwenpaw plugin install <bundle> --force,由 QwenPaw 把插件复制到 <工作目录>/plugins/tokenless/, 并把其 requirements.txt 安装进 QwenPaw 自己的 Python 环境。该依赖是对应 GitHub Release 中的 anolisa_tokenless wheel,因此首次安装需要联网。QwenPaw 只在其解释器的包元数据里找不到 anolisa_tokenless 时才运行 pip,所以离线主机可先用 pip install 把 wheel 装进 QwenPaw 的 Python 环境;同样的规则意味着已装过的旧版 wheel 不会被 plugin install 升级。因此安装脚本会通过 qwenpaw 命令背后的解释器确认 anolisa_tokenless 可导入且具备插件需要的 SDK 接口,没有 wheel 匹配当前平台(requirements.txt 列出 Linux x86_64、Linux aarch64 和 macOS arm64)时安装失败。插件本身也会拒绝在旧版 wheel 上注册并在日志中给出所需的 release,而不是在第一次模型 调用时报错。插件需要 Tokenless 0.8.0 引入的恢复入口。请在 QwenPaw 的 Python 环境中安装与插件 Release 匹配的 SDK Wheel;0.7.14 Wheel 不提供这些 API。工作目录与 QwenPaw 本身的解析一致:QWENPAW_WORKING_DIR,否则 COPAW_WORKING_DIR,否则已存在的 ~/.copaw,否则 ~/.qwenpaw。没有 qwenpaw 命令时安装脚本打印提示并以 0 退出,make setup 在未安装 QwenPaw 的主机上可以完整跑完。

正在运行的 QwenPaw 会热加载插件;否则启动 QwenPaw 即可。Schema 压缩和 tokenless_retrieve 工具从下一次 模型调用开始生效;命令重写发生在 QwenPaw 的审批步骤之后,因此已批准的 execute_shell_command 会执行改写后的 命令。只有 QwenPaw 内置工具会被分类:execute_shell_command 为命令输出,read_file、recall_history、view_image、 view_video 为文件内容,其余内置工具为 API 响应;Skill、MCP 工具以及后续 QwenPaw 版本新增的工具原样 透传。QwenPaw 自己的工具结果裁剪在 Tokenless 之后运行,且保留结果头部(最近两条工具结果 50000 字节,更早的 3000 字节,溢出部分写入 tool_results/),因此压缩结果末尾的恢复指令只在结果未超出该预算时可见;被省略的内容仍可用 tokenless retrieve 从 Stash 取回。统计记录默认按 QwenPaw 工作区写入 <workspace>/.tokenless。可在 QwenPaw 环境中设置绝对路径 TOKENLESS_DATA_DIR 覆盖此位置;相对路径会被拒绝。运行 tokenless stats list --data-dir 时指向实际使用的目录。

AgentScope 框架集成​

AgentScope 是 Python SDK 的第二层,不是产品 Adapter。完整的构建、版本、挂载、配置与验证说明 现已放在 AgentScope SDK 集成 子文档。本标题继续保留,作为已有链接的兼容入口。

验证 Agent Adapter​

对于 Agent Adapter,不要只以“安装命令退出码为 0”作为成功标准。至少完成:

tokenless --version
anolisa adapter status tokenless
tokenless stats list --limit 5

然后在目标 Agent 中执行一次有明显输出的工具任务。如果 stats list 仍为空,请按照启用后没有产生统计记录排查。

相关文档​