Inspiration## Inspiration

During emergencies — a fire, a medical emergency, a security breach — the first few minutes matter most. But in most workplaces and campuses, incident reporting still happens through scattered chat messages, phone calls, or forms nobody checks in time. Nobody can tell if a report has even been seen, let alone acted on. We built CrisisLoop to fix that gap using a tool teams already live in every day: Slack.

What it does

CrisisLoop turns Slack into a live incident coordination system:

  • One-click reporting— a Report Incident button on the Home tab opens a simple form (category, location, description, optional danger flag)
  • AI severity classification — the moment a report is submitted, CrisisLoop analyzes the description and automatically classifies it as CRITICAL, HIGH, MEDIUM, or LOW — even inferring life-threatening danger from the description alone if the reporter doesn't explicitly flag it
  • Instant routing — a formatted incident card, including the AI's reasoning, posts immediately to a dedicated response channel
  • Acknowledge tracking — responders click Acknowledge, and the message updates live so everyone can see who's handling it and when
  • Automatic escalation — if nobody acknowledges an incident in time, CrisisLoop automatically escalates it, so nothing gets silently missed
  • Live dashboard — the Home tab doubles as a real-time incident dashboard, showing open incidents and daily stats (reports, resolved, pending, critical)

Impact

CrisisLoop is built for the Slack Agent for Good track because faster, more reliable incident response has a direct, measurable social benefit — in workplaces, schools, and campuses, reducing the time between "something happened" and "someone responded" can meaningfully reduce harm. Automatic escalation in particular targets a real, common failure mode: incidents that are seen but never followed up on.

How we built it

CrisisLoop is built on Slack's Bolt framework for Python, running over Socket Mode. Key components:

  • Block Kit modal for structured incident intake
  • A rule-based AI severity classifier that analyzes free-text descriptions against medical, fire, security, and routine-maintenance keyword categories, inferring danger level even when not explicitly stated
  • An in-memory incident store tracking status (pending, acknowledged, escalated) that powers both the response channel and the live Home tab dashboard
  • A background escalation timer that checks whether an incident was acknowledged within a set window, and automatically escalates if not
  • Deployed independently via Railway so the app runs continuously, not tied to a local machine

Challenges we ran into

  • Getting incident classification to correctly distinguish between genuine emergencies (e.g. "heart attack," "trapped in fire") and routine reports (e.g. "server maintenance") required iterating on the keyword logic multiple times based on real test cases
  • Debugging Slack's enterprise/org-level workspace quirks — including channel ID resolution issues that caused silent posting failures
  • Getting environment variable loading order right so the app could run standalone (outside the Slack CLI) for deployment

What we learned

Building CrisisLoop reinforced how much thoughtful UX matters even in a "simple" tool — small choices, like making the danger-flag optional and letting AI infer it, made the reporting flow noticeably faster and less error-prone under time pressure, which is exactly what matters in a real incident.

What's next for CrisisLoop

  • Replace the rule-based classifier with a proper LLM-based classifier for more nuanced severity detection
  • Persistent storage (database-backed) instead of in-memory state, so incident history survives restarts
  • Configurable escalation chains and response teams per incident category
  • Multi-channel routing based on category (e.g. security incidents to a security-specific channel)

Built With

  • ai
  • block-kit
  • groq
  • llm
  • python
  • railway
  • slack-api
  • slack-bolt
  • socket-mode
Share this project:

Updates