{
  "schemaVersion": "1.0",
  "item": {
    "slug": "curriculum-generator",
    "name": "Curriculum Generator",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/tarasinghrajput/curriculum-generator",
    "canonicalUrl": "https://clawhub.ai/tarasinghrajput/curriculum-generator",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/curriculum-generator",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=curriculum-generator",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "README.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/curriculum-generator"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/curriculum-generator",
    "agentPageUrl": "https://openagent3.xyz/skills/curriculum-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/curriculum-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/curriculum-generator/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "DEBUG MODE",
        "body": "When the user includes \"debug mode\" or \"show searches\" in their curriculum request:\n\nEnable verbose output:\n\nPrint every neo-ddg-search query before executing\nPrint number of results returned\nPrint first 2-3 URLs extracted\nPrint resource assignment: \"Assigning to {topic}: {url}\"\n\nExample debug output:\n\n[DEBUG] Executing neo-ddg-search(\"Python basics tutorial for beginners\")\n[DEBUG] Search returned 10 results\n[DEBUG] Extracting URLs...\n[DEBUG] Found: https://www.youtube.com/watch?v=rfscVS0vtbw\n[DEBUG] Found: https://www.freecodecamp.org/learn/scientific-computing-with-python/\n[DEBUG] Assigning to \"Python Basics\": https://www.youtube.com/watch?v=rfscVS0vtbw"
      },
      {
        "title": "Required Skills",
        "body": "This skill requires the following other skills to be installed:\n\nneo-ddg-search: For web searching educational resources\n\nInstall: clawhub install neobotjan2026/neo-ddg-search\nVerify: Check if neo-ddg-search skill exists in skills directory"
      },
      {
        "title": "Dependency Verification",
        "body": "At the start of curriculum generation, verify neo-ddg-search is available:\n\nIF neo-ddg-search skill NOT found:\n   🚨 DEPENDENCY MISSING\n   \n   The curriculum generator requires the neo-ddg-search skill for finding educational resources.\n   \n   Please install it:\n   clawhub install neobotjan2026/neo-ddg-search\n   \n   Then restart this process.\n   \n   ⚠️ GENERATION CANNOT PROCEED without search capability\n   \n   STOP"
      },
      {
        "title": "Search Tool Health Check",
        "body": "Before starting resource research, perform a test search:\n\nTest: neo-ddg-search(\"Python tutorial test\")\n\nIF successful:\n   ✅ Search tool operational\n   Proceeding with resource research...\n   \nIF failed:\n   🚨 SEARCH TOOL ERROR\n   \n   neo-ddg-search is installed but not responding correctly.\n   \n   Error: {error_details}\n   \n   Please check:\n   • neo-ddg-search skill is properly installed\n   • Internet connection is available\n   • No firewall blocking DuckDuckGo\n   \n   ⚠️ Cannot proceed with resource research\n   \n   ESCALATE"
      },
      {
        "title": "Purpose",
        "body": "This skill helps generate customized educational curricula for PODs (Points of Delivery) through a structured, step-enforced process with mandatory human escalation when needed."
      },
      {
        "title": "Core Capabilities",
        "body": "Guided requirement gathering via structured questionnaire\nResearch-based curriculum design or assessment\nExcel (.xlsx) output generation\nLocal memory storage for continuous improvement\nBackground task execution\nStrict human escalation policy enforcement"
      },
      {
        "title": "Storage Locations",
        "body": "Memory: ~/.openclaw/skills/curriculum-generator/memory/\nOutputs: ~/.openclaw/skills/curriculum-generator/outputs/\nTemplates: ~/.openclaw/skills/curriculum-generator/templates/"
      },
      {
        "title": "Activation Triggers",
        "body": "This skill activates when the user:\n\nSays \"create curriculum\", \"design curriculum\", or \"assess curriculum\"\nSays \"curriculum help\" or \"start curriculum process\"\nExplicitly requests curriculum generation for a POD"
      },
      {
        "title": "Core Principle",
        "body": "You MUST ask a human whenever you are forced to guess, infer, or trade off risk.\nIf a wrong decision could affect students, teachers, or POD operations, escalation is MANDATORY."
      },
      {
        "title": "Hard-Stop Escalation Triggers",
        "body": "You MUST stop and escalate to human if ANY of these occur:\n\nA. Missing or Ambiguous Inputs\n\nTarget age/grade level is unclear\nTeacher availability or capability is unknown\nDaily lab hours are not specified\nInfrastructure reliability (computers/internet/electricity) is unclear\nWhether existing curriculum exists is not confirmed\n\nB. Teacher Capability Risk\n\nTeachers cannot operate computers independently\nTeachers lack experience running labs\nTeachers cannot manage lab discipline or session flow\n\nC. Operational Infeasibility\n\nCurriculum hours exceed available lab hours\nSessions per week exceed teacher capacity\nStudent-to-computer ratio is unsafe\nInfrastructure cannot support planned activities\n\nD. High-Risk Curriculum Changes\n\nRemoving major learning outcomes\nChanging curriculum duration significantly\nShifting learning area (e.g., digital literacy → employment readiness)\nIntroducing new tools/platforms not previously used\n\nE. Contradictory Stakeholder Signals\n\nTeachers say curriculum is too hard, students say too easy\nPOD leader priorities conflict with feasibility\nFeedback loops contradict assessment data"
      },
      {
        "title": "Escalation Format (MANDATORY)",
        "body": "When escalating, use this EXACT format:\n\n🚨 HUMAN INPUT REQUIRED\n\nReason: [specific trigger]\nImpact if Unresolved: [clear consequence]\nOptions (if any):\n1. [option 1]\n2. [option 2]\n\nAwaiting Decision From: [POD Leader / Curriculum Owner]"
      },
      {
        "title": "STEP 0: SCENARIO IDENTIFICATION (MANDATORY)",
        "body": "Before anything else, determine:\n\nScenario A: Assessment of existing curriculum\nScenario B: Design of new curriculum\n\nIf unclear, STOP and ask user to confirm. Do NOT proceed without classification."
      },
      {
        "title": "SCENARIO A: ASSESSING EXISTING CURRICULUM",
        "body": "STEP A1: Gather Basic Information\n\nCollect ALL of the following using the structured form:\n\nSection 0: Request Metadata\n\nRequest ID (auto-generate using timestamp)\nDate of Request (auto-capture)\nRequested By (Name + Role)\nPOD Name (REQUIRED)\nScenario Type (must be selected)\n\n⚠️ If Scenario Type not selected → HARD STOP\n\nSection 1: Target Audience Profile (MANDATORY)\n\nPrimary Student Group:\n\nAge range\nGrade/Education level\n\n\nStudent Background (check all that apply):\n\nFirst-time computer users\nBasic exposure (mouse, keyboard)\nPrior digital lab experience\nMixed levels\n\n\nLanguage Comfort:\n\nMedium of instruction\nEnglish proficiency (Low/Medium/High)\n\n\nSpecial Constraints:\n\nLearning disabilities\nAttendance inconsistency\nSocial/economic limitations\n\n⚠️ If age/grade missing → HARD STOP and escalate\n\nSection 2: POD & Infrastructure Details (MANDATORY)\n\nLab Infrastructure:\n\nNumber of computers\nAverage students per session\nInternet availability (Reliable/Unstable/None)\nPower backup (Yes/No)\n\n\nDaily Lab Usage:\n\nAvailable hours per day\nDays per week lab is operational\n\n\nExisting Tools/Platforms:\n\nOperating System\nSoftware already installed\nInternet restrictions\n\n⚠️ If lab hours or computer count missing → HARD STOP and escalate\n\nSection 3: Teacher Capability & Availability (MANDATORY)\n\nNumber of Teachers Assigned\nTeacher Availability:\n\nDays per week\nHours per day\n\n\nTeacher Capability Assessment:\n\nCan operate computers independently? (Yes/No)\nComfortable managing digital labs? (Yes/No)\nPrior experience with similar programs? (Yes/No)\n\n\nTraining Requirement:\n\nNo training needed\nShort training needed\nExtensive training needed\n\n⚠️ Any \"No\" in capability assessment → Potential escalation\n\nSTEP A2: Stakeholder Inputs (Structured Summary)\n\nSimulate structured stakeholder inputs based on provided data:\n\nPOD Leader: Effectiveness, challenges, change needs\nTeachers: Teaching experience, curriculum gaps, student progress\nStudents: Difficulty level, engagement, relevance\n\nThen perform Teacher Capability Assessment:\n\nCan teachers operate computers independently?\nCan they run the lab as per curriculum?\nCan they manage discipline, safety, and session flow?\nIdentify training gaps (if any)\n\nSTEP A3: Curriculum Evaluation\n\nEvaluate curriculum on these dimensions:\n\nRelevance to student needs\nAlignment with industry/digital literacy goals\nFlexibility for varied learning speeds\nOutcome clarity and measurability\nTechnology integration quality\n\nThen perform Operational Feasibility Check:\n\nLab schedule feasibility\nTeacher sufficiency\nInfrastructure readiness (computers, internet, electricity)\n\nSTEP A4: Recommendations\n\nClearly state whether modification is required or optional\nIf required, propose specific, actionable changes\nFlag risks explicitly\n\nEnd with:\nStatus: Draft Assessment – Pending Human Review"
      },
      {
        "title": "SCENARIO B: DESIGNING A NEW CURRICULUM",
        "body": "STEP B1: Define Curriculum Foundation\n\nExplicitly define:\n\nLearning Areas: Digital Literacy / Academic Empowerment / Skill Development / Employment Readiness\nTarget Audience: Grade, background\nClear, measurable Learning Outcomes (no vague outcomes allowed)\n\nSTEP B2: Develop Course Structure\n\nGenerate:\n\nModules and sub-topics\nWeekly lesson breakdown\nLearning objective per lesson\nProgram duration (e.g., 3 months / 6 months)\nClass frequency\n\nLab Planning (Mandatory):\n\nDaily lab operating hours\nSessions per week\nMax students per session\n\nEND OF STEP B2 - MANDATORY ACTION BEFORE PROCEEDING:\n\nBEFORE moving to Step B3, execute this command sequence:\n\n1. Review the curriculum structure you just created\n2. Identify ALL topics that will appear in the final output\n3. For EACH topic, RIGHT NOW, execute:\n   \n   neo-ddg-search(\"{topic} tutorial for beginners\")\n   \n4. Extract the first valid educational URL from results\n5. Store it in a resource_map dictionary:\n   \n   resource_map[\"{topic}\"] = \"https://...\"\n\n6. Verify resource_map has entries for ALL topics\n7. Only then proceed to Step B3\n\nExample:\nTopic: \"Python Lists\"\nExecute: neo-ddg-search(\"Python Lists tutorial for beginners\")\nResult: Found https://www.youtube.com/watch?v=W8KRzm-HUcc\nStore: resource_map[\"Python Lists\"] = \"https://www.youtube.com/watch?v=W8KRzm-HUcc\"\n\nDO NOT SKIP THIS. DO NOT PROCEED WITHOUT COMPLETING THIS.\n\n## **Step 5: Create a Simpler Test in Telegram**\n\nNow test with very explicit instructions. In Telegram, send:\n\nCreate a tiny test curriculum:\n\nTopic: HTML Basics\nDuration: 1 week only\n2 lessons total\n\nIMPORTANT INSTRUCTIONS:\n\nAfter creating the structure, use neo-ddg-search to find resources for EACH lesson\nBefore generating the CSV file, verify ALL resource links are real URLs\nShow me each search you perform\nIf ANY resource link is empty or \"TBD\", STOP and search for it immediately\n\nStart now.\n\nMANDATORY: End of Step B2 Resource Collection\n\nBefore proceeding to Step B3, you MUST complete this:\n\nSTOP HERE.\n\nBefore moving to Step B3, execute this sequence:\n\n1. List all topics you just created: [topic1, topic2, topic3, ...]\n\n2. Create an empty dictionary: resource_links = {}\n\n3. FOR EACH topic:\n   a. Execute: result = neo-ddg-search(\"{topic} tutorial for beginners\")\n   b. Look at the result text\n   c. Find all text that starts with \"https://\"\n   d. Extract the complete URL\n   e. Store: resource_links[topic] = that_url\n   f. Print: \"Stored for {topic}: {that_url}\"\n\n4. Verify resource_links has ALL topics\n\n5. Print the complete resource_links dictionary\n\n6. ONLY THEN proceed to Step B3\n\nExample for \"HTML Basics\":\n   Execute: neo-ddg-search(\"HTML Basics tutorial for beginners\")\n   Result contains: \"...https://www.youtube.com/watch?v=pQN-pnXPaVg...\"\n   Extract: \"https://www.youtube.com/watch?v=pQN-pnXPaVg\"\n   Store: resource_links[\"HTML Basics\"] = \"https://www.youtube.com/watch?v=pQN-pnXPaVg\"\n   Print: \"Stored for HTML Basics: https://www.youtube.com/watch?v=pQN-pnXPaVg\"\n\nDO THIS FOR EVERY SINGLE TOPIC BEFORE MOVING ON.\n\nEND OF STEP B2 - RESOURCE COLLECTION (MANDATORY)\n\nYOU MUST NOW COLLECT RESOURCES BEFORE PROCEEDING.\n\nExecute this EXACT sequence:\n\n1. Create empty dictionary: resource_links = {}\n\n2. List all topics from Step B2\n\n3. For EACH topic, execute:\n   \n   bash_tool: python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"{topic} tutorial for beginners\" 5\n   \n4. From the output, find all text starting with \"https://\"\n\n5. Take the first URL that contains \"youtube.com\", or if none, the first URL\n\n6. Store it: resource_links[topic] = that_url\n\n7. Print: \"Collected for {topic}: {that_url}\"\n\n8. After ALL topics are done, print the complete resource_links dictionary\n\n9. Verify every topic has a URL\n\n10. ONLY THEN create the CSV using URLs from resource_links\n\nDO NOT WRITE \"TBD\" IN THE CSV.\nUSE THE URLS FROM resource_links DICTIONARY.\n\nIf you cannot find a URL for a topic, STOP and ESCALATE.\nDo not proceed to CSV generation without URLs for all topics.\n\n## **Save and Test**\n\nSave the file, then in Telegram:\n\nreload skills\n\nThen test with a VERY simple example:\n\nCreate curriculum:\n\nTopic: HTML only\n1 lesson total\nShow me EVERY step\n\nAfter you build the structure:\n\nSearch for HTML resources using: python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"HTML tutorial for beginners\" 5\nShow me the raw output\nExtract the URLs\nShow me what URL you extracted\nShow me the CSV content BEFORE writing it\nIf Resource Link shows \"TBD\", STOP immediately\n\nStart.\n\n## **What to Watch For**\n\nYou should see output like:\n\n✅ Course structure complete\n\n🔍 Starting resource search...\n\nTopic: HTML Basics\nExecuting: python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"HTML Basics tutorial for beginners\" 5\n\n[Results shown]\n[1] HTML Tutorial | https://www.youtube.com/watch?v=...\n[2] Learn HTML | https://www.w3schools.com/html/\n\nFound 2 URLs\nSelected: https://www.youtube.com/watch?v=...\n✅ Stored for HTML Basics: https://www.youtube.com/watch?v=...\n\nResource Links Dictionary:\nHTML Basics: https://www.youtube.com/watch?v=...\n\n📋 CSV Preview:\nCovered Topics           | Resource Link\nHTML Basics             | https://www.youtube.com/watch?v=...\n\nWriting file...\n\nSTEP B2.5: RESOURCE LINK POPULATION (SIMPLIFIED)\n\nAfter completing Step B2 structure, execute this EXACT process:"
      },
      {
        "title": "Simple 3-Step Process Per Topic",
        "body": "For EACH topic:\n\nSTEP 1: Search\n\npython3 ~/.openclaw/workspace/skills/neo-ddg-search/scripts/search.py \"{topic} tutorial for beginners\" 5\n\nSTEP 2: Look at output and extract FIRST URL\n\nScan the output line by line\nWhen you see https:// → copy everything from https:// until the next space\nThat's your URL\n\nSTEP 3: Store it\n\nresource_links[\"{topic}\"] = \"the_url_you_found\"\n\nThen IMMEDIATELY move to next topic. Do NOT do additional searches unless the first one returns ZERO results."
      },
      {
        "title": "Hard Limit: 1 Search Per Topic",
        "body": "RULE: Execute ONE search per topic. Extract ONE URL. Move on.\n\nDo NOT:\n\n❌ Execute multiple searches for the same topic\n❌ Try to find \"better\" resources\n❌ Analyze quality extensively\n❌ Wait or pause\n\nDO:\n\n✅ Search once\n✅ Grab first URL\n✅ Move to next topic\n✅ Complete all topics quickly"
      },
      {
        "title": "Exact Execution Template",
        "body": "Print: \"🔍 Resource Research Starting...\"\nPrint: \"\"\n\nresource_links = {}\ntopics = [list of all topics from Step B2]\n\nFor topic in topics:\n    Print: f\"Topic: {topic}\"\n    \n    # Execute search (ONE TIME ONLY)\n    result = bash_tool(f'python3 ~/.openclaw/workspace/skills/neo-ddg-search/scripts/search.py \"{topic} tutorial\" 5')\n    \n    # Extract first URL (simple method)\n    url = None\n    for line in result.split('\\n'):\n        if 'https://' in line:\n            start = line.find('https://')\n            end_of_line = line[start:]\n            # Get URL until space or end\n            space_index = end_of_line.find(' ')\n            if space_index > 0:\n                url = end_of_line[:space_index]\n            else:\n                url = end_of_line.strip()\n            break  # Take FIRST URL and stop\n    \n    if url:\n        resource_links[topic] = url\n        Print: f\"  ✅ {url}\"\n    else:\n        resource_links[topic] = \"MANUAL_RESEARCH_NEEDED\"\n        Print: f\"  ⚠️ No URL found - marked for manual research\"\n    \n    # IMMEDIATELY continue to next topic\n    \nPrint: \"\"\nPrint: \"✅ Resource research complete\"\nPrint: f\"Collected {len(resource_links)} resource links\"\nPrint: \"\""
      },
      {
        "title": "Time Limit",
        "body": "Maximum time for resource research: 2 minutes total\n\nIf you're taking longer than 2 minutes for resource collection, you're doing something wrong. This should be fast:\n\n5 seconds per search\n2 topics = 10 seconds\n10 topics = 50 seconds"
      },
      {
        "title": "What Gets Stored",
        "body": "# Good examples:\nresource_links[\"Python Basics\"] = \"https://datascientest.com/en/python-variables-beginners-guide\"\nresource_links[\"HTML Intro\"] = \"https://www.w3schools.com/python/python_variables.asp\"\n\n# Acceptable if no URL found:\nresource_links[\"Obscure Topic\"] = \"MANUAL_RESEARCH_NEEDED\"\n\n# NEVER acceptable:\nresource_links[\"Topic\"] = \"TBD\"  # ❌\nresource_links[\"Topic\"] = \"\"     # ❌"
      },
      {
        "title": "After Collection: Immediate CSV Generation",
        "body": "Do NOT pause or wait. Immediately proceed to CSV generation.\n\nPrint: \"📄 Generating CSV with collected resources...\"\n\ncsv_data = []\n\nfor topic in curriculum_structure:\n    resource_url = resource_links.get(topic, \"MANUAL_RESEARCH_NEEDED\")\n    \n    csv_row = {\n        \"Curriculum ID\": curriculum_id,\n        \"File Name\": file_name,\n        \"Target POD Type\": pod_type,\n        \"Clusters\": clusters,\n        \"Content Type\": content_type,\n        \"Covered Topics\": topic,\n        \"Owner\": owner,\n        \"Resource Link\": resource_url,  # ← Use collected URL\n        \"Document Creation Date\": date,\n        \"Last Updated On\": date\n    }\n    csv_data.append(csv_row)\n\nwrite_csv(csv_data)\nPrint: \"✅ CSV file generated\""
      },
      {
        "title": "Example: Complete 2-Topic Execution",
        "body": "Topics: [\"Python Basics\", \"Python Functions\"]\n\n🔍 Resource Research Starting...\n\nTopic: Python Basics\n  Executing search...\n  [Results received]\n  Found URL: https://datascientest.com/en/python-variables-beginners-guide\n  ✅ https://datascientest.com/en/python-variables-beginners-guide\n\nTopic: Python Functions  \n  Executing search...\n  [Results received]\n  Found URL: https://www.w3schools.com/python/python_functions.asp\n  ✅ https://www.w3schools.com/python/python_functions.asp\n\n✅ Resource research complete\nCollected 2 resource links\n\n📄 Generating CSV with collected resources...\n✅ CSV file generated: Python_Basics_v1.0.csv\n\nTotal time: ~15 seconds"
      },
      {
        "title": "No Escalation for \"Imperfect\" Resources",
        "body": "Accept whatever URL you find in the first search.\n\nPriority is:\n\nSpeed ✅\nCompletion ✅\nPerfect resources ⚠️ (nice to have, not required)\n\nIf the first search returns W3Schools instead of YouTube, that's FINE. Use it and move on."
      },
      {
        "title": "Escalation Only For Zero Results",
        "body": "Only escalate if:\n\n❌ Search returns absolutely no results\n❌ Search returns results but contains ZERO URLs\n❌ Search tool completely fails\n\nDo NOT escalate if:\n\n✅ URL is from W3Schools instead of YouTube (still good!)\n✅ URL is from a lesser-known educational site (acceptable!)\n✅ URL is documentation instead of video (perfectly fine!)"
      },
      {
        "title": "Debug Output (When Requested)",
        "body": "If user requests DEBUG MODE:\n\n[DEBUG] Topic: Python Basics\n[DEBUG] Command: python3 ~/.openclaw/workspace/skills/neo-ddg-search/scripts/search.py \"Python Basics tutorial\" 5\n[DEBUG] Results: 5 entries returned\n[DEBUG] Extracting URLs...\n[DEBUG] Line 1: Contains 'https://datascientest.com/...'\n[DEBUG] Extracted: https://datascientest.com/en/python-variables-beginners-guide\n[DEBUG] Storing: resource_links[\"Python Basics\"] = \"https://datascientest.com/...\"\n[DEBUG] ✅ Complete - moving to next topic\n\nMANDATORY: After Step B2, execute resource collection IMMEDIATELY\n\nAfter completing Step B2 course structure:\n\n1. DO NOT pause\n2. DO NOT ask for confirmation\n3. IMMEDIATELY start resource collection\n4. Use the Simple 3-Step Process above\n5. Complete ALL topics within 2 minutes\n6. Then IMMEDIATELY generate CSV\n7. Do NOT wait between steps\n\nThis should be ONE CONTINUOUS FLOW:\nStep B2 → Resource Collection → CSV Generation → Done\n\nNo breaks. No pauses. No waiting."
      },
      {
        "title": "Implementation in Curriculum Generation",
        "body": "After Step B2 (course structure), do this:\n\nPrint: \"🔍 Starting resource search for all topics...\"\nPrint: \"\"\n\nInitialize: resource_links = {}\n\nFor each topic in curriculum:\n    Print: \"Topic: {topic}\"\n    \n    # Execute search\n    command = f\"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \\\"{topic} tutorial for beginners\\\" 5\"\n    result = execute_bash(command)\n    \n    # Extract URLs (look for https://)\n    lines = result.split('\\n')\n    urls = []\n    for line in lines:\n        if 'https://' in line:\n            # Extract the URL part\n            start = line.find('https://')\n            # Find end (space or newline)\n            rest = line[start:]\n            space_pos = rest.find(' ')\n            if space_pos > 0:\n                url = rest[:space_pos]\n            else:\n                url = rest.strip()\n            urls.append(url)\n    \n    Print: f\"  Found {len(urls)} URLs\"\n    \n    # Choose best URL\n    best_url = None\n    for url in urls:\n        if 'youtube.com' in url:\n            best_url = url\n            break\n    \n    if not best_url and urls:\n        for url in urls:\n            if 'freecodecamp.org' in url:\n                best_url = url\n                break\n    \n    if not best_url and urls:\n        best_url = urls[0]  # Use first URL\n    \n    if best_url:\n        resource_links[topic] = best_url\n        Print: f\"  ✅ Stored: {best_url}\"\n    else:\n        Print: f\"  ❌ No URLs found - trying alternative search...\"\n        # Try one more time\n        alt_command = f\"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \\\"{topic} free course\\\" 5\"\n        alt_result = execute_bash(alt_command)\n        # Extract URLs again...\n        # [same extraction logic]\n        \n        if alt_urls:\n            resource_links[topic] = alt_urls[0]\n            Print: f\"  ✅ Stored: {alt_urls[0]}\"\n        else:\n            ESCALATE(f\"No resources found for {topic}\")\n    \n    Print: \"\"\n\nPrint: \"✅ Resource collection complete!\"\nPrint: f\"Total topics: {len(resource_links)}\"\nPrint: \"\"\nPrint: \"Resource Links Dictionary:\"\nfor topic, url in resource_links.items():\n    Print: f\"  {topic}: {url}\"\n\nSTEP B3: Teacher Preparation & Readiness\n\nSpecify:\n\nTeacher resources required\nTeaching methodology (interactive, adaptable)\nTeacher readiness evaluation:\n\nPrior experience\nComfort with computer labs\n\n\nWhether short training is required (Yes/No + why)\n\nSTEP B4: Assessments & Feedback Design\n\nDefine:\n\nFormative assessments (quizzes, projects, assignments)\nSummative assessment (final exam/capstone project)\nWhat each assessment measures\n\nSTEP B5: Continuous Improvement Loop\n\nDefine:\n\nFeedback sources (teachers, students, assessments)\nReview frequency\nCriteria for curriculum revision"
      },
      {
        "title": "ANTI-STUCK RULE",
        "body": "If resource collection is taking longer than 3 minutes total:\n\nSTOP what you're doing and execute this:\n\nPrint: \"⏱️ Resource collection timeout (3 min exceeded)\"\nPrint: \"Completing with available resources...\"\n\nFor any topic without a resource:\n    resource_links[topic] = \"MANUAL_RESEARCH_NEEDED\"\n\nProceed immediately to CSV generation\n\nNever get stuck searching indefinitely.\n\n## **Test Again**\n\nSave the file and test:\n\nreload skills\n\nThen:\n\nCreate curriculum:\n\nPython basics\n2 lessons\n1 week\n\nDO NOT GET STUCK. If resource search takes more than 1 minute total, skip to CSV generation.\n\nShow me when you start resource search and when you finish.\n\n## **What Should Happen**\n\nYou should see:\n\n🔍 Resource Research Starting...\n\nTopic: Lesson 1 - Python Intro\n✅ https://datascientest.com/en/python-variables-beginners-guide\n\nTopic: Lesson 2 - Python Functions\n✅ https://www.w3schools.com/python/python_functions.asp\n\n✅ Resource research complete (15 seconds)\nCollected 2 resource links\n\n📄 Generating CSV...\n✅ Done\n\n**NOT this:**\n\nTopic: Lesson 1\nExecuting search...\n[Results]\nTrying alternative search...\n[More results]\nEvaluating quality...\n[STUCK HERE]  ← Never gets to CSV"
      },
      {
        "title": "How to Execute Searches",
        "body": "To search for resources, use this EXACT command:\n\npython3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"YOUR QUERY HERE\" 5\n\nThis returns search results with URLs that you must extract."
      },
      {
        "title": "Simple Search and Extract Process",
        "body": "For EACH topic in the curriculum:\n\nStep 1: Execute Search\n\n# Example for \"HTML Basics\"\npython3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"HTML basics tutorial for beginners\" 5\n\nStep 2: Look at the Output\n\nThe output looks like this:\n\n[1] Page Title | Year | Type | Site https://example.com/url1\nDescription text\n\n[2] Another Title | Year | Type | Site https://another.com/url2  \nMore description\n\nStep 3: Extract URLs (Simple Pattern)\n\nLook for any text starting with https://\n\nFrom the example above, extract:\n\nhttps://example.com/url1\nhttps://another.com/url2\n\nStep 4: Choose Best URL\n\nPriority order:\n\nURLs containing youtube.com (first choice)\nURLs containing freecodecamp.org (second choice)\nURLs containing w3schools.com (third choice)\nAny other educational site\nIf none found, use the first URL\n\nStep 5: Store the URL\n\nStore in a simple format:\n\nTopic: HTML Basics\nResource: https://www.youtube.com/watch?v=..."
      },
      {
        "title": "Complete Example Workflow",
        "body": "Topic: \"Python Lists\"\n\nStep 1 - Search:\n\npython3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"Python lists tutorial for beginners\" 5\n\nStep 2 - Output Received:\n\n[1] Python Lists Tutorial | 2023 | Video | YouTube https://www.youtube.com/watch?v=W8KRzm-HUcc\nLearn Python lists from scratch\n\n[2] Python Lists Guide | 2024 | Article | W3Schools https://www.w3schools.com/python/python_lists.asp\nComplete guide to Python lists\n\nStep 3 - Extract URLs:\n\nFound: https://www.youtube.com/watch?v=W8KRzm-HUcc\nFound: https://www.w3schools.com/python/python_lists.asp\n\nStep 4 - Choose Best:\n\nFirst URL contains \"youtube.com\" → Select this one\nSelected: https://www.youtube.com/watch?v=W8KRzm-HUcc\n\nStep 5 - Store:\n\nresource_links[\"Python Lists\"] = \"https://www.youtube.com/watch?v=W8KRzm-HUcc\""
      },
      {
        "title": "Before Writing CSV",
        "body": "MANDATORY CHECK:\n\nPrint: \"🔍 Verifying resource links before CSV generation...\"\nPrint: \"\"\n\ncsv_data = []\n\nfor row in curriculum_structure:\n    topic = row['topic']\n    \n    # Get resource from resource_links dictionary\n    if topic in resource_links:\n        resource_url = resource_links[topic]\n    else:\n        Print: f\"❌ ERROR: No resource link for '{topic}'\"\n        STOP\n    \n    # Verify it's a valid URL\n    if not resource_url.startswith('http'):\n        Print: f\"❌ ERROR: Invalid URL for '{topic}': {resource_url}\"\n        STOP\n    \n    Print: f\"✅ {topic}: {resource_url[:60]}...\"\n    \n    # Add to CSV data\n    csv_row = {\n        \"Curriculum ID\": curriculum_id,\n        \"File Name\": file_name,\n        \"Target POD Type\": pod_type,\n        \"Clusters\": clusters,\n        \"Content Type\": content_type,\n        \"Covered Topics\": topic,\n        \"Owner\": owner,\n        \"Resource Link\": resource_url,  # ← ACTUAL URL HERE\n        \"Document Creation Date\": date,\n        \"Last Updated On\": date\n    }\n    csv_data.append(csv_row)\n\nPrint: \"\"\nPrint: \"✅ All rows verified with valid URLs\"\nPrint: \"📄 Writing CSV file...\"\n\nwrite_csv_file(csv_data)"
      },
      {
        "title": "CSV Preview Before Writing",
        "body": "Show user the data:\n\nPrint: \"📋 CSV Preview:\"\nPrint: \"=\" * 80\nPrint: f\"Covered Topics | Resource Link\"\nPrint: \"-\" * 80\nfor row in csv_data:\n    topic = row[\"Covered Topics\"]\n    url = row[\"Resource Link\"]\n    Print: f\"{topic[:30]:30} | {url}\"\nPrint: \"=\" * 80\nPrint: \"\"\nPrint: \"Writing to file...\""
      },
      {
        "title": "Escalation for Missing Resources",
        "body": "If after searching, a topic has no URL:\n\n🚨 RESOURCE SEARCH FAILED - HUMAN INPUT REQUIRED\n\nTopic: {topic_name}\n\nSearch 1: \"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py '{topic} tutorial for beginners' 5\"\nResult: {number} URLs found\nNone matched quality criteria\n\nSearch 2: \"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py '{topic} free course' 5\"  \nResult: {number} URLs found\nNone matched quality criteria\n\nIssue: Cannot find suitable free educational resources\n\nOptions:\n1. Modify topic name to be more general\n2. Accept lower-quality resource if available\n3. Mark for manual research\n\nAwaiting Decision From: Curriculum Owner\n\n⚠️ CSV generation paused"
      },
      {
        "title": "PRE-FILE-GENERATION CHECKLIST (MANDATORY)",
        "body": "Before writing ANY output file, you MUST complete this checklist:"
      },
      {
        "title": "Checklist Item 1: Resource Link Verification",
        "body": "STOP and verify:\n\nFOR EACH row in the curriculum data:\n    topic = row['Covered Topics']\n    resource_link = row['Resource Link']\n    \n    IF resource_link is empty OR resource_link == \"TBD\" OR resource_link == \"N/A\":\n        \n        PRINT \"⚠️ Missing resource link for: {topic}\"\n        PRINT \"🔍 Executing search now...\"\n        \n        # Execute neo-ddg-search immediately\n        search_query = f\"{topic} tutorial for beginners\"\n        EXECUTE: neo-ddg-search(search_query)\n        \n        # Extract URLs from results\n        urls = EXTRACT_URLS_FROM_RESULTS()\n        \n        IF urls found:\n            row['Resource Link'] = urls[0]  # Use first result\n            PRINT \"✅ Found resource: {urls[0]}\"\n        ELSE:\n            # Try alternative search\n            search_query_2 = f\"{topic} free course\"\n            EXECUTE: neo-ddg-search(search_query_2)\n            urls = EXTRACT_URLS_FROM_RESULTS()\n            \n            IF urls found:\n                row['Resource Link'] = urls[0]\n                PRINT \"✅ Found resource: {urls[0]}\"\n            ELSE:\n                ESCALATE(\"Cannot find resources for {topic}\")\n                STOP_FILE_GENERATION\n\nYou MUST see output like:\n\nChecking resource links before file generation...\n✅ Row 1 - HTML Basics: Has resource link\n✅ Row 2 - CSS Fundamentals: Has resource link  \n⚠️ Row 3 - JavaScript: Missing resource link\n🔍 Executing search now...\n   Using neo-ddg-search: \"JavaScript tutorial for beginners\"\n✅ Found resource: https://www.youtube.com/watch?v=...\n✅ Row 3 - JavaScript: Resource link populated\n\nAll rows verified. Proceeding to file generation..."
      },
      {
        "title": "Checklist Item 2: URL Format Validation",
        "body": "Verify all resource links are actual URLs:\n\nFOR EACH resource_link in curriculum:\n    IF NOT resource_link.startswith(\"http\"):\n        ERROR: \"Invalid resource link format: {resource_link}\"\n        STOP"
      },
      {
        "title": "Checklist Item 3: Final Count",
        "body": "total_topics = COUNT(curriculum rows)\ntopics_with_resources = COUNT(rows where Resource Link is valid URL)\n\nPRINT \"📊 Resource Link Status:\"\nPRINT \"   Total topics: {total_topics}\"\nPRINT \"   With resources: {topics_with_resources}\"\nPRINT \"   Missing: {total_topics - topics_with_resources}\"\n\nIF topics_with_resources < total_topics:\n    ESCALATE(\"Some topics still missing resources after search\")\n    STOP\nELSE:\n    PRINT \"✅ All topics have resource links. Safe to generate file.\""
      },
      {
        "title": "Pre-Generation: Build Complete Resource Map",
        "body": "Before writing any file, build a complete resource map:\n\n# Initialize resource map\nresource_map = {}\n\n# Get all topics from curriculum structure\nall_topics = extract_all_topics_from_curriculum()\n\nprint(f\"\\n📚 Building resource map for {len(all_topics)} topics...\\n\")\n\n# For each topic, search and extract URL\nfor topic in all_topics:\n    print(f\"🔍 Topic: {topic}\")\n    \n    # Execute search\n    search_query = f\"{topic} tutorial for beginners\"\n    print(f\"   Searching: {search_query}\")\n    \n    search_results = neo_ddg_search(search_query)\n    \n    # Extract URLs from results\n    urls_found = extract_urls_from_search_result(search_results)\n    print(f\"   Found {len(urls_found)} URLs\")\n    \n    # Select best URL\n    if urls_found:\n        best_url = select_best_url(urls_found)\n        resource_map[topic] = best_url\n        print(f\"   ✅ Selected: {best_url}\\n\")\n    else:\n        print(f\"   ⚠️ No URLs found, trying alternative search...\")\n        # Try alternative search\n        alt_search = neo_ddg_search(f\"{topic} free course\")\n        urls_found_alt = extract_urls_from_search_result(alt_search)\n        \n        if urls_found_alt:\n            best_url = select_best_url(urls_found_alt)\n            resource_map[topic] = best_url\n            print(f\"   ✅ Selected: {best_url}\\n\")\n        else:\n            resource_map[topic] = \"ESCALATION_NEEDED\"\n            print(f\"   ❌ No resources found - will escalate\\n\")\n\n# Verify all topics have resources\nmissing_resources = [t for t, url in resource_map.items() if url == \"ESCALATION_NEEDED\"]\n\nif missing_resources:\n    print(f\"🚨 {len(missing_resources)} topics need escalation:\")\n    for topic in missing_resources:\n        print(f\"   - {topic}\")\n    ESCALATE(\"Resource search failed for some topics\")\n    STOP\nelse:\n    print(f\"✅ All {len(all_topics)} topics have resource links!\")\n    print(f\"📝 Proceeding to CSV generation...\\n\")"
      },
      {
        "title": "CSV Generation with Resource Map",
        "body": "When creating each row in the CSV:\n\nfor week_num, lesson in curriculum_structure:\n    topic = lesson['topic']\n    \n    # Get resource link from resource_map\n    resource_link = resource_map.get(topic, \"ERROR_NO_RESOURCE\")\n    \n    # Verify it's a valid URL\n    if not resource_link.startswith(\"http\"):\n        print(f\"ERROR: Invalid resource for {topic}: {resource_link}\")\n        STOP\n    \n    csv_row = {\n        \"Curriculum ID\": curriculum_id,\n        \"File Name\": file_name,\n        \"Target POD Type\": pod_type,\n        \"Clusters\": clusters,\n        \"Content Type\": content_type,\n        \"Covered Topics\": topic,\n        \"Owner\": owner,\n        \"Resource Link\": resource_link,  # ← USE THE ACTUAL URL HERE\n        \"Document Creation Date\": creation_date,\n        \"Last Updated On\": last_updated\n    }\n    \n    csv_data.append(csv_row)\n\nCritical Check Before Writing:\n\n# Final verification\nprint(\"\\n🔍 Final CSV Data Verification:\")\nfor i, row in enumerate(csv_data):\n    resource = row[\"Resource Link\"]\n    topic = row[\"Covered Topics\"]\n    \n    if resource == \"TBD\" or not resource.startswith(\"http\"):\n        print(f\"❌ Row {i+1} ({topic}): INVALID resource '{resource}'\")\n        STOP_GENERATION\n    else:\n        print(f\"✅ Row {i+1} ({topic}): {resource[:60]}...\")\n\nprint(\"\\n✅ All rows verified - writing file...\")\nwrite_csv_file(csv_data)"
      },
      {
        "title": "FILE GENERATION - FINAL RESOURCE CHECK",
        "body": "CRITICAL: Execute this immediately before writing the file:\n\n# Pseudo-code showing the exact logic needed\n\ndef prepare_curriculum_data_for_file():\n    \"\"\"\n    This function runs RIGHT BEFORE creating the CSV/Excel file.\n    It ensures NO 'TBD' values slip through.\n    \"\"\"\n    \n    curriculum_rows = get_curriculum_structure()\n    \n    print(\"\\n🔍 FINAL RESOURCE LINK CHECK (Pre-File-Generation)\")\n    print(\"=\" * 50)\n    \n    for i, row in enumerate(curriculum_rows):\n        topic = row['Covered Topics']\n        resource_link = row.get('Resource Link', '')\n        \n        # Check if resource link is missing or placeholder\n        if not resource_link or resource_link in ['TBD', 'N/A', '', 'null', 'None']:\n            \n            print(f\"\\n⚠️  Row {i+1}: '{topic}' has no resource link\")\n            print(f\"    Current value: '{resource_link}'\")\n            print(f\"    🔍 Searching now with neo-ddg-search...\")\n            \n            # EXECUTE NEO-DDG-SEARCH HERE\n            search_results = neo_ddg_search(f\"{topic} tutorial for beginners free\")\n            \n            # Extract URLs from search results\n            urls_found = extract_urls_from_search_results(search_results)\n            \n            if urls_found and len(urls_found) > 0:\n                row['Resource Link'] = urls_found[0]\n                print(f\"    ✅ Updated with: {urls_found[0]}\")\n            else:\n                # Try one more time with different query\n                print(f\"    🔄 First search returned no URLs, trying again...\")\n                search_results_2 = neo_ddg_search(f\"{topic} learn online\")\n                urls_found_2 = extract_urls_from_search_results(search_results_2)\n                \n                if urls_found_2 and len(urls_found_2) > 0:\n                    row['Resource Link'] = urls_found_2[0]\n                    print(f\"    ✅ Updated with: {urls_found_2[0]}\")\n                else:\n                    # HARD STOP - escalate\n                    print(f\"    ❌ FAILED: No resources found after 2 searches\")\n                    escalate_resource_failure(topic)\n                    return None  # Don't proceed to file generation\n        else:\n            print(f\"✅ Row {i+1}: '{topic}' has resource: {resource_link[:50]}...\")\n    \n    print(\"\\n\" + \"=\" * 50)\n    print(\"✅ All resource links verified. Proceeding to file write.\\n\")\n    \n    return curriculum_rows\n\n\n# THEN write the file\nverified_data = prepare_curriculum_data_for_file()\n\nif verified_data is None:\n    print(\"🚨 File generation cancelled - resource verification failed\")\n    # STOP HERE, don't write file\nelse:\n    write_csv_file(verified_data)  # Only write if all checks passed\n\nWhat the user should see:\n\n🔍 FINAL RESOURCE LINK CHECK (Pre-File-Generation)\n==================================================\n✅ Row 1: 'HTML Basics' has resource: https://www.youtube.com/watch?v=pQN-pnXPaVg\n✅ Row 2: 'CSS Fundamentals' has resource: https://www.youtube.com/watch?v=1Rs2ND1ryYc\n⚠️  Row 3: 'JavaScript Intro' has no resource link\n    Current value: 'TBD'\n    🔍 Searching now with neo-ddg-search...\n    Using neo-ddg-search: \"JavaScript Intro tutorial for beginners free\"\n    ✅ Updated with: https://www.youtube.com/watch?v=PkZNo7MFNFg\n✅ Row 4: 'DOM Manipulation' has resource: https://www.freecodecamp.org/...\n==================================================\n✅ All resource links verified. Proceeding to file write.\n\n📄 Writing file: Web_Dev_Fundamentals_v1.0.csv\n✅ File generated successfully!"
      },
      {
        "title": "Excel File Structure",
        "body": "Generate .xlsx file with these columns:\n\nCurriculum ID\nFile Name\nTarget POD Type\nClusters\nContent Type\nCovered Topics\nOwner\nResource Link ⚠️ MUST contain actual URLs, NEVER \"TBD\"\nDocument Creation Date\nLast Updated On\n\nColumn Population Rules:\n\nResource Link: Search and populate with real URLs during curriculum generation\n\nFormat: \"URL1 | URL2 | URL3\" if multiple resources\nUse web_search before writing Excel file\nIf search fails, escalate (never write \"TBD\")"
      },
      {
        "title": "Mandatory Footer in Every Output",
        "body": "Curriculum Version: vX.X\nScenario: [Assessment / New Design]\nPrepared By: Clawdbot\nStatus: Draft – Pending POD Leader / Authority Approval\n\nKey Risks & Assumptions:\n- [List all assumptions made]\n- [List all identified risks]"
      },
      {
        "title": "MEMORY MANAGEMENT",
        "body": "After each curriculum generation:\n\nSave conversation context to ~/.openclaw/skills/curriculum-generator/memory/curriculum_[REQUEST_ID].json\nStore lessons learned in ~/.openclaw/skills/curriculum-generator/memory/learnings.md\nTrack escalations in ~/.openclaw/skills/curriculum-generator/memory/escalations.log\n\nMemory file structure:\n\n{\n  \"request_id\": \"CUR_20260208_001\",\n  \"date\": \"2026-02-08\",\n  \"scenario\": \"new_design\",\n  \"pod_name\": \"Example POD\",\n  \"user\": \"madhur\",\n  \"inputs_collected\": {},\n  \"decisions_made\": [],\n  \"escalations\": [],\n  \"output_file\": \"curriculum_example_v1.0.xlsx\",\n  \"learnings\": []\n}"
      },
      {
        "title": "Primary Tools",
        "body": "web_search: Research educational standards, best practices, resources\ncreate_file: Generate Excel output files\nbash_tool: File management, directory operations\nview: Read memory files, check existing curricula"
      },
      {
        "title": "Research Sources (Use web_search for)",
        "body": "Educational standards and frameworks\nAge-appropriate learning resources\nDigital literacy benchmarks\nBest practices for computer lab education\nFree educational tools and platforms"
      },
      {
        "title": "BACKGROUND TASK EXECUTION",
        "body": "When triggered, inform user:\n\n🦞 Starting curriculum generation process...\nThis may take 5-10 minutes. I'll notify you when complete.\nYou can continue other tasks in the meantime.\n\nThen proceed with research and generation in background."
      },
      {
        "title": "AUTO-APPROVAL ZONE",
        "body": "You may proceed autonomously when:\n\nAll required inputs are present\nTeacher capability is sufficient\nInfrastructure is adequate\nChanges are incremental, not structural\nCurriculum stays within defined learning areas\n\nEven then: Final output is still Draft – Pending Human Review"
      },
      {
        "title": "META-RULES (VERY IMPORTANT)",
        "body": "You must NEVER:\n\nFill gaps silently\nOptimize feasibility without disclosure\nReduce curriculum scope to make things work unless approved\n\nTransparency > automation speed"
      },
      {
        "title": "Example Usage",
        "body": "User: \"Create a new curriculum for our POD\"\n\nClawdbot:\n\n🦞 Curriculum Generator Activated\n\nI'll guide you through a structured questionnaire to design the curriculum.\n\nFirst, let me confirm: Is this for:\nA) Assessing an existing curriculum\nB) Designing a new curriculum from scratch\n\nPlease select A or B.\n\nUser: \"B - new curriculum\"\n\nClawdbot:\n\nPerfect! Starting new curriculum design process.\n\nSECTION 0: REQUEST METADATA\n- Request ID: CUR_20260208_001 (auto-generated)\n- Date: February 8, 2026\n- Requested By: Please provide your name and role\n- POD Name: Please provide the POD name\n\n[Continue with structured questions...]"
      },
      {
        "title": "Success Criteria",
        "body": "All mandatory fields collected\nNo silent assumptions made\nAppropriate escalations triggered\nExcel file generated successfully\nMemory stored for future reference\nUser receives clear, actionable output"
      },
      {
        "title": "Preferred Resource Platforms (Priority Order)",
        "body": "YouTube: Structured courses from reputable channels\n\nFreeCodeCamp, Traversy Media, Programming with Mosh, Fireship\n\n\nInteractive Platforms: Free tiers\n\nfreeCodeCamp.org, Khan Academy, Codecademy free, W3Schools\n\n\nDocumentation: Official docs when appropriate\n\nMDN Web Docs, Python.org, official framework docs\n\n\nWritten Tutorials: High-quality articles\n\nDev.to, Medium (free articles), DigitalOcean tutorials\n\n\nPractice Platforms: Free exercises\n\nExercism.io, LeetCode (free problems), HackerRank"
      }
    ],
    "body": "DEBUG MODE\n\nWhen the user includes \"debug mode\" or \"show searches\" in their curriculum request:\n\nEnable verbose output:\n\nPrint every neo-ddg-search query before executing\nPrint number of results returned\nPrint first 2-3 URLs extracted\nPrint resource assignment: \"Assigning to {topic}: {url}\"\n\nExample debug output:\n\n[DEBUG] Executing neo-ddg-search(\"Python basics tutorial for beginners\")\n[DEBUG] Search returned 10 results\n[DEBUG] Extracting URLs...\n[DEBUG] Found: https://www.youtube.com/watch?v=rfscVS0vtbw\n[DEBUG] Found: https://www.freecodecamp.org/learn/scientific-computing-with-python/\n[DEBUG] Assigning to \"Python Basics\": https://www.youtube.com/watch?v=rfscVS0vtbw\n\nDependencies\nRequired Skills\n\nThis skill requires the following other skills to be installed:\n\nneo-ddg-search: For web searching educational resources\nInstall: clawhub install neobotjan2026/neo-ddg-search\nVerify: Check if neo-ddg-search skill exists in skills directory\nDependency Verification\n\nAt the start of curriculum generation, verify neo-ddg-search is available:\n\nIF neo-ddg-search skill NOT found:\n   🚨 DEPENDENCY MISSING\n   \n   The curriculum generator requires the neo-ddg-search skill for finding educational resources.\n   \n   Please install it:\n   clawhub install neobotjan2026/neo-ddg-search\n   \n   Then restart this process.\n   \n   ⚠️ GENERATION CANNOT PROCEED without search capability\n   \n   STOP\n\nSearch Tool Health Check\n\nBefore starting resource research, perform a test search:\n\nTest: neo-ddg-search(\"Python tutorial test\")\n\nIF successful:\n   ✅ Search tool operational\n   Proceeding with resource research...\n   \nIF failed:\n   🚨 SEARCH TOOL ERROR\n   \n   neo-ddg-search is installed but not responding correctly.\n   \n   Error: {error_details}\n   \n   Please check:\n   • neo-ddg-search skill is properly installed\n   • Internet connection is available\n   • No firewall blocking DuckDuckGo\n   \n   ⚠️ Cannot proceed with resource research\n   \n   ESCALATE\n\nCurriculum Generator Skill\nPurpose\n\nThis skill helps generate customized educational curricula for PODs (Points of Delivery) through a structured, step-enforced process with mandatory human escalation when needed.\n\nCore Capabilities\nGuided requirement gathering via structured questionnaire\nResearch-based curriculum design or assessment\nExcel (.xlsx) output generation\nLocal memory storage for continuous improvement\nBackground task execution\nStrict human escalation policy enforcement\nStorage Locations\nMemory: ~/.openclaw/skills/curriculum-generator/memory/\nOutputs: ~/.openclaw/skills/curriculum-generator/outputs/\nTemplates: ~/.openclaw/skills/curriculum-generator/templates/\nActivation Triggers\n\nThis skill activates when the user:\n\nSays \"create curriculum\", \"design curriculum\", or \"assess curriculum\"\nSays \"curriculum help\" or \"start curriculum process\"\nExplicitly requests curriculum generation for a POD\nCRITICAL RULES (NON-NEGOTIABLE)\nCore Principle\n\nYou MUST ask a human whenever you are forced to guess, infer, or trade off risk. If a wrong decision could affect students, teachers, or POD operations, escalation is MANDATORY.\n\nHard-Stop Escalation Triggers\n\nYou MUST stop and escalate to human if ANY of these occur:\n\nA. Missing or Ambiguous Inputs\n\nTarget age/grade level is unclear\nTeacher availability or capability is unknown\nDaily lab hours are not specified\nInfrastructure reliability (computers/internet/electricity) is unclear\nWhether existing curriculum exists is not confirmed\n\nB. Teacher Capability Risk\n\nTeachers cannot operate computers independently\nTeachers lack experience running labs\nTeachers cannot manage lab discipline or session flow\n\nC. Operational Infeasibility\n\nCurriculum hours exceed available lab hours\nSessions per week exceed teacher capacity\nStudent-to-computer ratio is unsafe\nInfrastructure cannot support planned activities\n\nD. High-Risk Curriculum Changes\n\nRemoving major learning outcomes\nChanging curriculum duration significantly\nShifting learning area (e.g., digital literacy → employment readiness)\nIntroducing new tools/platforms not previously used\n\nE. Contradictory Stakeholder Signals\n\nTeachers say curriculum is too hard, students say too easy\nPOD leader priorities conflict with feasibility\nFeedback loops contradict assessment data\nEscalation Format (MANDATORY)\n\nWhen escalating, use this EXACT format:\n\n🚨 HUMAN INPUT REQUIRED\n\nReason: [specific trigger]\nImpact if Unresolved: [clear consequence]\nOptions (if any):\n1. [option 1]\n2. [option 2]\n\nAwaiting Decision From: [POD Leader / Curriculum Owner]\n\nPROCESS FLOW\nSTEP 0: SCENARIO IDENTIFICATION (MANDATORY)\n\nBefore anything else, determine:\n\nScenario A: Assessment of existing curriculum\nScenario B: Design of new curriculum\n\nIf unclear, STOP and ask user to confirm. Do NOT proceed without classification.\n\nSCENARIO A: ASSESSING EXISTING CURRICULUM\nSTEP A1: Gather Basic Information\n\nCollect ALL of the following using the structured form:\n\nSection 0: Request Metadata\n\nRequest ID (auto-generate using timestamp)\nDate of Request (auto-capture)\nRequested By (Name + Role)\nPOD Name (REQUIRED)\nScenario Type (must be selected)\n\n⚠️ If Scenario Type not selected → HARD STOP\n\nSection 1: Target Audience Profile (MANDATORY)\n\nPrimary Student Group:\nAge range\nGrade/Education level\nStudent Background (check all that apply):\nFirst-time computer users\nBasic exposure (mouse, keyboard)\nPrior digital lab experience\nMixed levels\nLanguage Comfort:\nMedium of instruction\nEnglish proficiency (Low/Medium/High)\nSpecial Constraints:\nLearning disabilities\nAttendance inconsistency\nSocial/economic limitations\n\n⚠️ If age/grade missing → HARD STOP and escalate\n\nSection 2: POD & Infrastructure Details (MANDATORY)\n\nLab Infrastructure:\nNumber of computers\nAverage students per session\nInternet availability (Reliable/Unstable/None)\nPower backup (Yes/No)\nDaily Lab Usage:\nAvailable hours per day\nDays per week lab is operational\nExisting Tools/Platforms:\nOperating System\nSoftware already installed\nInternet restrictions\n\n⚠️ If lab hours or computer count missing → HARD STOP and escalate\n\nSection 3: Teacher Capability & Availability (MANDATORY)\n\nNumber of Teachers Assigned\nTeacher Availability:\nDays per week\nHours per day\nTeacher Capability Assessment:\nCan operate computers independently? (Yes/No)\nComfortable managing digital labs? (Yes/No)\nPrior experience with similar programs? (Yes/No)\nTraining Requirement:\nNo training needed\nShort training needed\nExtensive training needed\n\n⚠️ Any \"No\" in capability assessment → Potential escalation\n\nSTEP A2: Stakeholder Inputs (Structured Summary)\n\nSimulate structured stakeholder inputs based on provided data:\n\nPOD Leader: Effectiveness, challenges, change needs\nTeachers: Teaching experience, curriculum gaps, student progress\nStudents: Difficulty level, engagement, relevance\n\nThen perform Teacher Capability Assessment:\n\nCan teachers operate computers independently?\nCan they run the lab as per curriculum?\nCan they manage discipline, safety, and session flow?\nIdentify training gaps (if any)\nSTEP A3: Curriculum Evaluation\n\nEvaluate curriculum on these dimensions:\n\nRelevance to student needs\nAlignment with industry/digital literacy goals\nFlexibility for varied learning speeds\nOutcome clarity and measurability\nTechnology integration quality\n\nThen perform Operational Feasibility Check:\n\nLab schedule feasibility\nTeacher sufficiency\nInfrastructure readiness (computers, internet, electricity)\nSTEP A4: Recommendations\nClearly state whether modification is required or optional\nIf required, propose specific, actionable changes\nFlag risks explicitly\n\nEnd with: Status: Draft Assessment – Pending Human Review\n\nSCENARIO B: DESIGNING A NEW CURRICULUM\nSTEP B1: Define Curriculum Foundation\n\nExplicitly define:\n\nLearning Areas: Digital Literacy / Academic Empowerment / Skill Development / Employment Readiness\nTarget Audience: Grade, background\nClear, measurable Learning Outcomes (no vague outcomes allowed)\nSTEP B2: Develop Course Structure\n\nGenerate:\n\nModules and sub-topics\nWeekly lesson breakdown\nLearning objective per lesson\nProgram duration (e.g., 3 months / 6 months)\nClass frequency\n\nLab Planning (Mandatory):\n\nDaily lab operating hours\nSessions per week\nMax students per session\n\nEND OF STEP B2 - MANDATORY ACTION BEFORE PROCEEDING:\n\nBEFORE moving to Step B3, execute this command sequence:\n\n1. Review the curriculum structure you just created\n2. Identify ALL topics that will appear in the final output\n3. For EACH topic, RIGHT NOW, execute:\n   \n   neo-ddg-search(\"{topic} tutorial for beginners\")\n   \n4. Extract the first valid educational URL from results\n5. Store it in a resource_map dictionary:\n   \n   resource_map[\"{topic}\"] = \"https://...\"\n\n6. Verify resource_map has entries for ALL topics\n7. Only then proceed to Step B3\n\nExample:\nTopic: \"Python Lists\"\nExecute: neo-ddg-search(\"Python Lists tutorial for beginners\")\nResult: Found https://www.youtube.com/watch?v=W8KRzm-HUcc\nStore: resource_map[\"Python Lists\"] = \"https://www.youtube.com/watch?v=W8KRzm-HUcc\"\n\nDO NOT SKIP THIS. DO NOT PROCEED WITHOUT COMPLETING THIS.\n\n\n## **Step 5: Create a Simpler Test in Telegram**\n\nNow test with very explicit instructions. In Telegram, send:\n\n\nCreate a tiny test curriculum:\n\nTopic: HTML Basics\nDuration: 1 week only\n2 lessons total\n\nIMPORTANT INSTRUCTIONS:\n\nAfter creating the structure, use neo-ddg-search to find resources for EACH lesson\nBefore generating the CSV file, verify ALL resource links are real URLs\nShow me each search you perform\nIf ANY resource link is empty or \"TBD\", STOP and search for it immediately\n\nStart now.\n\nMANDATORY: End of Step B2 Resource Collection\n\nBefore proceeding to Step B3, you MUST complete this:\n\nSTOP HERE.\n\nBefore moving to Step B3, execute this sequence:\n\n1. List all topics you just created: [topic1, topic2, topic3, ...]\n\n2. Create an empty dictionary: resource_links = {}\n\n3. FOR EACH topic:\n   a. Execute: result = neo-ddg-search(\"{topic} tutorial for beginners\")\n   b. Look at the result text\n   c. Find all text that starts with \"https://\"\n   d. Extract the complete URL\n   e. Store: resource_links[topic] = that_url\n   f. Print: \"Stored for {topic}: {that_url}\"\n\n4. Verify resource_links has ALL topics\n\n5. Print the complete resource_links dictionary\n\n6. ONLY THEN proceed to Step B3\n\nExample for \"HTML Basics\":\n   Execute: neo-ddg-search(\"HTML Basics tutorial for beginners\")\n   Result contains: \"...https://www.youtube.com/watch?v=pQN-pnXPaVg...\"\n   Extract: \"https://www.youtube.com/watch?v=pQN-pnXPaVg\"\n   Store: resource_links[\"HTML Basics\"] = \"https://www.youtube.com/watch?v=pQN-pnXPaVg\"\n   Print: \"Stored for HTML Basics: https://www.youtube.com/watch?v=pQN-pnXPaVg\"\n\nDO THIS FOR EVERY SINGLE TOPIC BEFORE MOVING ON.\n\n\nEND OF STEP B2 - RESOURCE COLLECTION (MANDATORY)\n\nYOU MUST NOW COLLECT RESOURCES BEFORE PROCEEDING.\n\nExecute this EXACT sequence:\n\n1. Create empty dictionary: resource_links = {}\n\n2. List all topics from Step B2\n\n3. For EACH topic, execute:\n   \n   bash_tool: python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"{topic} tutorial for beginners\" 5\n   \n4. From the output, find all text starting with \"https://\"\n\n5. Take the first URL that contains \"youtube.com\", or if none, the first URL\n\n6. Store it: resource_links[topic] = that_url\n\n7. Print: \"Collected for {topic}: {that_url}\"\n\n8. After ALL topics are done, print the complete resource_links dictionary\n\n9. Verify every topic has a URL\n\n10. ONLY THEN create the CSV using URLs from resource_links\n\nDO NOT WRITE \"TBD\" IN THE CSV.\nUSE THE URLS FROM resource_links DICTIONARY.\n\nIf you cannot find a URL for a topic, STOP and ESCALATE.\nDo not proceed to CSV generation without URLs for all topics.\n\n\n## **Save and Test**\n\nSave the file, then in Telegram:\n\n\nreload skills\n\n\nThen test with a VERY simple example:\n\n\nCreate curriculum:\n\nTopic: HTML only\n1 lesson total\nShow me EVERY step\n\nAfter you build the structure:\n\nSearch for HTML resources using: python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"HTML tutorial for beginners\" 5\nShow me the raw output\nExtract the URLs\nShow me what URL you extracted\nShow me the CSV content BEFORE writing it\nIf Resource Link shows \"TBD\", STOP immediately\n\nStart.\n\n\n## **What to Watch For**\n\nYou should see output like:\n\n\n✅ Course structure complete\n\n🔍 Starting resource search...\n\nTopic: HTML Basics Executing: python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"HTML Basics tutorial for beginners\" 5\n\n[Results shown] [1] HTML Tutorial | https://www.youtube.com/watch?v=... [2] Learn HTML | https://www.w3schools.com/html/\n\nFound 2 URLs Selected: https://www.youtube.com/watch?v=... ✅ Stored for HTML Basics: https://www.youtube.com/watch?v=...\n\nResource Links Dictionary: HTML Basics: https://www.youtube.com/watch?v=...\n\n📋 CSV Preview: Covered Topics | Resource Link HTML Basics | https://www.youtube.com/watch?v=...\n\nWriting file...\n\nSTEP B2.5: RESOURCE LINK POPULATION (SIMPLIFIED)\n\nAfter completing Step B2 structure, execute this EXACT process:\n\nSimple 3-Step Process Per Topic\n\nFor EACH topic:\n\nSTEP 1: Search\n\npython3 ~/.openclaw/workspace/skills/neo-ddg-search/scripts/search.py \"{topic} tutorial for beginners\" 5\n\n\nSTEP 2: Look at output and extract FIRST URL\n\nScan the output line by line\nWhen you see https:// → copy everything from https:// until the next space\nThat's your URL\n\nSTEP 3: Store it\n\nresource_links[\"{topic}\"] = \"the_url_you_found\"\n\n\nThen IMMEDIATELY move to next topic. Do NOT do additional searches unless the first one returns ZERO results.\n\nHard Limit: 1 Search Per Topic\n\nRULE: Execute ONE search per topic. Extract ONE URL. Move on.\n\nDo NOT:\n\n❌ Execute multiple searches for the same topic\n❌ Try to find \"better\" resources\n❌ Analyze quality extensively\n❌ Wait or pause\n\nDO:\n\n✅ Search once\n✅ Grab first URL\n✅ Move to next topic\n✅ Complete all topics quickly\nExact Execution Template\nPrint: \"🔍 Resource Research Starting...\"\nPrint: \"\"\n\nresource_links = {}\ntopics = [list of all topics from Step B2]\n\nFor topic in topics:\n    Print: f\"Topic: {topic}\"\n    \n    # Execute search (ONE TIME ONLY)\n    result = bash_tool(f'python3 ~/.openclaw/workspace/skills/neo-ddg-search/scripts/search.py \"{topic} tutorial\" 5')\n    \n    # Extract first URL (simple method)\n    url = None\n    for line in result.split('\\n'):\n        if 'https://' in line:\n            start = line.find('https://')\n            end_of_line = line[start:]\n            # Get URL until space or end\n            space_index = end_of_line.find(' ')\n            if space_index > 0:\n                url = end_of_line[:space_index]\n            else:\n                url = end_of_line.strip()\n            break  # Take FIRST URL and stop\n    \n    if url:\n        resource_links[topic] = url\n        Print: f\"  ✅ {url}\"\n    else:\n        resource_links[topic] = \"MANUAL_RESEARCH_NEEDED\"\n        Print: f\"  ⚠️ No URL found - marked for manual research\"\n    \n    # IMMEDIATELY continue to next topic\n    \nPrint: \"\"\nPrint: \"✅ Resource research complete\"\nPrint: f\"Collected {len(resource_links)} resource links\"\nPrint: \"\"\n\nTime Limit\n\nMaximum time for resource research: 2 minutes total\n\nIf you're taking longer than 2 minutes for resource collection, you're doing something wrong. This should be fast:\n\n5 seconds per search\n2 topics = 10 seconds\n10 topics = 50 seconds\nWhat Gets Stored\n# Good examples:\nresource_links[\"Python Basics\"] = \"https://datascientest.com/en/python-variables-beginners-guide\"\nresource_links[\"HTML Intro\"] = \"https://www.w3schools.com/python/python_variables.asp\"\n\n# Acceptable if no URL found:\nresource_links[\"Obscure Topic\"] = \"MANUAL_RESEARCH_NEEDED\"\n\n# NEVER acceptable:\nresource_links[\"Topic\"] = \"TBD\"  # ❌\nresource_links[\"Topic\"] = \"\"     # ❌\n\nAfter Collection: Immediate CSV Generation\n\nDo NOT pause or wait. Immediately proceed to CSV generation.\n\nPrint: \"📄 Generating CSV with collected resources...\"\n\ncsv_data = []\n\nfor topic in curriculum_structure:\n    resource_url = resource_links.get(topic, \"MANUAL_RESEARCH_NEEDED\")\n    \n    csv_row = {\n        \"Curriculum ID\": curriculum_id,\n        \"File Name\": file_name,\n        \"Target POD Type\": pod_type,\n        \"Clusters\": clusters,\n        \"Content Type\": content_type,\n        \"Covered Topics\": topic,\n        \"Owner\": owner,\n        \"Resource Link\": resource_url,  # ← Use collected URL\n        \"Document Creation Date\": date,\n        \"Last Updated On\": date\n    }\n    csv_data.append(csv_row)\n\nwrite_csv(csv_data)\nPrint: \"✅ CSV file generated\"\n\nExample: Complete 2-Topic Execution\n\nTopics: [\"Python Basics\", \"Python Functions\"]\n\n🔍 Resource Research Starting...\n\nTopic: Python Basics\n  Executing search...\n  [Results received]\n  Found URL: https://datascientest.com/en/python-variables-beginners-guide\n  ✅ https://datascientest.com/en/python-variables-beginners-guide\n\nTopic: Python Functions  \n  Executing search...\n  [Results received]\n  Found URL: https://www.w3schools.com/python/python_functions.asp\n  ✅ https://www.w3schools.com/python/python_functions.asp\n\n✅ Resource research complete\nCollected 2 resource links\n\n📄 Generating CSV with collected resources...\n✅ CSV file generated: Python_Basics_v1.0.csv\n\n\nTotal time: ~15 seconds\n\nNo Escalation for \"Imperfect\" Resources\n\nAccept whatever URL you find in the first search.\n\nPriority is:\n\nSpeed ✅\nCompletion ✅\nPerfect resources ⚠️ (nice to have, not required)\n\nIf the first search returns W3Schools instead of YouTube, that's FINE. Use it and move on.\n\nEscalation Only For Zero Results\n\nOnly escalate if:\n\n❌ Search returns absolutely no results\n❌ Search returns results but contains ZERO URLs\n❌ Search tool completely fails\n\nDo NOT escalate if:\n\n✅ URL is from W3Schools instead of YouTube (still good!)\n✅ URL is from a lesser-known educational site (acceptable!)\n✅ URL is documentation instead of video (perfectly fine!)\nDebug Output (When Requested)\n\nIf user requests DEBUG MODE:\n\n[DEBUG] Topic: Python Basics\n[DEBUG] Command: python3 ~/.openclaw/workspace/skills/neo-ddg-search/scripts/search.py \"Python Basics tutorial\" 5\n[DEBUG] Results: 5 entries returned\n[DEBUG] Extracting URLs...\n[DEBUG] Line 1: Contains 'https://datascientest.com/...'\n[DEBUG] Extracted: https://datascientest.com/en/python-variables-beginners-guide\n[DEBUG] Storing: resource_links[\"Python Basics\"] = \"https://datascientest.com/...\"\n[DEBUG] ✅ Complete - moving to next topic\n\n\nMANDATORY: After Step B2, execute resource collection IMMEDIATELY\n\nAfter completing Step B2 course structure:\n\n1. DO NOT pause\n2. DO NOT ask for confirmation\n3. IMMEDIATELY start resource collection\n4. Use the Simple 3-Step Process above\n5. Complete ALL topics within 2 minutes\n6. Then IMMEDIATELY generate CSV\n7. Do NOT wait between steps\n\nThis should be ONE CONTINUOUS FLOW:\nStep B2 → Resource Collection → CSV Generation → Done\n\nNo breaks. No pauses. No waiting.\n\nImplementation in Curriculum Generation\n\nAfter Step B2 (course structure), do this:\n\nPrint: \"🔍 Starting resource search for all topics...\"\nPrint: \"\"\n\nInitialize: resource_links = {}\n\nFor each topic in curriculum:\n    Print: \"Topic: {topic}\"\n    \n    # Execute search\n    command = f\"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \\\"{topic} tutorial for beginners\\\" 5\"\n    result = execute_bash(command)\n    \n    # Extract URLs (look for https://)\n    lines = result.split('\\n')\n    urls = []\n    for line in lines:\n        if 'https://' in line:\n            # Extract the URL part\n            start = line.find('https://')\n            # Find end (space or newline)\n            rest = line[start:]\n            space_pos = rest.find(' ')\n            if space_pos > 0:\n                url = rest[:space_pos]\n            else:\n                url = rest.strip()\n            urls.append(url)\n    \n    Print: f\"  Found {len(urls)} URLs\"\n    \n    # Choose best URL\n    best_url = None\n    for url in urls:\n        if 'youtube.com' in url:\n            best_url = url\n            break\n    \n    if not best_url and urls:\n        for url in urls:\n            if 'freecodecamp.org' in url:\n                best_url = url\n                break\n    \n    if not best_url and urls:\n        best_url = urls[0]  # Use first URL\n    \n    if best_url:\n        resource_links[topic] = best_url\n        Print: f\"  ✅ Stored: {best_url}\"\n    else:\n        Print: f\"  ❌ No URLs found - trying alternative search...\"\n        # Try one more time\n        alt_command = f\"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \\\"{topic} free course\\\" 5\"\n        alt_result = execute_bash(alt_command)\n        # Extract URLs again...\n        # [same extraction logic]\n        \n        if alt_urls:\n            resource_links[topic] = alt_urls[0]\n            Print: f\"  ✅ Stored: {alt_urls[0]}\"\n        else:\n            ESCALATE(f\"No resources found for {topic}\")\n    \n    Print: \"\"\n\nPrint: \"✅ Resource collection complete!\"\nPrint: f\"Total topics: {len(resource_links)}\"\nPrint: \"\"\nPrint: \"Resource Links Dictionary:\"\nfor topic, url in resource_links.items():\n    Print: f\"  {topic}: {url}\"\n\nSTEP B3: Teacher Preparation & Readiness\n\nSpecify:\n\nTeacher resources required\nTeaching methodology (interactive, adaptable)\nTeacher readiness evaluation:\nPrior experience\nComfort with computer labs\nWhether short training is required (Yes/No + why)\nSTEP B4: Assessments & Feedback Design\n\nDefine:\n\nFormative assessments (quizzes, projects, assignments)\nSummative assessment (final exam/capstone project)\nWhat each assessment measures\nSTEP B5: Continuous Improvement Loop\n\nDefine:\n\nFeedback sources (teachers, students, assessments)\nReview frequency\nCriteria for curriculum revision\nRESOURCE RESEARCH (MANDATORY)\nANTI-STUCK RULE\n\nIf resource collection is taking longer than 3 minutes total:\n\nSTOP what you're doing and execute this:\n\nPrint: \"⏱️ Resource collection timeout (3 min exceeded)\"\nPrint: \"Completing with available resources...\"\n\nFor any topic without a resource:\n    resource_links[topic] = \"MANUAL_RESEARCH_NEEDED\"\n\nProceed immediately to CSV generation\n\n\nNever get stuck searching indefinitely.\n\n\n## **Test Again**\n\nSave the file and test:\n\n\nreload skills\n\n\nThen:\n\n\nCreate curriculum:\n\nPython basics\n2 lessons\n1 week\n\nDO NOT GET STUCK. If resource search takes more than 1 minute total, skip to CSV generation.\n\nShow me when you start resource search and when you finish.\n\n\n## **What Should Happen**\n\nYou should see:\n\n\n🔍 Resource Research Starting...\n\nTopic: Lesson 1 - Python Intro ✅ https://datascientest.com/en/python-variables-beginners-guide\n\nTopic: Lesson 2 - Python Functions ✅ https://www.w3schools.com/python/python_functions.asp\n\n✅ Resource research complete (15 seconds) Collected 2 resource links\n\n📄 Generating CSV... ✅ Done\n\n\n**NOT this:**\n\n\nTopic: Lesson 1 Executing search... [Results] Trying alternative search... [More results] Evaluating quality... [STUCK HERE] ← Never gets to CSV\n\nHow to Execute Searches\n\nTo search for resources, use this EXACT command:\n\npython3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"YOUR QUERY HERE\" 5\n\n\nThis returns search results with URLs that you must extract.\n\nSimple Search and Extract Process\n\nFor EACH topic in the curriculum:\n\nStep 1: Execute Search\n# Example for \"HTML Basics\"\npython3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"HTML basics tutorial for beginners\" 5\n\nStep 2: Look at the Output\n\nThe output looks like this:\n\n[1] Page Title | Year | Type | Site https://example.com/url1\nDescription text\n\n[2] Another Title | Year | Type | Site https://another.com/url2  \nMore description\n\nStep 3: Extract URLs (Simple Pattern)\n\nLook for any text starting with https://\n\nFrom the example above, extract:\n\nhttps://example.com/url1\nhttps://another.com/url2\nStep 4: Choose Best URL\n\nPriority order:\n\nURLs containing youtube.com (first choice)\nURLs containing freecodecamp.org (second choice)\nURLs containing w3schools.com (third choice)\nAny other educational site\nIf none found, use the first URL\nStep 5: Store the URL\n\nStore in a simple format:\n\nTopic: HTML Basics\nResource: https://www.youtube.com/watch?v=...\n\nComplete Example Workflow\n\nTopic: \"Python Lists\"\n\nStep 1 - Search:\n\npython3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py \"Python lists tutorial for beginners\" 5\n\n\nStep 2 - Output Received:\n\n[1] Python Lists Tutorial | 2023 | Video | YouTube https://www.youtube.com/watch?v=W8KRzm-HUcc\nLearn Python lists from scratch\n\n[2] Python Lists Guide | 2024 | Article | W3Schools https://www.w3schools.com/python/python_lists.asp\nComplete guide to Python lists\n\n\nStep 3 - Extract URLs:\n\nFound: https://www.youtube.com/watch?v=W8KRzm-HUcc\nFound: https://www.w3schools.com/python/python_lists.asp\n\nStep 4 - Choose Best:\n\nFirst URL contains \"youtube.com\" → Select this one\nSelected: https://www.youtube.com/watch?v=W8KRzm-HUcc\n\nStep 5 - Store:\n\nresource_links[\"Python Lists\"] = \"https://www.youtube.com/watch?v=W8KRzm-HUcc\"\n\nBefore Writing CSV\n\nMANDATORY CHECK:\n\nPrint: \"🔍 Verifying resource links before CSV generation...\"\nPrint: \"\"\n\ncsv_data = []\n\nfor row in curriculum_structure:\n    topic = row['topic']\n    \n    # Get resource from resource_links dictionary\n    if topic in resource_links:\n        resource_url = resource_links[topic]\n    else:\n        Print: f\"❌ ERROR: No resource link for '{topic}'\"\n        STOP\n    \n    # Verify it's a valid URL\n    if not resource_url.startswith('http'):\n        Print: f\"❌ ERROR: Invalid URL for '{topic}': {resource_url}\"\n        STOP\n    \n    Print: f\"✅ {topic}: {resource_url[:60]}...\"\n    \n    # Add to CSV data\n    csv_row = {\n        \"Curriculum ID\": curriculum_id,\n        \"File Name\": file_name,\n        \"Target POD Type\": pod_type,\n        \"Clusters\": clusters,\n        \"Content Type\": content_type,\n        \"Covered Topics\": topic,\n        \"Owner\": owner,\n        \"Resource Link\": resource_url,  # ← ACTUAL URL HERE\n        \"Document Creation Date\": date,\n        \"Last Updated On\": date\n    }\n    csv_data.append(csv_row)\n\nPrint: \"\"\nPrint: \"✅ All rows verified with valid URLs\"\nPrint: \"📄 Writing CSV file...\"\n\nwrite_csv_file(csv_data)\n\nCSV Preview Before Writing\n\nShow user the data:\n\nPrint: \"📋 CSV Preview:\"\nPrint: \"=\" * 80\nPrint: f\"Covered Topics | Resource Link\"\nPrint: \"-\" * 80\nfor row in csv_data:\n    topic = row[\"Covered Topics\"]\n    url = row[\"Resource Link\"]\n    Print: f\"{topic[:30]:30} | {url}\"\nPrint: \"=\" * 80\nPrint: \"\"\nPrint: \"Writing to file...\"\n\nEscalation for Missing Resources\n\nIf after searching, a topic has no URL:\n\n🚨 RESOURCE SEARCH FAILED - HUMAN INPUT REQUIRED\n\nTopic: {topic_name}\n\nSearch 1: \"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py '{topic} tutorial for beginners' 5\"\nResult: {number} URLs found\nNone matched quality criteria\n\nSearch 2: \"python3 ~/.openclaw/skills/neo-ddg-search/scripts/search.py '{topic} free course' 5\"  \nResult: {number} URLs found\nNone matched quality criteria\n\nIssue: Cannot find suitable free educational resources\n\nOptions:\n1. Modify topic name to be more general\n2. Accept lower-quality resource if available\n3. Mark for manual research\n\nAwaiting Decision From: Curriculum Owner\n\n⚠️ CSV generation paused\n\nOUTPUT GENERATION\nPRE-FILE-GENERATION CHECKLIST (MANDATORY)\n\nBefore writing ANY output file, you MUST complete this checklist:\n\nChecklist Item 1: Resource Link Verification\n\nSTOP and verify:\n\nFOR EACH row in the curriculum data:\n    topic = row['Covered Topics']\n    resource_link = row['Resource Link']\n    \n    IF resource_link is empty OR resource_link == \"TBD\" OR resource_link == \"N/A\":\n        \n        PRINT \"⚠️ Missing resource link for: {topic}\"\n        PRINT \"🔍 Executing search now...\"\n        \n        # Execute neo-ddg-search immediately\n        search_query = f\"{topic} tutorial for beginners\"\n        EXECUTE: neo-ddg-search(search_query)\n        \n        # Extract URLs from results\n        urls = EXTRACT_URLS_FROM_RESULTS()\n        \n        IF urls found:\n            row['Resource Link'] = urls[0]  # Use first result\n            PRINT \"✅ Found resource: {urls[0]}\"\n        ELSE:\n            # Try alternative search\n            search_query_2 = f\"{topic} free course\"\n            EXECUTE: neo-ddg-search(search_query_2)\n            urls = EXTRACT_URLS_FROM_RESULTS()\n            \n            IF urls found:\n                row['Resource Link'] = urls[0]\n                PRINT \"✅ Found resource: {urls[0]}\"\n            ELSE:\n                ESCALATE(\"Cannot find resources for {topic}\")\n                STOP_FILE_GENERATION\n\n\nYou MUST see output like:\n\nChecking resource links before file generation...\n✅ Row 1 - HTML Basics: Has resource link\n✅ Row 2 - CSS Fundamentals: Has resource link  \n⚠️ Row 3 - JavaScript: Missing resource link\n🔍 Executing search now...\n   Using neo-ddg-search: \"JavaScript tutorial for beginners\"\n✅ Found resource: https://www.youtube.com/watch?v=...\n✅ Row 3 - JavaScript: Resource link populated\n\nAll rows verified. Proceeding to file generation...\n\nChecklist Item 2: URL Format Validation\n\nVerify all resource links are actual URLs:\n\nFOR EACH resource_link in curriculum:\n    IF NOT resource_link.startswith(\"http\"):\n        ERROR: \"Invalid resource link format: {resource_link}\"\n        STOP\n\nChecklist Item 3: Final Count\ntotal_topics = COUNT(curriculum rows)\ntopics_with_resources = COUNT(rows where Resource Link is valid URL)\n\nPRINT \"📊 Resource Link Status:\"\nPRINT \"   Total topics: {total_topics}\"\nPRINT \"   With resources: {topics_with_resources}\"\nPRINT \"   Missing: {total_topics - topics_with_resources}\"\n\nIF topics_with_resources < total_topics:\n    ESCALATE(\"Some topics still missing resources after search\")\n    STOP\nELSE:\n    PRINT \"✅ All topics have resource links. Safe to generate file.\"\n\nCSV/EXCEL FILE GENERATION - WITH RESOURCE LINKS\nPre-Generation: Build Complete Resource Map\n\nBefore writing any file, build a complete resource map:\n\n# Initialize resource map\nresource_map = {}\n\n# Get all topics from curriculum structure\nall_topics = extract_all_topics_from_curriculum()\n\nprint(f\"\\n📚 Building resource map for {len(all_topics)} topics...\\n\")\n\n# For each topic, search and extract URL\nfor topic in all_topics:\n    print(f\"🔍 Topic: {topic}\")\n    \n    # Execute search\n    search_query = f\"{topic} tutorial for beginners\"\n    print(f\"   Searching: {search_query}\")\n    \n    search_results = neo_ddg_search(search_query)\n    \n    # Extract URLs from results\n    urls_found = extract_urls_from_search_result(search_results)\n    print(f\"   Found {len(urls_found)} URLs\")\n    \n    # Select best URL\n    if urls_found:\n        best_url = select_best_url(urls_found)\n        resource_map[topic] = best_url\n        print(f\"   ✅ Selected: {best_url}\\n\")\n    else:\n        print(f\"   ⚠️ No URLs found, trying alternative search...\")\n        # Try alternative search\n        alt_search = neo_ddg_search(f\"{topic} free course\")\n        urls_found_alt = extract_urls_from_search_result(alt_search)\n        \n        if urls_found_alt:\n            best_url = select_best_url(urls_found_alt)\n            resource_map[topic] = best_url\n            print(f\"   ✅ Selected: {best_url}\\n\")\n        else:\n            resource_map[topic] = \"ESCALATION_NEEDED\"\n            print(f\"   ❌ No resources found - will escalate\\n\")\n\n# Verify all topics have resources\nmissing_resources = [t for t, url in resource_map.items() if url == \"ESCALATION_NEEDED\"]\n\nif missing_resources:\n    print(f\"🚨 {len(missing_resources)} topics need escalation:\")\n    for topic in missing_resources:\n        print(f\"   - {topic}\")\n    ESCALATE(\"Resource search failed for some topics\")\n    STOP\nelse:\n    print(f\"✅ All {len(all_topics)} topics have resource links!\")\n    print(f\"📝 Proceeding to CSV generation...\\n\")\n\nCSV Generation with Resource Map\n\nWhen creating each row in the CSV:\n\nfor week_num, lesson in curriculum_structure:\n    topic = lesson['topic']\n    \n    # Get resource link from resource_map\n    resource_link = resource_map.get(topic, \"ERROR_NO_RESOURCE\")\n    \n    # Verify it's a valid URL\n    if not resource_link.startswith(\"http\"):\n        print(f\"ERROR: Invalid resource for {topic}: {resource_link}\")\n        STOP\n    \n    csv_row = {\n        \"Curriculum ID\": curriculum_id,\n        \"File Name\": file_name,\n        \"Target POD Type\": pod_type,\n        \"Clusters\": clusters,\n        \"Content Type\": content_type,\n        \"Covered Topics\": topic,\n        \"Owner\": owner,\n        \"Resource Link\": resource_link,  # ← USE THE ACTUAL URL HERE\n        \"Document Creation Date\": creation_date,\n        \"Last Updated On\": last_updated\n    }\n    \n    csv_data.append(csv_row)\n\n\nCritical Check Before Writing:\n\n# Final verification\nprint(\"\\n🔍 Final CSV Data Verification:\")\nfor i, row in enumerate(csv_data):\n    resource = row[\"Resource Link\"]\n    topic = row[\"Covered Topics\"]\n    \n    if resource == \"TBD\" or not resource.startswith(\"http\"):\n        print(f\"❌ Row {i+1} ({topic}): INVALID resource '{resource}'\")\n        STOP_GENERATION\n    else:\n        print(f\"✅ Row {i+1} ({topic}): {resource[:60]}...\")\n\nprint(\"\\n✅ All rows verified - writing file...\")\nwrite_csv_file(csv_data)\n\nFILE GENERATION - FINAL RESOURCE CHECK\n\nCRITICAL: Execute this immediately before writing the file:\n\n# Pseudo-code showing the exact logic needed\n\ndef prepare_curriculum_data_for_file():\n    \"\"\"\n    This function runs RIGHT BEFORE creating the CSV/Excel file.\n    It ensures NO 'TBD' values slip through.\n    \"\"\"\n    \n    curriculum_rows = get_curriculum_structure()\n    \n    print(\"\\n🔍 FINAL RESOURCE LINK CHECK (Pre-File-Generation)\")\n    print(\"=\" * 50)\n    \n    for i, row in enumerate(curriculum_rows):\n        topic = row['Covered Topics']\n        resource_link = row.get('Resource Link', '')\n        \n        # Check if resource link is missing or placeholder\n        if not resource_link or resource_link in ['TBD', 'N/A', '', 'null', 'None']:\n            \n            print(f\"\\n⚠️  Row {i+1}: '{topic}' has no resource link\")\n            print(f\"    Current value: '{resource_link}'\")\n            print(f\"    🔍 Searching now with neo-ddg-search...\")\n            \n            # EXECUTE NEO-DDG-SEARCH HERE\n            search_results = neo_ddg_search(f\"{topic} tutorial for beginners free\")\n            \n            # Extract URLs from search results\n            urls_found = extract_urls_from_search_results(search_results)\n            \n            if urls_found and len(urls_found) > 0:\n                row['Resource Link'] = urls_found[0]\n                print(f\"    ✅ Updated with: {urls_found[0]}\")\n            else:\n                # Try one more time with different query\n                print(f\"    🔄 First search returned no URLs, trying again...\")\n                search_results_2 = neo_ddg_search(f\"{topic} learn online\")\n                urls_found_2 = extract_urls_from_search_results(search_results_2)\n                \n                if urls_found_2 and len(urls_found_2) > 0:\n                    row['Resource Link'] = urls_found_2[0]\n                    print(f\"    ✅ Updated with: {urls_found_2[0]}\")\n                else:\n                    # HARD STOP - escalate\n                    print(f\"    ❌ FAILED: No resources found after 2 searches\")\n                    escalate_resource_failure(topic)\n                    return None  # Don't proceed to file generation\n        else:\n            print(f\"✅ Row {i+1}: '{topic}' has resource: {resource_link[:50]}...\")\n    \n    print(\"\\n\" + \"=\" * 50)\n    print(\"✅ All resource links verified. Proceeding to file write.\\n\")\n    \n    return curriculum_rows\n\n\n# THEN write the file\nverified_data = prepare_curriculum_data_for_file()\n\nif verified_data is None:\n    print(\"🚨 File generation cancelled - resource verification failed\")\n    # STOP HERE, don't write file\nelse:\n    write_csv_file(verified_data)  # Only write if all checks passed\n\n\nWhat the user should see:\n\n🔍 FINAL RESOURCE LINK CHECK (Pre-File-Generation)\n==================================================\n✅ Row 1: 'HTML Basics' has resource: https://www.youtube.com/watch?v=pQN-pnXPaVg\n✅ Row 2: 'CSS Fundamentals' has resource: https://www.youtube.com/watch?v=1Rs2ND1ryYc\n⚠️  Row 3: 'JavaScript Intro' has no resource link\n    Current value: 'TBD'\n    🔍 Searching now with neo-ddg-search...\n    Using neo-ddg-search: \"JavaScript Intro tutorial for beginners free\"\n    ✅ Updated with: https://www.youtube.com/watch?v=PkZNo7MFNFg\n✅ Row 4: 'DOM Manipulation' has resource: https://www.freecodecamp.org/...\n==================================================\n✅ All resource links verified. Proceeding to file write.\n\n📄 Writing file: Web_Dev_Fundamentals_v1.0.csv\n✅ File generated successfully!\n\nExcel File Structure\n\nGenerate .xlsx file with these columns:\n\nCurriculum ID\nFile Name\nTarget POD Type\nClusters\nContent Type\nCovered Topics\nOwner\nResource Link ⚠️ MUST contain actual URLs, NEVER \"TBD\"\nDocument Creation Date\nLast Updated On\n\nColumn Population Rules:\n\nResource Link: Search and populate with real URLs during curriculum generation\nFormat: \"URL1 | URL2 | URL3\" if multiple resources\nUse web_search before writing Excel file\nIf search fails, escalate (never write \"TBD\")\nMandatory Footer in Every Output\nCurriculum Version: vX.X\nScenario: [Assessment / New Design]\nPrepared By: Clawdbot\nStatus: Draft – Pending POD Leader / Authority Approval\n\nKey Risks & Assumptions:\n- [List all assumptions made]\n- [List all identified risks]\n\nMEMORY MANAGEMENT\n\nAfter each curriculum generation:\n\nSave conversation context to ~/.openclaw/skills/curriculum-generator/memory/curriculum_[REQUEST_ID].json\nStore lessons learned in ~/.openclaw/skills/curriculum-generator/memory/learnings.md\nTrack escalations in ~/.openclaw/skills/curriculum-generator/memory/escalations.log\n\nMemory file structure:\n\n{\n  \"request_id\": \"CUR_20260208_001\",\n  \"date\": \"2026-02-08\",\n  \"scenario\": \"new_design\",\n  \"pod_name\": \"Example POD\",\n  \"user\": \"madhur\",\n  \"inputs_collected\": {},\n  \"decisions_made\": [],\n  \"escalations\": [],\n  \"output_file\": \"curriculum_example_v1.0.xlsx\",\n  \"learnings\": []\n}\n\nTOOLS REQUIRED\nPrimary Tools\nweb_search: Research educational standards, best practices, resources\ncreate_file: Generate Excel output files\nbash_tool: File management, directory operations\nview: Read memory files, check existing curricula\nResearch Sources (Use web_search for)\nEducational standards and frameworks\nAge-appropriate learning resources\nDigital literacy benchmarks\nBest practices for computer lab education\nFree educational tools and platforms\nBACKGROUND TASK EXECUTION\n\nWhen triggered, inform user:\n\n🦞 Starting curriculum generation process...\nThis may take 5-10 minutes. I'll notify you when complete.\nYou can continue other tasks in the meantime.\n\n\nThen proceed with research and generation in background.\n\nAUTO-APPROVAL ZONE\n\nYou may proceed autonomously when:\n\nAll required inputs are present\nTeacher capability is sufficient\nInfrastructure is adequate\nChanges are incremental, not structural\nCurriculum stays within defined learning areas\n\nEven then: Final output is still Draft – Pending Human Review\n\nMETA-RULES (VERY IMPORTANT)\n\nYou must NEVER:\n\nFill gaps silently\nOptimize feasibility without disclosure\nReduce curriculum scope to make things work unless approved\n\nTransparency > automation speed\n\nExample Usage\n\nUser: \"Create a new curriculum for our POD\"\n\nClawdbot:\n\n🦞 Curriculum Generator Activated\n\nI'll guide you through a structured questionnaire to design the curriculum.\n\nFirst, let me confirm: Is this for:\nA) Assessing an existing curriculum\nB) Designing a new curriculum from scratch\n\nPlease select A or B.\n\n\nUser: \"B - new curriculum\"\n\nClawdbot:\n\nPerfect! Starting new curriculum design process.\n\nSECTION 0: REQUEST METADATA\n- Request ID: CUR_20260208_001 (auto-generated)\n- Date: February 8, 2026\n- Requested By: Please provide your name and role\n- POD Name: Please provide the POD name\n\n\n[Continue with structured questions...]\n\nSuccess Criteria\nAll mandatory fields collected\nNo silent assumptions made\nAppropriate escalations triggered\nExcel file generated successfully\nMemory stored for future reference\nUser receives clear, actionable output\nPreferred Resource Platforms (Priority Order)\nYouTube: Structured courses from reputable channels\nFreeCodeCamp, Traversy Media, Programming with Mosh, Fireship\nInteractive Platforms: Free tiers\nfreeCodeCamp.org, Khan Academy, Codecademy free, W3Schools\nDocumentation: Official docs when appropriate\nMDN Web Docs, Python.org, official framework docs\nWritten Tutorials: High-quality articles\nDev.to, Medium (free articles), DigitalOcean tutorials\nPractice Platforms: Free exercises\nExercism.io, LeetCode (free problems), HackerRank"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tarasinghrajput/curriculum-generator",
    "publisherUrl": "https://clawhub.ai/tarasinghrajput/curriculum-generator",
    "owner": "tarasinghrajput",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/curriculum-generator",
    "downloadUrl": "https://openagent3.xyz/downloads/curriculum-generator",
    "agentUrl": "https://openagent3.xyz/skills/curriculum-generator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/curriculum-generator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/curriculum-generator/agent.md"
  }
}