Lightweight persistent memory for Claude Code with full-fidelity Recovery Mode. Zero daemons, zero API costs, zero code leaving your machine.
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in askqai/claude-recall
- HIGH code analysis flagged dynamic code execution in askqai/claude-recall
transport stdio counts 3 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
full
Full-fidelity dump of recent sessions (default)
-
off
No auto-injection — use MCP search tools on demand
-
summary
Compact ~2K token summary only — lightweight context
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed analyzer v18 · 11h ago
skills & prompt files 1
- agent-rulesaskqai-claude-recall-2a2f2de/CLAUDE.md
danger signals1
- dynamic code executionnew Function()askqai-claude-recall-2a2f2de/plugin/scripts/mcp-server.cjs:2943
const makeValidate = new Function(`${names_1.default.self}`, `${names_1.default.scope}`, sourceCode);
evidence-backed
findings quoted directly from the published source artifact — not inferred
last analysis: fetch-failed · showing evidence from the last successful analysis (3d ago)
filesystem 17
- fs askqai-claude-recall-2a2f2de/plugin/scripts/hook-command.js :106
import { readFileSync as readFileSync5, writeFileSync as writeFileSync4, mkdirSync as mkdirSync4, existsSync as existsSync6 } from "fs"; - fs askqai-claude-recall-2a2f2de/plugin/scripts/mcp-server.cjs :6794
var import_fs = require("fs"); - fs askqai-claude-recall-2a2f2de/scripts/build-hooks.js :11
import { readFileSync, existsSync, copyFileSync, readdirSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/cli/handlers/context.ts :24
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/cli/handlers/observation.ts :15
import { readFileSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/cli/handlers/sidecar.ts :15
import { existsSync, readFileSync, writeFileSync, unlinkSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/cli/handlers/summarize.ts :14
import { readFileSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/servers/mcp-server.ts :31
import { readFileSync, existsSync, writeFileSync, watch, mkdirSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/services/key-management.ts :2
import { readFileSync, writeFileSync, chmodSync, existsSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/shared/SettingsDefaultsManager.ts :8
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/shared/paths.ts :3
import { existsSync, mkdirSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/shared/worker-utils.ts :3
import { readFileSync } from "fs"; - fs askqai-claude-recall-2a2f2de/src/utils/logger.ts :6
import { appendFileSync, existsSync, mkdirSync, readFileSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/utils/message-rules.ts :1
import { readFileSync, existsSync, statSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/utils/project-identity.ts :2
import { existsSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/utils/push-signal.ts :1
import { mkdirSync, writeFileSync, existsSync, unlinkSync } from 'fs'; - fs askqai-claude-recall-2a2f2de/src/utils/transcript-usage.ts :16
import { openSync, readSync, fstatSync, closeSync } from 'fs';
shell / exec 5
- shell askqai-claude-recall-2a2f2de/plugin/scripts/hook-command.js :1364
import { spawn } from "child_process"; - shell askqai-claude-recall-2a2f2de/plugin/scripts/mcp-server.cjs :22102
var import_child_process = require("child_process"); - shell askqai-claude-recall-2a2f2de/src/cli/handlers/sidecar.ts :14
import { spawn } from 'child_process'; - shell askqai-claude-recall-2a2f2de/src/shared/paths.ts :4
import { execSync } from 'child_process'; - shell askqai-claude-recall-2a2f2de/src/utils/project-identity.ts :3
import { execSync } from 'child_process';
network 5
- net askqai-claude-recall-2a2f2de/plugin/scripts/hook-command.js :1399
const resp = await fetch(`http://127.0.0.1:${port}/api/health?token=${token}`, { - net askqai-claude-recall-2a2f2de/src/cli/handlers/file-edit.ts :37
const response = await fetch(`http://127.0.0.1:${port}/api/sessions/observations`, { - net askqai-claude-recall-2a2f2de/src/cli/handlers/sidecar.ts :75
const resp = await fetch(`http://127.0.0.1:${port}/api/health?token=${token}`, { - net askqai-claude-recall-2a2f2de/src/cli/handlers/user-message.ts :23
const response = await fetch( - net askqai-claude-recall-2a2f2de/src/shared/worker-utils.ts :66
const response = await fetch(`http://127.0.0.1:${port}/api/readiness`);
secrets 5
- secrets askqai-claude-recall-2a2f2de/plugin/scripts/hook-command.js :1518
const envKey = process.env.CLAUDE_RECALL_ENCRYPTION_KEY; - secrets askqai-claude-recall-2a2f2de/plugin/scripts/mcp-server.cjs :21973
const envKey = process.env.CLAUDE_RECALL_ENCRYPTION_KEY; - secrets askqai-claude-recall-2a2f2de/src/cli/handlers/context.ts :46
const RECOVERY_BUDGET_TOKENS = Number(process.env.CLAUDE_RECALL_RECOVERY_BUDGET_TOKENS) || 200_000; - secrets askqai-claude-recall-2a2f2de/src/cli/handlers/observation.ts :191
const shouldRedact = (process.env.CLAUDE_RECALL_REDACT_SECRETS ?? 'true').toLowerCase() !== 'false'; - secrets askqai-claude-recall-2a2f2de/src/services/key-management.ts :29
const envKey = process.env.CLAUDE_RECALL_ENCRYPTION_KEY;
declared dependencies 4
- @modelcontextprotocol/sdk@^1.25.1
- @types/node@^20.0.0
- esbuild@^0.27.2
- typescript@^5.3.0