I just released Fish Stick, a stateless incident management bot for Slack. I’ve built this bot six+ times at different jobs, so figured it was time to stop recreating it and share it with the world.
The pitch: Most incident management tools are either too simple (basic Slack workflows) or too complex (enterprise platforms with a million knobs). Fish Stick sits in the middle—more powerful than workflows, simpler than enterprise tools.
Key features:
- Random channel names (
incident_furious_chicken,incident_brave_penguin) - Timeline logging with timestamps
- Threaded team updates to stakeholders
- Incident commander tracking and handoffs
- Auto-generated timeline reports from channel history
- Private incident support
- Test mode for game days
The interesting part: it’s completely stateless. No database. No web interface. No OAuth flow. For this use case and this niche, Slack as DB is good enough.
All incident data lives in Slack:
- Incident metadata → channel properties and pinned messages
- Timeline → messages in the incident channel
- Summary → pinned message
You can restart the bot anytime without losing anything. This keeps deployment dead simple.
Built it in TypeScript with the Slack Bolt framework. Supports Socket Mode for local dev (no public URL needed) and HTTP mode for production. Takes about 5 minutes to set up if you use the app manifest.
I’ve pared down the features quite a bit from what I have in other versions of the bot to keep things simple, but will be adding back some things like webhooks over time.
It’s MIT licensed. If you run incidents in Slack and want something between “too basic” and “too much,” check it out: github.com/chrisdodds/fishstick