Inspiration

Important work often fails for a simple reason: someone makes a promise in Slack, the conversation moves on, ownership stays unclear, and the commitment is remembered only after the deadline slips.

Traditional task tools require people to leave the conversation and rebuild the context manually. Fully automatic monitoring creates another problem: surveillance, false assignments, and a loss of trust.

PromiseKeeper takes a different approach: accountability with consent.

What it does

PromiseKeeper turns deliberately selected Slack messages into structured, traceable commitments.

A user can:

  • Select Track as commitment from a Slack message
  • Review the extracted commitment before saving it
  • Choose the owner, deadline, priority, stakeholder, and blocker
  • Preserve a link to the original source message
  • Require another person to accept ownership before the commitment becomes active

PromiseKeeper then provides:

  • A Slack-native commitment dashboard
  • Explainable delivery-risk scores
  • Critical, at-risk, and healthy rankings
  • Human-triggered owner nudges
  • Snoozing and completion controls
  • Clarification requests when ownership or details are uncertain
  • A conversational risk radar through the Messages tab

Users can ask questions such as:

What is slipping?

PromiseKeeper responds with open commitments ranked by risk and clearly explains why each item is considered risky.

How we built it

PromiseKeeper is built with Node.js and Bolt for JavaScript.

It uses Slack-native capabilities including:

  • Slack Agents and agent_view
  • App Home
  • Block Kit
  • Message shortcuts
  • Interactive modals and buttons
  • Direct messages
  • Socket Mode
  • Bot and app-level OAuth tokens

The application includes a deterministic extraction and risk-scoring system so the core workflow remains reliable even without an external model key. Optional AI extraction can enhance natural-language understanding without becoming a single point of failure.

PromiseKeeper is deployed as a continuously running Socket Mode worker on Railway. Commitments are stored on a persistent Railway volume so the app remains available independently of the developer’s computer.

The project currently passes 29 automated tests covering extraction, storage, privacy controls, deployment configuration, environment-token safety, interactive workflows, and graceful shutdown behavior.

Challenges we ran into

The hardest challenge was not extracting a task from a sentence. It was designing an agent people could trust.

An early workflow could allow one person to assign a commitment to someone else without that person agreeing. We changed the product so the selected owner must explicitly accept the commitment before it becomes active.

We also designed PromiseKeeper to avoid silently scanning every workspace conversation. Users deliberately choose which messages become commitments.

During cloud deployment, we also encountered:

  • Railway configuration validation issues
  • Persistent-volume requirements
  • Hidden whitespace in a stored Slack token
  • The risk of duplicate Slack event consumers during deployment

We added strict environment validation, safe token normalization, graceful shutdown handling, single-worker deployment rules, and additional regression tests.

Accomplishments that we're proud of

  • Built a complete commitment lifecycle entirely inside Slack
  • Added owner acceptance instead of silent assignment
  • Preserved source-message provenance
  • Created explainable risk scores instead of opaque labels
  • Avoided background conversation surveillance
  • Deployed a live cloud worker with persistent storage
  • Completed successful two-user testing
  • Reached 29 passing automated tests
  • Designed the app to remain useful even when optional AI services are unavailable

What we learned

The most useful workplace agent is not necessarily the one that acts most often.

It is the one that knows when to ask for confirmation, when to explain its reasoning, and when to leave control with the people involved.

For accountability software, trust is not an extra feature. It is part of the core architecture.

What's next

Future versions could add:

  • Permission-aware Slack Real-Time Search for fresh supporting context
  • Calendar and CRM integrations through MCP
  • Privacy-preserving team delivery analytics
  • Enterprise retention and audit controls
  • Configurable risk policies for different teams
  • More advanced AI extraction with confidence-based human review

PromiseKeeper’s goal is simple:

Turn conversational promises into accepted, source-linked commitments before they become apologies.

Built With

  • agent-builder
  • agents
  • ai
  • api
  • app
  • block
  • bolt
  • codex
  • home
  • kit
  • mode
  • node.js
  • openai
  • railway
  • slack
  • slack-ai
  • socket
  • vitest
Share this project:

Updates