Inspectable local project memory for AI coding agents.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 17 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
absorb_files
-
audit_memory
-
consolidate_memory
-
create_dataset
-
cron_health
-
delete_document
-
disable_document
-
enable_document
-
get_memory_config
-
list_datasets
-
recall_lessons
-
save_lesson
-
save_to_dataset
-
scan_documents
-
search_memory
-
update_memory
-
write_memory
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit d0e371e · analyzer v33 · 3d ago
skills & prompt files 4
- prompt-file ctxr-dev-memory-d0e371e/prompts/compile.md
- prompt-file ctxr-dev-memory-d0e371e/prompts/consolidate-merge.md
- prompt-file ctxr-dev-memory-d0e371e/prompts/consolidate-refresh.md
- prompt-file ctxr-dev-memory-d0e371e/prompts/flush.md
danger signals5
- suspicious endpoint discord.com ctxr-dev-memory-d0e371e/scripts/lib/redact.mjs :24
[/https:\/\/discord(?:app)?\.com\/api\/webhooks\/\d+\/[A-Za-z0-9_-]+/g, "https://discord.com/api/webhooks/[REDACTED]"], - suspicious endpoint discord.com ctxr-dev-memory-d0e371e/test/redact.test.mjs :184
const sample = "https://discord.com/api/webhooks/1234567890/SeCrEt-WebHookToken_AbCdEfGhIjKlMnOpQrStUvWxYz"; - suspicious endpoint discordapp.com ctxr-dev-memory-d0e371e/test/redact.test.mjs :191
const sample = "https://discordapp.com/api/webhooks/9876543210/AnotherSecretToken"; - committed secret private key ctxr-dev-memory-d0e371e/test/redact.test.mjs :200
PEM private key block (redacted) - committed secret Anthropic key ctxr-dev-memory-d0e371e/test/redact.test.mjs :260
sk-ant…(35 chars, redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 101
filesystem 33
- fs ctxr-dev-memory-d0e371e/mcp-server/src/glob.js :1
import fs from "node:fs"; - fs ctxr-dev-memory-d0e371e/mcp-server/src/index.js :8
import fs from "node:fs"; - fs ctxr-dev-memory-d0e371e/mcp-server/src/memory-cli.js :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/backfill-plans-to-dify.mjs :36
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/compile.mjs :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/consolidate.mjs :25
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/cron-job.mjs :27
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/hooks/exit-plan-mode.mjs :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/hooks/flush.mjs :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/hooks/session-start.mjs :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/lib/atomic-write.mjs :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/lib/env.mjs :1
import fs from "node:fs";
show 21 more
- fs (weak) ctxr-dev-memory-d0e371e/scripts/lib/lock.mjs :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/lib/merge-config.mjs :36
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/scripts/lib/merge-env.mjs :1
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/atomic-write.test.mjs :7
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/backfill-plans-to-dify.test.mjs :12
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/compile-exit-unavailable.test.mjs :12
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/cron-healing.test.mjs :9
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/cron-job-step.test.mjs :7
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/cron-job.test.mjs :9
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/cross-runtime-slug-sync.test.mjs :11
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/datasets.test.mjs :7
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/dify-write-wrappers.test.mjs :19
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/env.test.mjs :10
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/glob.test.mjs :6
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/hook-launcher.test.mjs :28
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/hot-reload.test.mjs :3
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/lib-helpers.test.mjs :7
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/llm-claude-args.test.mjs :11
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/lock.test.mjs :15
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/memory-cli-dispatch.test.mjs :20
import fs from "node:fs"; - fs (weak) ctxr-dev-memory-d0e371e/test/merge-config.test.mjs :12
import fs from "node:fs";
shell / exec 10
- shell (weak) ctxr-dev-memory-d0e371e/scripts/cron-job.mjs :29
import { spawnSync } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/scripts/hooks/flush.mjs :4
import { spawn } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/scripts/hooks/session-start.mjs :3
import { spawn } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/scripts/lib/dify-write.mjs :1
import { spawn } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/scripts/lib/llm.mjs :1
import { spawn } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/test/backfill-plans-to-dify.test.mjs :15
import { spawnSync } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/test/compile-exit-unavailable.test.mjs :11
import { spawnSync } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/test/hook-launcher.test.mjs :31
import { spawnSync } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/test/lib/run-cli.mjs :33
import { spawnSync } from "node:child_process"; - shell (weak) ctxr-dev-memory-d0e371e/test/merge-config.test.mjs :499
import { spawnSync } from "node:child_process";
network 4
- net ctxr-dev-memory-d0e371e/mcp-server/src/dify.js :90
const response = await fetch(url, { ...options, signal: controller.signal }); - net (weak) ctxr-dev-memory-d0e371e/scripts/lib/llm.mjs :314
return await fetch(url, { ...init, signal: controller.signal }); - net (weak) ctxr-dev-memory-d0e371e/test/lib-helpers.test.mjs :16
await globalThis.fetch("https://example.test/a", { method: "POST", body: "hello" }); - net (weak) ctxr-dev-memory-d0e371e/test/lib/fetch-stub.mjs :3
// throws. Captures every `fetch(url, opts)` call so the test can assert
tool registrations 17
- get_memory_config ctxr-dev-memory-d0e371e/mcp-server/src/index.js :214
- search_memory ctxr-dev-memory-d0e371e/mcp-server/src/index.js :249
- write_memory ctxr-dev-memory-d0e371e/mcp-server/src/index.js :365
- update_memory ctxr-dev-memory-d0e371e/mcp-server/src/index.js :418
- list_datasets ctxr-dev-memory-d0e371e/mcp-server/src/index.js :452
- create_dataset ctxr-dev-memory-d0e371e/mcp-server/src/index.js :487
- delete_document ctxr-dev-memory-d0e371e/mcp-server/src/index.js :540
- disable_document ctxr-dev-memory-d0e371e/mcp-server/src/index.js :563
- enable_document ctxr-dev-memory-d0e371e/mcp-server/src/index.js :586
- audit_memory ctxr-dev-memory-d0e371e/mcp-server/src/index.js :616
- save_to_dataset ctxr-dev-memory-d0e371e/mcp-server/src/index.js :723
- save_lesson ctxr-dev-memory-d0e371e/mcp-server/src/index.js :765
show 5 more
- recall_lessons ctxr-dev-memory-d0e371e/mcp-server/src/index.js :852
- scan_documents ctxr-dev-memory-d0e371e/mcp-server/src/index.js :1051
- absorb_files ctxr-dev-memory-d0e371e/mcp-server/src/index.js :1093
- consolidate_memory ctxr-dev-memory-d0e371e/mcp-server/src/index.js :1182
- cron_health ctxr-dev-memory-d0e371e/mcp-server/src/index.js :1266
obfuscation 2
- dynamic require()/import() ctxr-dev-memory-d0e371e/mcp-server/src/index.js :39
import(`./dify.js?v=${v}`), - dynamic require()/import() ctxr-dev-memory-d0e371e/test/hot-reload.test.mjs :30
const first = await import(`${m.url}?v=0`);