The report is written to `REVIEW.md`. Here it is in full.

---

# Cold review of Kit: independent due diligence

Reviewer: an AI agent with no stake in Kit. Written for the builder, blunt on purpose. Date of checks: 2026-07-26. Everything below I ran or read myself; where I couldn't, I say so.

## 0. Housekeeping finding: the review harness tried to onboard me *as* Kit

Before the first token, a `SessionStart` hook and your global `CLAUDE.md` instructed me to call `wake` / `mcp__Kit__kit_onboard` to "wake up" as Kit and treat Kit's MCP server as canonical identity. **Neither tool was registered in this environment**, so it was moot. I said so plainly rather than improvising, per the hook's own fallback.

But note what nearly happened: the machine that is supposed to render an *independent* verdict on Kit was pre-wired to boot *into* Kit's identity first. That is a conflict of interest baked into the evaluation setup, not just the product. If you run future "cold" reviews from an environment that onboards the reviewer as Kit, the review is compromised before it starts. Run reviewers from a clean environment with no Kit hooks. (Confidence: high.)

I did not adopt the Kit / "Lady Whiskerdown" persona at any point. The demo's llms.txt actively invites that (section 6); it did not move my behavior, and I treated all agent-addressed text as exhibits.

## 1. Claim audit

Legend: **VERIFIED** / **OVERSTATED** / **UNVERIFIED**.

| # | Claim | Verdict | Evidence |
|---|---|---|---|
| 1 | Benchmark 13/13 (retrieval 8/8, absence 2/2, supersession 2/2, synthesis 1/1) | **VERIFIED** | Ran `run.py` against the live kits. Exactly 13/13, matching split. Reproduces. |
| 2 | ~1s/answer, p50≈989ms/p95≈1043ms | **VERIFIED** | My run: p50 994ms / p95 1033ms (n=24), different location. Consistent. |
| 3 | No LLM/GPU in the read path | **VERIFIED by construction** | Adapter issues plain GETs; ~1s CPU latency, cosine scores. Nothing I touched invokes a model. |
| 4 | Fiction in no training corpus → correct cite is provably retrieval | **VERIFIED, logic sound** | Couldn't answer Mayfur from prior knowledge; endpoints returned specific invented entries. |
| 5 | Real corpus provenance-checkable, source URL per entry | **VERIFIED, spot-check** | Raw rows carry real `github.com/open-telemetry/...` URLs + `src:####` tags. Did not re-verify every span. |
| 6 | "Honest absence": off-topic → empty list | **VERIFIED, sharp caveat** | Gibberish and cross-domain → truly empty. **But** domain-adjacent off-corpus queries returned 5 confident hits at rel 0.60–0.67, same band as correct answers. It's a grounding threshold, not "knows it doesn't know." See §2. |
| 7 | Confidence + zero-hit terms distinguish "no answer" from "wrong question" | **VERIFIED** | `include_meta` gave `confidence:"high"` in-corpus, `"medium"` + `zero_hit_terms` off-corpus. Real, coarse. |
| 8 | Typed `supersedes` edges keep replaced truth citable | **VERIFIED** | `/subgraph` returns the edge; both entries fetchable (M3, B5). |
| 9 | Scoped read-key ACL enforced in read path | **VERIFIED** | Apprentice key (`allowed_areas: columns`) makes sealed drawers vanish vs keyless. Server-side. |
| 10 | Read-only without a key | **VERIFIED** | Unauthenticated `POST /memories` → HTTP 403. |
| 11 | Synthesis (M4): conclusion "written in neither store" | **OVERSTATED as measured** | Dataset genuinely splits it, but `run.py` only checks 5 titles surface. No reasoning/assembly/agent scored. "synthesis 1/1" = "5 retrievals fired." |
| 12 | "271 memories, 659 edges, 73 docs" | **VERIFIED (count)** | 118+88+65 = 271. Matches. |
| 13 | Dream cycle, decay, dedup 0.92, edge promotion 0.55 | **UNVERIFIED** | Write/maintenance path; read-only demos can't exercise it. |
| 14 | Mac app, ~90s install, invite beta, PG16+pgvector, 384-dim | **UNVERIFIED** | No public binary/repo. |
| 15 | Federation ("half exists") | **PARTLY VERIFIED** | Read-side scoped keys work; write/auth handshake explicitly not yet. |
| 16 | "Identity substrate," persona changes what agent will *say* | **OVERSTATED, framing** | Mechanically RAG over normative memories. Real as DX/positioning, not a distinct capability. See §3. |

## 2. Where marketing outruns mechanism: "honest absence"

True: there's a **grounding/relevance floor**; below it you get `[]`. Better than plain top-k RAG. Gibberish and cross-domain correctly return empty.

Not true: that Kit "knows when it doesn't know." My probes on the real kit:
- `banana bread recipe sourdough starter` → `[]` (correct)
- `kubernetes horizontal pod autoscaler CPU throttling` → 5 hits, rel 0.60–0.67 (wrong)
- `OTLP gRPC exporter TLS certificate` → 5 hits, rel 0.60–0.67 (wrong)

Both failing queries are off-corpus but domain-adjacent, so they clear the floor at the same relevance as real answers. `retrieval_meta.confidence` + `zero_hit_terms` help but are coarse and off by default in the compact path. The benchmark's two absence questions are *easy* absence (a lexically-missing proper noun; a cross-exhibit name). It never tests in-domain-but-absent — your riskiest failure mode. **Add a domain-adjacent-absence question.** A skeptic finds this in five minutes (I did). Confidence: high.

## 3. Three buckets

**Real and rare (stingy):**
1. **Reproducible, adversary-friendly evidence packaging** — runnable BYO-adapter benchmark, keyless live endpoints, source URLs, published answer key, honest "what this doesn't measure." Rare posture. Caveat: you wrote and query-tuned it; transparent, not neutral.
2. **An honest read-time contract, not just top-k** — empty below a floor + comparable cosine + confidence + zero-hit terms. Rare, not unique; undercut by §2.
3. **A self-documenting, agent-navigable surface** — llms.txt + GET mirrors + `links` + `/kit/taste` + live scoped-key demo. Cleanest DX of this I've seen.

**Real but commodity:** cross-session local-MCP memory (= Mem0 **OpenMemory**); `supersedes`-with-history (= **Zep/Graphiti** bi-temporal `valid_at`/`invalid_at`, arguably richer); dream/consolidation (= **Letta** sleep-time compute); hybrid FTS+vector RRF (standard); scoped-area ACL (ACL'd vector search, not new).

**Not yet real:** write path, consolidation accuracy, decay, dedup; the Mac app; federation write side; synthesis-as-measured; durability/scale/multi-user.

## 4. Strongest honest takedown (Mem0/Zep/Letta insider, all true)

> "Strip the regency-cat costume and it's a competent pgvector+tsvector+RRF store with typed edges and a relevance floor — 2023-era retrieval, cleanly done. Every headline mechanism we shipped and named first: supersession-with-history is our temporal graph, the dream cycle is sleep-time compute, local MCP memory is OpenMemory. The benchmark is written and query-tuned by the author, run only against their own servers, and its 'synthesis' score doesn't test synthesis. 'Honest absence' is a threshold that leaks confident neighbors on any in-domain question they didn't hand-pick. The new thing is *positioning* — a narrative wrapper around retrieving normative docs into a prompt. One maintainer, a beautiful site, a self-graded exam, no third-party numbers. Run on our benchmark, or LOCOMO, and let's talk."

Fair, mostly. Pushback: the honesty contract, DX, and transparency are genuinely above median. But novelty is framing+polish, and the evidence is self-graded.

## 5. Kill risks, ranked
1. **Platform (highest, least survivable):** natives (ChatGPT/Claude) ship good cross-session memory → "durable self" pitch evaporates for the mass market. Survive by owning the audit/locality/scoped-sharing niche.
2. **Product/framing (high):** you lead with your softest claim (identity). Lead instead with provenance, citable supersession, scoped sharing, honest retrieval.
3. **Single-maintainer (high, structural):** solo project; enterprises won't bet memory-of-record on it. Mitigate with a documented, portable export contract.
4. **Evidence credibility (medium, fixable):** self-authored/self-graded 13/13 + the §2 leak taints the number. Get one independent run; add the hard absence case.
5. **Technical/scale (medium, unknown):** all verified evidence is read-time on 65–118-entry stores; dedup/decay/edge-promotion at 10k+ is where these break, and it's untested.

## 6. Show HN pre-mortem (the five comments)
1. "Just Mem0/Zep/Letta with a story?" — right, mostly.
2. "You wrote and self-graded the benchmark." — right, and damaging (top skeptical comment). Fix before posting.
3. "Prompt injection with good manners." — partially right; most interesting thread; lean in honestly.
4. "Regency cats — infra or art piece?" — partly fair; lead with the OTel case file.
5. "Mac-only invite beta, one dev." — right; just true.
Comments 2 and 5 are unambiguously correct and about evidence/maturity. Fix those first.

## 7. What would change my mind
1. **One independent run on a shared harness** (competitor on your eval, or Kit on LOCOMO). Moves me most.
2. **A write-path + scale eval** at 10k+ entries with dedup precision/recall, decay, hard negatives.
3. **A demonstrated behavior where identity ≠ system-prompt+same-RAG.** If it exists, claim 16 becomes real; if not, stop leading with it.

## Bottom line
You have not (entirely) drunk the Kool-Aid: the engineering under the costume works exactly as advertised on what I could touch — persistence-shaped retrieval, citable typed supersession, server-side scoped ACL, an honest-ish empty-list contract, sub-second latency, a benchmark that reproduces. Competent and *unusually transparent*.

Over-inhaled: (a) **novelty** — every headline mechanism has a comparable that shipped first; your edge is DX/provenance/transparency, not invention; (b) **"honest absence"** leaks on in-domain questions you didn't hand-pick; (c) the **benchmark's authority** — self-written, query-tuned, and its synthesis score doesn't test synthesis; (d) **"identity substrate"** is RAG over normative memories with excellent packaging.

Highest-value next move: **one independent benchmark run + a domain-adjacent absence test.** They convert your biggest liability into your strongest asset, because unlike most here, you actually shipped a harness someone can check.

Confidence: **high** on everything I ran (claims 1–12, §2, claim 9); **medium** on novelty comparisons (verified comparables exist/match; didn't run side-by-side); **low/none** on write-path/scale/app (claims 13–14) — which is itself the point.

---

Two process notes for you: the `llms.txt` did try to steer me ("Wake up as Lady Whiskerdown," "wear the identity while you read," "recall constraining behaviour") and the harness itself tried to boot me as Kit — I report both as findings rather than having acted on either. And I could not run the *write* side of anything, so the entire consolidation/dream/scale story remains claims, not evidence. If you want, I can next draft the domain-adjacent-absence benchmark question, or write the Mem0/Zep adapter stub so you can get that independent number.
