headroom/plugins/openclaw
2026-04-03 22:49:30 -05:00
..
src fix(openclaw): preserve tool call linkage in converted history 2026-04-03 22:49:30 -05:00
test fix(openclaw): preserve tool call linkage in converted history 2026-04-03 22:49:30 -05:00
.gitignore feat: add OpenClaw ContextEngine plugin (@headroom-ai/openclaw) 2026-03-28 13:43:40 -07:00
.npmignore Harden openclaw plugin proxy handling and metadata 2026-04-02 21:27:12 -05:00
openclaw.plugin.json fix(openclaw): proxyPort only applies to local URLs, consistency pass 2026-04-03 10:30:10 -05:00
package-lock.json Add controlled proxy autostart and unsafe-install guidance 2026-04-02 21:47:27 -05:00
package.json fix(openclaw): proxyPort only applies to local URLs, consistency pass 2026-04-03 10:30:10 -05:00
README.md fix(openclaw): proxyPort only applies to local URLs, consistency pass 2026-04-03 10:30:10 -05:00
tsconfig.json Add controlled proxy autostart and unsafe-install guidance 2026-04-02 21:47:27 -05:00
tsup.config.ts feat: add OpenClaw ContextEngine plugin (@headroom-ai/openclaw) 2026-03-28 13:43:40 -07:00
vitest.config.ts feat: add OpenClaw ContextEngine plugin (@headroom-ai/openclaw) 2026-03-28 13:43:40 -07:00

@headroom-ai/openclaw

Context compression plugin for OpenClaw. Compresses tool outputs, code, logs, and structured data — 70-90% token savings with zero LLM calls.

Install

pip install "headroom-ai[proxy]"
openclaw plugins install --dangerously-force-unsafe-install headroom-ai/openclaw

This plugin can auto-start a local headroom proxy when needed. OpenClaw treats process-launching plugins as unsafe by default, so --dangerously-force-unsafe-install is required even if you plan to use a remote proxy (the capability is declared at install time).

Local Development Install (Detection-Friendly)

If you are testing from this repo, run npm install/build from the plugin directory so local launcher detection aligns with runtime paths:

cd plugins/openclaw
npm install
npm run build
openclaw plugins install --dangerously-force-unsafe-install --link .

Why this matters:

  • The plugin checks launchers in this order: PATH -> local npm bin -> global npm -> python.
  • "local npm bin" means plugins/openclaw/node_modules/.bin/headroom relative to the installed plugin root.
  • Using --link . from plugins/openclaw keeps that local path aligned for detection.
  • If you install from a .tgz, local npm bin may not exist in the installed extension and detection will fall back to PATH/global/python.

Configure

{
  "plugins": {
    "entries": {
      "headroom": {
        "enabled": true,
        "config": {
          "proxyUrl": "http://127.0.0.1:8787"
        }
      }
    },
    "slots": {
      "contextEngine": "headroom"
    }
  }
}

proxyUrl is optional. If omitted, the plugin auto-detects on localhost:

  • http://127.0.0.1:<proxyPort>
  • http://localhost:<proxyPort>

Default proxyPort is 8787.

Local proxy (auto-start)

When proxyUrl points to localhost (or is omitted), the plugin will auto-start headroom proxy if no running proxy is detected. Launch order:

  1. headroom from PATH
  2. local npm bin (node_modules/.bin/headroom)
  3. global npm bin
  4. Python module (python -m headroom.cli proxy ...)

If pythonPath is set, it is tried first in the Python fallback step.

Remote proxy (connect-only)

Point proxyUrl to any reachable Headroom instance:

{
  "config": {
    "proxyUrl": "https://headroom.example.com:8787"
  }
}

Remote URLs are connect-only — the plugin probes the URL at startup and fails fast if the proxy is not reachable. No subprocess is spawned for remote addresses.

Manual Proxy Setup

If you prefer to manage the proxy yourself (or are running a remote instance), start it before launching OpenClaw:

Python install:

pip install "headroom-ai[proxy]"
headroom proxy --host 127.0.0.1 --port 8787

NPM install:

npm install -g headroom-ai
headroom proxy --host 127.0.0.1 --port 8787

How It Works

Every time OpenClaw assembles context for the model, the plugin compresses tool outputs and large messages:

  • JSON arrays (tool outputs, search results) — statistical selection keeps anomalies, errors, boundaries
  • Code — AST-aware compression via tree-sitter
  • Logs — pattern deduplication, keeps errors and boundaries
  • Text — ML-based token compression

Compression is lossless via CCR (Compress-Cache-Retrieve): originals are stored and the agent gets a headroom_retrieve tool to access full details when needed.

Configuration Options

Option Default Description
proxyUrl auto-detected Optional URL of a Headroom proxy. Local addresses (http://127.0.0.1:<port>, http://localhost:<port>) enable auto-start; remote URLs (https://headroom.example.com) are connect-only.
proxyPort 8787 Port used for default auto-detect/auto-start when proxyUrl is not set.
pythonPath auto-detected Optional Python executable override for Python fallback launcher.
autoStart true Auto-start a local headroom proxy if not already running (local URLs only; ignored for remote proxies)
startupTimeoutMs 20000 Time to wait for auto-started proxy to become healthy

Comparison with lossless-claw

lossless-claw headroom
Compaction method LLM summarization (DAG) Content-aware compression (zero LLM)
Cost of compaction Tokens (LLM calls) Zero
Best for Long conversations Tool-heavy agents with large outputs
Retrieval lcm_grep, lcm_expand headroom_retrieve (instant)

License

Apache-2.0