install
source · Clone the upstream repo
git clone https://github.com/Aradotso/trending-skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Aradotso/trending-skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/context-mode-mcp" ~/.claude/skills/aradotso-trending-skills-context-mode-mcp && rm -rf "$T"
manifest:
skills/context-mode-mcp/SKILL.mdsource content
--- name: context-mode-mcp description: Privacy-first MCP virtualization layer that sandboxes tool calls to save context window space and maintain session continuity across compaction triggers: - "set up context mode" - "install context-mode MCP" - "reduce context window usage" - "sandbox MCP tool calls" - "session continuity after compaction" - "context-mode not routing tools" - "configure context mode hooks" - "optimize AI agent context" --- # Context Mode MCP > Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection. Context Mode is a privacy-first MCP server that acts as a virtualization layer between AI coding agents and their tools. It solves two problems: (1) raw tool output floods the context window (a Playwright snapshot = 56 KB, 20 GitHub issues = 59 KB), and (2) conversation compaction causes agents to forget session state. Context Mode sandboxes tool calls in subprocesses — raw data never enters context — and tracks all activity in local SQLite with FTS5 search for retrieval after compaction. Nothing leaves your machine; no telemetry, no cloud sync. ## Installation ### Claude Code (Full Plugin — Recommended) ```bash /plugin marketplace add mksglu/context-mode /plugin install context-mode@context-mode
Restart Claude Code. The plugin auto-installs:
- MCP server with 6 sandbox tools
- PreToolUse/PostToolUse/PreCompact/SessionStart hooks
routing instructions in your project rootCLAUDE.md- Slash commands (
,/context-mode:ctx-stats
,/context-mode:ctx-doctor
)/context-mode:ctx-upgrade
Claude Code (MCP-only, no hooks)
claude mcp add context-mode -- npx -y context-mode
Other Platforms (Global Install)
npm install -g context-mode
Gemini CLI
Add to
~/.gemini/settings.json:
{ "mcpServers": { "context-mode": { "command": "context-mode" } }, "hooks": { "BeforeTool": [ { "matcher": "", "hooks": [{ "type": "command", "command": "context-mode hook gemini-cli beforetool" }] } ], "AfterTool": [ { "matcher": "", "hooks": [{ "type": "command", "command": "context-mode hook gemini-cli aftertool" }] } ], "SessionStart": [ { "matcher": "", "hooks": [{ "type": "command", "command": "context-mode hook gemini-cli sessionstart" }] } ] } }
VS Code Copilot
Create
.vscode/mcp.json:
{ "servers": { "context-mode": { "command": "context-mode" } } }
Create
.github/hooks/context-mode.json:
{ "hooks": { "PreToolUse": [ { "type": "command", "command": "context-mode hook vscode-copilot pretooluse" } ], "PostToolUse": [ { "type": "command", "command": "context-mode hook vscode-copilot posttooluse" } ], "SessionStart": [ { "type": "command", "command": "context-mode hook vscode-copilot sessionstart" } ] } }
Cursor
Create
.cursor/mcp.json:
{ "mcpServers": { "context-mode": { "command": "context-mode" } } }
Create
.cursor/hooks.json:
{ "version": 1, "hooks": { "preToolUse": [ { "command": "context-mode hook cursor pretooluse", "matcher": "Shell|Read|Grep|WebFetch|Task|MCP:ctx_execute|MCP:ctx_execute_file|MCP:ctx_batch_execute" } ], "postToolUse": [ { "command": "context-mode hook cursor posttooluse" } ] } }
OpenCode
Add to
opencode.json in project root:
{ "$schema": "https://opencode.ai/config.json", "mcp": { "context-mode": { "type": "local", "command": ["context-mode"] } }, "plugin": ["context-mode"] }
The 6 Sandbox MCP Tools
ctx_execute
— Run a shell command in sandbox
ctx_execute// Instead of: Bash("gh issue list --limit 20") → 59 KB in context // Use: ctx_execute({ command: "gh issue list --limit 20" }) // Returns: indexed summary + search handle, ~1.2 KB in context
ctx_execute_file
— Read and index a file in sandbox
ctx_execute_file// Instead of: Read("./logs/access.log") → 45 KB in context // Use: ctx_execute_file({ path: "./logs/access.log" }) // Returns: file summary + FTS5 index handle
ctx_batch_execute
— Run multiple commands, one context entry
ctx_batch_executectx_batch_execute({ commands: [ "git log --oneline -20", "git diff HEAD~1", "git status" ] }) // All three results indexed together, single small context entry
ctx_fetch_and_index
— Fetch a URL and sandbox the response
ctx_fetch_and_index// Instead of: WebFetch("https://api.github.com/repos/owner/repo/issues") // Use: ctx_fetch_and_index({ url: "https://api.github.com/repos/owner/repo/issues" }) // Playwright snapshots, API responses, HTML — all sandboxed
ctx_index
— Manually index arbitrary content
ctx_indexctx_index({ content: largeRawString, label: "deployment-logs-2026-03-18" }) // Stores in SQLite FTS5, returns search handle
ctx_search
— Query indexed content via BM25
ctx_searchctx_search({ query: "authentication error 401", limit: 5 }) // Returns top BM25-ranked results from current session's index // This is how the agent recovers state after compaction
Slash Commands (Claude Code Only)
| Command | Purpose |
|---|---|
| Per-tool savings breakdown, tokens consumed, savings ratio |
| Diagnostics — runtimes, hooks, FTS5, plugin registration, versions |
| Pull latest, rebuild, migrate cache, fix hooks |
On other platforms these work as MCP tools — just invoke
ctx stats, ctx doctor, or ctx upgrade by name.
Session Continuity Pattern
Context Mode tracks file edits, git operations, tasks, errors, and decisions in SQLite. After compaction:
- The agent calls
with relevant keywordsctx_search - BM25 ranking surfaces the most relevant prior events
- The agent resumes without re-reading files or re-running commands
// After compaction — recovering state ctx_search({ query: "currently editing authentication middleware" }) // Returns: last known file path, recent edits, pending tasks ctx_search({ query: "unresolved errors last session" }) // Returns: error events with file/line context
Session lifecycle:
flag: resumes previous session, keeps SQLite data--continue- No
: previous session data is deleted immediately (fresh slate)--continue
Routing Instructions Auto-Management
On SessionStart, context-mode writes routing instructions to your project:
| Platform | File |
|---|---|
| Claude Code | |
| Gemini CLI | |
| VS Code Copilot | |
| Cursor / Codex | Project root instruction file |
Behavior is idempotent:
- File missing → written fresh
- File exists, no context-mode rules → rules appended, existing content preserved
- File has context-mode rules → skipped, no duplicates
Why Hooks Matter
Without hooks, routing compliance is ~60% — the model sometimes ignores instructions and runs raw
curl, reads large files directly, or dumps unprocessed output. One unrouted Playwright snapshot (56 KB) wipes an entire session's savings.
With hooks, every tool call is intercepted before execution:
- Dangerous commands (
,curl
, direct large file reads) are blockedwget - Routing guidance is injected at the call site in real time
- Compliance reaches ~98% context savings
Real Savings Example
Without context-mode: Playwright snapshot: 56 KB → context gh issue list (20): 59 KB → context access.log read: 45 KB → context Total after 30 min: ~315 KB consumed (~40% of context) With context-mode: All three sandboxed: ~5.4 KB → context Savings: 98% reduction
Configuration Reference
Context-mode is zero-config for most use cases. The MCP server auto-starts via
npx -y context-mode or the global context-mode binary.
SQLite databases are stored in
~/.context-mode/ and scoped per session. No environment variables required. No API keys. No accounts.
Troubleshooting
Tools not being routed to sandbox
- Run
(Claude Code) or/context-mode:ctx-doctor
(other platforms)ctx_doctor - Verify hooks are registered: check platform-specific hook config files exist
- Confirm
/CLAUDE.md
/routing file exists in project root with context-mode rulesGEMINI.md - Without hooks, model compliance drops to ~60% — hooks are essential for reliable routing
MCP server not found
# Verify global install which context-mode context-mode --version # Or use npx fallback npx -y context-mode
ctx_search returns no results
- Ensure you're in a
session (fresh sessions start with empty index)--continue - Verify tools were called via sandbox (not raw Bash/Read)
- Run
to confirm events were indexed in current sessionctx_stats
Hooks not firing on Cursor
hook is not supported by Cursor's validator — routing instructions are delivered via MCP server startup insteadsessionStart- Ensure
uses.cursor/hooks.json
/preToolUse
onlypostToolUse - Project
overrides.cursor/hooks.json
— check for conflicts~/.cursor/hooks.json
Plugin upgrade
# Claude Code /context-mode:ctx-upgrade # Other platforms npm update -g context-mode
Privacy Architecture
- All raw data processed in sandboxed subprocesses
- SQLite lives in
— local only~/.context-mode/ - No network calls, no telemetry, no cloud sync
- No account, no API key, no per-seat subscription
- Sessions are ephemeral by default — data deleted unless
is passed--continue - License: Elastic License v2 (ELv2)