github TypeScript re-analysis due

VineetV2/peon-mem

github

Local-first hierarchical memory brain for AI coding agents — auto-capture, LLM consolidation, hybrid retrieval, live Neural Universe monitor, daily self-audit. Claude Code / Codex / any MCP client.

maintainer
VineetV2
licence
MIT
first seen
2026-07-21
last seen
2026-09-15
releases · 30d
4
short id

Drift inferred · capture-to-capture

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

capabilities 16 tools
transport stdio · http verified reported listed in the official MCP registry counts 16 tools · 0 res · 0 prompts permission surface via code analysis

tools

  • build_injection
  • end_session
  • evaluate_project
  • get_context
  • import_global_memory
  • inspect_brain
  • maybe_process_memory
  • process_memory
  • quality_report
  • query_projects
  • record_event
  • record_message
  • remember_global
  • search_global_memory
  • search_memory
  • start_session
skills & danger signals github-tarball
prompt-surface shipped agent-instruction files + hidden-content / dangerous-code findings — quoted from the analyzed source

analyzed commit 253468c · analyzer v33 · 6d ago

danger signals2

code evidence vv1.0.6 · github-tarball
evidence-backed findings quoted directly from the published source artifact — not inferred

code files: 154

filesystem 55

  • fs VineetV2-peon-mem-253468c/bin/peon-mem.mjs :11 import { existsSync, mkdirSync, readFileSync, writeFileSync, copyFileSync, rmSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/dist/config.js :1 import { existsSync, readFileSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/dist/daemon.js :2 import { existsSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/dist/embedding-store.js :1 import { mkdir, readFile, rename, stat, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/dist/embeddings.js :1 import { appendFileSync, closeSync, mkdirSync, openSync, readSync, statSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/dist/evaluation.js :1 import { readFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/dist/global-memory.js :2 import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/dist/logger.js :1 import { appendFile, mkdir, readFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/dist/memory-store.js :1 import { appendFile, mkdir, readFile, rename, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/dist/session-index.js :1 import { mkdir, readFile, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/dist/token-ab-monitor.js :1 import { readFileSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/claude-peon-hook.mjs :2 import { appendFile, mkdir, readFile, rename, rm, writeFile } from "node:fs/promises";
show 28 more
  • fs (weak) VineetV2-peon-mem-253468c/scripts/eval-retrieval-labeled.mjs :15 import { readFileSync, writeFileSync, mkdirSync, existsSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/eval-retrieval.mjs :13 import { readFileSync, writeFileSync, existsSync, mkdirSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/evaluate-peon.mjs :2 import { access, readFile } from "node:fs/promises";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/install-peon-stl.mjs :14 import { copyFileSync, mkdirSync, writeFileSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/install-peon.mjs :2 import { access } from "node:fs/promises";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/lib/eval-ledger.mjs :14 import { appendFileSync, readFileSync, existsSync, mkdirSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/longmemeval-eval.mjs :11 import { readFileSync, mkdtempSync, rmSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/peon-operations-watch.mjs :12 import { readFileSync, readdirSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/peon-report.mjs :13 import { readFileSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/scripts/peon-stl.mjs :31 import { readFileSync, writeFileSync, mkdirSync, statSync, openSync, readSync, closeSync, appendFileSync, existsSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/src/config.ts :1 import { existsSync, readFileSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/src/daemon.ts :2 import { existsSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/src/embedding-store.ts :1 import { mkdir, readFile, rename, stat, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/src/embeddings.ts :1 import { appendFileSync, closeSync, mkdirSync, openSync, readSync, statSync } from "node:fs";
  • fs VineetV2-peon-mem-253468c/src/evaluation.ts :1 import { readFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/src/global-memory.ts :2 import { appendFile, mkdir, readFile, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/src/logger.ts :1 import { appendFile, mkdir, readFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/src/memory-store.ts :1 import { appendFile, mkdir, readFile, rename, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/src/session-index.ts :1 import { mkdir, readFile, writeFile } from "node:fs/promises";
  • fs VineetV2-peon-mem-253468c/src/token-ab-monitor.ts :1 import { readFileSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/test/canonical-project-path.test.ts :1 import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/test/claude-hook.test.ts :2 import { mkdtemp, readFile, rm } from "node:fs/promises";
  • fs (weak) VineetV2-peon-mem-253468c/test/codex-hook.test.ts :2 import { mkdtemp, readFile, rm } from "node:fs/promises";
  • fs (weak) VineetV2-peon-mem-253468c/test/consolidation.test.ts :1 import { mkdtemp } from "node:fs/promises";
  • fs (weak) VineetV2-peon-mem-253468c/test/cross-project.test.ts :1 import { mkdtempSync, rmSync } from "node:fs";
  • fs (weak) VineetV2-peon-mem-253468c/test/daemon-client.test.ts :1 import { mkdtemp } from "node:fs/promises";
  • fs (weak) VineetV2-peon-mem-253468c/test/daemon.test.ts :1 import { mkdtemp, readFile } from "node:fs/promises";
  • fs (weak) VineetV2-peon-mem-253468c/test/embedding-integrity.test.ts :1 import { mkdtemp } from "node:fs/promises";

15 more not shown — this panel samples each group; the count above is the real total.

shell / exec 6

  • shell VineetV2-peon-mem-253468c/bin/peon-mem.mjs :10 import { execFileSync, spawnSync } from "node:child_process";
  • shell (weak) VineetV2-peon-mem-253468c/scripts/install-peon-stl.mjs :18 import { execFileSync } from "node:child_process";
  • shell (weak) VineetV2-peon-mem-253468c/scripts/lib/eval-ledger.mjs :16 import { execFileSync } from "node:child_process";
  • shell (weak) VineetV2-peon-mem-253468c/test/claude-hook.test.ts :1 import { spawn } from "node:child_process";
  • shell (weak) VineetV2-peon-mem-253468c/test/codex-hook.test.ts :1 import { spawn } from "node:child_process";
  • shell (weak) VineetV2-peon-mem-253468c/test/installer.test.ts :1 import { execFileSync } from "node:child_process";

network 26

  • net VineetV2-peon-mem-253468c/bin/peon-mem.mjs :200 try { const r = await fetch("http://127.0.0.1:3737/health"); return (await r.json()).ok === true; } catch { return false; }
  • net VineetV2-peon-mem-253468c/dist/compression.js :17 const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net VineetV2-peon-mem-253468c/dist/daemon-cli.js :11 const response = await fetch(`http://${host}:${port}/health`, { signal: controller.signal });
  • net VineetV2-peon-mem-253468c/dist/daemon.js :1 import { createServer } from "node:http";
  • net VineetV2-peon-mem-253468c/dist/global-extraction.js :25 const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net VineetV2-peon-mem-253468c/dist/monitor.js :41 try{ items=await fetch("/brain/activity?limit=40",{cache:"no-store"}).then(function(r){return r.json();}); }catch(e){ return; }
  • net VineetV2-peon-mem-253468c/dist/processor.js :189 const response = await fetch(input.config.llmBaseUrl.replace(/\/$/, "") + "/chat/completions", {
  • net VineetV2-peon-mem-253468c/dist/recuration.js :36 const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net VineetV2-peon-mem-253468c/dist/tools.js :369 const response = await fetch(url);
  • net (weak) VineetV2-peon-mem-253468c/scripts/claude-peon-hook.mjs :258 const response = await fetch(`${daemonUrl}${path}`, {
  • net (weak) VineetV2-peon-mem-253468c/scripts/eval-retrieval-labeled.mjs :31 const r = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net (weak) VineetV2-peon-mem-253468c/scripts/eval-retrieval.mjs :32 const r = await fetch("https://openrouter.ai/api/v1/chat/completions", {
show 14 more
  • net (weak) VineetV2-peon-mem-253468c/scripts/longmemeval-eval.mjs :34 const r = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net (weak) VineetV2-peon-mem-253468c/scripts/peon-stl.mjs :279 try { return (await fetch(`${DAEMON}/health`, { signal: ctrl.signal, headers: { host: "127.0.0.1" } })).ok; }
  • net VineetV2-peon-mem-253468c/src/compression.ts :20 const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net VineetV2-peon-mem-253468c/src/daemon-cli.ts :13 const response = await fetch(`http://${host}:${port}/health`, { signal: controller.signal });
  • net VineetV2-peon-mem-253468c/src/daemon.ts :1 import { createServer, type IncomingMessage, type Server, type ServerResponse } from "node:http";
  • net VineetV2-peon-mem-253468c/src/global-extraction.ts :38 const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net VineetV2-peon-mem-253468c/src/monitor.ts :42 try{ items=await fetch("/brain/activity?limit=40",{cache:"no-store"}).then(function(r){return r.json();}); }catch(e){ return; }
  • net VineetV2-peon-mem-253468c/src/processor.ts :290 const response = await fetch(input.config.llmBaseUrl.replace(/\/$/, "") + "/chat/completions", {
  • net VineetV2-peon-mem-253468c/src/recuration.ts :48 const response = await fetch("https://openrouter.ai/api/v1/chat/completions", {
  • net VineetV2-peon-mem-253468c/src/tools.ts :624 const response = await fetch(url);
  • net (weak) VineetV2-peon-mem-253468c/test/claude-hook.test.ts :402 const response = await fetch(url, {
  • net (weak) VineetV2-peon-mem-253468c/test/daemon-client.test.ts :31 const activeSessions = await fetch(`${daemon.url}/sessions`).then((response) => response.json());
  • net (weak) VineetV2-peon-mem-253468c/test/daemon.test.ts :8 const response = await fetch(url, {
  • net (weak) VineetV2-peon-mem-253468c/test/session-persistence.test.ts :23 const response = await fetch(url, {

secrets 1

  • secrets (weak) VineetV2-peon-mem-253468c/scripts/peon-stl.mjs :133 if (process.env.OPENROUTER_API_KEY) return process.env.OPENROUTER_API_KEY;

tool registrations 32

  • start_session VineetV2-peon-mem-253468c/dist/index.js :52
  • record_message VineetV2-peon-mem-253468c/dist/index.js :63
  • record_event VineetV2-peon-mem-253468c/dist/index.js :74
  • end_session VineetV2-peon-mem-253468c/dist/index.js :85
  • get_context VineetV2-peon-mem-253468c/dist/index.js :92
  • inspect_brain VineetV2-peon-mem-253468c/dist/index.js :103
  • search_memory VineetV2-peon-mem-253468c/dist/index.js :114
  • quality_report VineetV2-peon-mem-253468c/dist/index.js :126
  • build_injection VineetV2-peon-mem-253468c/dist/index.js :136
  • query_projects VineetV2-peon-mem-253468c/dist/index.js :148
  • remember_global VineetV2-peon-mem-253468c/dist/index.js :170
  • search_global_memory VineetV2-peon-mem-253468c/dist/index.js :193
show 20 more
  • import_global_memory VineetV2-peon-mem-253468c/dist/index.js :204
  • evaluate_project VineetV2-peon-mem-253468c/dist/index.js :213
  • process_memory VineetV2-peon-mem-253468c/dist/index.js :225
  • maybe_process_memory VineetV2-peon-mem-253468c/dist/index.js :235
  • start_session VineetV2-peon-mem-253468c/src/index.ts :59
  • record_message VineetV2-peon-mem-253468c/src/index.ts :75
  • record_event VineetV2-peon-mem-253468c/src/index.ts :91
  • end_session VineetV2-peon-mem-253468c/src/index.ts :107
  • get_context VineetV2-peon-mem-253468c/src/index.ts :119
  • inspect_brain VineetV2-peon-mem-253468c/src/index.ts :135
  • search_memory VineetV2-peon-mem-253468c/src/index.ts :151
  • quality_report VineetV2-peon-mem-253468c/src/index.ts :168
  • build_injection VineetV2-peon-mem-253468c/src/index.ts :183
  • query_projects VineetV2-peon-mem-253468c/src/index.ts :200
  • remember_global VineetV2-peon-mem-253468c/src/index.ts :230
  • search_global_memory VineetV2-peon-mem-253468c/src/index.ts :258
  • import_global_memory VineetV2-peon-mem-253468c/src/index.ts :274
  • evaluate_project VineetV2-peon-mem-253468c/src/index.ts :288
  • process_memory VineetV2-peon-mem-253468c/src/index.ts :305
  • maybe_process_memory VineetV2-peon-mem-253468c/src/index.ts :320

install hooks 1

  • prepublishOnly VineetV2-peon-mem-253468c/package.json :19 npm run build && npm test

declared dependencies 4

  • @modelcontextprotocol/sdk@^1.23.0
  • typescript@^5.7.0
  • vitest@^4.0.0
  • @types/node@^22.0.0

perm:untrusted 4

  • untrusted VineetV2-peon-mem-253468c/bin/peon-mem.mjs :239 const up = await fetch("http://127.0.0.1:11434/api/tags").then((r) => r.ok).catch(() => false);
  • untrusted (weak) VineetV2-peon-mem-253468c/test/daemon-client.test.ts :31 const activeSessions = await fetch(`${daemon.url}/sessions`).then((response) => response.json());
  • untrusted (weak) VineetV2-peon-mem-253468c/test/daemon.test.ts :55 const health = await fetch(`${daemon.url}/health`).then((response) => response.json());
  • untrusted (weak) VineetV2-peon-mem-253468c/test/session-persistence.test.ts :113 const active = await fetch(`${second.url}/sessions`).then((response) => response.json());