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.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
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
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
- committed secret Anthropic key VineetV2-peon-mem-253468c/test/injection.test.ts :169
sk-ant…(33 chars, redacted) - credential in logs credential in log VineetV2-peon-mem-253468c/test/logger.test.ts :24
await logger.log("request_in", { path: "/sessions", apiKey: "sk-live-shouldhide" });
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());