How to Configure Headroom to Exclude Specific Tools from Compression
You can configure Headroom to exclude specific tools from compression using the --exclude-tools CLI flag, the HEADROOM_EXCLUDE_TOOLS environment variable, or by passing an exclude_tools set to the ContentRouter class programmatically.
Headroom is an open-source proxy that optimizes LLM tool call outputs through intelligent compression. To configure Headroom to exclude specific tools from compression, you modify the ContentRouter behavior via command-line arguments, environment configuration, or direct Python API calls, ensuring that designated tools like Read or Glob pass through to the LLM uncompressed.
How ContentRouter Determines Compression Eligibility
The ContentRouter class (implemented in headroom/transforms/content_router.py) acts as the gatekeeper for tool output compression. By default, it references the DEFAULT_EXCLUDE_TOOLS constant defined in headroom/config.py (lines 34-38), which contains a hardcoded set of tool names that typically produce large binary blobs or file contents unsuitable for compression.
When processing a tool call, the router checks whether the tool's ID exists in the exclusion set. If excluded, the router adds the marker router:excluded:tool to the routing log and returns the original output without modification, completely bypassing the standard Compress-Cache-Retrieve (CCR) pipeline.
Three Methods to Configure Tool Exclusion
You can override the default exclusion list through three distinct interfaces, all converging on the exclude_tools configuration field in ContentRouterConfig.
Using the --exclude-tools CLI Flag
The proxy server parses the --exclude-tools flag in headroom/proxy/server.py (lines 3150-3170). The _parse_exclude_tools function splits comma-separated values and merges them with the configuration. This method replaces DEFAULT_EXCLUDE_TOOLS entirely when the flag is non-empty.
# Exclude Read and Glob tools from compression
headroom --exclude-tools Read,Glob
Using the HEADROOM_EXCLUDE_TOOLS Environment Variable
For Docker or Kubernetes deployments, set the HEADROOM_EXCLUDE_TOOLS environment variable (also parsed in headroom/proxy/server.py, lines 3158-3168):
export HEADROOM_EXCLUDE_TOOLS="Read,Search,CustomTool"
headroom
This achieves identical behavior to the CLI flag without modifying startup commands, making it ideal for containerized environments.
Programmatic Configuration via ContentRouter
When using Headroom as a Python library, instantiate ContentRouter with a custom ContentRouterConfig:
from headroom.transforms import ContentRouter, ContentRouterConfig
router = ContentRouter(
ContentRouterConfig(
exclude_tools={"MyCustomTool", "LegacyAPI"}
)
)
result = router.compress("some content")
print(result.routing_log) # Contains "router:excluded:tool" for excluded tools
This approach (implemented in headroom/transforms/content_router.py, lines 505-508) allows dynamic exclusion lists based on runtime conditions or user preferences.
Internal Implementation Details
Inside ContentRouter._compress() (around lines 1900-1906), the exclusion logic builds a set of tool IDs to skip before processing:
exclude_tools = (
self.config.exclude_tools
if self.config.exclude_tools is not None
else DEFAULT_EXCLUDE_TOOLS
)
excluded_tool_ids = {
tool_id for tool_id, name in tool_name_map.items()
if name in exclude_tools
}
If a tool call's tool_use_id matches an entry in excluded_tool_ids, the compression pipeline halts immediately for that specific output, preserving the raw tool response.
Effects on Downstream Processing
Excluding a tool from compression affects two key downstream behaviors in the Headroom pipeline:
-
CCR Markers: Excluded tools do not receive
compress:,cache:, orretrieve:markers in the final payload, as they bypass the compression pipeline entirely according to the logic inheadroom/transforms/content_router.py. -
Cost Telemetry: The system records exclusion events via the
router:excluded:toolmarker inheadroom/proxy/cost.py(lines 70-78). This enables accurate cost accounting and observability even for uncompressed tool outputs.
Disabling Exclusion Entirely
To subject all tool output to compression—including the default Read and Glob tools—pass an empty string to either configuration method:
# Via CLI
headroom --exclude-tools ""
# Via environment variable
export HEADROOM_EXCLUDE_TOOLS=""
headroom
This sets exclude_tools to an empty set, meaning DEFAULT_EXCLUDE_TOOLS is ignored and no tools receive special treatment.
Summary
- Headroom's
ContentRoutercontrols compression eligibility via theexclude_toolsconfiguration field defined inheadroom/transforms/content_router.py. - Default exclusions (
Read,Glob, etc.) live inDEFAULT_EXCLUDE_TOOLSwithinheadroom/config.py. - Configure exclusions via
--exclude-toolsCLI flag,HEADROOM_EXCLUDE_TOOLSenvironment variable, orContentRouterConfigprogrammatically. - Excluded tools bypass CCR markers but still log
router:excluded:toolevents toheadroom/proxy/cost.pyfor cost tracking. - Pass an empty string to disable exclusion entirely and compress all tool outputs without exception.
Frequently Asked Questions
What happens if I specify both the CLI flag and the environment variable?
According to the source code in headroom/proxy/server.py, the --exclude-tools CLI flag takes precedence and overrides the HEADROOM_EXCLUDE_TOOLS environment variable. If the flag is omitted, the system falls back to the environment variable, and if neither is set, it uses DEFAULT_EXCLUDE_TOOLS.
Can I exclude custom tools that I've defined myself?
Yes. The exclude_tools set accepts any string tool name. When using the Python API, simply include your custom tool names in the set passed to ContentRouterConfig. The router checks tool names case-sensitively against this list, so ensure the names match exactly what the LLM generates in tool calls.
Why are Read and Glob excluded by default?
These tools typically return large file contents or directory listings that are either already compressed binary data or don't benefit from text-based compression algorithms. The DEFAULT_EXCLUDE_TOOLS constant in headroom/config.py protects these high-volume outputs from unnecessary processing overhead and potential data corruption through text compression.
How can I verify that a tool is actually being excluded?
Check the routing log output from the ContentRouter. When a tool is excluded, the router adds the router:excluded:tool marker to the routing log. You can also inspect the final payload to confirm that CCR markers are absent for that specific tool's output, or query the cost telemetry in headroom/proxy/cost.py which tracks these exclusion events separately from compression events.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →