Slack is the most full-featured messaging channel. Every DM thread is an isolated session with streaming replies, interactive Block Kit approval buttons, file/image/voice handling, and bidirectional sync with the dashboard.
Slack connects outbound via Socket Mode — no public URL, no inbound webhooks. It works from any machine that can reach slack.com.
connections:write → Generate), install to workspace, copy the Bot TokenThe dashboard validates tokens immediately and shows a green status badge when connected.
kirocrew manifest --url # opens Slack's "Create New App" page with scopes pre-filled kirocrew setup # prompts for App Token, Bot Token, and Member ID kirocrew doctor # verify kirocrew restart
Or write tokens directly to ~/.kiro/crew/.env:
SLACK_APP_TOKEN=xapp-… SLACK_BOT_TOKEN=xoxb-… KIROCREW_OWNER_ID=U0…
The Slack gateway is locked to KIROCREW_OWNER_ID. Only your Slack Member ID can interact with the bot. Non-owner messages are silently dropped.
When a tool call needs approval, Block Kit buttons appear inline:
| Command | Purpose |
|---|---|
/kirocrew dashboard [duration] | Presigned dashboard link (default 1h, max 6h) |
/kirocrew yolo | Toggle auto-approve |
/kirocrew agent [name] | Show/switch active agent |
/kirocrew channels | Channel management modal |
/kirocrew sessions | List sessions with resume buttons |
/kirocrew help | List all sub-commands |
The command name is configurable via slack.command (default: kirocrew).
| Command | Purpose |
|---|---|
!dashboard [duration] | Presigned dashboard link |
!yolo on|off | Toggle auto-approve |
!agent <name>|off | Switch/clear agent |
!ta <agent>|off | Thread-only agent override |
!stop | Interrupt current turn |
!compact | Compact session context |
| Command | Purpose |
|---|---|
status | Runtime stats |
spawn <task> / bg <task> | Subagent (blocking / fire-and-forget) |
spawn list | List subagents |
cron list / cron remove <id> | Manage crons |
sessions | List recent sessions |
run <path> | Run a task spec |
Beyond DMs, Crew can join group channels in three modes:
| Mode | Behavior |
|---|---|
mention | Respond only when @-mentioned; 50-msg rolling context (5-min TTL, in-memory) |
observe | Silent unless @-mentioned; 200-msg context (1-week TTL, disk-persisted) |
off | Ignore the channel |
Only messages from authorized users are recorded in observe mode.
The dashboard's 💬 button links a chat session to a Slack thread:
sessions command lists recent sessions with ▶️ Resume buttonsPhase-aware emoji reactions: queued → thinking → coding → done. Customize:
{ "slack": { "reactions": { "done": "sparkle", "thinking": "brain" }, "reactions_enabled": true } }
Set a phase to null to suppress it. Set reactions_enabled: false to disable all.
file_send tool callBlock Kit view with live system status, cron jobs, active sessions, and recent lessons.
Credentials in ~/.kiro/crew/.env:
SLACK_APP_TOKEN=xapp-… SLACK_BOT_TOKEN=xoxb-… KIROCREW_OWNER_ID=U0…
Settings in config.json:
| Key | Default | Purpose |
|---|---|---|
slack.command | "kirocrew" | Slash command name |
slack.reactions_enabled | true | Phase emoji reactions |
slack.reactions | (defaults) | Per-phase overrides |
slack.allowed_enterprise_ids | [] | Enterprise Grid allowlist (empty = all) |
| Problem | Fix |
|---|---|
| Install App button greyed out | Use Features → OAuth & Permissions → Install to Workspace |
| No events received | Verify Socket Mode ON, events subscribed, Home Tab enabled, reinstall |
missing_scope error | Add scope, reinstall, re-run kirocrew setup |
| Bot doesn't respond | Check kirocrew doctor; confirm gateway running |
| Dashboard shows 403 | Token expired — !dashboard for a fresh link |
Slack