Stop searching for "why did we build it this way?" DecisionOps captures your team's micro-decisions automatically, as they happen.
Slack Agent Builder Challenge
Engineering and product teams make dozens of micro-decisions every week in Slack—choosing an architecture, dropping a feature, selecting a vendor. These decisions are buried in endless threads. Six months later, when the team asks "Why did we choose PostgreSQL over MongoDB?", the context is completely lost.
DecisionOps solves this by turning Slack into an ambient system of record.
DecisionOps runs in the background (ambiently) and monitors channels for the 🤝 (handshake) emoji.
- Trigger: A team member reacts with 🤝 on a message that represents a finalized decision.
- Analysis: The agent reads the context of the thread and uses Claude/Gemini to extract the core decision, the rationale, and the participants.
- Broadcast: The structured decision is instantly broadcasted to a dedicated
#decisionschannel (or multiple channels) as an immutable record.
- Ambient Polling (RTS): Uses Slack's Real-Time Search API via
assistant.search.contextto find decision-language messages without ingesting every message in the workspace. - Dynamic AI Router: Supports Bring Your Own Key (BYOK) for Anthropic, Google Gemini, OpenAI, and OpenRouter. If an API rate-limits, it gracefully falls back.
- Multi-Channel Broadcast: App Home configuration allows admins to route decisions to specific channels.
| Layer | Technology |
|---|---|
| Framework | @slack/bolt v4 |
| Language | TypeScript |
| Runtime | Node.js |
| AI | Gemini 2.0 / Claude 3.5 Sonnet / OpenAI |
| Search | Slack Real-Time Search API (assistant.search.context) |
| State | Vercel KV / Redis |
- Node.js 20+
- A Slack workspace
- A Vercel KV / Redis instance (for user BYOK state)
# Clone the repository
cd decisionops
npm install
# Configure environment
cp .env.example .env
# Edit .env with your SLACK_BOT_TOKEN and REDIS_URL
# Create or update your Slack app
# Use slack.json as your app manifest in api.slack.com
# Start the agent
npm run dev- Open the App Home tab in Slack.
- Configure your API Keys (BYOK).
- Select which channels should receive the Decision broadcasts.
- Drop a 🤝 on a message to test it!
DecisionOps is an ambient monitor, not a listener. It does not store a copy of workspace history. It uses Slack's permissioned Real-Time Search API for narrow decision-language queries, then stores only confirmed decision records and workspace configuration.
DecisionOps supports Vercel Hobby with an authenticated external ambient-monitor schedule. See docs/VERCEL_FREE_DEPLOYMENT.md.
Built for the Slack Agent Builder Challenge