Windows users: Extract the zip and place rtk.exe somewhere in your PATH (e.g. C:\Users\<you>\.local\bin). Run RTK from Command Prompt, PowerShell, or Windows Terminal — do not double-click the .exe (it will flash and close). The full hook system works natively on Windows (and in WSL). See Windows setup below for details.
Verify Installation
rtk --version # Should show "rtk 0.28.2"
rtk gain # Should show token savings stats
Name collision warning: Another project named "rtk" (Rust Type Kit) exists on crates.io. If rtk gain fails, you have the wrong package. Use cargo install --git above instead.
Quick Start
# 1. Install for your AI tool
rtk init -g # Claude Code / Copilot (default)
rtk init -g --gemini # Gemini CLI
rtk init -g --codex # Codex (OpenAI)
rtk init -g --agent cursor # Cursor
rtk init -g --agent windsurf # Windsurf
rtk init --agent cline # Cline / Roo Code
rtk init --agent kilocode # Kilo Code
rtk init --agent antigravity # Google Antigravity
rtk init -g --agent pi # Pi
rtk init --agent hermes # Hermes
rtk init -g --agent droid # Factory Droid# 2. Restart your AI tool, then test
git status # Automatically rewritten to rtk git status
Hook-based agents rewrite Bash commands (e.g., git status -> rtk git status) before execution. Plugin-based agents, including Hermes, use their plugin API to rewrite commands before execution. The agent receives compact output without needing to call rtk explicitly.
Important: the hook only runs on Bash tool calls. Claude Code built-in tools like Read, Grep, and Glob do not pass through the Bash hook, so they are not auto-rewritten. To get RTK's compact output for those workflows, use shell commands (cat/head/tail, rg/grep, find) or call rtk read, rtk grep, or rtk find directly.
How It Works
Without rtk: With rtk:
Claude --git status--> shell --> git Claude --git status--> RTK --> git
^ | ^ | |
| ~2,000 tokens (raw) | | ~200 tokens | filter |
+-----------------------------------+ +------- (filtered) ---+----------+
# ls -la (45 lines, ~800 tokens) # rtk ls (12 lines, ~150 tokens)
drwxr-xr-x 15 user staff 480 ... my-project/
-rw-r--r-- 1 user staff 1234 ... +-- src/ (8 files)
... | +-- main.rs
+-- Cargo.toml
Git operations:
# git push (15 lines, ~200 tokens) # rtk git push (1 line, ~10 tokens)
Enumerating objects: 5, done. ok main
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
...
Test output:
# cargo test (200+ lines on failure) # rtk test cargo test (~20 lines)
running 15 tests FAILED: 2/15 tests
test utils::test_parse ... ok test_edge_case: assertion failed
test utils::test_format ... ok test_overflow: panic at utils.rs:18
...
Auto-Rewrite Hook
The most effective way to use rtk. The hook transparently intercepts Bash commands and rewrites them to rtk equivalents before execution.
Result: 100% rtk adoption across all conversations and subagents, zero token overhead.
Scope note: this only applies to Bash tool calls. Claude Code built-in tools such as Read, Grep, and Glob bypass the hook, so use shell commands or explicit rtk commands when you want RTK filtering there.
RTK works fully on native Windows. Since v0.37.2 the auto-rewrite hook runs as a native binary command (rtk hook claude) — no Unix shell, bash, or jq required — so commands are rewritten transparently on Command Prompt, PowerShell, and Windows Terminal, just like on Linux and macOS.
Native Windows
# 1. Download and extract rtk-x86_64-pc-windows-msvc.zip from releases
# 2. Add rtk.exe to your PATH (e.g. C:\Users\<you>\.local\bin)
# 3. Initialize — installs the native binary hook
rtk init -g
Upgrading from an older install? If you set RTK up before v0.37.2 you may still have the legacy rtk-rewrite.sh shell hook (which does need a Unix shell). Re-run rtk init -g to migrate to the native binary hook.
Prerequisites: some filters shell out to ripgrep (rg). Install it and keep it on your PATH (e.g. winget install BurntSushi.ripgrep.MSVC) to avoid Binary 'rg' not found on PATH warnings.
Important: Do not double-click rtk.exe — it is a CLI tool that prints usage and exits immediately. Always run it from a terminal (Command Prompt, PowerShell, or Windows Terminal).
RTK supports 15 AI coding tools. Each integration rewrites shell commands to rtk equivalents for 60-90% token savings where the agent supports command interception.
Tool
Install
Method
Claude Code
rtk init -g
PreToolUse hook (native binary)
GitHub Copilot (VS Code)
rtk init -g --copilot
PreToolUse hook — transparent rewrite
GitHub Copilot CLI
rtk init -g --copilot
PreToolUse deny-with-suggestion (CLI limitation)
Cursor
rtk init -g --agent cursor
preToolUse hook (hooks.json)
Gemini CLI
rtk init -g --gemini
BeforeTool hook
Codex
rtk init -g --codex
AGENTS.md + RTK.md instructions
Windsurf
rtk init -g --agent windsurf
.windsurfrules (project-scoped)
Cline / Roo Code
rtk init --agent cline
.clinerules (project-scoped)
OpenCode
rtk init -g --opencode
Plugin TS (tool.execute.before)
OpenClaw
openclaw plugins install ./openclaw
Plugin TS (before_tool_call)
Pi
rtk init -g --agent pi (global)
TypeScript extension (tool_call)
Hermes
rtk init --agent hermes
Python plugin adapter (terminal command mutation via rtk rewrite)
PreToolUse hook in ~/.factory/hooks.json (matcher Execute)
For per-agent setup details, override controls, and graceful degradation, see the Supported Agents guide. The Hermes plugin source and tests live in hooks/hermes/; installed Hermes runtime files still live under ~/.hermes/plugins/rtk-rewrite/.
[hooks]exclude_commands = ["curl", "playwright"] # skip rewrite for these[tee]enabled = true# save raw output on failure (default: true)mode = "failures"# "failures", "always", or "never"
When a command fails, RTK saves the full unfiltered output so the LLM can read it without re-executing:
RTK can collect anonymous, aggregate usage metrics once per day. Telemetry is disabled by default and requires explicit opt-in consent (GDPR Art. 6, 7) during rtk init or via rtk telemetry enable. This data helps us build a better product: identifying which commands need filters, which filters need improvement, and how much value RTK delivers. For the full list of fields, data handling, and contributor guidelines, see docs/TELEMETRY.md.
What is collected and why:
Category
Data
Why
Identity
Salted device hash (SHA-256, not reversible)
Count unique installations without tracking individuals
Environment
RTK version, OS, architecture, install method
Know which platforms to support and test
Usage volume
Command count (24h), total commands, tokens saved (24h/30d/total)
Measure adoption and value delivered
Quality
Top 5 passthrough commands (0% savings), parse failure count, commands with <30% savings
Identify missing filters and weak ones to improve
Ecosystem
Command category distribution (e.g. git 45%, cargo 20%, js 15%)
Prioritize filter development for popular ecosystems
Retention
Days since first use, active days in last 30
Understand engagement and detect churn
Adoption
AI agent hook type (claude/gemini/codex), custom TOML filter count
Track integration coverage and DSL adoption
Configuration
Whether config.toml exists, number of excluded commands, project count
Understand user maturity and customization patterns
Features
Usage counts for meta-commands (gain, discover, proxy, verify)
Know which RTK features are valued vs unused
Economics
Estimated USD savings (based on API token pricing)
Quantify the value RTK provides to users
All data is aggregate counts or anonymized command names (first 3 words, no arguments). Top commands report only tool names (e.g. "git", "cargo"), never full command lines.
What is NOT collected: source code, file paths, command arguments, secrets, environment variables, personal data, or repository contents.
Manage telemetry:
rtk telemetry status # Check current consent state
rtk telemetry enable# Give consent (interactive prompt)
rtk telemetry disable# Withdraw consent — stops all collection immediately
rtk telemetry forget # Withdraw consent + delete all local data + request server-side erasure
Override via environment:
export RTK_TELEMETRY_DISABLED=1 # Blocks telemetry regardless of consent