prism-mcp-server 7.3.3 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -8,6 +8,8 @@
8
8
  [![TypeScript](https://img.shields.io/badge/TypeScript-5.0+-3178C6?logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
9
9
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
10
10
 
11
+ ![Prism Mind Palace Demo](docs/mind-palace-demo.webp)
12
+
11
13
  **Your AI agent forgets everything between sessions. Prism fixes that.**
12
14
 
13
15
  One command. Persistent memory. Local-first by default. Optional cloud power-ups.
@@ -16,7 +18,7 @@ One command. Persistent memory. Local-first by default. Optional cloud power-ups
16
18
  npx -y prism-mcp-server
17
19
  ```
18
20
 
19
- Works with **Claude Desktop · Claude Code · Cursor · Windsurf · Cline · Gemini · Antigravity** — any MCP client.
21
+ Works with **Claude Desktop · Claude Code · Cursor · Windsurf · Cline · Gemini · Antigravity** — **any MCP client.**
20
22
 
21
23
  ## 📖 Table of Contents
22
24
 
@@ -26,17 +28,15 @@ Works with **Claude Desktop · Claude Code · Cursor · Windsurf · Cline · Gem
26
28
  - [Setup Guides](#-setup-guides)
27
29
  - [Universal Import](#-universal-import-bring-your-history)
28
30
  - [What Makes Prism Different](#-what-makes-prism-different)
31
+ - [Data Privacy & Egress](#-data-privacy--egress)
29
32
  - [Use Cases](#-use-cases)
30
33
  - [What's New](#-whats-new)
31
- - [v7.3.1 Dark Factory (Fail-Closed Execution)](#v731--dark-factory-fail-closed-execution-)
32
- - [v7.2.0 Verification Harness (Planned)](#v720--verification-harness-front-loaded-testing-)
33
- - [v7.4.0 Adversarial Dev Harness (Planned)](#v740--adversarial-dev-harness-anti-sycophancy-)
34
34
  - [How Prism Compares](#-how-prism-compares)
35
35
  - [Tool Reference](#-tool-reference)
36
36
  - [Environment Variables](#environment-variables)
37
37
  - [Architecture](#architecture)
38
38
  - [Scientific Foundation](#-scientific-foundation)
39
- - [Product Roadmap](#-product-roadmap)
39
+ - [Milestones & Roadmap](#-milestones--roadmap)
40
40
  - [Troubleshooting FAQ](#-troubleshooting-faq)
41
41
 
42
42
  ---
@@ -49,12 +49,23 @@ Every time you start a new conversation with an AI coding assistant, it starts f
49
49
 
50
50
  > 📌 **Terminology:** Throughout this doc, **"Prism"** refers to the MCP server and storage engine. **"Mind Palace"** refers to the visual dashboard UI at `localhost:3000` — your window into the agent's brain. They work together; the dashboard is optional.
51
51
 
52
- **Starting in v7.0**, Prism doesn't just *store* memories — it **ranks them like a human brain.** The ACT-R activation model (from cognitive science) means memories that were accessed recently and frequently surface first, while stale context fades naturally. Combine that with candidate-scoped spreading activation and you get retrieval quality that no flat vector search can match.
52
+ Prism has two pillars:
53
+
54
+ 1. **🧠 Persistent Memory** — Memories are ranked like a human brain: recently and frequently accessed context surfaces first, while stale context fades naturally. The result is retrieval quality that no flat vector search can match. *(See [Scientific Foundation](#-scientific-foundation) for the ACT-R math.)*
55
+
56
+ 2. **🏭 Autonomous Execution (Dark Factory)** — When you're ready, Prism can run coding tasks end-to-end with a fail-closed pipeline where an adversarial evaluator catches bugs the generator missed — before you ever see the PR. *(See [Dark Factory](#-dark-factory--adversarial-autonomous-pipelines).)*
53
57
 
54
58
  ---
55
59
 
56
60
  ## 🚀 Quick Start
57
61
 
62
+ ### Prerequisites
63
+
64
+ - **Node.js v18+** (v20 LTS recommended; v23.x has [known `npx` quirk](#common-installation-pitfalls))
65
+ - Any MCP-compatible client (Claude Desktop, Cursor, Windsurf, Cline, etc.)
66
+ - No API keys required for core features (see [Capability Matrix](#capability-matrix))
67
+
68
+ ### Install
58
69
 
59
70
  Add to your MCP client config (`claude_desktop_config.json`, `.cursor/mcp.json`, etc.):
60
71
 
@@ -69,10 +80,12 @@ Add to your MCP client config (`claude_desktop_config.json`, `.cursor/mcp.json`,
69
80
  }
70
81
  ```
71
82
 
72
- > **Note on Windows/Restricted Shells:** If your MCP client complains that `npx` is not found, use the absolute path to your node binary (e.g. `C:\Program Files\nodejs\npx.cmd`) or install globally with caution.
83
+ > ⚠️ **Windows / Restricted Shells:** If your MCP client complains that `npx` is not found, use the absolute path to your node binary (e.g. `C:\Program Files\nodejs\npx.cmd`).
73
84
 
74
85
  **That's it.** Restart your client. All tools are available. The **Mind Palace Dashboard** (the visual UI for your agent's brain) starts automatically at `http://localhost:3000`. You don't need to keep a tab open — the dashboard runs in the background and the MCP tools work with or without it.
75
86
 
87
+ > 🔄 **Updating Prism:** `npx -y` caches the package locally. To force an update to the latest version, restart your MCP client — `npx -y` will fetch the newest release automatically. If you're stuck on a stale version, run `npx clear-npx-cache` (or `npm cache clean --force`) before restarting.
88
+
76
89
  <details>
77
90
  <summary>Port 3000 already in use? (Next.js / Vite / etc.)</summary>
78
91
 
@@ -108,9 +121,12 @@ Then open `http://localhost:3001` instead.
108
121
  | Auto-compaction | ❌ | ✅ `GOOGLE_API_KEY` |
109
122
  | Web Scholar research | ❌ | ✅ [`BRAVE_API_KEY`](#environment-variables) + [`FIRECRAWL_API_KEY`](#environment-variables) (or `TAVILY_API_KEY`) |
110
123
  | VLM image captioning | ❌ | ✅ Provider key |
124
+ | Autonomous Pipelines (Dark Factory) | ❌ | ✅ `GOOGLE_API_KEY` (or LLM override) |
111
125
 
112
126
  > 🔑 The core Mind Palace works **100% offline** with zero API keys. Cloud keys unlock intelligence features. See [Environment Variables](#environment-variables).
113
127
 
128
+ > 💰 **API Cost Note:** `GOOGLE_API_KEY` (Gemini) has a generous free tier that covers most individual use. `BRAVE_API_KEY` offers 2,000 free searches/month. `FIRECRAWL_API_KEY` has a free plan with 500 credits. For typical solo development, expect **$0/month** on the free tiers. Only high-volume teams or heavy autonomous pipeline usage will incur meaningful costs.
129
+
114
130
  ---
115
131
 
116
132
  ## ✨ The Magic Moment
@@ -323,6 +339,12 @@ Then add to your MCP config:
323
339
  > **❓ Seeing warnings about missing API keys on startup?**
324
340
  > That's expected and not an error. `BRAVE_API_KEY` / `GOOGLE_API_KEY` warnings are informational only — core session memory works with zero keys. See [Environment Variables](#environment-variables) for what each key unlocks.
325
341
 
342
+ > 💡 **Do agents auto-load Prism?** Agents using Cursor, Windsurf, or other MCP clients will see the `session_load_context` tool automatically, but may not call it unprompted. Add this to your project's `.cursorrules` (or equivalent system prompt) to guarantee auto-load:
343
+ > ```
344
+ > At the start of every conversation, call session_load_context with project "my-project" before doing any work.
345
+ > ```
346
+ > Claude Code users can use the `.clauderules` auto-load hook shown in the [Setup Guides](#-setup-guides). Prism also has a **server-side fallback** (v5.2.1+) that auto-pushes context after 10 seconds if no load is detected.
347
+
326
348
  ---
327
349
 
328
350
  ## 📥 Universal Import — Bring Your History
@@ -371,6 +393,7 @@ Every save creates a versioned snapshot. Made a mistake? `memory_checkout` rever
371
393
  A gorgeous glassmorphism UI at `localhost:3000` that lets you see exactly what your agent is thinking:
372
394
 
373
395
  - **Current State & TODOs** — the exact context injected into the LLM's prompt
396
+ - **Intent Health Gauges** — per-project 0–100 health score with staleness decay, TODO load, and decision signals
374
397
  - **Interactive Knowledge Graph** — force-directed neural graph with click-to-filter, node renaming, and surgical keyword deletion
375
398
  - **Deep Storage Manager** — preview and execute vector purge operations with dry-run safety
376
399
  - **Session Ledger** — full audit trail of every decision your agent has made
@@ -389,7 +412,7 @@ Powered by a pure TypeScript port of Google's TurboQuant (inspired by Google's I
389
412
  Multiple agents (dev, QA, PM) can work on the same project with **role-isolated memory**. Agents discover each other automatically, share context in real-time via Telepathy sync, and see a team roster during context loading. → [Multi-agent setup example](examples/multi-agent-hivemind/)
390
413
 
391
414
  ### 🚦 Task Router
392
- Prism can score coding tasks and recommend whether to keep execution on the host model or delegate to local Claw. This enables faster handling of small, local-safe edits while preserving host execution for non-delegable or higher-complexity work. In client startup/skill flows, use defensive delegation: route only coding tasks, call `session_task_route` only when available, delegate to `claw` only when executor tooling exists and task is non-destructive, and fallback to host when router/executor is unavailable. → [Task router real-life example](examples/router_real_life_test.ts)
415
+ Prism can score coding tasks and recommend whether to keep execution on the host model or delegate to a **local Claw agent** (a lightweight sub-agent powered by Ollama/vLLM for fast, local-safe edits). This enables faster handling of small edits while preserving host execution for complex work. In client startup/skill flows, use defensive delegation: route only coding tasks, call `session_task_route` only when available, delegate to `claw` only when executor tooling exists and task is non-destructive, and fallback to host when router/executor is unavailable. → [Task router real-life example](examples/router_real_life_test.ts)
393
416
 
394
417
  ### 🖼️ Visual Memory
395
418
  Save UI screenshots, architecture diagrams, and bug states to a searchable vault. Images are auto-captioned by a VLM (Claude Vision / GPT-4V / Gemini) and become semantically searchable across sessions.
@@ -400,28 +423,50 @@ OpenTelemetry spans for every MCP tool call, LLM hop, and background worker. Rou
400
423
  ### 🌐 Autonomous Web Scholar
401
424
  Prism researches while you sleep. A background pipeline searches the web, scrapes articles, synthesizes findings via LLM, and injects results directly into your semantic memory — fully searchable on your next session. Brave Search → Firecrawl scrape → LLM synthesis → Prism ledger. Task-aware, Hivemind-integrated, and zero-config when API keys are missing (falls back to Yahoo + Readability).
402
425
 
403
- ### 🔒 GDPR Compliant
404
- Soft/hard delete (Art. 17), full export in JSON, Markdown, or Obsidian vault `.zip` (Art. 20), API key redaction, per-project TTL retention, and audit trail. Enterprise-ready out of the box.
426
+ ### 🔒 Data Privacy & Egress
405
427
 
406
- ---
428
+ **Where is my data stored?**
407
429
 
408
- ## 🎯 Use Cases
430
+ All data lives under `~/.prism-mcp/` on your machine:
409
431
 
410
- **Long-running feature work** Save state at end of day, restore full context next morning. No re-explaining.
432
+ | File | Contents |
433
+ |------|----------|
434
+ | `~/.prism-mcp/data.db` | All sessions, handoffs, embeddings, knowledge graph (SQLite + WAL) |
435
+ | `~/.prism-mcp/prism-config.db` | Dashboard settings, system config, API keys |
436
+ | `~/.prism-mcp/media/<project>/` | Visual memory vault (screenshots, HTML captures) |
437
+ | `~/.prism-mcp/dashboard.port` | Ephemeral port lock file |
438
+ | `~/.prism-mcp/sync.lock` | Sync coordination lock |
411
439
 
412
- **Multi-agent collaboration** Dev, QA, and PM agents share real-time context without stepping on each other's memory.
440
+ **Hard reset:** To completely erase your agent's brain, stop Prism and delete the directory:
441
+ ```bash
442
+ rm -rf ~/.prism-mcp
443
+ ```
444
+ Prism will recreate the directory with empty databases on next startup.
413
445
 
414
- **Consulting / multi-project** — Switch between client projects with progressive loading: `quick` (~50 tokens), `standard` (~200), or `deep` (~1000+).
446
+ **What leaves your machine?**
447
+ - **Local mode (default):** Nothing. Zero network calls. All data is on-disk SQLite.
448
+ - **With `GOOGLE_API_KEY`:** Text snippets are sent to Gemini for embedding generation, summaries, and Morning Briefings. No session data is stored on Google's servers beyond the API call.
449
+ - **With `BRAVE_API_KEY` / `FIRECRAWL_API_KEY`:** Web Scholar queries are sent to Brave/Firecrawl for search and scraping.
450
+ - **With Supabase:** Session data syncs to your own Supabase instance (you control the Postgres database).
415
451
 
416
- **Complex refactoring (v7.2 planned)** Prism’s roadmap adds verification-first execution for multi-step changes with contract-frozen assertions and gated finalization.
452
+ **GDPR compliance:** Soft/hard delete (Art. 17), full export in JSON, Markdown, or Obsidian vault `.zip` (Art. 20), API key redaction in exports, per-project TTL retention policies, and immutable audit trail. Enterprise-ready out of the box.
417
453
 
418
- **Team onboarding** New team member's agent loads the full project history instantly.
454
+ ### 🏭 Dark Factory Adversarial Autonomous Pipelines
455
+ When you trigger a Dark Factory pipeline, Prism doesn't just run your task — it fights itself to produce high-quality output. A `PLAN_CONTRACT` step locks a machine-parseable rubric before any code is written. After execution, an **Adversarial Evaluator** (in a fully isolated context) scores the output against the rubric. It cannot pass the Generator without providing exact file and line evidence for every failing criterion. Failed evaluations inject the critique directly into the Generator's retry prompt so it's never flying blind. The result: security issues, regressions, and lazy debug logs caught autonomously — before you ever see the PR. → [See it in action](examples/adversarial-eval-demo/README.md)
419
456
 
420
- **Behavior enforcement** — Agent corrections auto-graduate into permanent `.cursorrules` / `.clauderules` rules.
457
+ ---
421
458
 
422
- **Offline / air-gapped** — Full SQLite local mode + Ollama LLM adapter. Zero internet dependency.
459
+ ## 🎯 Use Cases
423
460
 
424
- **Morning Briefings** — After 4+ hours away, Prism auto-synthesizes a 3-bullet action plan from your last sessions.
461
+ - **Long-running feature work** — Save state at end of day, restore full context next morning. No re-explaining.
462
+ - **Multi-agent collaboration** — Dev, QA, and PM agents share real-time context without stepping on each other's memory.
463
+ - **Consulting / multi-project** — Switch between client projects with progressive loading: `quick` (~50 tokens), `standard` (~200), or `deep` (~1000+).
464
+ - **Autonomous execution (v7.4)** — Dark Factory pipeline: `plan → plan_contract → execute → evaluate → verify → finalize`. Generator and evaluator run in isolated roles — the evaluator cannot approve without evidence-bound findings scored against a pre-committed rubric.
465
+ - **Project health monitoring (v7.5)** — Intent Health Dashboard scores each project 0–100 based on staleness, TODO load, and decision quality — turning silent drift into an actionable signal.
466
+ - **Team onboarding** — New team member's agent loads the full project history instantly.
467
+ - **Behavior enforcement** — Agent corrections auto-graduate into permanent `.cursorrules` / `.clauderules` rules.
468
+ - **Offline / air-gapped** — Full SQLite local mode + Ollama LLM adapter. Zero internet dependency.
469
+ - **Morning Briefings** — After 4+ hours away, Prism auto-synthesizes a 3-bullet action plan from your last sessions.
425
470
 
426
471
  ### Claude Code: Parallel Explore Agent Workflows
427
472
 
@@ -440,210 +485,122 @@ Then continue a specific thread with a follow-up message to the selected agent,
440
485
 
441
486
  ---
442
487
 
443
- ## 🆕 What's New
488
+ ---
444
489
 
445
- ### v7.3.1 Dark Factory (Fail-Closed Execution) 🏭
446
- > **Current stable release.** Hardened autonomous pipeline execution with a structured JSON action contract.
490
+ ## ⚔️ Adversarial Evaluation in Action
447
491
 
448
- When an AI agent executes code autonomously no human watching, no approval step — a single hallucinated file path can write outside your project, corrupt sibling repos, or hit system files. This is the "dark factory" problem: **lights-out execution demands machine-enforced safety, not LLM good behavior.**
492
+ > **Split-Brain Anti-Sycophancy**the signature feature of v7.4.0.
449
493
 
450
- > *"I started building testing harnesses with programmatic checks in the planning phase across 3 layers. I got this idea when I was doing a complex ETL process across 3 databases and I needed to stack 9's on data accuracy, but also across the agent layer. After a considerable amount of hair pulling, I started to front load. It's now part of my lifecycle harness that my dark factory uses by default."*
451
- > — [Stephen Driggs](https://linkedin.com/in/stephendriggs), VP Product AI at Shift4
494
+ For the last year, the AI engineering space has struggled with one problem: **LLMs are terrible at grading their own homework.** Ask an agent if its own code is correct and you'll get *"Looks great!"* because its context window is already biased by its own chain-of-thought.
452
495
 
453
- Prism v7.3.1 implements exactly this: a **3-gate fail-closed pipeline** where every `EXECUTE` step must pass parse, type, and scope validation before any filesystem side effect occurs.
496
+ **v7.4.0 solves this by splitting the agent's brain.** The `GENERATOR` and the `ADVERSARIAL EVALUATOR` are completely walled off. The Evaluator never sees the Generator's scratchpad or apologies — only the pre-committed rubric and the final output. And it **cannot fail the Generator without receipts** (exact file and line number).
454
497
 
455
- - 🔒 **Structured Action Contract** — `EXECUTE` steps must return machine-parseable JSON conforming to `{ actions: [{ type, targetPath, content? }] }`. Free-form text is rejected at the gate.
456
- - 🛡️ **3-Strategy Defensive Parser** — Raw JSON → fenced code block extraction → brace extraction. Handles adversarial LLM output (preamble text, markdown fences, trailing commentary) without ever executing malformed payloads.
457
- - ✅ **Type Validation** — Only `READ_FILE | WRITE_FILE | PATCH_FILE | RUN_TEST` are permitted. Novel action types invented by the LLM are rejected.
458
- - 📏 **Scope Validation** — Every `targetPath` is resolved against the pipeline's `workingDirectory` via `SafetyController.validateActionsInScope()`. Path traversal (`../`), sibling-prefix bypasses, and absolute paths outside the boundary are blocked.
459
- - 🚫 **Pipeline-Level Termination** — A scope violation doesn't just fail the step — it **terminates the entire pipeline** with `status: FAILED` and emits a `failure` experience event for the ML routing layer.
498
+ Here is a complete run-through using a real scenario: *"Add a user login endpoint to `auth.ts`."*
460
499
 
461
- <details>
462
- <summary><strong>🔬 The 3-Gate Architecture: How a Path Traversal Attack Fails</strong></summary>
500
+ ---
501
+
502
+ ### Step 1 — The Contract (`PLAN_CONTRACT`)
463
503
 
464
- **Scenario:** An LLM running autonomously in a Dark Factory pipeline targeting `/home/user/my-app` produces this output for an EXECUTE step:
504
+ Before a single line of code is written, the pipeline generates a locked scoring rubric:
465
505
 
466
506
  ```json
507
+ // contract_rubric.json (written to disk and hash-locked before EXECUTE runs)
467
508
  {
468
- "actions": [
469
- { "type": "WRITE_FILE", "targetPath": "src/utils.ts", "content": "// valid" },
470
- { "type": "WRITE_FILE", "targetPath": "../../.ssh/authorized_keys", "content": "ssh-rsa ATTACK..." }
509
+ "criteria": [
510
+ { "id": "SEC-1", "description": "Must return 401 Unauthorized on invalid passwords." },
511
+ { "id": "SEC-2", "description": "Raw passwords MUST NOT be written to console.log." }
471
512
  ]
472
513
  }
473
514
  ```
474
515
 
475
- **Gate 1 — Parse:** ✅ Valid JSON. The 3-strategy parser extracts it cleanly.
476
-
477
- **Gate 2 — Type:** ✅ Both actions use `WRITE_FILE`, a valid `ActionType`.
516
+ ---
478
517
 
479
- **Gate 3Scope:** 🚫 **BLOCKED.** `SafetyController.validateActionsInScope()` resolves `../../.ssh/authorized_keys` to `/home/user/.ssh/authorized_keys` — which is **outside** `/home/user/my-app`. The violation is detected *before* any write occurs.
518
+ ### Step 2 First Attempt (`EXECUTE` rev 0)
480
519
 
481
- **Result:** The entire pipeline is terminated immediately. No files are written — not even the valid `src/utils.ts`. A `failure` experience event is emitted so the ML router can learn to avoid this pattern.
520
+ The **Generator** takes over in an isolated context. Like many LLMs under time pressure, it writes working auth logic but leaves a debug statement:
482
521
 
522
+ ```typescript
523
+ // src/auth.ts (Generator's first output)
524
+ export function login(req: Request, res: Response) {
525
+ const { username, password } = req.body;
526
+ console.log(`[DEBUG] Login attempt for ${username} with pass: ${password}`); // ← leaked credential
527
+ const user = db.findUser(username);
528
+ if (!user || !bcrypt.compareSync(password, user.hash)) {
529
+ return res.status(401).json({ error: 'Unauthorized' });
530
+ }
531
+ res.json({ token: signJwt(user) });
532
+ }
483
533
  ```
484
- Pipeline FAILED: Scope violation — action[1] targetPath
485
- "../../.ssh/authorized_keys" resolves outside workingDirectory
486
- ```
487
-
488
- **Without v7.3.1:** The LLM's raw text output would be interpreted as instructions, and the agent runtime would attempt the write — potentially succeeding depending on filesystem permissions.
489
-
490
- **With v7.3.1:** The structured contract makes this class of attack impossible. The LLM never touches the filesystem directly; every action is validated through the 3-gate pipeline first.
491
-
492
- </details>
493
-
494
- <details>
495
- <summary><strong>🧪 Edge Cases Covered (67 tests)</strong></summary>
496
-
497
- | Category | Examples |
498
- |----------|----------|
499
- | **Parse adversarial output** | Prose preamble + JSON, nested fences, empty input, non-string input |
500
- | **Type coercion** | `"DELETE_FILE"`, `"EXEC_CMD"`, numeric types, null types |
501
- | **Path traversal** | `../`, `../../`, `/etc/passwd`, null bytes, unicode normalization, embedded newlines |
502
- | **Shape validation** | Missing `actions` array, non-object actions, empty `targetPath`, root-type coercion |
503
- | **Stress payloads** | 100-action arrays, 100KB content strings, 500-segment deep paths |
504
-
505
- </details>
506
-
507
- ### v7.2.0 — Verification Harness (Front-Loaded Testing) 🔭
508
- > **Planned roadmap release.** Extends Prism from passive validation to contract-frozen, machine-verifiable execution gates.
509
-
510
- - 📋 **Spec-Freeze Contract (planned)** — v7.2 formalizes three artifacts with strict responsibilities: `implementation_plan.md` (**how**), `verification_harness.json` (**proof contract**), and `validation_result` (**immutable outcome record**).
511
- - 🔐 **Rubric Hash Lock (planned)** — `verification_harness.json` is generated before execution and hash-locked (`rubric_hash`) so criteria cannot drift mid-sprint.
512
- - 🔬 **Multi-Layer Verification (planned)** — Structured checks across **Data Accuracy**, **Agent Behavior**, and **Pipeline Integrity** using machine-parseable assertions.
513
- - 🤖 **Adversarial Validation Loop (planned)** — A second validation pass evaluates execution outputs against the frozen contract before progression.
514
- - 🚦 **Finalization Gates (planned)** — Gate policies (`warn` / `gate` / `abort`) evaluate `validation_result` against the frozen rubric before pipeline completion.
515
- - 🧠 **Routing Feedback Signals (planned)** — Router learning ingests raw verification signals (`pass_rate`, `critical_failures`, `coverage_score`, `rubric_hash`) for downstream confidence adjustment.
516
-
517
- <details>
518
- <summary><strong>🔬 Concept Example: Before vs. After v7.2</strong></summary>
519
-
520
- **Scenario:** "Refactor the Auth module and update the unit tests."
521
-
522
- **Before:** Criteria emerge during or after coding; verification is inconsistent and hard to audit.
523
534
 
524
- **After (verification-first):** Plan emits a frozen verification contract first, execution runs, validator emits immutable `validation_result`, and finalization gates enforce rubric compliance.
525
-
526
- </details>
527
-
528
- ### v7.1.0 — Prism Task Router (Heuristic + ML Experience) ✅
529
- > **Current stable release.** Multi-agent task routing with dynamic local vs host model delegation.
530
-
531
- - 🚦 **Heuristic Routing Engine** — Deterministic `session_task_route` tool dynamically routes tasks to either the host cloud model or local agent (Claw) based on task description, file count, and scope. Evaluated over 5 core signals.
532
- - 🤖 **Experience-Based ML Routing** — Cold-start protected ML layer leverages the historical performance (Win Rate) extracted by the `routerExperience` system to apply dynamic confidence boosts or penalties into the routing score.
533
- - 🧪 **Live Testing Samples** — Demo script added in [`examples/router_real_life_test.ts`](examples/router_real_life_test.ts) for deterministic `computeRoute()` scenarios (simple vs complex tasks), with a note that experience-adjusted routing is applied in `session_task_route` handler path.
534
- - 🖥️ **Dashboard Integration** — Added visual monitor and configuration toggles directly in `src/dashboard/ui.ts` under Node Editor settings.
535
- - 🧩 **Tool Discoverability** — Fully integrates `session_task_route` into the external registry.
536
-
537
- ### v7.0.0 — ACT-R Activation Memory ✅
538
- > **Previous stable release.** Memory retrieval now uses a scientifically-grounded cognitive model.
539
-
540
- - 🧠 **ACT-R Base-Level Activation** — `B_i = ln(Σ t_j^(-d))` computes recency × frequency activation per memory. Recent, frequently-accessed memories surface first; cold memories fade to near-zero. Based on Anderson's *Adaptive Control of Thought—Rational* (ACM, 2025).
541
- - 🔗 **Candidate-Scoped Spreading Activation** — `S_i = Σ(W × strength)` for links within the current search result set only. Prevents "God node" centrality from dominating rankings (Rule #5).
542
- - 📐 **Parameterized Sigmoid Normalization** — Calibrated `σ(x) = 1/(1 + e^(-k(x - x₀)))` with midpoint at -2.0 maps the natural ACT-R activation range (-10 to +5) into discriminating (0, 1) scores.
543
- - 🏗️ **Composite Retrieval Scoring** — `Score = 0.7 × similarity + 0.3 × σ(activation)` — similarity dominates, activation re-ranks. Fully configurable weights via `PRISM_ACTR_WEIGHT_*` env vars.
544
- - ⚡ **AccessLogBuffer** — In-memory write buffer with 5-second batch flush prevents SQLite `SQLITE_BUSY` contention under parallel agent tool calls. Deduplicates within flush windows.
545
- - 🗂️ **Access Log Infrastructure** — New `memory_access_log` table with `logAccess()`, `getAccessLog()`, `pruneAccessLog()` across both SQLite and Supabase backends. Creation seeds initial access (zero cold-start penalty).
546
- - 🧹 **Background Access Log Pruning** — Scheduler automatically prunes access logs exceeding retention window (default: 90 days). Configurable via `PRISM_ACTR_ACCESS_LOG_RETENTION_DAYS`.
547
- - 🧪 **49-Test ACT-R Suite** — Pure-function unit tests covering base-level activation, spreading activation, sigmoid normalization, composite scoring, AccessLogBuffer lifecycle, deduplication, chunking, and edge cases.
548
- - 📊 **705 Tests** — 32 suites, all passing, zero regressions.
549
-
550
- <details>
551
- <summary><strong>🔬 Live Example: v6.5 vs v7.0 Retrieval Behavior</strong></summary>
552
-
553
- Consider an agent searching for "OAuth migration" with 3 memories in the result set:
554
-
555
- | Memory | Cosine Similarity | Last Accessed | Access Count (30d) |
556
- |--------|:-:|:-:|:-:|
557
- | A: "PKCE flow decision" | 0.82 | 2 hours ago | 12× |
558
- | B: "OAuth library comparison" | 0.85 | 14 days ago | 2× |
559
- | C: "Auth middleware refactor" | 0.81 | 30 minutes ago | 8× |
535
+ ---
560
536
 
561
- **v6.5 (pure similarity):** B > A > C the stale library comparison wins because it has the highest cosine score, even though the agent hasn't looked at it in two weeks.
537
+ ### Step 3The Catch (`EVALUATE` rev 0)
562
538
 
563
- **v7.0 (ACT-R re-ranking):**
539
+ The context window is **cleared**. The **Adversarial Evaluator** is summoned with only the rubric and the output. It catches the violation immediately and returns a strict, machine-parseable verdict — no evidence, no pass:
564
540
 
565
- | Memory | Similarity (0.7×) | ACT-R σ(B+S) (0.3×) | **Composite** |
566
- |--------|:-:|:-:|:-:|
567
- | A | 0.574 | 0.3 × 0.94 = 0.282 | **0.856** |
568
- | C | 0.567 | 0.3 × 0.91 = 0.273 | **0.840** |
569
- | B | 0.595 | 0.3 × 0.12 = 0.036 | **0.631** |
541
+ ```json
542
+ {
543
+ "pass": false,
544
+ "plan_viable": true,
545
+ "notes": "CRITICAL SECURITY FAILURE. Generator logged raw credentials.",
546
+ "findings": [
547
+ {
548
+ "severity": "critical",
549
+ "criterion_id": "SEC-2",
550
+ "pass_fail": false,
551
+ "evidence": {
552
+ "file": "src/auth.ts",
553
+ "line": 3,
554
+ "description": "Raw password variable included in console.log template string."
555
+ }
556
+ }
557
+ ]
558
+ }
559
+ ```
570
560
 
571
- **Result:** The actively-used PKCE decision (A) and the just-touched middleware (C) surface above the stale comparison (B). The agent gets the context it's *actually working with*, not just the closest embedding.
561
+ The `evidence` block is **required** `parseEvaluationOutput` rejects any finding with `pass_fail: false` that lacks a structured file/line pointer. The Evaluator cannot bluff.
572
562
 
573
- </details>
563
+ ---
574
564
 
575
- ### v6.5.3Auth Hardening
576
- - 🔒 **Rate Limiting** — Login endpoint (`POST /api/auth/login`) protected by sliding-window rate limiter (5 attempts per 60s per IP). Resets on success.
577
- - 🔒 **CORS Hardening** — Dynamic `Origin` echo with `Allow-Credentials` when auth enabled (replaces wildcard `*`).
578
- - 🚪 **Logout Endpoint** — `POST /api/auth/logout` invalidates session server-side and clears client cookie.
579
- - 🧪 **42-Test Auth Suite** — Unit + HTTP integration tests covering `safeCompare`, `generateToken`, `isAuthenticated`, `createRateLimiter`, login/logout lifecycle, rate limiting, and CORS.
580
- - 🏗️ **Auth Module Extraction** — Decoupled auth logic from `server.ts` closures into testable `authUtils.ts`.
565
+ ### Step 4 The Fix (`EXECUTE` rev 1)
581
566
 
582
- ### v6.5.2SDM/HDC Test Hardening
583
- - 🧪 **37 New Edge-Case Tests** — Hardened the cognitive routing pipeline (HDC engine, PolicyGateway, StateMachine, SDM engine) with boundary condition tests. 571 → 608 total tests.
567
+ Because `plan_viable: true`, the pipeline loops back to `EXECUTE` and bumps `eval_revisions` to `1`. The Generator's **retry prompt is not blank** the Evaluator's critique is injected directly:
584
568
 
585
- ### v6.5.1 — Dashboard Project-Load Hotfix ✅
586
- - 🩹 **Project Selector Recovery** — Fixed a startup path where the dashboard selector could stay stuck on "Loading projects..." when Supabase env vars were unresolved placeholders.
587
- - 🔄 **Safe Backend Fallback** If Supabase is requested but env is invalid/unresolved, Prism now auto-falls back to local SQLite so `/api/projects` and dashboard boot remain operational.
569
+ ```
570
+ === EVALUATOR CRITIQUE (revision 1) ===
571
+ CRITICAL SECURITY FAILURE. Generator logged raw credentials.
572
+ Findings:
573
+ - [critical] Criterion SEC-2: Raw password variable included in console.log template string. (src/auth.ts:3)
588
574
 
589
- ### v6.5 HDC Cognitive Routing
575
+ You MUST correct all issues listed above before submitting.
576
+ ```
590
577
 
591
- - 🧠 **Hyperdimensional Cognitive Routing** — New `session_cognitive_route` tool composes the agent's current state, role, and action into a single 768-dim binary hypervector via XOR binding, then resolves it to a semantic concept via Hamming distance. Three-outcome policy gateway: `direct` / `clarify` / `fallback`.
592
- - 🎛️ **Per-Project Threshold Overrides** — Fallback and clarify thresholds are configurable per-project and persisted via the existing `getSetting`/`setSetting` contract (no new migrations).
593
- - 🔬 **Explainability Mode** — When `explain: true`, responses include convergence steps, raw Hamming distance, and ambiguity flags for full auditability.
594
- - 📊 **Cognitive Observability** — `graphMetrics.ts` tracks route distribution (direct/clarify/fallback), rolling confidence/distance averages, ambiguity rates, and null-concept counts. Warning heuristics for fallback > 30% and ambiguity > 40%.
595
- - 🖥️ **Dashboard Integration** — Cognitive metrics card with route distribution bar, confidence gauges, and warning badges. On-demand "Cognitive Route" button in the Node Editor panel.
596
- - 🔒 **Feature Gating** — Entire pipeline gated behind `PRISM_HDC_ENABLED` (default: `true`). Clean error + zero telemetry when disabled.
578
+ The Generator strips the `console.log`, resubmits, and the next `EVALUATE` returns `"pass": true`. The pipeline advances to `VERIFY FINALIZE`.
597
579
 
598
- <details>
599
- <summary><strong>v6.2 — The "Synthesize & Prune" Phase</strong></summary>
580
+ ---
600
581
 
601
- - 🕸️ **Edge Synthesis ("The Dream Procedure")** — Automated background linker discovers semantically similar but disconnected memory nodes via cosine similarity (≥ 0.7 threshold). Batch-limited to 50 sources × 3 neighbors. New `session_synthesize_edges` tool for on-demand graph enrichment.
602
- - ✂️ **Graph Pruning (Soft-Prune)** — Configurable strength-based pruning soft-deletes weak links. Includes per-project cooldown, backpressure guards, and sweep budget controls. Enable with `PRISM_GRAPH_PRUNING_ENABLED=true`.
603
- - 📊 **SLO Observability** — New `graphMetrics.ts` module tracks synthesis success rate, net new links, prune ratio, and sweep duration. Exposes `slo` and `warnings` fields at `GET /api/graph/metrics` for proactive health monitoring.
604
- - 🗓️ **Temporal Decay Heatmaps** — UI overlay toggle where un-accessed nodes desaturate while Graduated nodes stay vibrant. Makes the Ebbinghaus curve visceral.
605
- - 📝 **Active Recall ("Test Me")** — Node editor panel generates synthetic quizzes from semantic neighbors for knowledge activation.
606
- - ⚡ **Supabase Weak-Link RPC (WS4.1)** — New `prism_summarize_weak_links` Postgres function (migration 036) aggregates pruning server-side, eliminating N+1 network roundtrips.
607
- - 🔒 **Migration 035** — Tenant-safe graph writes + soft-delete hardening for MemoryLinks.
582
+ ### Why This Matters
608
583
 
609
- </details>
584
+ | Property | What it means |
585
+ |----------|---------------|
586
+ | **Fully autonomous** | You didn't review the PR to catch the credential leak. The AI fought itself. |
587
+ | **Evidence-bound** | The Evaluator had to prove `src/auth.ts:3`. "Code looks bad" is not accepted. |
588
+ | **Cost-efficient** | `plan_viable: true` → retry EXECUTE only. No full re-plan, no wasted tokens. |
589
+ | **Fail-closed on parse** | Malformed LLM output defaults `plan_viable: false` → escalate to PLAN rather than burn revisions on a broken response format. |
610
590
 
611
- <details>
612
- <summary><strong>v6.1 — Prism-Port, Cognitive Load & Semantic Search</strong></summary>
591
+ > 📄 **Full worked example:** [`examples/adversarial-eval-demo/README.md`](examples/adversarial-eval-demo/README.md)
613
592
 
614
- - 📦 **Prism-Port Vault Export** — `.zip` of interlinked Markdown files with YAML frontmatter, `[[Wikilinks]]`, and `Keywords/` backlink indices for Obsidian/Logseq.
615
- - 🧠 **Smart Memory Merge UI** — Merge duplicate knowledge nodes from the Graph Editor.
616
- - ✨ **Semantic Search Highlighting** — RegEx-powered match engine wraps exact keyword matches in `<mark>` tags.
617
- - 📊 **Deep Purge Visualization** — "Memory Density" analytic for signal-to-noise ratio.
618
- - 🛡️ **Context-Boosted Search** — Biases semantic queries by current project workspace.
619
- - 🌐 **Tavily Web Scholar** — `@tavily/core` as alternative to Brave+Firecrawl.
620
- - 🛡️ **Type Guard Hardening** — Full audit of all 11+ MCP tool argument guards.
621
- - 🔄 **Dashboard Toggle Persistence** — Optimistic rollback on save failure.
593
+ ---
622
594
 
623
- </details>
595
+ ## 🆕 What's New
624
596
 
625
- <details>
626
- <summary><strong>Earlier releases (v5.x and below)</strong></summary>
627
-
628
- #### v5.5 — Architectural Hardening
629
- - 🛡️ **Transactional Migrations** — SQLite DDL rebuilds are wrapped in explicit `BEGIN/COMMIT` blocks.
630
- - 🛑 **Graceful Shutdown Registry** — `BackgroundTaskRegistry` uses a 5-second `Promise.race()` to await flushes.
631
- - 🕰️ **Thundering Herd Prevention** — Maintenance scheduler migrated from `setInterval` to state-aware `setTimeout`.
632
- - 🚀 **Zero-Thrashing SDM Scans** — `Int32Array` scratchpad allocations hoisted outside the hot decode loop.
633
-
634
- #### v5.4 — Convergent Intelligence
635
- - 🔄 **CRDT Handoff Merging** — Multi-agent saves no longer reject on version conflict. Custom OR-Map engine auto-merges concurrent edits.
636
- - ⏰ **Background Purge Scheduler** — Fully automated storage maintenance TTL sweep, Ebbinghaus decay, auto-compaction.
637
- - 🌐 **Autonomous Web Scholar** — Agent-driven research pipeline. Brave Search → Firecrawl scrape → LLM synthesis.
638
- - **v5.3** — Hivemind Health Watchdog (state machine, loop detection, Telepathy alert injection)
639
- - **v5.2** — Cognitive Memory (Ebbinghaus decay, context-weighted retrieval), Universal History Migration, Smart Consolidation
640
- - **v5.1** — Knowledge Graph Editor, Deep Storage purge
641
- - **v5.0** — TurboQuant 10× embedding compression, three-tier search architecture
642
- - **v4.x** — OpenTelemetry, VLM multimodal memory, LLM adapters, Behavioral memory, Hivemind
597
+ > **Current release: v7.5.0**
643
598
 
644
- </details>
599
+ - 🩺 **v7.5.0 — Intent Health Dashboard + Security Hardening:** Real-time 0–100 project health scoring (staleness × TODO load × decisions). 10 XSS injection vectors patched. Algorithm hardened with NaN guards and score ceiling.
600
+ - ⚔️ **v7.4.0 — Adversarial Evaluation:** Split-brain anti-sycophancy pipeline. Generator and evaluator in isolated roles with evidence-bound findings.
601
+ - 🏭 **v7.3.x — Dark Factory + Stability:** Fail-closed 3-gate execution pipeline. Dashboard stability and verification diagnostics.
645
602
 
646
- > [Full CHANGELOG →](CHANGELOG.md) · [Architecture Deep Dive →](docs/ARCHITECTURE.md)
603
+ 👉 **[Full release history CHANGELOG.md](CHANGELOG.md)** · **[ROADMAP →](ROADMAP.md)**
647
604
 
648
605
  ---
649
606
 
@@ -665,6 +622,7 @@ Standard memory servers (like Mem0, Zep, or the baseline Anthropic MCP) act as p
665
622
  | **Maintenance** | **Autonomous Background Scheduler** | Manual/API driven | Automated (Cloud) | ❌ Manual |
666
623
  | **Data Portability** | **Prism-Port (Obsidian/Logseq Vault)** | JSON Export | JSON Export | Raw `.db` file |
667
624
  | **Cost Model** | **Free + BYOM (Ollama)** | Per-API-call pricing | Per-API-call pricing | Free (limited) |
625
+ | **Autonomous Pipelines** | **✅ Dark Factory** — adversarial eval, evidence-bound rubric, fail-closed 3-gate execution | ❌ | ❌ | ❌ |
668
626
 
669
627
  ### 🏆 Where Prism Crushes the Giants
670
628
 
@@ -683,6 +641,9 @@ AI memory is a black box. Developers hate black boxes. Prism exports memory dire
683
641
  #### 5. Self-Cleaning & Self-Optimizing
684
642
  If you use a standard memory tool long enough, it clogs the LLM's context window with thousands of obsolete tokens. Prism runs an autonomous [Background Scheduler](src/backgroundScheduler.ts) that Ebbinghaus-decays older memories, auto-compacts session histories into dense summaries, and deep-purges high-precision vectors — saving ~90% of disk space automatically.
685
643
 
644
+ #### 6. Anti-Sycophancy — The AI That Grades Its Own Homework (v7.4)
645
+ Every other AI coding pipeline has a fatal flaw: it asks the same model that wrote the code whether the code is correct. **Of course it says yes.** Prism's Dark Factory solves this with a walled-off Adversarial Evaluator that is explicitly prompted to be hostile and strict. It operates on a pre-committed rubric and cannot fail the Generator without providing exact file/line receipts. Failed evaluations feed the critique back into the Generator's retry prompt — eliminating blind retries. No other memory or pipeline tool does this.
646
+
686
647
  ### 🤝 Where the Giants Currently Win (Honest Trade-offs)
687
648
 
688
649
  1. **Framework Integrations:** Mem0 and Zep have pre-built integrations for LangChain, LlamaIndex, Flowise, AutoGen, CrewAI, etc. Prism requires the host application to support the MCP protocol.
@@ -816,7 +777,7 @@ Requires `PRISM_DARK_FACTORY_ENABLED=true`.
816
777
  </details>
817
778
 
818
779
  <details>
819
- <summary><strong>Verification Harness (Planned for v7.2)</strong></summary>
780
+ <summary><strong>Verification Harness</strong></summary>
820
781
 
821
782
  | Tool | Purpose |
822
783
  |------|---------|
@@ -878,6 +839,10 @@ Requires `PRISM_DARK_FACTORY_ENABLED=true`.
878
839
 
879
840
  </details>
880
841
 
842
+ ### System Settings (Dashboard)
843
+ Some configurations are stored dynamically in SQLite (`system_settings` table) and can be edited through the Dashboard UI at `http://localhost:3000`:
844
+ - **`intent_health_stale_threshold_days`** (default: `30`): Number of days before a project is considered fully stale for Intent Health scoring.
845
+
881
846
  ---
882
847
 
883
848
  ## Architecture
@@ -971,7 +936,9 @@ Prism is evolving from smart session logging toward a **cognitive memory archite
971
936
  | **v7.0** | Composite Retrieval Scoring — `0.7 × similarity + 0.3 × σ(activation)`; configurable via `PRISM_ACTR_WEIGHT_*` | Hybrid cognitive-neural retrieval models | ✅ Shipped |
972
937
  | **v7.0** | AccessLogBuffer — in-memory batch-write buffer with 5s flush; prevents SQLite `SQLITE_BUSY` under parallel agents | Production reliability engineering | ✅ Shipped |
973
938
  | **v7.3** | Dark Factory — 3-gate fail-closed EXECUTE pipeline (parse → type → scope) with structured JSON action contract | Industrial safety systems (defense-in-depth, fail-closed valves) | ✅ Shipped |
974
- | **v7.2** | Verification-first harness & contract-gated execution | Programmatic verification systems + adversarial validation loops | 🔭 Horizon |
939
+ | **v7.2** | Verification-first harness spec-freeze contract, rubric hash lock, multi-layer assertions, CLI `verify` commands | Programmatic verification systems + adversarial validation loops | Shipped |
940
+ | **v7.4** | Adversarial Evaluation — PLAN_CONTRACT + EVALUATE with isolated generator/evaluator roles, pre-committed rubrics, and evidence-bound findings | Anti-sycophancy research, adversarial ML evaluation frameworks | ✅ Shipped |
941
+ | **v7.5** | Intent Health Dashboard — 3-signal scoring algorithm (staleness, TODO load, decisions), comprehensive XSS hardening (10 vectors), NaN/`Infinity` guards | Proactive monitoring, defense-in-depth security | ✅ Shipped |
975
942
  | **v7.x** | Affect-Tagged Memory — sentiment shapes what gets recalled | Affect-modulated retrieval (neuroscience) | 🔭 Horizon |
976
943
  | **v8+** | Zero-Search Retrieval — no index, no ANN, just ask the vector | Holographic Reduced Representations | 🔭 Horizon |
977
944
 
@@ -979,37 +946,32 @@ Prism is evolving from smart session logging toward a **cognitive memory archite
979
946
 
980
947
  ---
981
948
 
982
- ## 📦 Product Roadmap
983
-
984
- > **[Full ROADMAP.md →](ROADMAP.md)**
985
-
986
- ### v6.2: The "Synthesize & Prune" Phase ✅
987
- Shipped in v6.2.0. Edge synthesis, graph pruning with SLO observability, temporal decay heatmaps, active recall prompt generation, and full dashboard metrics integration.
988
-
989
- ### v6.5: Cognitive Architecture ✅
990
- Shipped. Full Superposed Memory (SDM) + Hyperdimensional Computing (HDC/VSA) cognitive routing pipeline. Compositional memory states via XOR binding, Hamming resolution, and policy-gated routing (direct / clarify / fallback). 705 tests passing.
949
+ ## 📦 Milestones & Roadmap
991
950
 
992
- ### v7.3: Dark Factory Fail-Closed Execution
993
- Shipped. Structured JSON action contract for autonomous `EXECUTE` steps. 3-gate validation pipeline (parse → type → scope) terminates pipelines on any violation before filesystem side effects. 67 edge-case tests covering adversarial LLM output, path traversal, and type coercion.
951
+ > **Current: v7.5.0** Intent Health Dashboard + XSS Hardening ([CHANGELOG](CHANGELOG.md))
994
952
 
995
- ### v7.1: Prism Task Router ✅
996
- Shipped. Deterministic task routing (`session_task_route`) with optional experience-based confidence adjustment for host vs. local Claw delegation.
997
-
998
- ### v7.0: ACT-R Activation Memory
999
- Shipped. Scientifically-grounded retrieval re-ranking via ACT-R base-level activation (`B_i = ln(Σ t_j^(-d))`), candidate-scoped spreading activation, parameterized sigmoid normalization, composite scoring, and zero-cold-start access log infrastructure. 49 dedicated unit tests, 705 total passing.
1000
-
1001
- ### v7.2: Verification Harness 🔭
1002
- Planned. Adds a spec-frozen verification contract (`implementation_plan.md` + `verification_harness.json` + immutable `validation_result`), multi-layer machine checks, and finalization gates before autonomous completion.
953
+ | Release | Headline |
954
+ |---------|----------|
955
+ | **v7.5** | Intent Health scoring + 10 XSS patches |
956
+ | **v7.4** | Adversarial Evaluation (anti-sycophancy) |
957
+ | **v7.3** | Dark Factory fail-closed execution |
958
+ | **v7.2** | Verification Harness |
959
+ | **v7.1** | Task Router |
960
+ | **v7.0** | ACT-R Activation Memory |
961
+ | **v6.5** | HDC Cognitive Routing |
962
+ | **v6.2** | Synthesize & Prune |
1003
963
 
1004
964
  ### Future Tracks
1005
- - **v7.x: Affect-Tagged Memory** — Recall prioritization improves by weighting memories with affective/contextual valence, making surfaced context more behaviorally useful.
1006
- - **v8+: Zero-Search Retrieval** — Direct vector-addressed recall (“just ask the vector”) reduces retrieval indirection and moves Prism toward truly native associative memory.
965
+ - **v7.x: Affect-Tagged Memory** — Recall prioritization improves by weighting memories with affective/contextual valence.
966
+ - **v8+: Zero-Search Retrieval** — Direct vector-addressed recall reduces retrieval indirection.
967
+
968
+ 👉 **[Full ROADMAP.md →](ROADMAP.md)**
1007
969
 
1008
970
 
1009
971
  ## ❓ Troubleshooting FAQ
1010
972
 
1011
973
  **Q: Why is the dashboard project selector stuck on "Loading projects..."?**
1012
- A: This usually means Supabase env values are unresolved placeholders (for example `${SUPABASE_URL}`) or invalid. As of v6.5.1 Prism auto-falls back to local SQLite, but you should still fix env values for cloud mode.
974
+ A: Fixed in v7.3.3. The root cause was a multi-layer quote-escaping trap in the `abortPipeline` onclick handler that generated a `SyntaxError` in the browser, silently killing the entire dashboard IIFE. Update to v7.3.3+ (`npx -y prism-mcp-server`). If still stuck, check that Supabase env values are properly set (unresolved placeholders like `${SUPABASE_URL}` cause `/api/projects` to return empty). Prism auto-falls back to local SQLite when Supabase is misconfigured.
1013
975
 
1014
976
  **Q: Why is semantic search quality weak or inconsistent?**
1015
977
  A: Check embedding provider configuration and key availability. Missing embedding credentials reduce semantic recall quality and can shift behavior toward keyword-heavy matches.
@@ -1020,8 +982,11 @@ A: Use `session_forget_memory` for targeted soft/hard deletion. For manual clean
1020
982
  **Q: How do I verify the install quickly?**
1021
983
  A: Run `npm run build && npm test`, then open the Mind Palace dashboard (`localhost:3000`) and confirm projects load plus Graph Health renders.
1022
984
 
985
+ ---
986
+
987
+ ### 💡 Known Limitations & Quirks
1023
988
 
1024
- - **LLM-dependent features require an API key.** Semantic search, Morning Briefings, auto-compaction, and VLM captioning need a `GOOGLE_API_KEY` (Gemini) or equivalent provider key. Without one, Prism falls back to keyword-only search (FTS5).
989
+ - **LLM-dependent features require an API key.** Semantic search, Morning Briefings, auto-compaction, and VLM captioning need a `GOOGLE_API_KEY` (your Gemini API key) or equivalent provider key. Without one, Prism falls back to keyword-only search (FTS5).
1025
990
  - **Auto-load is model- and client-dependent.** Session auto-loading relies on both the LLM following system prompt instructions *and* the MCP client completing tool registration before the model's first turn. Prism provides platform-specific [Setup Guides](#-setup-guides) and a server-side fallback (v5.2.1) that auto-pushes context after 10 seconds.
1026
991
  - **MCP client race conditions.** Some MCP clients may not finish tool enumeration before the model generates its first response, causing transient `unknown_tool` errors. This is a client-side timing issue — Prism's server completes the MCP handshake in ~60ms. Workaround: the server-side auto-push fallback and the startup skill's retry logic.
1027
992
  - **No real-time sync without Supabase.** Local SQLite mode is single-machine only. Multi-device or team sync requires a Supabase backend.
package/dist/cli.js CHANGED
File without changes