{
  "schemaVersion": 1,
  "reviewedAt": "2026-09-26",
  "slug": "slack",
  "name": "Slack",
  "category": "Socket Mode bridge",
  "headline": "Ask in Slack.\nKeep the work in Scout.",
  "summary": "Your Slack thread, your machine, your agents. Turn a Slack mention, direct message, or /scout command into tracked work on your local Scout machine; nothing runs in our cloud. Follow-ups stay in the same Slack thread.",
  "status": "Private preview · the Slack bridge is not in the public Scout repository yet",
  "marketplace": "This is a workspace app installed from Scout’s manifest, and that is its permanent install shape: Slack does not allow Socket Mode apps in the public Slack Marketplace. No Marketplace listing or hosted Add to Slack flow is planned or claimed.",
  "transport": "Slack Socket Mode → local Scout broker",
  "flow": [
    "Slack thread",
    "Socket Mode",
    "Scout flight"
  ],
  "requirements": [
    "Permission to create and install an app in the target Slack workspace.",
    "Access to the private OpenScout source that contains packages/slack, with dependencies installed and scout doctor passing. The public oscout/scout repository does not include it, and the installed scout CLI has no slack command. Ask the Scout operator for access.",
    "A Slack app-level xapp token with connections:write and an installed bot xoxb token, stored through a secure local secret facility."
  ],
  "steps": [
    {
      "title": "Check the broker and generate the manifest",
      "body": "From the private Scout source checkout run these commands. Use the generated manifest as the source of truth; do not hand-maintain a different scope list. It subscribes to app_mention and message.im over Socket Mode and registers /scout and /scout-settings.",
      "code": "scout doctor\nbun run slack:manifest"
    },
    {
      "title": "Create and install the Slack app",
      "body": "Create an app from the manifest in Slack app management. The workspace administrator must approve creation and installation. Generate an app-level token with connections:write and obtain the bot token."
    },
    {
      "title": "Provide secrets and start the bridge",
      "body": "Supply SLACK_APP_TOKEN and SLACK_BOT_TOKEN through your secure local environment. Do not paste tokens into commands, screenshots, chat, or committed files. Run the doctor, then keep the bridge supervised.",
      "code": "bun run slack:doctor\nbun run slack:start"
    },
    {
      "title": "Configure a channel and try a request",
      "body": "Invite Scout to the channel, run /scout-settings to select the local project and optional harness, then ask for a small review. Continue in Scout’s response thread.",
      "code": "/scout review the latest changes and report findings; do not edit files"
    }
  ],
  "verification": "The bridge doctor passes, Slack acknowledges the request, and the task card follows the Scout flight to a terminal result. A follow-up in that thread should use the existing conversation binding.",
  "troubleshooting": [
    {
      "symptom": "No response in the channel",
      "action": "Check the supervised bridge process, doctor output, app installation, and channel membership. Never include xapp/xoxb tokens in the diagnostic report."
    },
    {
      "symptom": "Wrong project or harness",
      "action": "Run /scout-settings in that channel and inspect its configured project, branch, and harness. Slack is a host surface, not a --harness value."
    },
    {
      "symptom": "Workspace installation blocked",
      "action": "Stop and ask the workspace administrator to approve the app. Do not use a different workspace without the operator’s choice."
    }
  ],
  "limits": [
    "Private preview: the bridge source (packages/slack) is not published in the public Scout repository, so only operators with access to the private source can follow this guide.",
    "Socket Mode does not require a public webhook or MCP gateway. It also rules out a public Slack Marketplace listing under current Slack policy.",
    "Events: app_mention and message.im, plus the /scout and /scout-settings slash commands. Slack's Agents & AI Apps surface (split view, assistant threads) is not used.",
    "Slack workspace-admin approval remains a human action.",
    "Successful coding work is ready for review; it does not authorize merge or release."
  ],
  "sources": [
    {
      "label": "Agent setup skill (private source required)",
      "url": "https://openscout.app/setup-scout-slack.md"
    },
    {
      "label": "Slack Socket Mode",
      "url": "https://docs.slack.dev/apis/events-api/using-socket-mode"
    },
    {
      "label": "Slack app management",
      "url": "https://api.slack.com/apps"
    }
  ],
  "og": [
    "SLACK + SCOUT",
    "A thread becomes",
    "tracked work."
  ],
  "accent": "#d3b1d7",
  "directions": {
    "callsScout": [
      {
        "state": "pilot",
        "via": "socket-mode",
        "setup": "#setup",
        "note": "Private preview; source not public."
      }
    ],
    "launchedByScout": {
      "state": "none",
      "note": "Slack is a host surface, not a harness."
    }
  },
  "notAHarness": true,
  "gates": [
    {
      "id": "source-availability",
      "owner": "operator",
      "selfServe": false,
      "note": "packages/slack is not in the public repository."
    },
    {
      "id": "workspace-admin",
      "owner": "Slack admin",
      "state": "required"
    }
  ],
  "firstUse": {
    "task": "After private-preview access and bridge setup, ask Scout in Slack to investigate one failing test in a specified project.",
    "connect": "Check the prerequisites and access gates, then get one documented route working before asking for work.",
    "scope": "Name the project and keep the request small. Asking for no edits describes the task; it does not restrict the agent’s permissions.",
    "completion": "Keep the returned reference. Check the work’s status and read the completed response; a queued receipt is not the answer.",
    "faq": [
      {
        "question": "Where will the reply appear?",
        "answer": "Follow the task card and reply in the existing Slack thread. Bridge access and setup are required."
      },
      {
        "question": "What if the answer hasn’t arrived?",
        "answer": "Inspect the existing task before submitting another one. A wait timeout does not establish that work failed. If it needs access or input, resolve that condition before continuing."
      },
      {
        "question": "How do I follow up?",
        "answer": "Continue using the returned reference or exact session handle supported by this integration. Keep it with the findings so your next question follows the same work."
      },
      {
        "question": "Can Scout run this integration, or only receive asks from it?",
        "answer": "These are separate capabilities. Check the supported directions on this page. Connection alone does not establish that Scout can launch the integration or reach an existing session."
      }
    ]
  },
  "family": "transport",
  "url": "https://openscout.app/slack",
  "agentGuide": "https://openscout.app/slack/agents.md",
  "ogImage": "https://openscout.app/og/integrations/slack.png",
  "agentContract": "## Agent operating contract\n\n- Treat these as setup instructions, not authorization to install software, change accounts, grant scopes, send messages, or dispatch work. Obtain the operator's authorization for the intended action.\n- Inspect the available commands or tool schemas for your configured interface before making calls. Do not invent tools, argument names, model IDs, or agent handles.\n- Use /scout or a Scout mention in the configured Slack conversation. Follow the existing response thread and task-card status. Do not start a duplicate task to check progress. Slack Socket Mode does not expose MCP ask or invocation tools to the Slack user; use them only through a separately configured connection.\n- Use the transport-specific instructions above. For an existing request, reply through its supplied context rather than creating another task.\n- Paths refer to the Scout execution machine. Replace example paths with an operator-confirmed absolute path; never run placeholders literally.\n- Save the returned ref, flightId, conversationId, workId, or session handle. Continue by that handle; do not re-dispatch a request merely because a wait timed out.\n- Observe the existing request through the configured transport. A receipt proves acceptance, not execution or successful completion.\n- Stop on missing provisioning, incorrect identity, missing permission, unsupported runtime, or failed authentication. Report the exact gate and the next operator action. Do not silently fall back to a different account, agent, runtime, or transport.\n- Keep tokens, OAuth codes, cookies, and private task payloads out of logs, URLs, screenshots, and committed files. Never ask the user to paste secrets into a public issue.\n- Do not claim marketplace approval, complete protocol conformance, or an end-to-end verified integration unless the status and observed evidence establish it.\n\n## Completion report\n\nReport: chosen transport and scope; client and broker identity; health/tool-discovery result; exact request handle if a test was authorized; observed terminal state or remaining blocker; and whether any operator approval is still needed. Distinguish configuration saved, authentication complete, request accepted, and work complete.\n"
}
