A Slack bot that DMs each user their previous standup reply when a new standup thread appears. Runs locally via Socket Mode — no cloud hosting needed.
- Create a new Slack app at https://api.slack.com/apps
- Enable Socket Mode under Settings and generate an App-Level Token with the
connections:writescope - Add the following Bot Token Scopes under OAuth & Permissions:
channels:history— read messages in public channelsgroups:history— read messages in private channelschat:write— send messages as the botim:write— send direct messagesim:history— read DM messages (for subscribe/unsubscribe commands)
- Subscribe to these events under Event Subscriptions:
message.channelsmessage.groupsmessage.im
- Install the app to your workspace
- Invite the bot to the standup channel
curl -fsSL https://raw.githubusercontent.com/j4rs/standup-echo/main/install.sh | sudo bashInstalls Go and Git if needed, builds the binary to /usr/local/bin, and creates a systemd service.
brew tap j4rs/tools
brew install standup-echogit clone https://github.com/j4rs/standup-echo.git
cd standup-echo
make buildstandup-echo configureYou'll be prompted for:
- Slack Bot Token (
xoxb-...) — from OAuth & Permissions - Slack App Token (
xapp-...) — the App-Level Token withconnections:write - Channel ID — right-click the channel in Slack > Copy link > extract the ID
- Thread Identifier — text that appears in every standup post (e.g. "Daily Standup")
Config is saved to ~/.config/standup-echo/config.yml.
standup-echo servebrew services start standup-echoThe bot starts on login and watches for new standup threads. When one appears, it finds the previous thread, collects each user's reply, and DMs subscribed users their update as a ready-to-edit template.
The bot is opt-in only. Each user must DM the bot to subscribe:
- Send
subscribeto start receiving standup reminders - Send
unsubscribeto stop
Subscriber data is stored locally at ~/.config/standup-echo/standup-echo.db.
| Command | Description |
|---|---|
standup-echo serve |
Start the bot daemon |
standup-echo configure |
Interactive configuration setup |
standup-echo version |
Print version information |