Self-hosted, GDPR-safe AI agent for law firms. Zero-cloud, hash-chained audit trail (AI Act art. 12), bring-your-own-model, 9 language editions. Hard fork of willchen96/mike, AGPL-3.0.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport http counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit feb7a73 · analyzer v30 · 2w ago
skills & prompt files 2
- agent-rules matematicsolutions-patron-feb7a73/AGENTS.md
- agent-rules matematicsolutions-patron-feb7a73/CLAUDE.md
danger signals2
- suspicious endpoint 169.254.169.254 (cloud metadata) matematicsolutions-patron-feb7a73/backend/src/lib/llm/ollama.test.ts :30
expect(() => validateOllamaHost("http://169.254.169.254/")).toThrow( - suspicious endpoint 100.100.100.200 (cloud metadata) matematicsolutions-patron-feb7a73/backend/src/lib/llm/ollama.test.ts :34
expect(() => validateOllamaHost("http://100.100.100.200/")).toThrow();
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 435
filesystem 34
- fs (weak) matematicsolutions-patron-feb7a73/backend/scripts/eval-judge-pl.ts :16
import { readFileSync, writeFileSync } from "node:fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/scripts/rodo-export.ts :12
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/scripts/run-migrations.ts :27
import { readFile, readdir } from "fs/promises"; - fs (weak) matematicsolutions-patron-feb7a73/backend/scripts/smoke-desktop.ts :17
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/scripts/vec-bench.cjs :18
const fs = require("fs"); - fs (weak) matematicsolutions-patron-feb7a73/backend/scripts/verify-audit-bundle.ts :15
import { readFileSync } from "node:fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/scripts/verify-audit-pack.ts :22
import { readFileSync } from "node:fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/brain/store.test.ts :3
import fs from "fs"; - fs matematicsolutions-patron-feb7a73/backend/src/lib/brain/store.ts :12
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/chat/search-scope.test.ts :4
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/chat/tool-dispatch-mutation-gate.test.ts :8
import fs from "fs"; - fs matematicsolutions-patron-feb7a73/backend/src/lib/convert/ocrRunner.ts :22
import fs from "fs"; - fs matematicsolutions-patron-feb7a73/backend/src/lib/db/sqlite-connection.ts :17
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/db/supabase-shim.test.ts :4
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/documentIngest.test.ts :5
import fs from "fs"; - fs matematicsolutions-patron-feb7a73/backend/src/lib/documentIngest.ts :16
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/graph/crossDocLinks.test.ts :4
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/mcp/baseline.test.ts :4
import fs from "fs"; - fs matematicsolutions-patron-feb7a73/backend/src/lib/mcp/index.ts :11
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/mutation-approval.test.ts :4
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/pl-entities/audit-log.test.ts :11
import { mkdtemp, readFile, rm } from "fs/promises"; - fs matematicsolutions-patron-feb7a73/backend/src/lib/pl-entities/audit-log.ts :30
import { appendFile } from "fs/promises"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/retrieval/dualSimilarity.eval.test.ts :19
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/retrieval/events.wiring.eval.test.ts :21
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/retrieval/hygiene.test.ts :4
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/retrieval/pageProvenance.test.ts :4
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/retrieval/retrieval.test.ts :5
import fs from "fs"; - fs (weak) matematicsolutions-patron-feb7a73/backend/src/lib/rodo/forget.test.ts :5
import fs from "fs"; - fs matematicsolutions-patron-feb7a73/backend/src/lib/storage.ts :23
import fs from "fs"; - fs matematicsolutions-patron-feb7a73/backend/src/routes/folders.ts :11
import { promises as fs } from "node:fs"; - fs matematicsolutions-patron-feb7a73/desktop/main.js :5
const fs = require('fs'); - fs (weak) matematicsolutions-patron-feb7a73/desktop/scripts/prepare-resources.cjs :30
const fs = require("fs"); - fs (weak) matematicsolutions-patron-feb7a73/frontend/src/scripts/convert-courts-to-ts.js :1
const fs = require("fs"); - fs (weak) matematicsolutions-patron-feb7a73/scripts/bundle-mcp.cjs :25
const fs = require("fs");
shell / exec 5
- shell (weak) matematicsolutions-patron-feb7a73/backend/scripts/smoke-desktop.ts :13
import { spawn, spawnSync } from "child_process"; - shell matematicsolutions-patron-feb7a73/backend/src/lib/convert/ocrRunner.ts :21
import { spawn } from "child_process"; - shell matematicsolutions-patron-feb7a73/backend/src/lib/db/supabase-shim.ts :500
private exec(): Result { - shell matematicsolutions-patron-feb7a73/desktop/main.js :2
const { spawn } = require('child_process'); - shell (weak) matematicsolutions-patron-feb7a73/desktop/scripts/prepare-resources.cjs :32
const { execFileSync, execSync } = require("child_process");
network 17
- net (weak) matematicsolutions-patron-feb7a73/backend/scripts/smoke-desktop.ts :14
import net from "net"; - net matematicsolutions-patron-feb7a73/backend/src/lib/llm/openai.ts :118
const response = await fetch(OPENAI_RESPONSES_URL, { - net matematicsolutions-patron-feb7a73/backend/src/lib/llm/openrouter.ts :173
const response = await fetch(OPENROUTER_URL, { - net matematicsolutions-patron-feb7a73/desktop/main.js :4
const http = require('http'); - net matematicsolutions-patron-feb7a73/frontend/src/app/components/assistant/AssistantMessage.tsx :122
const resp = await fetch( - net matematicsolutions-patron-feb7a73/frontend/src/app/components/assistant/EditCard.tsx :250
const resp = await fetch( - net matematicsolutions-patron-feb7a73/frontend/src/app/components/shared/DocPanel.tsx :365
const resp = await fetch( - net matematicsolutions-patron-feb7a73/frontend/src/app/components/shared/DocxView.tsx :156
const resp = await fetch( - net matematicsolutions-patron-feb7a73/frontend/src/app/hooks/useDocumentVersions.ts :62
const resp = await fetch( - net matematicsolutions-patron-feb7a73/frontend/src/app/hooks/useFetchDocxBytes.ts :96
const bin = await fetch(url, { - net matematicsolutions-patron-feb7a73/frontend/src/app/hooks/useFetchSingleDoc.ts :52
const response = await fetch( - net matematicsolutions-patron-feb7a73/frontend/src/app/lib/patronApi.ts :54
const response = await fetch(`${API_BASE}${path}`, { - net matematicsolutions-patron-feb7a73/frontend/src/app/support/page.tsx :61
const response = await fetch("/api/support", { - net matematicsolutions-patron-feb7a73/frontend/src/components/audit-export-button.tsx :79
const res = await fetch(`/api/audit/export/${eventId}`, { - net matematicsolutions-patron-feb7a73/frontend/src/components/merkle-verify-button.tsx :38
const res = await fetch(`/api/audit/merkle/verify/${eventId}`, { - net matematicsolutions-patron-feb7a73/frontend/src/hooks/useAuditLog.ts :81
const res = await fetch(`/api/audit/log?${params.toString()}`, { - net matematicsolutions-patron-feb7a73/frontend/src/hooks/useMcpSecurityStatus.ts :55
const res = await fetch(ENDPOINT, {
secrets 18
- secrets (weak) matematicsolutions-patron-feb7a73/backend/scripts/rodo-delete.ts :31
process.env.SUPABASE_SERVICE_ROLE_KEY ?? - secrets (weak) matematicsolutions-patron-feb7a73/backend/scripts/rodo-export.ts :20
process.env.SUPABASE_SERVICE_ROLE_KEY ?? - secrets (weak) matematicsolutions-patron-feb7a73/backend/scripts/run-migrations.ts :45
process.env.SUPABASE_SECRET_KEY ?? - secrets (weak) matematicsolutions-patron-feb7a73/backend/scripts/trigger-merkle.ts :30
process.env.SUPABASE_SECRET_KEY ?? - secrets (weak) matematicsolutions-patron-feb7a73/backend/scripts/verify-audit-chain.ts :23
process.env.SUPABASE_SERVICE_ROLE_KEY ?? - secrets (weak) matematicsolutions-patron-feb7a73/backend/src/lib/db/atrest.test.ts :5
const ENV = process.env.PATRON_DB_ENCRYPTION_KEY; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/db/atrest.ts :30
const key = process.env.PATRON_DB_ENCRYPTION_KEY; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/downloadTokens.ts :13
const secret = process.env.DOWNLOAD_SIGNING_SECRET; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/llm/claude.ts :24
const key = override?.trim() || process.env.ANTHROPIC_API_KEY?.trim() || ""; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/llm/gemini.ts :32
const key = override?.trim() || process.env.GEMINI_API_KEY?.trim() || ""; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/llm/openai.ts :39
const key = override?.trim() || process.env.OPENAI_API_KEY?.trim() || ""; - secrets (weak) matematicsolutions-patron-feb7a73/backend/src/lib/llm/openrouter-credits.test.ts :6
const ENV = process.env.OPENROUTER_API_KEY; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/llm/openrouter.ts :34
override?.trim() || process.env.OPENROUTER_API_KEY?.trim() || ""; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/storage.ts :31
process.env.R2_SECRET_ACCESS_KEY, - secrets matematicsolutions-patron-feb7a73/backend/src/lib/supabase.ts :28
const key = process.env.SUPABASE_SECRET_KEY || ""; - secrets matematicsolutions-patron-feb7a73/backend/src/lib/userApiKeys.ts :29
process.env.ANTHROPIC_API_KEY?.trim() || - secrets matematicsolutions-patron-feb7a73/backend/src/middleware/auth.ts :11
const serviceKey = process.env.SUPABASE_SECRET_KEY ?? ""; - secrets matematicsolutions-patron-feb7a73/frontend/src/lib/storage.ts :26
secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,
database 10
- db (weak) matematicsolutions-patron-feb7a73/backend/scripts/smoke-desktop.ts :16
import Database from "better-sqlite3"; - db (weak) matematicsolutions-patron-feb7a73/backend/scripts/vec-bench.cjs :14
const Database = require("better-sqlite3"); - db (weak) matematicsolutions-patron-feb7a73/backend/src/lib/db/atrest.test.ts :2
import Database from "better-sqlite3"; - db matematicsolutions-patron-feb7a73/backend/src/lib/db/atrest.ts :18
import type Database from "better-sqlite3"; - db (weak) matematicsolutions-patron-feb7a73/backend/src/lib/db/migrate.sqlite.test.ts :2
import Database from "better-sqlite3"; - db matematicsolutions-patron-feb7a73/backend/src/lib/db/migrate.sqlite.ts :19
import type Database from "better-sqlite3"; - db matematicsolutions-patron-feb7a73/backend/src/lib/db/sqlite-connection.ts :14
import Database from "better-sqlite3"; - db matematicsolutions-patron-feb7a73/backend/src/lib/db/supabase-shim.ts :17
import type DatabaseType from "better-sqlite3"; - db (weak) matematicsolutions-patron-feb7a73/backend/src/lib/retrieval/hygiene.test.ts :7
import Database from "better-sqlite3"; - db (weak) matematicsolutions-patron-feb7a73/desktop/scripts/prepare-resources.cjs :235
// Przebuduj natywny modul pod Electron, inaczej `require('better-sqlite3')`