Team health pulse checks, not surveillance.
Slack-native HR wellbeing agent for the Slack Agent for Good hackathon.
| Bot | @Pulse |
| Slash command | /pulse |
| Sandbox | pulse-sandbox1 |
| Track | Slack Agent for Good |
Workspace: pulse-sandbox1 — invites: slackhack@salesforce.com, testing@devpost.com
- DM
**@Pulse**:How is Engineering doing this week? - Expect a Block Kit card — Engineering, Watch, score ~4.8, signal drivers.
- Open
**#people-ops** → run/pulse check-alertsif no alerts visible. - Click Acknowledge on an alert card → thread confirmation.
- Team-level wellbeing signals (not per-employee rankings)
- MCP tools backed by Neon PostgreSQL (snapshots + alerts)
- Real-Time Search for optional live refresh from
#engineering/#design(metadata only) - Proactive alerts to
#people-opswhen teams cross thresholds
| Channel | Purpose |
|---|---|
#people-ops |
Proactive HR alerts |
#engineering |
Engineering team / RTS opted-in |
#design |
Design team / RTS opted-in |
Note: Team scores in the demo use seeded snapshots in Neon for reliability. RTS may update Engineering/Design when live channel data is returned. No Slack message text is stored in the database.
- Slack Agent (Bolt + OpenAI Agents SDK) —
pulse-agent/ - Pulse MCP server —
mcp/ - Neon PostgreSQL + Drizzle —
lib/db/ - Team scoring —
lib/scoring/ - RTS + proactive worker —
lib/rts/,lib/worker/
cp .env.example .env
npm install
npm run db:push
npm run db:seed # demo team snapshots only — no messages
# Terminal 1 (optional — LLM/MCP path)
npm run mcp:start
# Terminal 2
cd pulse-agent && npm install && slack run| Tool | Use |
|---|---|
get_team_summary(team) |
Team health snapshot |
get_open_alerts() |
Open HR alerts |
acknowledge_alert(alert_id, actor_slack_id) |
Acknowledge alert |
record_signal_snapshot |
Store aggregates after RTS pass |
| Command | Description |
|---|---|
/pulse health |
Workspace team summary |
/pulse check-alerts |
Threshold check + post to #people-ops |
/pulse help |
Intro card |
npm run mcp:test
npm run scoring:demo # offline metadata scoring
npm run worker:check # alert threshold check
npm run worker:start # cron HTTP server (port 3200)- Aggregate team scores in
signal_snapshotsonly - No
messagesor message text tables - RTS processes metadata in memory; optional small OpenRouter sample not persisted
- No employee leaderboard
MIT (see pulse-agent/package.json)
