{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ds160-autofill",
    "name": "ds160-autofill",
    "source": "tencent",
    "type": "skill",
    "category": "AI 智能",
    "sourceUrl": "https://clawhub.ai/clulessboy/ds160-autofill",
    "canonicalUrl": "https://clawhub.ai/clulessboy/ds160-autofill",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ds160-autofill",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ds160-autofill",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/ds160-filler.js",
      "references/ds160-elements.yaml",
      "references/ds160-user-info.csv"
    ],
    "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. 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. 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/ds160-autofill"
    },
    "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/ds160-autofill",
    "agentPageUrl": "https://openagent3.xyz/skills/ds160-autofill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ds160-autofill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ds160-autofill/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. 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. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "DS-160 Auto-fill Skill",
        "body": "This skill automates the filling of US nonimmigrant visa DS-160 forms by combining:\n\nCDP (Chrome DevTools Protocol) for fast element location\nCSV data source for user information\nLLM assistance for complex cases (captcha, missing elements)\nSession persistence for resume capability\nChinese to English translation for user input"
      },
      {
        "title": "Starting a New Application",
        "body": "Provide CSV data: User must provide a CSV file with their personal information (use ds160-user-info.csv as template)\n\n\nOpen DS-160 website: Use browser tool to open https://ceac.state.gov/genniv/ with profile openclaw\n\n\nInitialize session: Load and execute scripts/ds160-filler.js to parse mappings and CSV\n\n\nStart filling: Begin with the home page, handle captcha with LLM, then proceed page by page"
      },
      {
        "title": "Resuming an Application",
        "body": "Load existing session: Check ds160/ds160-session.json for saved Application ID\n\n\nOpen application: Use the saved Application ID to resume on DS-160 website\n\n\nContinue filling: Load CSV from saved location and continue from last page"
      },
      {
        "title": "Step 1: Prepare Data",
        "body": "Always check if session exists first:\n\n// Read ds160/ds160-session.json\n// If exists → Resume mode\n// If not → New application mode\n\nNew application mode:\n\nAsk user for CSV file path or content\nSave CSV to ds160/ds160-user-info.csv using write tool\nInitialize session data in ds160/ds160-session.json:\n{\n  \"applicationId\": null,\n  \"securityQuestion\": null,\n  \"securityAnswer\": null,\n  \"currentPageIndex\": 0,\n  \"completedPages\": [],\n  \"startDate\": \"2026-02-06T21:00:00Z\"\n}\n\nResume mode:\n\nLoad CSV from ds160/ds160-user-info.csv\nLoad session from ds160/ds160-session.json\nReport current progress to user"
      },
      {
        "title": "Step 2: Initialize Browser",
        "body": "// Open browser with openclaw profile\nbrowser_start: { profile: \"openclaw\", targetUrl: \"https://ceac.state.gov/genniv/\" }\n\n// For resume mode, add Application ID to URL\n// Example: https://ceac.state.gov/GenNIV/Common/ConfirmApplicationID.aspx"
      },
      {
        "title": "Step 3: Fill Current Page",
        "body": "For each page in sequence:\n\nSnapshot page to understand current state:\nbrowser_snapshot: { refs: \"role\", profile: \"openclaw\" }\n\n\n\nLoad mappings from references/ds160-elements.yaml\n\n\nExecute fill logic using browser act with evaluate:\n// Load ds160-filler.js\n// Call fillPage(page, currentUrl, userData, yamlData)\n\n\n\nHandle results:\n\nSuccess: Continue to next page\nNeeds LLM assistance: Call LLM and retry\nNeeds user input: Save progress and pause"
      },
      {
        "title": "Step 4: Handle Special Cases",
        "body": "Captcha:\n\nTake screenshot of captcha area\nUse image tool to analyze captcha\nFill captcha code via browser evaluate\n\nMissing element:\n\nCall LLM with page snapshot\nAsk LLM to locate element and provide alternative selector\nRetry fill operation\n\nTranslation needed:\n\nCall LLM with field context and Chinese value\nAsk LLM to translate to appropriate English value\nUpdate CSV and retry fill operation\n\nMissing user data:\n\nIdentify which field is missing\nReport to user with field name and description\nImportant: Save current page using browser evaluate before pausing\nWait for user to provide data"
      },
      {
        "title": "Step 5: Save Progress & Continue",
        "body": "After completing a page:\n\nUpdate session data:\n{\n  \"applicationId\": \"AA00FBLCQP\",\n  \"securityQuestion\": \"What is the given name of your mother's mother?\",\n  \"securityAnswer\": \"LiMei\",\n  \"currentPageIndex\": 5,\n  \"completedPages\": [\"home\", \"security_question\", \"personal_1\", \"personal_2\"],\n  \"startDate\": \"2026-02-06T21:00:00Z\"\n}\n\n\n\nSave to file: write(ds160/ds160-session.json, JSON.stringify(sessionData))\n\n\nReport progress to user:\n\nCurrent page completed\nNext page name\nApplication ID\nSecurity question/answer (first time only)\nOverall progress (X/Y pages)\n\n\n\nClick \"Continue\" button to proceed to next page"
      },
      {
        "title": "CSV Format",
        "body": "The CSV must have these columns:\n\n页面 - Page name\n字段名称 - Field identifier (matches YAML name field)\n英文说明 - English description\n中文说明 - Chinese description\n必填 - Required? (是/否)\n示例值 - Example value\n用户填写 - User-provided value (this is what gets filled)\n\nImportant: Users can provide values in Chinese. The script includes a built-in translation dictionary for common fields (gender, marital status, countries, etc.). For fields not in the dictionary, LLM will be called for translation automatically."
      },
      {
        "title": "YAML Structure",
        "body": "Each page in ds160-elements.yaml contains:\n\npage_id: Unique page identifier\npage_name: Human-readable page name\nurl: Page URL pattern\nelements: Array of form elements with:\n\nid: Element ID\nname: Field identifier (matches CSV)\ntype: Element type (text, select, radio, checkbox, button)\nlabel: English label\nlabel_cn: Chinese label\nrequired: Is required?\noptions: Available options (for select)\ngroup: Radio group name"
      },
      {
        "title": "Element Not Found",
        "body": "Symptoms: fillPage returns needsLLM: true\n\nAction:\n\nTake page snapshot\nCall LLM with:\n\nCurrent URL\nElement information (id, name, type)\nPage HTML snippet\nAsk LLM to analyze and provide alternative selector\n\n\nRetry with LLM-suggested selector"
      },
      {
        "title": "Translation Needed",
        "body": "Symptoms: fillPage returns needsTranslation: true\n\nAction:\n\nCall LLM with translation context:\n\nField name and description (EN/CN)\nField type and available options\nOriginal Chinese value\nAsk LLM to translate to appropriate English value for the field\n\n\nUpdate CSV with translated value\nRetry fill operation with translated value\n\nExample LLM prompt for translation:\n\nI need to translate this Chinese value for a DS-160 form field:\n\nField: ${elementName}\nType: ${elementType}\nEnglish label: ${label}\nChinese label: ${label_cn}\nChinese value: \"${originalValue}\"\n\nAvailable options (if select): ${options}\n\nPlease provide the correct English value for this field. Consider:\n- The field type and context\n- Available options (if applicable)\n- Standard DS-160 terminology\n\nReturn only the English value, no explanation."
      },
      {
        "title": "Data Missing",
        "body": "Symptoms: fillPage returns needsUserInput: true\n\nAction:\n\nCRITICAL: Save current page before pausing:\n// Find and click \"Save\" button\nbrowser_act: {\n  request: { kind: \"click\", ref: \"save_button\" }\n}\n\n\nReport missing field to user:\n\nField name (English and Chinese)\nDescription\nWhether it's required\n\n\nUpdate CSV with new data using write tool\nResume filling"
      },
      {
        "title": "Captcha",
        "body": "Symptoms: Captcha image detected on page\n\nAction:\n\nTake screenshot of captcha area\nUse image tool:\nimage: {\n  image: \"/path/to/captcha.png\",\n  prompt: \"What is the code shown in this captcha? Return only the code characters.\"\n}\n\n\nFill captcha field via browser evaluate\nSubmit form"
      },
      {
        "title": "Page Sequence",
        "body": "The pages are filled in this order:\n\nhome - Start application, select location, handle captcha\nsecurity_question - Confirm Application ID, set security question\npersonal_1 - Personal information (name, gender, DOB)\npersonal_2 - Nationality, other nationalities, IDs\ntravel - Travel purpose, dates, who is paying\ntravel_companions - People traveling with you\nprevious_us_travel - Previous US visits\naddress_phone - Current address and phone\npassport - Passport information\nus_contact - US point of contact\nfamily_relatives - Family information\nwork_education - Work and education history\nsecurity_background - Security questions"
      },
      {
        "title": "Progress Reporting",
        "body": "Report to user after each page:\n\n✓ Completed: Personal Information 1\n📄 Next: Personal Information 2\n🆔 Application ID: AA00FBLCQP\n🔐 Security Question: What is the given name of your mother's mother?\n🔑 Answer: LiMei\n📊 Progress: 3/13 pages completed\n\nInclude in every report:\n\nApplication ID (once obtained)\nSecurity question and answer (once generated)\nCurrent progress (X/Y pages)\nNext page name"
      },
      {
        "title": "When to Call LLM",
        "body": "Captcha detection: Always use LLM to read captcha\nElement not found: When multiple locator strategies fail\nTranslation needed: When user provides Chinese value not in built-in dictionary\nComplex elements: For elements that require understanding context\nValidation errors: When form submission fails with unclear reason"
      },
      {
        "title": "LLM Prompts",
        "body": "For element location:\n\nI need to find this form element on a DS-160 page:\n- Element ID: {elementId}\n- Field name: {fieldName}\n- Element type: {elementType}\n- Current URL: {url}\n\nPlease analyze the page and provide:\n1. The correct way to locate this element (CSS selector or JavaScript)\n2. Any visible labels or text associated with it\n\nFor captcha:\n\nPlease read the captcha code from this image. Return only the code characters, no explanation."
      },
      {
        "title": "Translation Dictionary",
        "body": "The script includes a built-in translation dictionary for common Chinese values. This covers:\n\nGender:\n\n男/男性 → MALE\n女/女性 → FEMALE\n\nMarital Status:\n\n已婚 → MARRIED\n未婚 → SINGLE\n离异 → DIVORCED\n丧偶 → WIDOWED\n合法分居 → LEGALLY SEPARATED\n事实婚姻 → COMMON LAW MARRIAGE\n民事结合 → CIVIL UNION/DOMESTIC PARTNERSHIP\n\nYes/No:\n\n是/有/是，有 → Yes\n否/没有/否，没有 → No\n\nCountries:\n\n中国 → CHINA\n美国 → USA\n英国 → UNITED KINGDOM\n日本 → JAPAN\n韩国 → KOREA, SOUTH\n\nVisa Types:\n\n旅游/商务/商务/旅游 → B1/B2\n学生 → F1\n访问学者 → J1\n工作 → H1B\n\nPayment:\n\n自己/自费 → SELF\n公司 → OTHER COMPANY\n其他人 → OTHER PERSON\n\nRelationship (US Point of Contact):\n\n朋友 → Friend\n亲戚 → Relative\n同事 → Colleague\n配偶 → Spouse\n同学 → Classmate\n其他 → Other\n\nOther Values:\n\n不适用/不，不适用 → Does Not Apply\n\nFor values not in this dictionary, LLM will be automatically called for translation."
      },
      {
        "title": "Session Persistence",
        "body": "Session file location: ds160/ds160-session.json\n\nSession data structure:\n\n{\n  \"applicationId\": \"AA00FBLCQP\",\n  \"securityQuestion\": \"What is the given name of your mother's mother?\",\n  \"securityAnswer\": \"LiMei\",\n  \"currentPageIndex\": 5,\n  \"completedPages\": [\"home\", \"security_question\", \"personal_1\", \"personal_2\", \"travel\", \"travel_companions\"],\n  \"startDate\": \"2026-02-06T21:00:00Z\",\n  \"lastUpdated\": \"2026-02-06T21:30:00Z\"\n}\n\nWhen to save session:\n\nAfter completing each page\nBefore pausing for user input\nAfter receiving Application ID\nAfter setting security question/answer"
      },
      {
        "title": "Browser Automation Notes",
        "body": "Always use openclaw profile to maintain session across pages.\n\nUse browser act with evaluate for form filling:\n\nMore reliable than individual click/type actions\nCan execute complex JavaScript\nBetter error handling\n\nUse browser snapshot before each page:\n\nCheck page state\nIdentify dynamic elements\nVerify page loaded correctly"
      },
      {
        "title": "Testing Checklist",
        "body": "Before using this skill with real data:\n\nTest element location on each page type\n Verify CSV parsing with sample data\n Test captcha handling with LLM\n Verify session save/load functionality\n Test resume from middle of application\n Verify \"Save\" button clicking works before pauses\n Test with various element types (text, select, radio, checkbox)\n Verify progress reporting format\n Test Chinese to English translation"
      },
      {
        "title": "Example Usage",
        "body": "User says: \"Help me fill DS-160 form with my data in this.csv\"\n\nAgent workflow:\n\nLoad SKILL.md (this file)\nCheck for existing session\nSave CSV to ds160/ds160-user-info.csv\nInitialize session\nOpen browser to DS-160\nFill page by page\nReport progress after each page\nHandle errors with LLM or user input\nSave progress and continue\n\nUser says: \"Continue filling my DS-160 form\"\n\nAgent workflow:\n\nLoad SKILL.md\nLoad existing session\nOpen browser to DS-160 with Application ID\nLoad CSV from saved location\nContinue from last page\nReport progress\nComplete remaining pages"
      },
      {
        "title": "Files Reference",
        "body": "scripts/ds160-filler.js - Core automation logic (run via browser evaluate)\nreferences/ds160-elements.yaml - Element mappings (read-only)\nreferences/ds160-user-info.csv - User data template (copy to workspace)\nds160/ds160-session.json - Session persistence (auto-created)\nds160/ds160-user-info.csv - Active user data (auto-created)"
      },
      {
        "title": "Important Notes",
        "body": "NEVER submit the final form - this is for automation/testing only\nAlways save before pausing - prevents data loss\nReport progress frequently - at least every page\nKeep Application ID secure - it's sensitive information\nUse fake data for testing - don't use real personal info\nChinese input is supported - use built-in dictionary or LLM for translation"
      }
    ],
    "body": "DS-160 Auto-fill Skill\n\nThis skill automates the filling of US nonimmigrant visa DS-160 forms by combining:\n\nCDP (Chrome DevTools Protocol) for fast element location\nCSV data source for user information\nLLM assistance for complex cases (captcha, missing elements)\nSession persistence for resume capability\nChinese to English translation for user input\nQuick Start\nStarting a New Application\n\nProvide CSV data: User must provide a CSV file with their personal information (use ds160-user-info.csv as template)\n\nOpen DS-160 website: Use browser tool to open https://ceac.state.gov/genniv/ with profile openclaw\n\nInitialize session: Load and execute scripts/ds160-filler.js to parse mappings and CSV\n\nStart filling: Begin with the home page, handle captcha with LLM, then proceed page by page\n\nResuming an Application\n\nLoad existing session: Check ds160/ds160-session.json for saved Application ID\n\nOpen application: Use the saved Application ID to resume on DS-160 website\n\nContinue filling: Load CSV from saved location and continue from last page\n\nCore Workflow\nStep 1: Prepare Data\n\nAlways check if session exists first:\n\n// Read ds160/ds160-session.json\n// If exists → Resume mode\n// If not → New application mode\n\n\nNew application mode:\n\nAsk user for CSV file path or content\nSave CSV to ds160/ds160-user-info.csv using write tool\nInitialize session data in ds160/ds160-session.json:\n{\n  \"applicationId\": null,\n  \"securityQuestion\": null,\n  \"securityAnswer\": null,\n  \"currentPageIndex\": 0,\n  \"completedPages\": [],\n  \"startDate\": \"2026-02-06T21:00:00Z\"\n}\n\n\nResume mode:\n\nLoad CSV from ds160/ds160-user-info.csv\nLoad session from ds160/ds160-session.json\nReport current progress to user\nStep 2: Initialize Browser\n// Open browser with openclaw profile\nbrowser_start: { profile: \"openclaw\", targetUrl: \"https://ceac.state.gov/genniv/\" }\n\n// For resume mode, add Application ID to URL\n// Example: https://ceac.state.gov/GenNIV/Common/ConfirmApplicationID.aspx\n\nStep 3: Fill Current Page\n\nFor each page in sequence:\n\nSnapshot page to understand current state:\n\nbrowser_snapshot: { refs: \"role\", profile: \"openclaw\" }\n\n\nLoad mappings from references/ds160-elements.yaml\n\nExecute fill logic using browser act with evaluate:\n\n// Load ds160-filler.js\n// Call fillPage(page, currentUrl, userData, yamlData)\n\n\nHandle results:\n\nSuccess: Continue to next page\nNeeds LLM assistance: Call LLM and retry\nNeeds user input: Save progress and pause\nStep 4: Handle Special Cases\n\nCaptcha:\n\nTake screenshot of captcha area\nUse image tool to analyze captcha\nFill captcha code via browser evaluate\n\nMissing element:\n\nCall LLM with page snapshot\nAsk LLM to locate element and provide alternative selector\nRetry fill operation\n\nTranslation needed:\n\nCall LLM with field context and Chinese value\nAsk LLM to translate to appropriate English value\nUpdate CSV and retry fill operation\n\nMissing user data:\n\nIdentify which field is missing\nReport to user with field name and description\nImportant: Save current page using browser evaluate before pausing\nWait for user to provide data\nStep 5: Save Progress & Continue\n\nAfter completing a page:\n\nUpdate session data:\n\n{\n  \"applicationId\": \"AA00FBLCQP\",\n  \"securityQuestion\": \"What is the given name of your mother's mother?\",\n  \"securityAnswer\": \"LiMei\",\n  \"currentPageIndex\": 5,\n  \"completedPages\": [\"home\", \"security_question\", \"personal_1\", \"personal_2\"],\n  \"startDate\": \"2026-02-06T21:00:00Z\"\n}\n\n\nSave to file: write(ds160/ds160-session.json, JSON.stringify(sessionData))\n\nReport progress to user:\n\nCurrent page completed\nNext page name\nApplication ID\nSecurity question/answer (first time only)\nOverall progress (X/Y pages)\n\nClick \"Continue\" button to proceed to next page\n\nData Structures\nCSV Format\n\nThe CSV must have these columns:\n\n页面 - Page name\n字段名称 - Field identifier (matches YAML name field)\n英文说明 - English description\n中文说明 - Chinese description\n必填 - Required? (是/否)\n示例值 - Example value\n用户填写 - User-provided value (this is what gets filled)\n\nImportant: Users can provide values in Chinese. The script includes a built-in translation dictionary for common fields (gender, marital status, countries, etc.). For fields not in the dictionary, LLM will be called for translation automatically.\n\nYAML Structure\n\nEach page in ds160-elements.yaml contains:\n\npage_id: Unique page identifier\npage_name: Human-readable page name\nurl: Page URL pattern\nelements: Array of form elements with:\nid: Element ID\nname: Field identifier (matches CSV)\ntype: Element type (text, select, radio, checkbox, button)\nlabel: English label\nlabel_cn: Chinese label\nrequired: Is required?\noptions: Available options (for select)\ngroup: Radio group name\nError Handling\nElement Not Found\n\nSymptoms: fillPage returns needsLLM: true\n\nAction:\n\nTake page snapshot\nCall LLM with:\nCurrent URL\nElement information (id, name, type)\nPage HTML snippet\nAsk LLM to analyze and provide alternative selector\nRetry with LLM-suggested selector\nTranslation Needed\n\nSymptoms: fillPage returns needsTranslation: true\n\nAction:\n\nCall LLM with translation context:\nField name and description (EN/CN)\nField type and available options\nOriginal Chinese value\nAsk LLM to translate to appropriate English value for the field\nUpdate CSV with translated value\nRetry fill operation with translated value\n\nExample LLM prompt for translation:\n\nI need to translate this Chinese value for a DS-160 form field:\n\nField: ${elementName}\nType: ${elementType}\nEnglish label: ${label}\nChinese label: ${label_cn}\nChinese value: \"${originalValue}\"\n\nAvailable options (if select): ${options}\n\nPlease provide the correct English value for this field. Consider:\n- The field type and context\n- Available options (if applicable)\n- Standard DS-160 terminology\n\nReturn only the English value, no explanation.\n\nData Missing\n\nSymptoms: fillPage returns needsUserInput: true\n\nAction:\n\nCRITICAL: Save current page before pausing:\n// Find and click \"Save\" button\nbrowser_act: {\n  request: { kind: \"click\", ref: \"save_button\" }\n}\n\nReport missing field to user:\nField name (English and Chinese)\nDescription\nWhether it's required\nUpdate CSV with new data using write tool\nResume filling\nCaptcha\n\nSymptoms: Captcha image detected on page\n\nAction:\n\nTake screenshot of captcha area\nUse image tool:\nimage: {\n  image: \"/path/to/captcha.png\",\n  prompt: \"What is the code shown in this captcha? Return only the code characters.\"\n}\n\nFill captcha field via browser evaluate\nSubmit form\nPage Sequence\n\nThe pages are filled in this order:\n\nhome - Start application, select location, handle captcha\nsecurity_question - Confirm Application ID, set security question\npersonal_1 - Personal information (name, gender, DOB)\npersonal_2 - Nationality, other nationalities, IDs\ntravel - Travel purpose, dates, who is paying\ntravel_companions - People traveling with you\nprevious_us_travel - Previous US visits\naddress_phone - Current address and phone\npassport - Passport information\nus_contact - US point of contact\nfamily_relatives - Family information\nwork_education - Work and education history\nsecurity_background - Security questions\nProgress Reporting\n\nReport to user after each page:\n\n✓ Completed: Personal Information 1\n📄 Next: Personal Information 2\n🆔 Application ID: AA00FBLCQP\n🔐 Security Question: What is the given name of your mother's mother?\n🔑 Answer: LiMei\n📊 Progress: 3/13 pages completed\n\n\nInclude in every report:\n\nApplication ID (once obtained)\nSecurity question and answer (once generated)\nCurrent progress (X/Y pages)\nNext page name\nLLM Integration\nWhen to Call LLM\nCaptcha detection: Always use LLM to read captcha\nElement not found: When multiple locator strategies fail\nTranslation needed: When user provides Chinese value not in built-in dictionary\nComplex elements: For elements that require understanding context\nValidation errors: When form submission fails with unclear reason\nLLM Prompts\n\nFor element location:\n\nI need to find this form element on a DS-160 page:\n- Element ID: {elementId}\n- Field name: {fieldName}\n- Element type: {elementType}\n- Current URL: {url}\n\nPlease analyze the page and provide:\n1. The correct way to locate this element (CSS selector or JavaScript)\n2. Any visible labels or text associated with it\n\n\nFor captcha:\n\nPlease read the captcha code from this image. Return only the code characters, no explanation.\n\nTranslation Dictionary\n\nThe script includes a built-in translation dictionary for common Chinese values. This covers:\n\nGender:\n\n男/男性 → MALE\n女/女性 → FEMALE\n\nMarital Status:\n\n已婚 → MARRIED\n未婚 → SINGLE\n离异 → DIVORCED\n丧偶 → WIDOWED\n合法分居 → LEGALLY SEPARATED\n事实婚姻 → COMMON LAW MARRIAGE\n民事结合 → CIVIL UNION/DOMESTIC PARTNERSHIP\n\nYes/No:\n\n是/有/是，有 → Yes\n否/没有/否，没有 → No\n\nCountries:\n\n中国 → CHINA\n美国 → USA\n英国 → UNITED KINGDOM\n日本 → JAPAN\n韩国 → KOREA, SOUTH\n\nVisa Types:\n\n旅游/商务/商务/旅游 → B1/B2\n学生 → F1\n访问学者 → J1\n工作 → H1B\n\nPayment:\n\n自己/自费 → SELF\n公司 → OTHER COMPANY\n其他人 → OTHER PERSON\n\nRelationship (US Point of Contact):\n\n朋友 → Friend\n亲戚 → Relative\n同事 → Colleague\n配偶 → Spouse\n同学 → Classmate\n其他 → Other\n\nOther Values:\n\n不适用/不，不适用 → Does Not Apply\n\nFor values not in this dictionary, LLM will be automatically called for translation.\n\nSession Persistence\n\nSession file location: ds160/ds160-session.json\n\nSession data structure:\n\n{\n  \"applicationId\": \"AA00FBLCQP\",\n  \"securityQuestion\": \"What is the given name of your mother's mother?\",\n  \"securityAnswer\": \"LiMei\",\n  \"currentPageIndex\": 5,\n  \"completedPages\": [\"home\", \"security_question\", \"personal_1\", \"personal_2\", \"travel\", \"travel_companions\"],\n  \"startDate\": \"2026-02-06T21:00:00Z\",\n  \"lastUpdated\": \"2026-02-06T21:30:00Z\"\n}\n\n\nWhen to save session:\n\nAfter completing each page\nBefore pausing for user input\nAfter receiving Application ID\nAfter setting security question/answer\nBrowser Automation Notes\n\nAlways use openclaw profile to maintain session across pages.\n\nUse browser act with evaluate for form filling:\n\nMore reliable than individual click/type actions\nCan execute complex JavaScript\nBetter error handling\n\nUse browser snapshot before each page:\n\nCheck page state\nIdentify dynamic elements\nVerify page loaded correctly\nTesting Checklist\n\nBefore using this skill with real data:\n\n Test element location on each page type\n Verify CSV parsing with sample data\n Test captcha handling with LLM\n Verify session save/load functionality\n Test resume from middle of application\n Verify \"Save\" button clicking works before pauses\n Test with various element types (text, select, radio, checkbox)\n Verify progress reporting format\n Test Chinese to English translation\nExample Usage\n\nUser says: \"Help me fill DS-160 form with my data in this.csv\"\n\nAgent workflow:\n\nLoad SKILL.md (this file)\nCheck for existing session\nSave CSV to ds160/ds160-user-info.csv\nInitialize session\nOpen browser to DS-160\nFill page by page\nReport progress after each page\nHandle errors with LLM or user input\nSave progress and continue\n\nUser says: \"Continue filling my DS-160 form\"\n\nAgent workflow:\n\nLoad SKILL.md\nLoad existing session\nOpen browser to DS-160 with Application ID\nLoad CSV from saved location\nContinue from last page\nReport progress\nComplete remaining pages\nFiles Reference\nscripts/ds160-filler.js - Core automation logic (run via browser evaluate)\nreferences/ds160-elements.yaml - Element mappings (read-only)\nreferences/ds160-user-info.csv - User data template (copy to workspace)\nds160/ds160-session.json - Session persistence (auto-created)\nds160/ds160-user-info.csv - Active user data (auto-created)\nImportant Notes\nNEVER submit the final form - this is for automation/testing only\nAlways save before pausing - prevents data loss\nReport progress frequently - at least every page\nKeep Application ID secure - it's sensitive information\nUse fake data for testing - don't use real personal info\nChinese input is supported - use built-in dictionary or LLM for translation"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/clulessboy/ds160-autofill",
    "publisherUrl": "https://clawhub.ai/clulessboy/ds160-autofill",
    "owner": "clulessboy",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ds160-autofill",
    "downloadUrl": "https://openagent3.xyz/downloads/ds160-autofill",
    "agentUrl": "https://openagent3.xyz/skills/ds160-autofill/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ds160-autofill/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ds160-autofill/agent.md"
  }
}