← All blueprints
🎫

Support Triage CrewAI

blueprint · 3 agents · 1 MCP server
455★ stars
51forks
4.3rating

What it does

A crew that takes the first pass on support. A classifier categorizes the ticket, a drafter writes a reply, and an escalator flags anything unusual to a human with its reasoning, posting the note to Slack.

The cast · 3 agents

Drafterdrafterreasoning

Draft a helpful reply for the categorized ticket.

no tools · reasoning only
Escalatorescalatorfast

If the ticket is unusual or high-risk, post a note to Slack for a human, with your reasoning.

slack.post_message
Classifierclassifierreasoning

Categorize the ticket by topic and urgency.

no tools · reasoning only

Flow

Classifiercategory
Drafterdraft
Escalatornote

Interface

Inputs
ticketstring
The incoming support ticket.
Outputs
draftstring
The drafted reply.

Depends on · 1 MCP server

🔌io.github.slack/slack-mcpnot in the registry yetslack
⤓ Export runnable code
# Generated by @socketcat/compiler for target: langgraph
# blueprint: com.socketcat/support-triage v1.0.0   schema: socketcat.dev/blueprint/v0
# This code is yours. Edit it freely. The socketcat_runtime helper is optional and can be vendored.

from typing import TypedDict
from langgraph.graph import StateGraph, START, END
import socketcat_runtime as _rt

class State(TypedDict, total=False):
    ticket: object
    draft: object
    category: object
    note: object

def node_AgentInvoke_0(state):
    return _rt.run_agent("classifier", state, {"ticket":"ticket"}, "category")

def node_AgentInvoke_1(state):
    return _rt.run_agent("drafter", state, {"category":"category"}, "draft")

def node_AgentInvoke_2(state):
    return _rt.run_agent("escalator", state, {"draft":"draft","category":"category"}, "note")

def build():
    b = StateGraph(State)
    b.add_node("AgentInvoke_0", node_AgentInvoke_0)
    b.add_node("AgentInvoke_1", node_AgentInvoke_1)
    b.add_node("AgentInvoke_2", node_AgentInvoke_2)
    b.add_edge(START, "AgentInvoke_0")
    b.add_edge("AgentInvoke_0", "AgentInvoke_1")
    b.add_edge("AgentInvoke_1", "AgentInvoke_2")
    b.add_edge("AgentInvoke_2", END)
    return b.compile()

INPUTS = ["ticket"]
OUTPUTS = ["draft"]

if __name__ == "__main__":
    _rt.main(build, INPUTS, OUTPUTS)
blueprint.json (the portable format)
{
  "id": "com.socketcat/support-triage",
  "flow": {
    "type": "sequence",
    "blocks": [
      {
        "in": {
          "ticket": "ticket"
        },
        "out": "category",
        "use": "classifier",
        "type": "agent"
      },
      {
        "in": {
          "category": "category"
        },
        "out": "draft",
        "use": "drafter",
        "type": "agent"
      },
      {
        "in": {
          "draft": "draft",
          "category": "category"
        },
        "out": "note",
        "use": "escalator",
        "type": "agent"
      }
    ]
  },
  "tags": [
    "support",
    "triage",
    "comms"
  ],
  "title": "Support Triage",
  "agents": {
    "drafter": {
      "model": {
        "hint": "reasoning"
      },
      "title": "Drafter",
      "instructions": "Draft a helpful reply for the categorized ticket."
    },
    "escalator": {
      "model": {
        "hint": "fast"
      },
      "title": "Escalator",
      "tools": [
        "slack.post_message"
      ],
      "instructions": "If the ticket is unusual or high-risk, post a note to Slack for a human, with your reasoning."
    },
    "classifier": {
      "model": {
        "hint": "reasoning"
      },
      "title": "Classifier",
      "instructions": "Categorize the ticket by topic and urgency."
    }
  },
  "estate": {
    "note": {
      "type": "string",
      "description": "The escalation note posted to Slack, when one was needed."
    },
    "draft": {
      "type": "string",
      "description": "The reply the drafter wrote."
    },
    "category": {
      "type": "object",
      "description": "The ticket's topic and urgency from the classifier."
    }
  },
  "$schema": "socketcat.dev/blueprint/v0",
  "authors": [
    {
      "url": "https://socketcat.com",
      "name": "SocketCat"
    }
  ],
  "license": "MIT",
  "servers": [
    {
      "ref": "io.github.slack/slack-mcp",
      "alias": "slack"
    }
  ],
  "summary": "Classifies a support ticket, drafts a reply, and flags edge cases for a human.",
  "targets": [
    "crewai",
    "langgraph",
    "*"
  ],
  "version": "1.0.0",
  "interface": {
    "inputs": {
      "ticket": {
        "type": "string",
        "description": "The incoming support ticket."
      }
    },
    "outputs": {
      "draft": {
        "type": "string",
        "description": "The drafted reply."
      }
    }
  },
  "description": "A crew that takes the first pass on support. A classifier categorizes the ticket, a drafter writes a reply, and an escalator flags anything unusual to a human with its reasoning, posting the note to Slack."
}