Playbook: Build an Ops Channel Concierge in Slack
Your operations team has a Slack channel — call it #ops-help — that everyone in the company posts to when they need something. "Where is order 48201?" "Did the carrier confirm yesterday's pickup?" "What's the credit limit on Acme Co?" "Is part A-7321 in stock at the Reno warehouse?"
Most of the answers are sitting in your warehouse management system, your ERP, or your CRM. None of the askers have access to those systems, and they shouldn't — but it means every question pulls somebody on the ops team away from real work to look something up. The day fills with twenty interruptions of two minutes each, plus the cost of context-switching back to whatever they were doing.
This playbook walks you through building a subagent that lives in #ops-help, knows your internal systems, answers the routine lookups itself, and escalates only what actually requires a human.
What you will build
By the end of this playbook, you will have:
- A subagent called Ops Concierge with a tight job description scoped to the kinds of questions your team gets.
- Custom tools that read from your WMS, your ERP, and your CRM — read-only, no write access.
- A channel mapping that routes every message in
#ops-helpto the agent. - A guardrail in the system prompt that recognizes when something is outside its scope and tags a human.
- A simple feedback loop: people react to the agent's responses, and you use those reactions to refine the prompt.
What you need before you start
- An Assist workspace with your AI client (Claude Desktop, Cursor, or another MCP-compatible client) connected via MCP.
- The Slack app installed in your workspace, and the Assist Slack bot invited to
#ops-help. - Read API access to whichever internal systems you want the agent to query. For this playbook we will assume a WMS at
https://wms.internal.company.com/api, an ERP athttps://erp.internal.company.com/api, and a CRM athttps://crm.internal.company.com/api. Substitute your real systems. - A canonical channel ID for
#ops-help. In Slack, click the channel name, scroll to the bottom of the About tab, and copy the Channel ID — it starts withC.
This playbook is written from the perspective of an ops manager working in their AI client. You do not need to log into Assist directly — almost every step happens through chat.
Step 1: List the questions the agent should handle
Before you build any tools, decide what the agent is for. Pull up Slack and look at the last two weeks of #ops-help. Group the questions into categories:
- Order status: "where is order X", "when is order X expected", "did order X ship".
- Inventory: "do we have X in stock", "what's on hand at warehouse Y".
- Account info: "what's the credit limit on customer Z", "is account Z on hold", "what's their payment terms".
- Carrier/logistics: "did pickup happen", "what's the tracking number for X".
- Out of scope: anything involving a refund, a credit memo, a contract change, a complaint.
Write this list down. It becomes the agent's job description and tells you which tools to build.
Step 2: Build the read tools
These tools live in your workspace toolbox. You build them once in /tools/new, test them on the tool edit page, and publish them. After publishing, any subagent in the workspace can add them to its whitelist. If you are new to building tools, see building a shared toolbox for your organization for the full walkthrough — it covers the secure runtime, the handler contract, and the draft/commit/publish flow.
Each blockquote below is the spec for one tool. Hand these specs to whoever on your team owns the WMS, ERP, and CRM toolbox, or build them yourself:
wms_lookup_order— takes anorder_idparameter and callsGET https://wms.internal.company.com/api/orders/{order_id}with bearer token auth (secretWMS_TOKEN). Returns the order status, line items, current location, and ship date in a clean JSON shape.
wms_inventory_check— takes askuand an optionalwarehouse_id. CallsGET https://wms.internal.company.com/api/inventory?sku={sku}and returns on-hand counts grouped by warehouse. Ifwarehouse_idis provided, filters to just that warehouse.
erp_account_lookup— takes anaccount_nameoraccount_idand returns the credit limit, current balance, payment terms, and on-hold status. Endpoint:GET https://erp.internal.company.com/api/accounts?q={query}.
crm_carrier_status— takes atracking_numberand returns the carrier name, last scan timestamp, last scan location, and current status.
Test each one on its edit page with a known-good example before publishing. Confirm the response shape matches the spec. When all four are published, you have everything the agent needs to handle the bulk of the channel's traffic.
Step 3: Create the Ops Concierge subagent
Open Assist, go to Subagents, click New Agent, and fill in:
-
Label:
Ops Concierge -
Description:
Answers operational questions in #ops-help. Handles order status, inventory, customer account info, and carrier/logistics lookups. Escalates anything involving refunds, credits, contracts, or complaints to a human. -
Job Description:
You are the operations concierge for the ops team's Slack channel. Your job is to answer routine lookups quickly and accurately so the ops team can stay focused on real work.
For every message you see, decide which of these categories it falls into:
- Order status — use
wms_lookup_order. - Inventory — use
wms_inventory_check. - Account info — use
erp_account_lookup. - Carrier/logistics — use
crm_carrier_status. - Out of scope — anything involving refunds, credits, contract changes, or complaints. For these, reply with: "This needs a human — paging @ops-leads." Do not attempt to answer.
Reply concisely. Lead with the answer, then any context. Do not editorialize, do not apologize, do not explain what you are about to do — just do it.
If a lookup returns nothing or an error, say so honestly and tag @ops-leads. Never make up data.
If the asker's intent is ambiguous (e.g., "where's that order I asked about yesterday?"), ask one short clarifying question.
- Order status — use
-
Model: pick a fast, capable model — most of these questions are simple lookups.
-
Projects: leave empty.
-
Tools: select the four custom tools you built, plus
slack_send_messagefrom theslack_v1tool pack so the agent can post replies.
Save the agent.
Step 4: Wire the agent to the channel
Open the new Ops Concierge agent's edit page (pencil icon on the agent card). Scroll to Channel Mappings, click Add, and:
- Pick Slack as the platform.
- Paste the
#ops-helpchannel ID you copied earlier. - Click Add Mapping.
Now every message in #ops-help routes to the agent.
Make sure the Assist Slack bot is a member of the channel. If you have not already, run /invite @YourAssistBotName in #ops-help.
Step 5: Test it live
Post a few real questions in #ops-help:
- "Where is order 48201?"
- "Do we have any A-7321 in Reno?"
- "What's the credit limit on Acme Co?"
The agent should respond within a few seconds. If a response is wrong, the agent will sometimes hallucinate or use the wrong tool — fix the system prompt to be more explicit about which tool covers which question.
For escalation cases:
- "Customer wants a refund on order 48201."
The agent should refuse and tag @ops-leads. If it tries to answer anyway, tighten the Out of scope section of the job description.
Step 6: Run it for a week and refine
Watch the channel for a week. For every response that was wrong, ambiguous, or unhelpful, do one of:
- Refine the prompt. If the agent keeps confusing two categories ("inventory" vs. "order status when the order has multiple lines"), call out the distinction explicitly in the job description.
- Add a tool. If a category of question keeps showing up that the agent can't handle, build the tool that covers it. The agent gets better as the tool surface grows.
- Tighten the scope. If the agent is answering things you wish a human had handled, expand the Out of scope list.
A week of refinement gets you from "useful 50% of the time" to "useful 90% of the time." After that, the gains are incremental but meaningful.
Step 7: Add a feedback loop
Tell the team: "If the concierge gets it wrong, react with :x:. If it nailed it, react with :white_check_mark:."
You now have a labelled dataset for free. Once a week, scan the channel for :x: reactions, look at the messages, and adjust the agent. Over time the prompt gets sharper and the tool whitelist grows to cover the long tail.
What you built
You have an operations concierge that:
- Lives in the channel where the questions are already being asked.
- Handles the routine 80% of inbound traffic in seconds.
- Escalates the genuinely sensitive 20% to a human, with a tag.
- Gets sharper every week as you tune the prompt.
- Runs in your Assist workspace under your control — every tool call is logged, every credential is managed, every response is auditable.
What used to be twenty interruptions a day per ops person is now five. The team gets back time. The askers get answers faster.
Where to go from here
- Add an "I'm watching" mode. Have the agent post a single message when a long-running order changes status, instead of waiting to be asked.
- Schedule a daily summary. Add a scheduled trigger that posts a "yesterday in the channel" digest every morning: top question categories, response times, escalations.
- Build a sister agent for
#exec-help. Same pattern, different prompt and tools, different channel. - Tier the tools. Once the agent is handling 90% of questions, build the next layer — tools that combine multiple lookups ("show me everything about this customer") so the agent can answer compound questions in one shot.