github JavaScript analyzed d0e371e

ctxr-dev/memory

github

Inspectable local project memory for AI coding agents.

maintainer
ctxr-dev
licence
MIT
first seen
2026-06-05
last seen
2026-06-06
releases · 30d
0
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 17 tools
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
skills & danger signals github-tarball
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

danger signals5

code evidence vv1.2.0 · github-tarball
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`);