Distribution · Slack app
Determine in Slack.
Prove it outside Slack.
When an agent proposes something that cannot be undone, Interlok holds it and posts a card into your channel: tier, target, fingerprint, expiry. A named human determines it. The determination is signed and chained in the Interlok ledger — Slack is the interface, never the record.
Create the app from the manifest
Slack → Your Apps → Create New App → From an app manifest. Paste the manifest served by this deployment; every URL is already correct.
Install into the workspace
Open Interlok → Slack in the console and press Install. The install link carries a signed, 10-minute state so the callback can trust which org is installing without a session.
Pick the determination channel
Choose where held-action cards are posted. The choice itself is recorded in the ledger — the channel a determination was made in is part of the evidence.
Link each approver
Every human who determines links their Slack member ID to their Interlok identity. An unlinked tap cannot determine: an agent may never approve an agent.
Scopes, and why each one exists
| chat:write | Post the determination card into the approval channel and update it once determined. |
| commands | Serve /interlok so an approver can pull the held queue without leaving Slack. |
| users:read | Resolve the tapping member to a linked Interlok approver — a determination must be attributable. |
| im:write | DM the requesting human when their action is held, approved or refused. |
No history scopes, no file scopes, no user token. Interlok reads nothing in your workspace; it posts, updates, and resolves the identity of the person who tapped.
Review checklist
What a Slack reviewer — or your own security team — should be able to confirm before this app is allowed near a production agent.
- 01Manifest served from the deployment
GET /api/public/v1/slack/manifest returns the manifest with this deployment's URLs already filled in.
- 02Request signing verified
Every interaction and slash command verifies the Slack signature over the raw body within a 5-minute window before it is processed.
- 03Install state is signed
The OAuth callback trusts nothing from the browser: org and installer travel in an HMAC-signed, 10-minute state.
- 04Agent-may-never-approve-an-agent holds in Slack
A tap resolves to a linked human Interlok member; unlinked or bot identities cannot determine.
- 05T3 requires two distinct humans
Tier 3 cards collect two separate signatures; the same Slack member cannot satisfy both.
- 06Least data in Slack
Cards carry the action fingerprint, tier and target reference — never the action payload.
- 07Uninstall is clean
Disconnecting from the console revokes the stored bot token and records the revocation in the ledger.
What never enters Slack
- — Action payloads. Cards carry the tier, target reference and payload fingerprint.
- — Witness or customer signing keys. Determination signatures are produced against Interlok, not Slack.
- — Credentials of any kind. Interlok stores fingerprints, never values.