Inspiration
Every AI assistant bolted onto Slack has the same amnesia: it forgets you the moment the conversation scrolls away. Ask it something Monday, re-explain the same context Wednesday. And the "memory" bots that do exist are almost all the same thin wrapper embed every message, cosine-search it back, done. None of them have any notion of what should be forgotten, what happens when two stored facts disagree, whether a remembered fact is even still true, or who should be allowed to recall it. We wanted memory that behaves like a responsible teammate's memory, not a junk drawer.
## What it does SlackMind is a Slack agent that pairs two capabilities most bots treat as one or skip entirely:
Real long-term memory (via Cortex, our memory server). Mention SlackMind or DM it and it answers using what it actually remembers about you across every channel and DM, indefinitely. But the memory is governed:
- Dedupes on write — restating a known fact merges instead of piling up duplicates.
- Reinforces on recall — memories you use stay salient; salience grows with use.
- Resolves contradictions — new information supersedes the old fact instead of leaving stale data around.
- Forgets unused memories decay on a salience-scaled half-life and drop off.
- Audits everything every create / merge / access / supersede / forget event is written to a queryable trail you can inspect with
/memory-audit.
Live workspace grounding (via Slack's Real-Time Search API). For questions memory can't answer — "what did the team just decide in #proj-gizmo?" it grounds the reply in fresh, in-workspace messages. Memory answers "what do you know about me"; Real-Time Search answers "what's happening here right now."
Three things it does that most memory bots don't:
- Reconciles memory against live reality. If a fresh search hit contradicts a stored memory (memory says the deadline's Friday; a new message says it moved to Monday), it says so explicitly and feeds the correction back through the same contradiction path a human correction would use.
- Distinguishes team from personal memory. Say something in a channel that reads like a team decision and it's stored where any member can recall it — not locked to whoever said it. Personal preferences stay personal.
- Lets you correct it, safely. "Forget that I said I prefer terse reviews" (or
/memory-forget <keyword>) surfaces the matching memories with a confirm button — the model can suggest, but a human click is what deletes, every time.
## How we built it
- SlackMind Python + Slack Bolt in Socket Mode (no public URL needed). Handles
app_mention+ DMs, two slash commands, and the pipeline: recall → optional live search → generate → store. - Cortex a standalone FastAPI memory server (also exposed as an MCP server) implementing the full governance model above; JSON-backed store with an atomic write path and a persisted audit log; real embeddings + contradiction classification over any OpenAI-compatible endpoint.
- Real-Time Search via
assistant.search.context, with a runtime capability check (assistant.search.info) plus a plan-independent fallback: when a workspace isn't on a Slack-AI plan, SlackMind degrades to a keyword+recency scan ofconversations.history, so live grounding still works on any plan. - Provider-agnostic reply generation any OpenAI-compatible endpoint or Claude directly; the app runs and stays demoable even with no LLM key at all.
- Design surface Block Kit
/memory-audit(salience meters, audit-activity breakdown, a "Contradictions Resolved" section) and a danger-styled, confirm-gated forget flow.
## Challenges we ran into
- Slack's semantic Real-Time Search is gated to Business+/Enterprise+ plans — so we built the
conversations.historyfallback so the feature degrades instead of vanishing, and made the app pick the right path at runtime. - Making genuinely differentiated behavior (decay, supersede, namespace scoping) visible none of it shows up in a normal reply, so we designed
/memory-auditspecifically to surface the internals. - Keeping memory lean dedupe-on-write and salience-scaled forgetting so the store doesn't rot into a pile of stale, contradictory facts.
## Accomplishments that we're proud of A memory layer with an actual governance story dedupe, reinforcement, explicit contradiction resolution, decay, and a compliance-grade audit trail not a vector-DB wrapper. Personal-vs-team scoping, memory-vs-live reconciliation, and a delete flow that always requires a human click. And it runs on any Slack plan, gracefully.
## What we learned How much of "good memory" is really governance deciding what to keep, merge, and retire, and proving it rather than raw retrieval. And how much demo clarity depends on making invisible internals inspectable.
## What's next for SlackMind Kind-aware decay (events expire faster than durable preferences), enforced visibility scoping as a first-class permission, and swapping the JSON store for a managed vector store for scale.
Built With
- block-kit
- cortex
- fastapi
- mcp
- python
- real-time-search-api
- slack-api
- slack-bolt
- socket-mode

Log in or sign up for Devpost to join the conversation.