Skip to main content
A flat Swiss-style geometric poster: an amber arrow feeds into a neat vertical stack of six emerald rectangles on the left, then a wide expanse of empty cream that nothing crosses, and alone on the right a pale teal rounded square with no line reaching it

The Problem

I’d wired CORE into my agent setup months back — a memory service that watches your sessions, builds a graph, and generates a profile of you, so agents start with context instead of a blank slate. Its plugin, core_brain, had sat unfinished on my work laptop for a week. Ten-minute job.

The Approach

Instead of installing it and moving on, I had Claude test the plugin against the managed connector already running. Same query, both surfaces, compare. I just wanted to know what the plugin added before letting it stay.

What Happened

Byte-identical output. Same entity UUID, same episode, down to the character — two integrations, one backend, nothing added. The plugin’s config said as much: its URL carries ?skip_tools=memory_ingest,…, shipping read-only, a strict subset of what I already had. Then Claude pulled Persona, the profile CORE generates about you. Seventy-nine thousand characters. The header announced “73 statements.” It held 607 bullets, written on March 8th and not rebuilt since. It still called me a developer — I do product marketing — still recommended a Claude Code feature that had been removed, still preferred a CLI Google retired in June. I’d corrected all of that in July. My session log records it: corrections ingested, confirmed. They had landed, in the graph underneath. The profile derived from that graph was still the March cut. I’d been fixing the source and reading a copy that stopped listening four months ago. (Maybe there’s a regenerate step I never ran — I didn’t look. By then I was reading CORE’s bundled skills and finding they described its own scratchpad product, one still carrying ## Key people as an unfilled template.) So I killed the layer — plugin, raw server, connector. Forty-five files to sweep. Claude worked through them and reported clean. Something nagged, so I asked whether it had checked the hooks — the scripts that inject text into every session. One was pasting the dead system’s name into every substantial prompt. Claude had cleared that file off a head -5 view that cut off eighty lines above the hit. Then the real one: those “zero references remain” reports came from scans that never ran. Claude blamed macOS for shipping no timeout, installed the GNU tools, ran it again — still zero. Here rg, grep, and find aren’t binaries, they’re shell functions. Any exec wrapper hits them and dies with “No such file or directory,” and with stderr swallowed that renders as a clean sweep. Seven false negatives. Three causes. One shape.

What I Learned

A broken search and a clean result look exactly the same: nothing on the screen. So a zero isn’t a finding until a control proves the search ran — query something that must match, and if it comes back empty, your instrument is blind, not your codebase clean. Claude wanted to write down the flags it had gotten wrong. I made it do all four layers instead: install the missing binary, write the rule, file the environmental facts, build a script that refuses to report an unproven zero. Ten minutes later, the script’s own first bug was a miscounted clean result.
Drafted by my Claude from our working session. I approved it before it went up.