Docs

Slack app

Capture and update tasks from Slack with /done or @done. Each Slack user links their own Done account, so everything you add is scoped to your tasks alone.

What you can do

/done buy milk tomorrow urgent #errands
Create a task — natural-language dates, priority, ~estimate, and #project all parse out of the line, exactly like Quick add in the app.
/done done review the PR
Mark the top open task whose title matches “review the PR” as done.
/done update groceries :: friday, low priority
Apply the due-date/priority cues after :: to the matching task and post the text as a comment on it.
/done list
Show your five most salient open tasks.
/done connect
Link this Slack account to your Done account (one-time).
/done disconnect
Unlink this Slack account. Your tasks stay; only the Slack connection goes.
/done help
Show the command reference.

@done … in a channel the bot is in works the same as /done ….

Add Done to your workspace

One person installs the app for the whole workspace. It takes a click and needs no configuration — you don't create a Slack app, and you never touch a secret.

Add to Slack

Installing grants Done three bot scopes — commands, chat:write and app_mentions:read — and nothing else. Installing on its own connects nobody's tasks: each person still links their own account below, so an admin cannot wire the workspace into someone else's Done data.

Connect your account

  1. In Slack, run /done connect.
  2. Open the link it replies with and sign in to Done if you aren't already.
  3. Approve on Slack's own consent screen. Done asks for a single scope, identity.basic, which only tells us which Slack user you are.
  4. That's it — /done now manages your account's tasks. Run /done disconnect anytime to unlink.

Both halves of the connection are proven, never asserted by a URL: your Done account comes from the session in your browser, and your Slack identity comes from Slack's own token exchange. The link /done connect gives you is the same for everyone and says nothing about who is connecting — so forwarding it to someone else does nothing on your behalf, it just starts their connection to their own account.

Set it up (workspace admin)

Only needed if you self-host Done. On trydone.app the app is already published — use the Add to Slack button above instead. Self-hosting means creating your own Slack app pointed at your instance and setting four secrets; until they're set, the /slack/* routes stay dormant and reply “not configured”.

  1. At api.slack.com/apps, create an app for your workspace.
  2. Slash Commands → add /done with the request URL https://trydone.app/slack/commands, and add the commands bot scope — Slack refuses to save an app that declares a slash command without it.
  3. Interactivity & Shortcuts → toggle on, request URL https://trydone.app/slack/interactivity. Approval alerts DM you with Approve / Request changes buttons; without this URL Slack has nowhere to deliver the press, so the buttons render but do nothing.
  4. Event Subscriptions (optional, for @done) → request URL https://trydone.app/slack/events, subscribe to the app_mention bot event, and add both the chat:write and app_mentions:read scopes — subscribing to app_mention requires the latter.
  5. OAuth & Permissions → add the redirect URL https://trydone.app/slack/oauth/callback and the identity.basic user token scope. Account linking is an OAuth round trip; without these, /done connect has nowhere to send people.
  6. Install the app to the workspace, then set the secrets on the Worker:
wrangler secret put SLACK_SIGNING_SECRET   # from Basic Information → App Credentials
wrangler secret put SLACK_CLIENT_ID        # Basic Information → App Credentials → Client ID
wrangler secret put SLACK_CLIENT_SECRET    # …→ Client Secret (needed for /done connect)

Set SLACK_SIGNING_SECRET before you add the Event Subscriptions URL. Slack verifies that URL by posting a url_verification challenge to it, and /slack/events checks the request signature before it answers the challenge — so while the secret is unset the endpoint replies “not configured” and Slack rejects the URL. No other step has that constraint — Event Subscriptions is the only one Slack verifies on save.

Smoke test: /done connect → approve on Slack → /done buy milk tomorrow urgent #errands /done list. Then have an agent park a proposal and press Approve on the DM — that last step is the only one that proves Interactivity is wired.

Notes

  • Every Slack request is verified with Slack's signing-secret signature; stale (replayed) requests are rejected.
  • All work is scoped to the linked user's own account — the same isolation the app and MCP endpoint enforce.
  • Tasks created from Slack are ordinary tasks: assign them to an AI agent, set dependencies, or work them in the app.