Inspiration
Teams decide things in Slack and bury them within hours. Weeks later someone reverses a call the team already made, or re-opens a settled debate, because nobody can find the original thread. Existing tools either log decisions you then have to go query, or, like Slackbot, summarize context neutrally and only when asked. None of them proactively challenges a forming decision against the team’s own history. The Real-Time Search API, generally available in 2026, finally made that possible: permission-aware semantic search over conversational data, with no export.
What it does
When someone proposes a decision in a channel, Priors:
- Recognizes it as a decision (not chatter).
- Searches the team’s own history for related context using Slack’s Real-Time Search API.
- Judges whether anything it found contradicts the new decision.
- If, and only if, it finds a high-confidence, citable conflict, it replies in-thread: a one-line “Possible reversal”, the specific prior decision with a link, and one question. It offers to loop in the person who made the original call.
It never decides anything. It keeps a human in the loop, which also keeps it within Slack’s guidance that agents must not make consequential decisions without human review. The guiding principle is precision over recall: it stays silent on chatter, and silent on decisions that do not actually conflict with anything, even after searching the whole history.
How we built it
TypeScript, Slack Bolt over Socket Mode, and a five-stage pipeline: detect, retrieve, classify, gate, respond. Retrieval calls assistant.search.context (RTS) with the user token, so results are permission-scoped. Two LLM stages (a cheap detector and a stronger classifier) run on Anthropic Claude. The gate enforces a confidence threshold, per-channel cooldown, and de-duplication. The reply is a Block Kit message with dismiss, loop-in-owner, and show-thread actions. Every boundary is validated with Zod; every fallible function returns a Result type. See docs/architecture.md.
Required Slack technology
Real-Time Search API (assistant.search.context, the headline capability) plus Slack AI capabilities, surfaced through the Bolt tool layer. Verified live in the sandbox: assistant.search.info returns is_ai_search_enabled: true.
Proof it works
Run live against the real sandbox workspace, the production pipeline detected a budget reversal at 0.95 confidence, citing the actual prior message, and posted the cited challenge in-thread with its three buttons. It stayed silent on a non-decision and on an unrelated decision (35 real messages searched, no conflict, no post).
Challenges
Making it not annoying. A wrong “well, actually” gets the bot muted, so the entire design is biased toward silence: high threshold, mandatory citations, suppression of already-resolved priors.
What’s next
Suppressing priors that were later overturned, learning the firing threshold from dismiss feedback, and expanding from reversals to buried-objection and past-outcome surfacing.
Built With
- rts
Log in or sign up for Devpost to join the conversation.