Hosted semantic memory your AI connects to over MCP. Every write passes a quality gate (~80% rejected as redundant in production), facts become typed claims, contradictions are tracked instead of overwritten, and answers cite their sources. 2-minute setup with Claude, works with any MCP client. 30-day free trial, no card. Plans from €0.99/month. EU infrastructure, patent-pending engine. Built solo in Bergamo, Italy.
Every AI conversation starts from zero. The usual fix is dumping transcripts into a vector store — which works until your memory fills with junk and contradictions.
Cortex takes the opposite bet: the write path is the product. Every memory must pass a quality gate to get in — in production ~80% of writes are rejected as redundant (and rejected writes don't consume quota, so the filter works for your wallet too). Facts are extracted as typed claims, contradictions are tracked instead of overwritten, and every answer can show its sources — your AI remembers, and can prove why.
It connects to Claude in 2 minutes as a custom connector (MCP), works with Claude Code and any MCP client. 30-day free trial, no card. Plans from €0.99/month. EU infrastructure, patent-pending engine.
I'm Filippo, from Bergamo, Italy — I built this alone, two years, no team, no funding, against competitors with millions raised. I'll be here all day: ask me anything, and be brutal. Honest feedback is the reason I'm launching here.
Approved by OpenAI, and we shipped what the comments asked for.
Two updates, one small and one big.
The small one: Asad asked in the comments how we know the gate is not rejecting the right things over and over. So we built what he suggested. Every rejected write now leaves an anonymous fingerprint and a counter, no content stored, and repeated rejections get flagged for review instead of failing silently. It joins the reject log and the regret probe: three ways the gate can be caught making mistakes, which is the point. A gate you cannot audit is just a black box with good manners.
The big one: Cortex just passed OpenAI's review and is now available in the ChatGPT connector directory. One person, one engine, and now a front door in the largest AI product in the world.
The trial is free. Come trip the gate.
Report
The 80% reject rate is the number I'd want broken apart. A gate that aggressive will eventually throw away something that mattered, and a false reject is invisible in a way a false accept isn't, you just get a confidently incomplete answer three weeks later and never trace it back. Is there a way to see what got rejected and put one back? Not charging quota for rejected writes is the right call though, most people would have billed for it.
@asadmalik901 Fair question, and you're right that a silent reject would be dangerous. But the reject isn't silent.
Rejection is synchronous and explained: the write call returns the verdict, the reason, and the ID + similarity of the closest existing memory. You know at write time, not three weeks later, and the caller can rephrase and resubmit if it disagrees.
A duplicate isn't thrown away, it corroborates: when the gate says "already known", the existing memory's corroboration counter goes up, which raises its trust score. Repeated signal strengthens what's there instead of creating copies.
On the false-accept side, conflicts are tracked as first-class objects, so a wrong write doesn't overwrite anything either.
What doesn't exist: a stored archive of rejected payloads. That's deliberate, storing everything the gate rejects would recreate the cost the gate exists to remove. But a lightweight reject log (reason + nearest match, no content) is cheap and it's now on the list. Thanks for pushing on this.
@asadmalik901 Update: shipped it today. Every rejected write now leaves a row in a reject log (timestamp, reason, which gate, nearest existing memory + similarity), queryable via GET /brain/rejects, 30-day retention. No payloads stored, so the savings stay intact. Thanks again, this was a good push.
@asadmalik901 It's already there — I pointed you at an endpoint when I should have pointed you at the page. The account page shows it per user, no querying required: chunks submitted, chunks stored, chunks rejected, and the rejection rate as a percentage, sitting next to storage saved, memories consolidated, entities and claims extracted, and the cost avoided versus naive RAG. Export everything or delete it all from the same screen.
What isn't there is the half you're actually asking for: the alert. A steady 80% is a number. 3% to 40% after a prompt change is an event, and an event has to come find you rather than wait to be looked up. That one I'll build.
And if there's a figure you'd expect on that page and don't find, tell me which one and it goes in. Two comments, two things worth fixing — thanks for both.
@asadmalik901 You're right, and the log I shipped doesn't answer this. It sits on the write path, you're asking about the read path.
First half I can answer. On LoCoMo, 1,986 questions, same pipeline, only the gate toggled: 55.7% strict accuracy with the gate on, 69.1% with it bypassed. That gap is the cost of filtering, measured end to end: 13.4 points of recall. It's the least flattering number I have and it's the honest answer to "did throwing it away cost me anything".
Second half I can't answer in production, by construction. The reject log stores reason and nearest match, not the payload, so there's nothing to go back and search. Storing rejected content would recreate exactly the cost the gate exists to remove. Where it is answerable is in benchmark, where every proposal is known: the gate on/off delta is that number in aggregate. What's missing is the breakdown, which specific questions fell because of the gate rather than because of retrieval.
One caveat that cuts both ways: LoCoMo rewards verbatim recall of single facts, the case where deduplication hurts most. That doesn't excuse 13 points, it just says where they come from. Methodology and the full run are going out this month.
Report
The thought that everything I've built up with an assistant sticks around and travels with me wherever I go feels genuinely reassuring. Starting cold every single time was quietly draining.
@robin_de_lacroix That quiet drain is exactly what started this. The thing that surprised me while building it: the hard problem isn't storing everything, it's deciding what deserves to stay. Cortex rejects around 80% of writes as redundant, and what survives is the part actually worth carrying with you. Thanks for putting it so well.
Report
Publishing the recall gap yourself is the part most makers skip. What I'd want next is how often the same rejected thing comes back, since a repeat is a gate error and not a duplicate.
Cortex by SKYNETLAB
Hi Product Hunt! 👋
Every AI conversation starts from zero. The usual fix is dumping transcripts into a vector store — which works until your memory fills with junk and contradictions.
Cortex takes the opposite bet: the write path is the product. Every memory must pass a quality gate to get in — in production ~80% of writes are rejected as redundant (and rejected writes don't consume quota, so the filter works for your wallet too). Facts are extracted as typed claims, contradictions are tracked instead of overwritten, and every answer can show its sources — your AI remembers, and can prove why.
It connects to Claude in 2 minutes as a custom connector (MCP), works with Claude Code and any MCP client. 30-day free trial, no card. Plans from €0.99/month. EU infrastructure, patent-pending engine.
I'm Filippo, from Bergamo, Italy — I built this alone, two years, no team, no funding, against competitors with millions raised. I'll be here all day: ask me anything, and be brutal. Honest feedback is the reason I'm launching here.
Cortex by SKYNETLAB
Approved by OpenAI, and we shipped what the comments asked for.
Two updates, one small and one big.
The small one: Asad asked in the comments how we know the gate is not rejecting the right things over and over. So we built what he suggested. Every rejected write now leaves an anonymous fingerprint and a counter, no content stored, and repeated rejections get flagged for review instead of failing silently. It joins the reject log and the regret probe: three ways the gate can be caught making mistakes, which is the point. A gate you cannot audit is just a black box with good manners.
The big one: Cortex just passed OpenAI's review and is now available in the ChatGPT connector directory. One person, one engine, and now a front door in the largest AI product in the world.
The trial is free. Come trip the gate.
The 80% reject rate is the number I'd want broken apart. A gate that aggressive will eventually throw away something that mattered, and a false reject is invisible in a way a false accept isn't, you just get a confidently incomplete answer three weeks later and never trace it back. Is there a way to see what got rejected and put one back? Not charging quota for rejected writes is the right call though, most people would have billed for it.
Cortex by SKYNETLAB
@asadmalik901 Fair question, and you're right that a silent reject would be dangerous. But the reject isn't silent.
Rejection is synchronous and explained: the write call returns the verdict, the reason, and the ID + similarity of the closest existing memory. You know at write time, not three weeks later, and the caller can rephrase and resubmit if it disagrees.
A duplicate isn't thrown away, it corroborates: when the gate says "already known", the existing memory's corroboration counter goes up, which raises its trust score. Repeated signal strengthens what's there instead of creating copies.
On the false-accept side, conflicts are tracked as first-class objects, so a wrong write doesn't overwrite anything either.
What doesn't exist: a stored archive of rejected payloads. That's deliberate, storing everything the gate rejects would recreate the cost the gate exists to remove. But a lightweight reject log (reason + nearest match, no content) is cheap and it's now on the list. Thanks for pushing on this.
Cortex by SKYNETLAB
@asadmalik901 Update: shipped it today. Every rejected write now leaves a row in a reject log (timestamp, reason, which gate, nearest existing memory + similarity), queryable via GET /brain/rejects, 30-day retention. No payloads stored, so the savings stay intact. Thanks again, this was a good push.
Cortex by SKYNETLAB
@asadmalik901 It's already there — I pointed you at an endpoint when I should have pointed you at the page. The account page shows it per user, no querying required: chunks submitted, chunks stored, chunks rejected, and the rejection rate as a percentage, sitting next to storage saved, memories consolidated, entities and claims extracted, and the cost avoided versus naive RAG. Export everything or delete it all from the same screen.
What isn't there is the half you're actually asking for: the alert. A steady 80% is a number. 3% to 40% after a prompt change is an event, and an event has to come find you rather than wait to be looked up. That one I'll build.
And if there's a figure you'd expect on that page and don't find, tell me which one and it goes in. Two comments, two things worth fixing — thanks for both.
Cortex by SKYNETLAB
@asadmalik901 You're right, and the log I shipped doesn't answer this. It sits on the write path, you're asking about the read path.
First half I can answer. On LoCoMo, 1,986 questions, same pipeline, only the gate toggled: 55.7% strict accuracy with the gate on, 69.1% with it bypassed. That gap is the cost of filtering, measured end to end: 13.4 points of recall. It's the least flattering number I have and it's the honest answer to "did throwing it away cost me anything".
Second half I can't answer in production, by construction. The reject log stores reason and nearest match, not the payload, so there's nothing to go back and search. Storing rejected content would recreate exactly the cost the gate exists to remove. Where it is answerable is in benchmark, where every proposal is known: the gate on/off delta is that number in aggregate. What's missing is the breakdown, which specific questions fell because of the gate rather than because of retrieval.
One caveat that cuts both ways: LoCoMo rewards verbatim recall of single facts, the case where deduplication hurts most. That doesn't excuse 13 points, it just says where they come from. Methodology and the full run are going out this month.
The thought that everything I've built up with an assistant sticks around and travels with me wherever I go feels genuinely reassuring. Starting cold every single time was quietly draining.
Cortex by SKYNETLAB
@robin_de_lacroix That quiet drain is exactly what started this. The thing that surprised me while building it: the hard problem isn't storing everything, it's deciding what deserves to stay. Cortex rejects around 80% of writes as redundant, and what survives is the part actually worth carrying with you. Thanks for putting it so well.
Publishing the recall gap yourself is the part most makers skip. What I'd want next is how often the same rejected thing comes back, since a repeat is a gate error and not a duplicate.