chore: add generated flowchart.json for template agents

This commit is contained in:
bryan
2026-03-16 12:13:29 -07:00
parent ae19121802
commit 4ab33a39d6
10 changed files with 1996 additions and 0 deletions
@@ -0,0 +1,307 @@
{
"original_draft": {
"agent_name": "competitive_intel_agent",
"goal": "Monitor competitor websites, news sources, and GitHub repositories to produce a structured weekly digest with key insights, detailed findings per competitor, and 30-day trend analysis.",
"description": "",
"success_criteria": [
"Check multiple source types per competitor (website, news, GitHub)",
"All findings structured with competitor, category, update, source, and date",
"Uses stored data to compare with previous reports for trend analysis",
"User receives a formatted, readable competitive intelligence digest"
],
"constraints": [
"Never fabricate findings, news, or data \u2014 only report what was found",
"Every finding must include a source URL",
"Prioritize findings from the past 7 days; include up to 30 days"
],
"nodes": [
{
"id": "intake",
"name": "Competitor Intake",
"description": "Collect competitor list, focus areas, and report preferences from the user",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"competitors_input"
],
"output_keys": [
"competitors",
"focus_areas",
"report_frequency",
"has_github_competitors"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "web-scraper",
"name": "Website Monitor",
"description": "Scrape competitor websites for pricing, features, and announcements",
"node_type": "event_loop",
"tools": [
"web_search",
"web_scrape"
],
"input_keys": [
"competitors",
"focus_areas"
],
"output_keys": [
"web_findings"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "news-search",
"name": "News & Press Monitor",
"description": "Search for competitor mentions in news, press releases, and industry publications",
"node_type": "event_loop",
"tools": [
"web_search",
"web_scrape"
],
"input_keys": [
"competitors",
"focus_areas"
],
"output_keys": [
"news_findings"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "decision",
"flowchart_shape": "diamond",
"flowchart_color": "#d89d26"
},
{
"id": "github-monitor",
"name": "GitHub Activity Monitor",
"description": "Track public GitHub repository activity for competitors with GitHub presence",
"node_type": "event_loop",
"tools": [
"github_list_repos",
"github_get_repo",
"github_search_repos"
],
"input_keys": [
"competitors"
],
"output_keys": [
"github_findings"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "aggregator",
"name": "Data Aggregator",
"description": "Combine findings from all sources, deduplicate, and structure for analysis",
"node_type": "event_loop",
"tools": [
"save_data",
"load_data",
"list_data_files"
],
"input_keys": [
"competitors",
"web_findings",
"news_findings",
"github_findings"
],
"output_keys": [
"aggregated_findings"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "database",
"flowchart_shape": "cylinder",
"flowchart_color": "#459077"
},
{
"id": "analysis",
"name": "Insight Analysis",
"description": "Extract key insights, detect trends, and compare with historical data",
"node_type": "event_loop",
"tools": [
"load_data",
"save_data",
"list_data_files"
],
"input_keys": [
"aggregated_findings",
"competitors",
"focus_areas"
],
"output_keys": [
"key_highlights",
"trend_analysis",
"detailed_findings"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "database",
"flowchart_shape": "cylinder",
"flowchart_color": "#459077"
},
{
"id": "report",
"name": "Report Generator",
"description": "Generate and deliver the competitive intelligence digest as an HTML report",
"node_type": "event_loop",
"tools": [
"save_data",
"load_data",
"serve_file_to_user",
"list_data_files"
],
"input_keys": [
"key_highlights",
"trend_analysis",
"detailed_findings",
"competitors"
],
"output_keys": [
"delivery_status"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "web-scraper",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "web-scraper",
"target": "news-search",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "news-search",
"target": "github-monitor",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-3",
"source": "news-search",
"target": "aggregator",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-4",
"source": "github-monitor",
"target": "aggregator",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-5",
"source": "aggregator",
"target": "analysis",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-6",
"source": "analysis",
"target": "report",
"condition": "on_success",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"report"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"web-scraper": [
"web-scraper"
],
"news-search": [
"news-search"
],
"github-monitor": [
"github-monitor"
],
"aggregator": [
"aggregator"
],
"analysis": [
"analysis"
],
"report": [
"report"
]
}
}
@@ -0,0 +1,221 @@
{
"original_draft": {
"agent_name": "deep_research_agent",
"goal": "Research any topic by searching diverse sources, analyzing findings, and producing a cited report \u2014 with user checkpoints to guide direction.",
"description": "",
"success_criteria": [
"Use multiple diverse, authoritative sources",
"Every factual claim in the report cites its source",
"User reviews findings before report generation",
"Final report answers the original research questions"
],
"constraints": [
"Only include information found in fetched sources",
"Every claim must cite its source with a numbered reference",
"Present findings to the user before writing the final report"
],
"nodes": [
{
"id": "intake",
"name": "Research Intake",
"description": "Discuss the research topic with the user, clarify scope, and confirm direction",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"user_request"
],
"output_keys": [
"research_brief"
],
"success_criteria": "The research brief is specific and actionable: it states the topic, the key questions to answer, the desired scope, and depth.",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "research",
"name": "Research",
"description": "Search the web, fetch source content, and compile findings",
"node_type": "event_loop",
"tools": [
"web_search",
"web_scrape",
"load_data",
"save_data",
"append_data",
"list_data_files"
],
"input_keys": [
"research_brief",
"feedback"
],
"output_keys": [
"findings",
"sources",
"gaps"
],
"success_criteria": "Findings reference at least 3 distinct sources with URLs. Key claims are substantiated by fetched content, not generated.",
"sub_agents": [],
"flowchart_type": "database",
"flowchart_shape": "cylinder",
"flowchart_color": "#459077"
},
{
"id": "review",
"name": "Review Findings",
"description": "Present findings to user and decide whether to research more or write the report",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"findings",
"sources",
"gaps",
"research_brief"
],
"output_keys": [
"needs_more_research",
"feedback"
],
"success_criteria": "The user has been presented with findings and has explicitly indicated whether they want more research or are ready for the report.",
"sub_agents": [],
"flowchart_type": "decision",
"flowchart_shape": "diamond",
"flowchart_color": "#d89d26"
},
{
"id": "report",
"name": "Write & Deliver Report",
"description": "Write a cited HTML report from the findings and present it to the user",
"node_type": "event_loop",
"tools": [
"save_data",
"append_data",
"serve_file_to_user",
"load_data",
"list_data_files"
],
"input_keys": [
"findings",
"sources",
"research_brief"
],
"output_keys": [
"delivery_status",
"next_action"
],
"success_criteria": "An HTML report has been saved, the file link has been presented to the user, and the user has indicated what they want to do next.",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "research",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "research",
"target": "review",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "review",
"target": "research",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-3",
"source": "review",
"target": "report",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-4",
"source": "report",
"target": "research",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-5",
"source": "report",
"target": "intake",
"condition": "conditional",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"report"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"research": [
"research"
],
"review": [
"review"
],
"report": [
"report"
]
}
}
@@ -0,0 +1,218 @@
{
"original_draft": {
"agent_name": "email_inbox_management",
"goal": "Manage Gmail inbox emails autonomously using user-defined free-text rules. For every five minutes, fetch inbox emails (configurable batch size, default 100), apply the user's rules to each email, and execute the appropriate Gmail actions \u2014 trash, mark as spam, mark important, mark read/unread, star, draft replies, create/apply custom labels, and more.",
"description": "",
"success_criteria": [
"Gmail actions are applied correctly to the right emails based on the user's rules",
"Produces a summary report showing what was done: how many emails were affected by each action type, with email subjects listed",
"All fetched emails up to the configured max are processed and acted upon; none are silently skipped",
"Custom labels are created and applied correctly when rules require them"
],
"constraints": [
"Must loop through all inbox emails by paginating with max_emails as page size; no emails should be silently skipped",
"Archiving removes from inbox but preserves the email; only explicit trash rules move emails to trash",
"Agent creates draft replies but NEVER sends them automatically"
],
"nodes": [
{
"id": "intake",
"name": "Intake",
"description": "Receive and validate input parameters: rules and max_emails. Present the interpreted rules back to the user for confirmation.",
"node_type": "event_loop",
"tools": [
"gmail_list_labels"
],
"input_keys": [
"rules",
"max_emails"
],
"output_keys": [
"rules",
"max_emails",
"query"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "fetch-emails",
"name": "Fetch Emails",
"description": "Fetch one page of emails from Gmail inbox. Returns emails filename and next_page_token for pagination. The graph loops back here if more pages remain.",
"node_type": "event_loop",
"tools": [
"bulk_fetch_emails"
],
"input_keys": [
"rules",
"max_emails",
"next_page_token",
"last_processed_timestamp",
"query"
],
"output_keys": [
"emails",
"next_page_token"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "classify-and-act",
"name": "Classify and Act",
"description": "Apply the user's rules to each email and execute the appropriate Gmail actions.",
"node_type": "event_loop",
"tools": [
"gmail_trash_message",
"gmail_modify_message",
"gmail_batch_modify_messages",
"gmail_create_draft",
"gmail_create_label",
"gmail_list_labels",
"load_data",
"append_data"
],
"input_keys": [
"rules",
"emails"
],
"output_keys": [
"actions_taken"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "decision",
"flowchart_shape": "diamond",
"flowchart_color": "#d89d26"
},
{
"id": "report",
"name": "Report",
"description": "Generate a summary report of all actions taken on the emails and present it to the user.",
"node_type": "event_loop",
"tools": [
"load_data",
"get_current_timestamp"
],
"input_keys": [
"actions_taken",
"rules"
],
"output_keys": [
"summary_report",
"rules",
"last_processed_timestamp"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "fetch-emails",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "fetch-emails",
"target": "classify-and-act",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "classify-and-act",
"target": "fetch-emails",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-3",
"source": "classify-and-act",
"target": "report",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-4",
"source": "report",
"target": "intake",
"condition": "on_success",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"report"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"fetch-emails": [
"fetch-emails"
],
"classify-and-act": [
"classify-and-act"
],
"report": [
"report"
]
}
}
@@ -0,0 +1,168 @@
{
"original_draft": {
"agent_name": "email_reply_agent",
"goal": "Filter unreplied emails by user criteria, confirm recipients, send personalized replies.",
"description": "",
"success_criteria": [
"Accurately finds unreplied emails matching user criteria",
"User confirms recipient list before sending",
"Replies are personalized based on email content and tone guidance"
],
"constraints": [
"Never send emails without explicit user confirmation; always present recipient list and get approval first",
"Process up to 50 emails per batch"
],
"nodes": [
{
"id": "intake",
"name": "Intake",
"description": "Gather email filter criteria from user",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"batch_complete",
"restart"
],
"output_keys": [
"filter_criteria"
],
"success_criteria": "Filter criteria is specific enough to search Gmail (sender, subject, date range, or keywords).",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "search",
"name": "Search Emails",
"description": "Search Gmail for unreplied emails matching filter criteria",
"node_type": "event_loop",
"tools": [
"gmail_list_messages",
"gmail_get_message",
"gmail_batch_get_messages"
],
"input_keys": [
"filter_criteria"
],
"output_keys": [
"email_list"
],
"success_criteria": "Found unreplied emails matching criteria with sender, subject, snippet, message_id.",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "confirm-draft",
"name": "Confirm & Reply",
"description": "Present emails for confirmation, send personalized replies",
"node_type": "event_loop",
"tools": [
"gmail_reply_email"
],
"input_keys": [
"email_list",
"filter_criteria"
],
"output_keys": [
"batch_complete",
"restart"
],
"success_criteria": "User confirmed recipients and personalized replies sent for each.",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "search",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "search",
"target": "confirm-draft",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "confirm-draft",
"target": "intake",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-3",
"source": "confirm-draft",
"target": "intake",
"condition": "conditional",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"confirm-draft"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"search": [
"search"
],
"confirm-draft": [
"confirm-draft"
]
}
}
@@ -0,0 +1,186 @@
{
"original_draft": {
"agent_name": "job_hunter",
"goal": "Analyze a user's resume to identify their strongest role fits, find 10 matching job opportunities, let the user select which to pursue, then generate a resume customization list and cold outreach email for each selected job.",
"description": "",
"success_criteria": [
"Identifies 2-3 role types that genuinely match the user's experience",
"Found jobs align with identified roles and user's background",
"Resume changes are specific, actionable, and tailored to each job posting",
"Cold emails are personalized, professional, and reference specific company/role details",
"User approves outputs without major revisions needed"
],
"constraints": [
"Only suggest roles the user is realistically qualified for - no aspirational stretch roles",
"Resume customizations must be truthful - enhance presentation, never fabricate experience",
"Cold emails must be professional and not spammy",
"Only customize for jobs the user explicitly selects"
],
"nodes": [
{
"id": "intake",
"name": "Intake",
"description": "Analyze resume and identify 3-5 strongest role types",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"resume_text"
],
"output_keys": [
"resume_text",
"role_analysis"
],
"success_criteria": "The user's resume has been analyzed and 3-5 target roles identified based on their actual experience.",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "job-search",
"name": "Job Search",
"description": "Search for 10 jobs matching identified roles by scraping job board sites directly",
"node_type": "event_loop",
"tools": [
"web_scrape"
],
"input_keys": [
"role_analysis"
],
"output_keys": [
"job_listings"
],
"success_criteria": "10 relevant job listings have been found with complete details including title, company, location, description, and URL.",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "job-review",
"name": "Job Review",
"description": "Present all 10 jobs to the user, let them select which to pursue",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"job_listings",
"resume_text"
],
"output_keys": [
"selected_jobs"
],
"success_criteria": "User has reviewed all job listings and explicitly selected which jobs they want to apply to.",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "customize",
"name": "Customize",
"description": "For each selected job, generate resume customization list and cold outreach email, create Gmail drafts",
"node_type": "event_loop",
"tools": [
"save_data",
"append_data",
"serve_file_to_user",
"gmail_create_draft"
],
"input_keys": [
"selected_jobs",
"resume_text"
],
"output_keys": [
"application_materials"
],
"success_criteria": "Resume customization list and cold outreach email generated for each selected job, saved as HTML, and Gmail drafts created in user's inbox.",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "job-search",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "job-search",
"target": "job-review",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "job-review",
"target": "customize",
"condition": "on_success",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"customize"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"job-search": [
"job-search"
],
"job-review": [
"job-review"
],
"customize": [
"customize"
]
}
}
@@ -0,0 +1,165 @@
{
"original_draft": {
"agent_name": "local_business_extractor",
"goal": "Find local businesses on Maps, extract contacts, and sync to Google Sheets.",
"description": "",
"success_criteria": [
"Extract business details from Maps",
"Sync data to Google Sheets"
],
"constraints": [
"Must verify website presence before scraping"
],
"nodes": [
{
"id": "map-search-worker",
"name": "Maps Browser Worker",
"description": "Browser subagent that searches Google Maps and extracts business links.",
"node_type": "gcu",
"tools": [],
"input_keys": [
"query"
],
"output_keys": [
"business_list"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "browser",
"flowchart_shape": "hexagon",
"flowchart_color": "#3a4a9b"
},
{
"id": "extract-contacts",
"name": "Extract Business Details",
"description": "Scrapes business websites and Maps for comprehensive business details.",
"node_type": "event_loop",
"tools": [
"exa_get_contents",
"exa_search"
],
"input_keys": [
"user_request"
],
"output_keys": [
"business_data"
],
"success_criteria": "Comprehensive business details (reviews, hours, contacts) extracted.",
"sub_agents": [
"map-search-worker"
],
"flowchart_type": "subprocess",
"flowchart_shape": "subroutine",
"flowchart_color": "#4c7f7f"
},
{
"id": "sheets-sync",
"name": "Google Sheets Sync",
"description": "Appends the extracted business data to a Google Sheets spreadsheet.",
"node_type": "event_loop",
"tools": [
"google_sheets_create_spreadsheet",
"google_sheets_update_values",
"google_sheets_append_values",
"google_sheets_get_values"
],
"input_keys": [
"business_data"
],
"output_keys": [
"spreadsheet_id"
],
"success_criteria": "Data successfully synced to Google Sheets.",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "extract-contacts",
"target": "sheets-sync",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "sheets-sync",
"target": "extract-contacts",
"condition": "always",
"description": "",
"label": ""
},
{
"id": "edge-subagent-2",
"source": "extract-contacts",
"target": "map-search-worker",
"condition": "always",
"description": "sub-agent delegation",
"label": "delegate"
},
{
"id": "edge-subagent-3",
"source": "map-search-worker",
"target": "extract-contacts",
"condition": "always",
"description": "sub-agent report back",
"label": "report"
}
],
"entry_node": "extract-contacts",
"terminal_nodes": [
"sheets-sync"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"extract-contacts": [
"extract-contacts",
"map-search-worker"
],
"sheets-sync": [
"sheets-sync"
]
}
}
@@ -0,0 +1,172 @@
{
"original_draft": {
"agent_name": "meeting_scheduler",
"goal": "Check calendar availability, find optimal meeting times, record meetings, and send reminders.",
"description": "",
"success_criteria": [
"Meeting time found within requested duration",
"Meeting recorded in spreadsheet accurately",
"Attendee email reminder sent",
"User confirms meeting details"
],
"constraints": [
"Must use Google Calendar API for availability check",
"Meeting duration must match requested time",
"Spreadsheet record must include date, time, attendee, title"
],
"nodes": [
{
"id": "intake",
"name": "Intake",
"description": "Gather meeting details from the user",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"attendee_email",
"meeting_duration_minutes"
],
"output_keys": [
"attendee_email",
"meeting_duration_minutes",
"meeting_title"
],
"success_criteria": "User has provided attendee email, meeting duration, and title.",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "schedule",
"name": "Schedule",
"description": "Find available time on calendar, book meeting with Google Meet, and log to Google Sheet",
"node_type": "event_loop",
"tools": [
"calendar_check_availability",
"calendar_create_event",
"calendar_list_events",
"google_sheets_create_spreadsheet",
"google_sheets_get_spreadsheet",
"google_sheets_append_values",
"send_email"
],
"input_keys": [
"attendee_email",
"meeting_duration_minutes",
"meeting_title"
],
"output_keys": [
"meeting_time",
"booking_confirmed",
"spreadsheet_recorded",
"email_sent",
"meet_link"
],
"success_criteria": "Meeting time found, Google Meet created, Google Sheet 'Meeting Scheduler' updated with date/time/attendee/title/meet_link, and confirmation email sent.",
"sub_agents": [],
"flowchart_type": "io",
"flowchart_shape": "parallelogram",
"flowchart_color": "#7a4fa5"
},
{
"id": "confirm",
"name": "Confirm",
"description": "Present booking confirmation to user with Google Meet link",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"meeting_time",
"booking_confirmed",
"meet_link"
],
"output_keys": [
"next_action"
],
"success_criteria": "User has acknowledged the booking and received the Google Meet link.",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "schedule",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "schedule",
"target": "confirm",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "confirm",
"target": "intake",
"condition": "conditional",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"confirm"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"schedule": [
"schedule"
],
"confirm": [
"confirm"
]
}
}
@@ -0,0 +1,150 @@
{
"original_draft": {
"agent_name": "tech_news_reporter",
"goal": "Research the latest technology and AI news from the web, summarize key stories, and produce a well-organized report for the user to read.",
"description": "",
"success_criteria": [
"Finds recent, relevant tech/AI news articles",
"Covers diverse topics, not just one story",
"Produces a structured, readable report with sections, summaries, and links",
"Includes source attribution with URLs for every story",
"Delivers the report to the user in a viewable format"
],
"constraints": [
"Never fabricate news stories or URLs",
"Always attribute sources with links",
"Only include news from the past week"
],
"nodes": [
{
"id": "intake",
"name": "Intake",
"description": "Greet the user and ask if they have specific tech/AI topics to focus on, or if they want a general news roundup.",
"node_type": "event_loop",
"tools": [],
"input_keys": [],
"output_keys": [
"research_brief"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "research",
"name": "Research",
"description": "Scrape well-known tech news sites for recent articles and extract key information including titles, summaries, sources, and topics.",
"node_type": "event_loop",
"tools": [
"web_scrape"
],
"input_keys": [
"research_brief"
],
"output_keys": [
"articles_data"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "compile-report",
"name": "Compile Report",
"description": "Organize the researched articles into a structured HTML report, save it, and deliver a clickable link to the user.",
"node_type": "event_loop",
"tools": [
"save_data",
"append_data",
"serve_file_to_user"
],
"input_keys": [
"articles_data"
],
"output_keys": [
"report_file"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "research",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "research",
"target": "compile-report",
"condition": "on_success",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"compile-report"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"research": [
"research"
],
"compile-report": [
"compile-report"
]
}
}
@@ -0,0 +1,172 @@
{
"original_draft": {
"agent_name": "twitter_news_agent",
"goal": "Achieve an accurate and concise daily news digest based on Twitter feed monitoring.",
"description": "",
"success_criteria": [
"Navigate and extract tweets from at least 3 handles.",
"Provide a summary of the most important stories.",
"Maintain a persistent log of daily digests."
],
"constraints": [
"Respect rate limits and ethical web usage."
],
"nodes": [
{
"id": "fetch-tweets",
"name": "Fetch Tech Tweets",
"description": "Browser subagent to navigate to tech news Twitter profiles and extract latest tweets.",
"node_type": "gcu",
"tools": [],
"input_keys": [
"twitter_handles"
],
"output_keys": [
"raw_tweets"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "browser",
"flowchart_shape": "hexagon",
"flowchart_color": "#3a4a9b"
},
{
"id": "process-news",
"name": "Process Tech News",
"description": "Analyze and summarize the raw tweets into a daily tech digest.",
"node_type": "event_loop",
"tools": [
"save_data",
"load_data"
],
"input_keys": [
"user_request",
"feedback",
"raw_tweets"
],
"output_keys": [
"daily_digest"
],
"success_criteria": "A high-quality, tech-focused news summary.",
"sub_agents": [
"fetch-tweets"
],
"flowchart_type": "subprocess",
"flowchart_shape": "subroutine",
"flowchart_color": "#4c7f7f"
},
{
"id": "review-digest",
"name": "Review Digest",
"description": "Present the news digest for user review and approval.",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"daily_digest"
],
"output_keys": [
"status",
"feedback"
],
"success_criteria": "User has reviewed the digest and provided feedback or approval.",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "process-news",
"target": "review-digest",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "review-digest",
"target": "process-news",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "review-digest",
"target": "process-news",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-subagent-3",
"source": "process-news",
"target": "fetch-tweets",
"condition": "always",
"description": "sub-agent delegation",
"label": "delegate"
},
{
"id": "edge-subagent-4",
"source": "fetch-tweets",
"target": "process-news",
"condition": "always",
"description": "sub-agent report back",
"label": "report"
}
],
"entry_node": "process-news",
"terminal_nodes": [
"review-digest"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"process-news": [
"process-news",
"fetch-tweets"
],
"review-digest": [
"review-digest"
]
}
}
@@ -0,0 +1,237 @@
{
"original_draft": {
"agent_name": "vulnerability_assessment",
"goal": "A passive, OSINT-based website vulnerability assessment agent that accepts a website domain, performs non-intrusive security scanning using purpose-built Python tools, produces letter-grade risk scores (A-F) per category, and delivers a structured vulnerability report with remediation guidance. The user is consulted after scanning to decide whether to investigate further or generate the final report.",
"description": "",
"success_criteria": [
"Overall risk grade (A-F) generated from combined scan results",
"At least 5 of 6 security categories scored (SSL/TLS, HTTP Headers, DNS, Network, Technology, Attack Surface)",
"At least 3 security findings identified across different categories",
"Every finding includes clear, actionable remediation steps a developer can follow",
"User is presented findings with risk grades and given checkpoint to continue deeper scanning or generate report"
],
"constraints": [
"Never execute active attacks, send exploit payloads, or perform actions that could trigger WAF/IDS systems. Passive and OSINT-based scanning only \u2014 no nmap, sqlmap, or attack payloads.",
"All findings and remediation steps must be written for developers using clear language, not security jargon"
],
"nodes": [
{
"id": "intake",
"name": "Intake",
"description": "Collect the target website domain from the user and confirm the scanning scope",
"node_type": "event_loop",
"tools": [],
"input_keys": [],
"output_keys": [
"target_domain"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "start",
"flowchart_shape": "stadium",
"flowchart_color": "#3fa66a"
},
{
"id": "passive-recon",
"name": "Passive Reconnaissance",
"description": "Run all 6 passive scanning tools against the target domain: SSL/TLS, HTTP headers, DNS security, port scanning, tech stack detection, and subdomain enumeration",
"node_type": "event_loop",
"tools": [
"ssl_tls_scan",
"http_headers_scan",
"dns_security_scan",
"port_scan",
"tech_stack_detect",
"subdomain_enumerate"
],
"input_keys": [
"target_domain",
"feedback"
],
"output_keys": [
"scan_results"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "risk-scoring",
"name": "Risk Scoring",
"description": "Calculate weighted letter grades (A-F) per security category and overall risk score from scan results",
"node_type": "event_loop",
"tools": [
"risk_score"
],
"input_keys": [
"scan_results"
],
"output_keys": [
"risk_report"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "process",
"flowchart_shape": "rectangle",
"flowchart_color": "#616d83"
},
{
"id": "findings-review",
"name": "Findings Review",
"description": "Present risk grades and security findings to the user, ask whether to continue deeper scanning or generate the final report",
"node_type": "event_loop",
"tools": [],
"input_keys": [
"scan_results",
"risk_report",
"target_domain"
],
"output_keys": [
"continue_scanning",
"feedback",
"all_findings"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "decision",
"flowchart_shape": "diamond",
"flowchart_color": "#d89d26"
},
{
"id": "final-report",
"name": "Risk Dashboard Report",
"description": "Generate an HTML risk dashboard with color-coded grades, category breakdown, detailed findings, and remediation steps",
"node_type": "event_loop",
"tools": [
"save_data",
"append_data",
"serve_file_to_user"
],
"input_keys": [
"all_findings",
"risk_report",
"target_domain"
],
"output_keys": [
"report_status"
],
"success_criteria": "",
"sub_agents": [],
"flowchart_type": "terminal",
"flowchart_shape": "stadium",
"flowchart_color": "#a04444"
}
],
"edges": [
{
"id": "edge-0",
"source": "intake",
"target": "passive-recon",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-1",
"source": "passive-recon",
"target": "risk-scoring",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-2",
"source": "risk-scoring",
"target": "findings-review",
"condition": "on_success",
"description": "",
"label": ""
},
{
"id": "edge-3",
"source": "findings-review",
"target": "passive-recon",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-4",
"source": "findings-review",
"target": "final-report",
"condition": "conditional",
"description": "",
"label": ""
},
{
"id": "edge-5",
"source": "final-report",
"target": "intake",
"condition": "on_success",
"description": "",
"label": ""
}
],
"entry_node": "intake",
"terminal_nodes": [
"final-report"
],
"flowchart_legend": {
"start": {
"shape": "stadium",
"color": "#3fa66a"
},
"terminal": {
"shape": "stadium",
"color": "#a04444"
},
"process": {
"shape": "rectangle",
"color": "#616d83"
},
"decision": {
"shape": "diamond",
"color": "#d89d26"
},
"io": {
"shape": "parallelogram",
"color": "#7a4fa5"
},
"document": {
"shape": "document",
"color": "#507485"
},
"database": {
"shape": "cylinder",
"color": "#459077"
},
"subprocess": {
"shape": "subroutine",
"color": "#4c7f7f"
},
"browser": {
"shape": "hexagon",
"color": "#3a4a9b"
}
}
},
"flowchart_map": {
"intake": [
"intake"
],
"passive-recon": [
"passive-recon"
],
"risk-scoring": [
"risk-scoring"
],
"findings-review": [
"findings-review"
],
"final-report": [
"final-report"
]
}
}