Slack lets you communicate with your agents directly — assign work, ask for status updates, or get notified about progress. Each agent gets its own Slack app so messages show up under the agent’s name.
What You Need
Each agent needs two tokens:
Bot Token (xoxb-...) — lets the agent read and send messages
App Token (xapp-...) — enables Socket Mode for real-time communication
Slack integration is optional. Without it, agents can still work through Linear and GitHub but won’t be able to communicate with you in real time.
Step 1: Create a Slack App
Repeat this for each agent (Juno, Titus, Scout).
Go to api.slack.com/apps
Click “Create New App” > “From a manifest”
Select your workspace
Paste the manifest for the agent you’re setting up (expand below)
The agent-army init wizard copies the correct manifest to your clipboard automatically when you reach the Slack setup step.
Slack App Manifests
{
"display_information" : {
"name" : "Juno (PM)" ,
"description" : "Agent Army — Product Manager agent"
},
"features" : {
"bot_user" : {
"display_name" : "Juno" ,
"always_online" : true
}
},
"oauth_config" : {
"scopes" : {
"bot" : [
"chat:write" ,
"channels:history" ,
"channels:read" ,
"groups:history" ,
"groups:read" ,
"groups:write" ,
"im:history" ,
"im:read" ,
"im:write" ,
"mpim:history" ,
"mpim:read" ,
"mpim:write" ,
"users:read" ,
"app_mentions:read" ,
"reactions:read" ,
"reactions:write" ,
"pins:read" ,
"pins:write" ,
"emoji:read" ,
"commands" ,
"files:read" ,
"files:write"
]
}
},
"settings" : {
"event_subscriptions" : {
"bot_events" : [
"app_mention" ,
"message.channels" ,
"message.groups" ,
"message.im" ,
"message.mpim" ,
"reaction_added" ,
"reaction_removed" ,
"member_joined_channel" ,
"member_left_channel" ,
"channel_rename" ,
"pin_added" ,
"pin_removed"
]
},
"socket_mode_enabled" : true
}
}
{
"display_information" : {
"name" : "Titus (Engineer)" ,
"description" : "Agent Army — Engineer agent"
},
"features" : {
"bot_user" : {
"display_name" : "Titus" ,
"always_online" : true
}
},
"oauth_config" : {
"scopes" : {
"bot" : [
"chat:write" ,
"channels:history" ,
"channels:read" ,
"groups:history" ,
"groups:read" ,
"groups:write" ,
"im:history" ,
"im:read" ,
"im:write" ,
"mpim:history" ,
"mpim:read" ,
"mpim:write" ,
"users:read" ,
"app_mentions:read" ,
"reactions:read" ,
"reactions:write" ,
"pins:read" ,
"pins:write" ,
"emoji:read" ,
"commands" ,
"files:read" ,
"files:write"
]
}
},
"settings" : {
"event_subscriptions" : {
"bot_events" : [
"app_mention" ,
"message.channels" ,
"message.groups" ,
"message.im" ,
"message.mpim" ,
"reaction_added" ,
"reaction_removed" ,
"member_joined_channel" ,
"member_left_channel" ,
"channel_rename" ,
"pin_added" ,
"pin_removed"
]
},
"socket_mode_enabled" : true
}
}
{
"display_information" : {
"name" : "Scout (QA)" ,
"description" : "Agent Army — QA Tester agent"
},
"features" : {
"bot_user" : {
"display_name" : "Scout" ,
"always_online" : true
}
},
"oauth_config" : {
"scopes" : {
"bot" : [
"chat:write" ,
"channels:history" ,
"channels:read" ,
"groups:history" ,
"groups:read" ,
"groups:write" ,
"im:history" ,
"im:read" ,
"im:write" ,
"mpim:history" ,
"mpim:read" ,
"mpim:write" ,
"users:read" ,
"app_mentions:read" ,
"reactions:read" ,
"reactions:write" ,
"pins:read" ,
"pins:write" ,
"emoji:read" ,
"commands" ,
"files:read" ,
"files:write"
]
}
},
"settings" : {
"event_subscriptions" : {
"bot_events" : [
"app_mention" ,
"message.channels" ,
"message.groups" ,
"message.im" ,
"message.mpim" ,
"reaction_added" ,
"reaction_removed" ,
"member_joined_channel" ,
"member_left_channel" ,
"channel_rename" ,
"pin_added" ,
"pin_removed"
]
},
"socket_mode_enabled" : true
}
}
Click “Create”
Step 2: Get the Bot Token
In your new app’s settings, go to OAuth & Permissions
Click “Install to Workspace” and approve
Copy the Bot User OAuth Token — it starts with xoxb-
Step 3: Get the App Token
Go to Basic Information > App-Level Tokens
Click “Generate Token and Scopes”
Name it (e.g., socket-mode)
Add the scope: connections:write
Click “Generate”
Copy the token — it starts with xapp-
Step 4: Provide Tokens During Init
The agent-army init wizard prompts for both tokens per agent:
? Slack Bot Token for Juno (pm) xoxb-XXXXXXXXXXXX
? Slack App Token for Juno (pm) xapp-XXXXXXXXXXXX
Tokens are stored encrypted in Pulumi config as secrets (e.g., pmSlackBotToken, pmSlackAppToken).
How Agents Use Slack
Agents connect to Slack via Socket Mode — no public URLs or webhook endpoints needed. They can:
Respond to DMs and mentions
Post updates to channels
React to messages
Read channel history for context
By Role
Agent How They Use Slack Juno (PM)Reports progress, shares ticket breakdowns, responds to questions about priorities and status Titus (Engineer)Shares PR links, asks for clarification on requirements, reports blockers Scout (QA)Reports test results, shares bug details, confirms fixes
Juno treats Slack as the primary communication channel. If you want to give instructions or check on progress, message Juno directly.