{
  "synapse_export": true,
  "version": "1.0",
  "exported_at": "2026-09-09T00:01:06.893021+00:00",
  "has_python_tools": false,
  "custom_tools": [],
  "agents": [
    {
      "id": "agent_site_support_billing",
      "name": "Billing Support Agent",
      "description": "Answers billing and plan questions from the help articles in your vault.",
      "avatar": "default",
      "type": "conversational",
      "tools": [
        "vault_list",
        "vault_read"
      ],
      "repos": [],
      "system_prompt": "You answer billing and plan questions: pricing, invoices, refunds and credits. Your help articles are in the vault, in the support folder. List them, read the ones that fit, and answer only from what they say. Name the article you used. If they don't answer the question, say so plainly rather than guessing."
    },
    {
      "id": "agent_site_support_tech",
      "name": "Technical Support Agent",
      "description": "Answers product and setup questions from the help articles in your vault.",
      "avatar": "default",
      "type": "conversational",
      "tools": [
        "vault_list",
        "vault_read"
      ],
      "repos": [],
      "system_prompt": "You answer product and setup questions. Your help articles are in the vault, in the support folder. List them, read the ones that fit, and answer only from what they say. Name the article you used. If they don't answer the question, say so plainly rather than guessing. Never guess at a setting's value."
    },
    {
      "id": "agent_site_support_general",
      "name": "General Support Agent",
      "description": "Answers everything else, and says when a person needs to decide.",
      "avatar": "default",
      "type": "conversational",
      "tools": [
        "vault_list",
        "vault_read"
      ],
      "repos": [],
      "system_prompt": "You answer everything else, politely and briefly. Your help articles are in the vault, in the support folder. List them, read the ones that fit, and answer only from what they say. Name the article you used. If they don't answer the question, say so plainly rather than guessing. If the request needs a person's decision, say so."
    }
  ],
  "orchestrations": [
    {
      "id": "orch_site_customer_support",
      "name": "Customer Support Agent",
      "description": "Sorts a customer's question, answers it from the help articles in your vault, and returns the answer at once when it is grounded in an article. Anything uncertain waits for a person, and their reply becomes the answer.",
      "avatar": "default",
      "steps": [
        {
          "id": "s_classify",
          "name": "Classify intent",
          "type": "llm",
          "position_x": 40,
          "position_y": 190,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": "s_route",
          "prompt_template": "Which kind of question is this? Answer with one word: billing, technical or other.\n\nQuestion: {state.message}",
          "output_key": "intent"
        },
        {
          "id": "s_route",
          "name": "Route by intent",
          "type": "switch",
          "position_x": 340,
          "position_y": 190,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": null,
          "switch_expression": "'billing' if 'billing' in str(state.intent).lower() else ('technical' if 'technical' in str(state.intent).lower() else 'other')",
          "switch_cases": {
            "billing": "s_billing",
            "technical": "s_technical"
          },
          "switch_default_step_id": "s_general"
        },
        {
          "id": "s_billing",
          "name": "Answer from billing docs",
          "type": "agent",
          "position_x": 640,
          "position_y": 40,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": "s_confidence",
          "agent_id": "agent_site_support_billing",
          "prompt_template": "Customer's question: {state.message}",
          "output_key": "draft"
        },
        {
          "id": "s_technical",
          "name": "Answer from docs and tickets",
          "type": "agent",
          "position_x": 640,
          "position_y": 190,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": "s_confidence",
          "agent_id": "agent_site_support_tech",
          "prompt_template": "Customer's question: {state.message}",
          "output_key": "draft"
        },
        {
          "id": "s_general",
          "name": "Answer generally",
          "type": "agent",
          "position_x": 640,
          "position_y": 340,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": "s_confidence",
          "agent_id": "agent_site_support_general",
          "prompt_template": "Customer's question: {state.message}",
          "output_key": "draft"
        },
        {
          "id": "s_confidence",
          "name": "Confidence check",
          "type": "evaluator",
          "position_x": 940,
          "position_y": 190,
          "route_map": {
            "confident": "s_send",
            "unsure": "s_review"
          },
          "route_descriptions": {
            "confident": "Names the article it used, answers the question, low risk",
            "unsure": "No article named, the articles don't cover it, or it touches a refund or an account change"
          },
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": null,
          "evaluator_prompt": "Is this reply grounded in a help article it names, and safe to send without a person reading it first?\n\nQuestion: {state.message}\n\nReply: {state.draft}"
        },
        {
          "id": "s_send",
          "name": "Use the reply",
          "type": "print",
          "position_x": 1240,
          "position_y": 40,
          "max_turns": 15,
          "next_step_id": null,
          "print_content": "{state.draft}",
          "output_key": "reply"
        },
        {
          "id": "s_review",
          "name": "A person checks the reply",
          "type": "human",
          "position_x": 1240,
          "position_y": 340,
          "max_turns": 15,
          "next_step_id": "s_final",
          "human_prompt": "Check this reply before it goes to the customer. Paste it below if it's right, or write a better one.\n\nQuestion: {state.message}\n\nDraft: {state.draft}",
          "human_fields": [
            {
              "name": "reply",
              "type": "textarea",
              "label": "The reply to send"
            }
          ],
          "output_key": "review"
        },
        {
          "id": "s_final",
          "name": "Use the person's reply",
          "type": "print",
          "position_x": 1540,
          "position_y": 340,
          "max_turns": 15,
          "next_step_id": null,
          "print_content": "{state.review.reply}",
          "output_key": "reply"
        }
      ],
      "entry_step_id": "s_classify",
      "state_schema": {
        "message": {
          "type": "string",
          "default": "",
          "description": "The customer's question"
        }
      },
      "max_total_turns": 100,
      "timeout_minutes": 30,
      "trigger": "manual",
      "created_at": "2026-09-09T00:01:06.893021+00:00",
      "updated_at": "2026-09-09T00:01:06.893021+00:00",
      "result_key": "reply"
    }
  ],
  "mcp_servers": []
}
