{
  "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_web_researcher",
      "name": "Web Research Agent",
      "description": "Autonomously researches any topic using browser automation, extracts key information from authoritative sources, and produces structured, cited reports.",
      "avatar": "default",
      "type": "conversational",
      "tools": [
        "browser_navigate",
        "browser_click",
        "browser_snapshot",
        "browser_take_screenshot",
        "browser_type",
        "browser_press_key",
        "browser_wait_for",
        "browser_tabs",
        "browser_navigate_back",
        "browser_network_requests",
        "browser_hover",
        "browser_select_option",
        "browser_evaluate",
        "browser_handle_dialog",
        "parse_pdf",
        "vault_create",
        "vault_read",
        "vault_write",
        "vault_patch",
        "scrape_url",
        "crawl_multiple",
        "extract_links",
        "search_page"
      ],
      "repos": [],
      "system_prompt": "# Role & Identity\nYou are an expert Web Research Agent. Your mission is to autonomously research any topic by navigating the web, extracting accurate information from authoritative sources, and synthesizing findings into a structured, well-cited report.\n\n# Core Capabilities\n- **Autonomous Web Navigation:** Browse websites, click through links, handle search engines, and extract relevant content.\n- **Document Parsing:** Read and extract data from PDFs linked on web pages.\n- **Structured Reporting:** Synthesize multi-source findings into clear, actionable reports.\n- **Vault Persistence:** Store intermediate research findings so they can be referenced later in the conversation or by other agents.\n\n# Operating Rules (Zero-Wandering Policy)\n1. **Plan First:** Before opening a browser, list 3-5 authoritative sources you intend to visit for this query.\n2. **Navigate Directly:** Go straight to the most relevant pages. Avoid following rabbit holes of unrelated links.\n3. **Extract Efficiently:** Take targeted snapshots and screenshots. Do not read entire pages when only a section is relevant.\n4. **Stop When Sufficient:** Once you have enough data to answer comprehensively, stop browsing and synthesize.\n5. **Always Cite Sources:** Record the URL and publication date of every source consulted.\n\n# Workflow\n1. **Plan:** Identify 3-5 authoritative sources (e.g., official docs, reputable news, academic sites, Wikipedia).\n2. **Navigate & Extract:** Visit each source, take a snapshot, and extract only relevant content.\n3. **Persist to Vault:** Save raw findings as structured JSON in the vault for reference.\n4. **Synthesize:** Combine all findings into a final structured report.\n\n# Response Format\nAlways respond with a structured Markdown report:\n\n## Research Report: [Topic]\n### Executive Summary\n[3-5 sentence overview of key findings]\n\n### Key Findings\n- [Finding 1] — *Source: [URL]*\n- [Finding 2] — *Source: [URL]*\n\n### Detailed Analysis\n[Section-by-section breakdown with evidence]\n\n### Sources Consulted\n1. [URL 1] — [Brief description]\n2. [URL 2] — [Brief description]"
    },
    {
      "id": "agent_site_synthesis_writer",
      "name": "Synthesis Writer",
      "description": "Writes the final answer from merged findings, keeping every citation.",
      "avatar": "default",
      "type": "conversational",
      "tools": [
        "vault_write"
      ],
      "repos": [],
      "system_prompt": "Write a clear, sourced answer from the findings. Keep every citation as a link. Flag anything the sources disagree on. Then save the answer to the vault as research/<a short title>.md."
    }
  ],
  "orchestrations": [
    {
      "id": "orch_site_deep_research",
      "name": "Deep Research Agent",
      "description": "Splits a question into three, researches them in parallel, checks for gaps and follows the cited sources once if it needs to, then writes one answer with its sources and saves it to your vault.",
      "avatar": "default",
      "steps": [
        {
          "id": "r_decompose",
          "name": "Split into sub-questions",
          "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": "r_list",
          "prompt_template": "Split this question into exactly three focused sub-questions that together answer it. Reply with a JSON list of three strings and nothing else.\n\nQuestion: {state.question}",
          "output_key": "questions_text"
        },
        {
          "id": "r_list",
          "name": "Read the list",
          "type": "extract_json",
          "position_x": 190,
          "position_y": 190,
          "max_turns": 15,
          "next_step_id": "r_parallel",
          "input_keys": [
            "questions_text"
          ],
          "output_key": "questions"
        },
        {
          "id": "r_parallel",
          "name": "Research in parallel",
          "type": "parallel",
          "position_x": 340,
          "position_y": 190,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [
            [
              "r_q1"
            ],
            [
              "r_q2"
            ],
            [
              "r_q3"
            ]
          ],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": "r_merge"
        },
        {
          "id": "r_q1",
          "name": "Sub-question 1",
          "type": "agent",
          "position_x": 640,
          "position_y": 40,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 8,
          "next_step_id": null,
          "agent_id": "agent_web_researcher",
          "prompt_template": "Research this, as part of answering \"{{ state.question }}\": {{ state.questions.0 }}\n\nFollow at most two links deep. Cite every source with its URL.",
          "output_key": "findings_1"
        },
        {
          "id": "r_q2",
          "name": "Sub-question 2",
          "type": "agent",
          "position_x": 640,
          "position_y": 190,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 8,
          "next_step_id": null,
          "agent_id": "agent_web_researcher",
          "prompt_template": "Research this, as part of answering \"{{ state.question }}\": {{ state.questions.1 }}\n\nFollow at most two links deep. Cite every source with its URL.",
          "output_key": "findings_2"
        },
        {
          "id": "r_q3",
          "name": "Sub-question 3",
          "type": "agent",
          "position_x": 640,
          "position_y": 340,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 8,
          "next_step_id": null,
          "agent_id": "agent_web_researcher",
          "prompt_template": "Research this, as part of answering \"{{ state.question }}\": {{ state.questions.2 }}\n\nFollow at most two links deep. Cite every source with its URL.",
          "output_key": "findings_3"
        },
        {
          "id": "r_merge",
          "name": "Merge findings with sources",
          "type": "merge",
          "position_x": 940,
          "position_y": 190,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [
            "findings_1",
            "findings_2",
            "findings_3"
          ],
          "max_turns": 15,
          "next_step_id": "r_gaps",
          "merge_strategy": "concat",
          "output_key": "findings"
        },
        {
          "id": "r_gaps",
          "name": "Enough to answer?",
          "type": "evaluator",
          "position_x": 1240,
          "position_y": 190,
          "route_map": {
            "enough": "r_synthesize",
            "dig_deeper": "r_follow"
          },
          "route_descriptions": {
            "enough": "Every sub-question has a sourced answer",
            "dig_deeper": "A sub-question is thin or unsourced"
          },
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": null,
          "evaluator_prompt": "Do these findings answer the question with sources, or is a part thin or unsourced?\n\nQuestion: {state.question}\n\nFindings: {state.findings}"
        },
        {
          "id": "r_follow",
          "name": "Fill the gaps, once",
          "type": "agent",
          "position_x": 1540,
          "position_y": 340,
          "max_turns": 15,
          "next_step_id": "r_synthesize",
          "agent_id": "agent_web_researcher",
          "prompt_template": "These findings leave part of the question thin or unsourced. Open the sources they cite, once, and add what's missing, with its URL.\n\nQuestion: {state.question}\n\nFindings: {state.findings}",
          "output_key": "extra"
        },
        {
          "id": "r_synthesize",
          "name": "Write the answer",
          "type": "agent",
          "position_x": 1840,
          "position_y": 40,
          "route_map": {},
          "route_descriptions": {},
          "parallel_branches": [],
          "loop_step_ids": [],
          "human_fields": [],
          "input_keys": [],
          "max_turns": 15,
          "next_step_id": null,
          "agent_id": "agent_site_synthesis_writer",
          "prompt_template": "Question: {state.question}\n\nFindings: {state.findings}\n\nMore: {state.extra}",
          "output_key": "report"
        }
      ],
      "entry_step_id": "r_decompose",
      "state_schema": {
        "question": {
          "type": "string",
          "default": "",
          "description": "The research question"
        },
        "extra": {
          "type": "string",
          "default": "",
          "description": "What the gap-filling pass found"
        }
      },
      "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": "report"
    }
  ],
  "mcp_servers": []
}
