MCP plugin that saves 98% of your context window. Works with Claude Code, Gemini CLI, VS Code Copilot, OpenCode, and Codex CLI. Sandboxed code execution, FTS5 knowledge base, and intent-driven search.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 11 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
ctx_batch_execute
-
ctx_doctor
-
ctx_execute
-
ctx_execute_file
-
ctx_fetch_and_index
-
ctx_index
-
ctx_insight
-
ctx_purge
-
ctx_search
-
ctx_stats
-
ctx_upgrade
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed v1.0.169 · analyzer v32 · 5h ago
skills & prompt files 21
- skill package/configs/antigravity-cli/skills/context-mode/SKILL.md
- agent-rules package/configs/antigravity/GEMINI.md
- agent-rules package/configs/claude-code/CLAUDE.md
- agent-rules package/configs/codex/AGENTS.md
- skill package/configs/copilot-cli/skills/context-mode/SKILL.md
- agent-rules package/configs/gemini-cli/GEMINI.md
- agent-rules package/configs/jetbrains-copilot/copilot-instructions.md
- agent-rules package/configs/kilo/AGENTS.md
- agent-rules package/configs/openclaw/AGENTS.md
- agent-rules package/configs/opencode/AGENTS.md
- agent-rules package/configs/pi/AGENTS.md
- agent-rules package/configs/vscode-copilot/copilot-instructions.md
- agent-rules package/configs/zed/AGENTS.md
- skill package/skills/context-mode/SKILL.md
- skill package/skills/ctx-doctor/SKILL.md
- skill package/skills/ctx-index/SKILL.md
- skill package/skills/ctx-insight/SKILL.md
- skill package/skills/ctx-purge/SKILL.md
- skill package/skills/ctx-search/SKILL.md
- skill package/skills/ctx-stats/SKILL.md
- skill package/skills/ctx-upgrade/SKILL.md
danger signals3
- dynamic code execution concat require() package/build/server.js :2557
const dns = require('no' + 'de:dns'); - dynamic code execution concat require() package/cli.bundle.mjs :668
const dns = require('no' + 'de:dns'); - dynamic code execution concat require() package/server.bundle.mjs :833
const dns = require('no' + 'de:dns');
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 283
filesystem 90
- fs package/bin/statusline.mjs :28
import { existsSync, readFileSync } from "node:fs"; - fs package/build/adapters/antigravity-cli/index.js :19
import { mkdirSync, readFileSync, writeFileSync } from "node:fs"; - fs package/build/adapters/antigravity/index.js :19
import { readFileSync, writeFileSync, mkdirSync, } from "node:fs"; - fs package/build/adapters/base.js :38
import { accessSync, copyFileSync, constants, mkdirSync } from "node:fs"; - fs package/build/adapters/claude-code/index.js :14
import { readFileSync, writeFileSync, existsSync, readdirSync, chmodSync, accessSync, mkdirSync, constants, } from "node:fs"; - fs package/build/adapters/codex/index.js :17
import { existsSync, readFileSync, writeFileSync, accessSync, copyFileSync, constants, mkdirSync, } from "node:fs"; - fs package/build/adapters/copilot-base.js :20
import { readFileSync, writeFileSync, mkdirSync, accessSync, chmodSync, constants, } from "node:fs"; - fs package/build/adapters/copilot-cli/index.js :19
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; - fs package/build/adapters/cursor/index.js :7
import { readFileSync, writeFileSync, mkdirSync, accessSync, chmodSync, constants, existsSync, readdirSync, } from "node:fs"; - fs package/build/adapters/detect.js :23
import { existsSync, readFileSync } from "node:fs"; - fs package/build/adapters/gemini-cli/index.js :21
import { readFileSync, writeFileSync, mkdirSync, accessSync, chmodSync, existsSync, constants, } from "node:fs"; - fs package/build/adapters/jetbrains-copilot/index.js :11
import { readFileSync, } from "node:fs"; - fs package/build/adapters/kimi/index.js :18
import { readFileSync, writeFileSync, accessSync, copyFileSync, constants, mkdirSync, } from "node:fs"; - fs package/build/adapters/kimi/paths.js :2
import { existsSync } from "node:fs"; - fs package/build/adapters/kiro/index.js :20
import { readFileSync, writeFileSync, mkdirSync, } from "node:fs"; - fs package/build/adapters/omp/index.js :27
import { readFileSync, writeFileSync, mkdirSync, } from "node:fs"; - fs package/build/adapters/omp/plugin.js :27
import { existsSync, mkdirSync } from "node:fs"; - fs package/build/adapters/openclaw/index.js :18
import { readFileSync, writeFileSync, copyFileSync, accessSync, constants, } from "node:fs"; - fs package/build/adapters/openclaw/plugin.js :32
import { existsSync, mkdirSync, readFileSync } from "node:fs"; - fs package/build/adapters/opencode/index.js :18
import { readFileSync, writeFileSync, mkdirSync, copyFileSync, accessSync, existsSync, constants, } from "node:fs"; - fs package/build/adapters/opencode/plugin.js :25
import { existsSync, readFileSync } from "node:fs"; - fs package/build/adapters/pi/extension.js :14
import { existsSync, mkdirSync } from "node:fs"; - fs package/build/adapters/pi/index.js :30
import { readFileSync, writeFileSync, mkdirSync, } from "node:fs"; - fs package/build/adapters/pi/mcp-bridge.js :23
import { existsSync } from "node:fs"; - fs package/build/adapters/qwen-code/index.js :15
import { readFileSync, writeFileSync, existsSync, } from "node:fs"; - fs package/build/adapters/vscode-copilot/index.js :12
import { readFileSync, mkdirSync, accessSync, existsSync, constants, } from "node:fs"; - fs package/build/adapters/zed/index.js :13
import { readFileSync, writeFileSync, mkdirSync, } from "node:fs"; - fs package/build/cli.js :19
import { readFileSync, cpSync, accessSync, existsSync, readdirSync, rmSync, closeSync, openSync, chmodSync, lstatSync, realpathSync, statSync, constants } from "node:fs"; - fs package/build/db-base.js :9
import { existsSync, unlinkSync, renameSync } from "node:fs"; - fs package/build/executor.js :2
import { mkdtempSync, writeFileSync, rmSync, existsSync } from "node:fs"; - fs package/build/runtime.js :2
import { existsSync } from "node:fs"; - fs package/build/search/auto-memory.js :8
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs"; - fs package/build/security.js :1
import { readFileSync, realpathSync } from "node:fs"; - fs package/build/server.js :5
import { existsSync, unlinkSync, readdirSync, readFileSync, writeFileSync, writeSync, renameSync, rmSync, mkdirSync, statSync, symlinkSync, lstatSync, realpathSync } from "node:fs"; - fs package/build/session/analytics.js :12
import { existsSync, readdirSync, statSync } from "node:fs"; - fs package/build/session/db.js :11
import { accessSync, constants, existsSync, mkdirSync, realpathSync, renameSync } from "node:fs"; - fs package/build/session/event-emit.js :21
import { existsSync } from "node:fs"; - fs package/build/session/persist-tool-calls.js :20
import { existsSync } from "node:fs"; - fs package/build/session/purge.js :34
import { existsSync, unlinkSync } from "node:fs"; - fs package/build/session/retrieval-marker.js :19
import { appendFileSync, readFileSync, rmSync } from "node:fs"; - fs package/build/store-directory.js :22
import { readdirSync, statSync, lstatSync, realpathSync, existsSync, readFileSync, } from "node:fs"; - fs package/build/store.js :12
import { readFileSync, readdirSync, unlinkSync, existsSync, statSync, openSync, fstatSync, closeSync } from "node:fs"; - fs package/build/util/plugin-cache-integrity.js :25
import { existsSync } from "node:fs"; - fs package/build/util/project-dir.js :1
import * as fs from "node:fs"; - fs package/cli.bundle.mjs :518
const FILE_CONTENT = require("fs").readFileSync(FILE_CONTENT_PATH, "utf-8"); - fs package/hooks/antigravity-cli/posttooluse.mjs :29
import { readFileSync, unlinkSync } from "node:fs"; - fs package/hooks/antigravity-cli/pretooluse.mjs :14
import { writeFileSync } from "node:fs"; - fs package/hooks/cache-heal-utils.mjs :35
} from "node:fs"; - fs package/hooks/codex/precompact.mjs :19
import { appendFileSync } from "node:fs"; - fs package/hooks/codex/sessionstart.mjs :31
import { existsSync, readFileSync, unlinkSync } from "node:fs"; - fs package/hooks/codex/stop.mjs :17
import { existsSync, readFileSync, readdirSync } from "node:fs"; - fs package/hooks/copilot-cli/posttooluse.mjs :15
import { appendFileSync, mkdirSync } from "node:fs"; - fs package/hooks/copilot-cli/precompact.mjs :15
import { appendFileSync, mkdirSync } from "node:fs"; - fs package/hooks/copilot-cli/sessionstart.mjs :21
import { readFileSync, unlinkSync } from "node:fs"; - fs package/hooks/core/codex-caps.mjs :20
import { readFileSync, writeFileSync } from "node:fs"; - fs package/hooks/core/mcp-ready.mjs :14
import { readFileSync, readdirSync, statSync, unlinkSync } from "node:fs"; - fs package/hooks/core/routing.mjs :20
import { existsSync, mkdirSync, rmSync, rmdirSync, readdirSync, unlinkSync, openSync, closeSync, readFileSync, writeFileSync, statSync, constants as fsConstants } from "node:fs"; - fs package/hooks/cursor/sessionstart.mjs :28
import { unlinkSync } from "node:fs"; - fs package/hooks/ensure-deps.mjs :22
import { existsSync, copyFileSync, renameSync, unlinkSync } from "node:fs"; - fs package/hooks/gemini-cli/aftermodel.mjs :28
import { appendFileSync } from "node:fs"; - fs package/hooks/gemini-cli/aftertool.mjs :15
import { appendFileSync } from "node:fs"; - fs package/hooks/gemini-cli/precompress.mjs :14
import { appendFileSync } from "node:fs"; - fs package/hooks/gemini-cli/sessionstart.mjs :26
import { readFileSync, unlinkSync } from "node:fs"; - fs package/hooks/heal-partial-install.mjs :128
} from "node:fs"; - fs package/hooks/jetbrains-copilot/posttooluse.mjs :15
import { appendFileSync } from "node:fs"; - fs package/hooks/jetbrains-copilot/precompact.mjs :14
import { appendFileSync } from "node:fs"; - fs package/hooks/jetbrains-copilot/sessionstart.mjs :26
import { readFileSync, unlinkSync } from "node:fs"; - fs package/hooks/kimi/precompact.mjs :19
import { appendFileSync } from "node:fs"; - fs package/hooks/kimi/sessionstart.mjs :31
import { existsSync, readFileSync, unlinkSync } from "node:fs"; - fs package/hooks/kimi/stop.mjs :23
import { existsSync, readFileSync } from "node:fs"; - fs package/hooks/kiro/agentspawn.mjs :35
import { unlinkSync } from "node:fs"; - fs package/hooks/normalize-hooks.mjs :16
import { existsSync, readFileSync, writeFileSync } from "node:fs"; - fs package/hooks/platform-bridge.mjs :7
import fs from "node:fs"; - fs package/hooks/pretooluse.mjs :68
'import { existsSync } from "node:fs";', - fs package/hooks/qwen-code/stop.mjs :30
import { existsSync, readFileSync, readdirSync } from "node:fs"; - fs package/hooks/run-hook.mjs :28
import { existsSync, mkdirSync, appendFileSync } from "node:fs"; - fs package/hooks/session-directive.mjs :8
import { writeFileSync } from "node:fs"; - fs package/hooks/session-helpers.mjs :22
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; - fs package/hooks/session-loaders.mjs :11
import { existsSync, readFileSync } from "node:fs"; - fs package/hooks/stop.mjs :16
import { readFileSync } from "node:fs"; - fs package/hooks/suppress-stderr.mjs :16
import { closeSync, openSync } from "node:fs"; - fs package/hooks/vscode-copilot/posttooluse.mjs :15
import { appendFileSync } from "node:fs"; - fs package/hooks/vscode-copilot/precompact.mjs :14
import { appendFileSync } from "node:fs"; - fs package/hooks/vscode-copilot/sessionstart.mjs :32
import { readFileSync, unlinkSync } from "node:fs"; - fs (weak) package/scripts/heal-better-sqlite3.mjs :44
import { existsSync as fsExistsSync } from "node:fs"; - fs (weak) package/scripts/heal-installed-plugins.mjs :20
import { existsSync, readFileSync, writeFileSync, readdirSync, unlinkSync, statSync } from "node:fs"; - fs (weak) package/scripts/plugin-cache-integrity.mjs :31
import { existsSync, readFileSync, readdirSync, statSync } from "node:fs"; - fs (weak) package/scripts/postinstall.mjs :11
import { existsSync, mkdirSync, readFileSync, writeFileSync, symlinkSync, lstatSync, unlinkSync } from "node:fs"; - fs package/server.bundle.mjs :247
const FILE_CONTENT = require("fs").readFileSync(FILE_CONTENT_PATH, "utf-8"); - fs package/start.mjs :3
import { existsSync, chmodSync, readFileSync, writeFileSync, readdirSync, symlinkSync, mkdirSync, lstatSync, unlinkSync } from "node:fs";
shell / exec 24
- shell package/bin/statusline.mjs :31
import { execFileSync } from "node:child_process"; - shell package/build/adapters/codex/index.js :16
import { execFileSync } from "node:child_process"; - shell package/build/adapters/cursor/index.js :8
import { execSync } from "node:child_process"; - shell package/build/adapters/kimi/index.js :17
import { execFileSync } from "node:child_process"; - shell package/build/adapters/omp/plugin.js :96
* and its bin is NOT on PATH, so the bare command would fail to spawn (the - shell package/build/adapters/pi/mcp-bridge.js :25
import { spawn, execSync } from "node:child_process"; - shell package/build/cli.js :18
import { execFileSync, execSync, execFile as nodeExecFile } from "node:child_process"; - shell package/build/db-base.js :36
exec(sql) { - shell package/build/executor.js :1
import { spawn, execSync, execFileSync } from "node:child_process"; - shell package/build/lifecycle.js :22
import { execFileSync } from "node:child_process"; - shell package/build/runtime.js :1
import { execFileSync, execSync } from "node:child_process"; - shell package/build/security.js :703
/exec(?:Sync|File|FileSync)?\(\s*(['"`])(.*?)\1/g, - shell package/build/server.js :6
import { spawnSync } from "node:child_process"; - shell package/build/session/analytics.js :11
import { execFileSync } from "node:child_process"; - shell package/build/session/db.js :10
import { execFileSync } from "node:child_process"; - shell package/build/util/sibling-mcp.js :28
import { execFileSync } from "node:child_process"; - shell package/cli.bundle.mjs :945
EXAMPLE: ctx_execute(language: "javascript", code: "const out = require('child_process').execSync('npm test', {encoding:'utf8', stdio:['ignore','pipe','pipe']}); console.log(out.split('\\\\n').filter( - shell package/hooks/core/codex-caps.mjs :19
import { execFileSync } from "node:child_process"; - shell package/hooks/ensure-deps.mjs :23
import { execSync } from "node:child_process"; - shell package/hooks/platform-bridge.mjs :10
import { execSync } from "node:child_process"; - shell (weak) package/scripts/heal-better-sqlite3.mjs :45
import { execSync, execFileSync, spawnSync } from "node:child_process"; - shell (weak) package/scripts/postinstall.mjs :12
import { execSync } from "node:child_process"; - shell package/server.bundle.mjs :687
EXAMPLE: ctx_execute(language: "javascript", code: "const out = require('child_process').execSync('npm test', {encoding:'utf8', stdio:['ignore','pipe','pipe']}); console.log(out.split('\\\\n').filter( - shell package/start.mjs :2
import { execSync, spawn } from "node:child_process";
network 5
- net package/build/cli.js :20
import { request as httpsRequest } from "node:https"; - net package/build/server.js :10
import { request as httpsRequest } from "node:https"; - net package/cli.bundle.mjs :814
const resp = await fetch(currentUrl, { redirect: 'manual' }); - net package/hooks/platform-bridge.mjs :286
const res = await fetch(buildUrl(cfg, ev.type), { - net package/server.bundle.mjs :979
const resp = await fetch(currentUrl, { redirect: 'manual' });
secrets 1
- secrets package/build/session/analytics.js :1517
const usingDynamicPrice = process.env.PI_CONTEXT_MODE_PRICE_OUTPUT_PER_TOKEN !== undefined;
database 2
- db package/build/db-base.js :289
_Database = require("better-sqlite3"); - db package/hooks/ensure-deps.mjs :98
* Note: require('better-sqlite3') only loads the JS wrapper — the native
tool registrations 21
- ctx_search package/build/search/ctx-search-schema.js :53
- ctx_execute package/build/server.js :1455
- ctx_execute_file package/build/server.js :1810
- ctx_index package/build/server.js :1988
- ctx_search package/build/server.js :2279
- ctx_fetch_and_index package/build/server.js :3100
- ctx_batch_execute package/build/server.js :3331
- ctx_stats package/build/server.js :3559
- ctx_doctor package/build/server.js :3772
- ctx_upgrade package/build/server.js :3901
- ctx_purge package/build/server.js :4068
- ctx_insight package/build/server.js :4394
- ctx_execute package/cli.bundle.mjs :915
- ctx_fetch_and_index package/cli.bundle.mjs :1081
- ctx_batch_execute package/cli.bundle.mjs :1109
- ctx_purge package/cli.bundle.mjs :1141
- ctx_execute package/server.bundle.mjs :657
- ctx_execute_file package/server.bundle.mjs :761
- ctx_fetch_and_index package/server.bundle.mjs :1075
- ctx_batch_execute package/server.bundle.mjs :1103
- ctx_purge package/server.bundle.mjs :1135
install hooks 2
- prepublishOnly package/package.json :88
npm run build - postinstall package/package.json :101
node scripts/postinstall.mjs
declared dependencies 15
- @modelcontextprotocol/sdk@^1.26.0
- @clack/prompts@^1.0.1
- @mixmark-io/domino@^2.2.0
- better-sqlite3@^12.6.2
- picocolors@^1.1.1
- turndown@^7.2.0
- turndown-plugin-gfm@^1.0.2
- zod@^3.25.0
- @types/better-sqlite3@^7.6.13
- @types/node@^22.19.11
- @types/turndown@^5.0.5
- esbuild@^0.27.3
- tsx@^4.21.0
- typescript@^5.7.0
- vitest@^4.0.18
obfuscation 4
- dynamic require()/import() package/build/cli.js :1494
await import(`${pathToFileURL(ensureDepsPath).href}?upgrade=${Date.now()}`); - dynamic require()/import() package/build/server.js :2554
const TurndownService = require(${turndownPath}); - dynamic require()/import() package/cli.bundle.mjs :665
const TurndownService = require(${n}); - dynamic require()/import() package/server.bundle.mjs :830
const TurndownService = require(${n});