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.
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.
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.
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.
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.
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.