{
  "schemaVersion": "1.0",
  "item": {
    "slug": "smoothbrowser",
    "name": "SmoothBrowser",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/antoniocirclemind/smoothbrowser",
    "canonicalUrl": "https://clawhub.ai/antoniocirclemind/smoothbrowser",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/smoothbrowser",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=smoothbrowser",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.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. 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",
      "slug": "smoothbrowser",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-09T03:20:05.265Z",
      "expiresAt": "2026-05-16T03:20:05.265Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=smoothbrowser",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=smoothbrowser",
        "contentDisposition": "attachment; filename=\"smoothbrowser-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "smoothbrowser"
      },
      "scope": "item",
      "summary": "Item download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this item.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/smoothbrowser"
    },
    "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/smoothbrowser",
    "agentPageUrl": "https://openagent3.xyz/skills/smoothbrowser/agent",
    "manifestUrl": "https://openagent3.xyz/skills/smoothbrowser/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/smoothbrowser/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": "Smooth Browser",
        "body": "Smooth CLI is a browser for AI agents to interact with websites, authenticate, scrape data, and perform complex web-based tasks using natural language."
      },
      {
        "title": "Prerequisites",
        "body": "Assume the Smooth CLI is already installed. If not, you can install it by running:\n\npip install smooth-py\n\nAssume an API key is already configured. If you encounter authentication errors, configure it with:\n\nsmooth config --api-key <api-key>\n\nTo verify the configuration:\n\nsmooth config --show\n\nGet an API key at https://app.smooth.sh\n\nIf the account is out of credits, ask the user to upgrade their plan at https://app.smooth.sh"
      },
      {
        "title": "1. Create a Profile (Optional)",
        "body": "Profiles are useful to persist cookies, login sessions, and browser state between sessions.\n\nsmooth create-profile --profile-id \"my-profile\"\n\nList existing profiles:\n\nsmooth list-profiles"
      },
      {
        "title": "2. Start a Browser Session",
        "body": "smooth start-session --profile-id \"my-profile\" --url \"https://example.com\"\n\nOptions:\n\n--profile-id - Use a specific profile (optional, creates anonymous session if not provided)\n--url - Initial URL to navigate to (optional)\n--files - Comma-separated file IDs to make available in the session (optional)\n--device mobile|desktop - Device type (default: mobile)\n--profile-read-only - Load profile without saving changes\n--allowed-urls - Comma-separated URL patterns to restrict access to certain URLs only (e.g., \"https://example.com/,https://api.example.com/\")\n--no-proxy - Disable the default proxy (see note below)\n\nImportant: Save the session ID from the output - you'll need it for all subsequent commands.\n\nProxy behavior: By default, the CLI automatically configures a built-in proxy for the browser session. If a website blocks the proxy or you need direct connections, disable it with --no-proxy."
      },
      {
        "title": "3. Run Tasks in the Session",
        "body": "Execute tasks using natural language:\n\nsmooth run -- <session-id> \"Go to the LocalLLM subreddit and find the top 3 posts\"\n\nWith structured output (for tasks requiring interaction):\n\nsmooth run -- <session-id> \"Search for 'wireless headphones', filter by 4+ stars, sort by price, and extract the top 3 results\" \\\n  --url \"https://shop.example.com\" \\\n  --response-model '{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"product\":{\"type\":\"string\",\"description\":\"Thenameoftheproductbeingdescribed.\"},\"sentiment\":{\"type\":\"string\",\"enum\":[\"positive\",\"negative\",\"neutral\"],\"description\":\"The overall sentiment about the product.\"}},\"required\":[\"product\",\"sentiment\"]}}'\n\nWith metadata (the agent will be):\n\nsmooth run -- <session-id> \"Fill out the form with user information\" \\\n  --metadata '{\"email\":\"user@example.com\",\"name\":\"John Doe\"}'\n\nOptions:\n\n--url - Navigate to this URL before running the task\n--metadata - JSON object with variables for the task\n--response-model - JSON schema for structured output\n--max-steps - Maximum agent steps (default: 32)\n--json - Output results as JSON\n\nNotes:\nIt's important that you give tasks at the right level of abstraction. Not too prescriptive - e.g. single-step actions - and not too broad or vague.\n\nGood tasks:\n\n\"Search on Linkedin for people working as SDEs at Amazon, and return 5 profile urls\"\n\"Find the price of an iPhone 17 on Amazon\"\n\nBad tasks:\n\n\"Click search\" -> too prescriptive!\n\"Load google.com, write 'restaurants near me', click search, wait for the page to load, extract the top 5 results, and return them.\" -> too prescriptive! you can say \"search restaurants near me on google and return the top 5 results\"\n\"Find software engineers that would be a good fit for our company\" -> too broad! YOU need to plan how to achieve the goal and run well-defined tasks that compose into the given goal\n\nIMPORTANT: Smooth is powered by an intelligent agent, DO NOT over-controll it, and give it well-defined goal-oriented tasks instead of steps."
      },
      {
        "title": "4. Close the Session",
        "body": "You must close the session when you're done.\n\nsmooth close-session -- <session-id>\n\nImportant: Wait 5 seconds after closing to ensure cookies and state are saved to the profile if you need it for another session."
      },
      {
        "title": "Authentication & Persistent Sessions",
        "body": "Create a profile for a specific website:\n\n# Create profile\nsmooth create-profile --profile-id \"github-account\"\n\n# Start session\nsmooth start-session --profile-id \"github-account\" --url \"https://github.com/login\"\n\n# Get live view to authenticate manually\nsmooth live-view -- <session-id>\n# Give the URL to the user so it can open it in the browser and log in\n\n# When the user confirms the login you can then close the session to save the profile data\nsmooth close-session -- <session-id>\n# Save the profile-id somewhere to later reuse it\n\nReuse authenticated profile:\n\n# Next time, just start a session with the same profile\nsmooth start-session --profile-id \"github-account\"\nsmooth run -- <session-id> \"Create a new issue in my repo 'my-project'\"\n\nKeep profiles organized: Save to memory which profiles authenticate to which services so you can reuse them efficiently in the future."
      },
      {
        "title": "Sequential Tasks on Same Browser",
        "body": "Execute multiple tasks in sequence without closing the session:\n\nSESSION_ID=$(smooth start-session --profile-id \"my-profile\" --json | jq -r .session_id)\n\n# Task 1: Login\nsmooth run $SESSION_ID \"Log into the website with the given credentials\"\n\n# Task 2: First action\nsmooth run $SESSION_ID \"Find the settings and change the notifications preferences to email only\"\n\n# Task 3: Second action\nsmooth run $SESSION_ID \"Find the billing section and give me the url of the latest invoice\"\n\nsmooth close-session $SESSION_ID\n\nImportant: run preserves the browser state (cookies, URL, page content) but not the browser agent's memory. If you need to carry information from one task to the next, you should pass it explicitly in the prompt.\n\nExample - Passing context between tasks:\n\n# Task 1: Get information\nRESULT=$(smooth run $SESSION_ID \"Find the product name on this page\" --json | jq -r .output)\n\n# Task 2: Use information from Task 1\nsmooth run $SESSION_ID \"Consider the product with name '$RESULT'. Now find 3 similar products offered by this online store.\"\n\nNotes:\n\nThe run command is blocking. If you need to carry out multiple tasks at the same time, you MUST use subagents (Task tool).\nAll tasks will use the current tab, you cannot request to run tasks in a new tab. If you need to preserve the current tab’s state, you can open a new session.\nEach session can run only one task at a time. To run tasks simultaneously, use subagents with one session each.\nThe maximum number of concurrent sessions depends on the user plan.\nIf useful, remind the user that they can upgrade the plan to give you more concurrent sessions."
      },
      {
        "title": "Web Scraping with Structured Output",
        "body": "Option 1: Using run with structured output:\n\nsmooth start-session --url \"https://news.ycombinator.com\"\nsmooth run -- <session-id> \"Extract the top 10 posts\" \\\n  --response-model '{\n    \"type\": \"object\",\n    \"properties\": {\n      \"posts\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"title\": {\"type\": \"string\"},\n            \"url\": {\"type\": \"string\"},\n            \"points\": {\"type\": \"number\"}\n          }\n        }\n      }\n    }\n  }'\n\nOption 2: Using extract for direct data extraction:\n\nThe extract command is more efficient for pure data extraction as it doesn't use agent steps.\n\nIt's like a smart fetch that can extract structured data from dynamically rendered websites:\n\nsmooth start-session\nsmooth extract -- <session-id> \\\n  --url \"https://news.ycombinator.com\" \\\n  --schema '{\n    \"type\": \"object\",\n    \"properties\": {\n      \"posts\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"title\": {\"type\": \"string\"},\n            \"url\": {\"type\": \"string\"},\n            \"points\": {\"type\": \"number\"}\n          }\n        }\n      }\n    }\n  }' \\\n  --prompt \"Extract the top 10 posts\"\n\nWhen to use each:\n\nUse extract when you're on the right page or know the right url and just need to pull structured data\nUse run when you need the agent to navigate, interact, or perform complex actions before extracting"
      },
      {
        "title": "Working with Files",
        "body": "Upload files for use in sessions:\n\nFiles must be uploaded before starting a session, then passed to the session via file IDs:\n\n# Step 1: Upload files\nFILE_ID=$(smooth upload-file /path/to/document.pdf --purpose \"Contract to analyze\" --json | jq -r .file_id)\n\n# Step 2: Start session with the file\nsmooth start-session --files \"$FILE_ID\" --url \"https://example.com\"\n\n# Step 3: The agent can now access the file in tasks\nsmooth run -- <session-id> \"Analyze the contract document and extract key terms\"\n\nUpload multiple files:\n\n# Upload files\nFILE_ID_1=$(smooth upload-file /path/to/invoice.pdf --json | jq -r .file_id)\nFILE_ID_2=$(smooth upload-file /path/to/screenshot.png --json | jq -r .file_id)\n\n# Start session with multiple files\nsmooth start-session --files \"$FILE_ID_1,$FILE_ID_2\"\n\nDownload files from session:\n\nsmooth run -- <session-id> \"Download the monthly report PDF\" --url\nsmooth close-session -- <session-id>\n\n# After session closes, get download URL\nsmooth downloads -- <session-id>\n# Visit the URL to download files"
      },
      {
        "title": "Live View & Manual Intervention",
        "body": "When automation needs human input (CAPTCHA, 2FA, complex authentication):\n\nsmooth start-session --profile-id \"my-profile\"\nsmooth run -- <session-id> \"Go to secure-site.com and log in\"\n\n# If task encounters CAPTCHA or requires manual action:\nsmooth live-view -- <session-id>\n# Open the URL and complete the manual steps\n\n# Continue automation after manual intervention:\nsmooth run -- <session-id> \"Now navigate to the dashboard and export data\""
      },
      {
        "title": "Direct Browser Actions",
        "body": "Extract data from current page:\n\nsmooth start-session --url \"https://example.com/products\"\nsmooth extract -- <session-id> \\\n  --schema '{\"type\":\"object\",\"properties\":{\"products\":{\"type\":\"array\"}}}' \\\n  --prompt \"Extract all product names and prices\"\n\nNavigate to URL then extract:\n\nsmooth extract -- <session-id> \\\n  --url \"https://example.com/products\" \\\n  --schema '{\"type\":\"object\",\"properties\":{\"products\":{\"type\":\"array\"}}}'\n\nExecute JavaScript in the browser:\n\n# Simple JavaScript\nsmooth evaluate-js -- <session-id> \"document.title\"\n\n# With arguments\nsmooth evaluate-js -- <session-id> \"(args) => {return args.x + args.y;}\" --args '{\"x\": 5, \"y\": 10}'\n\n# Complex DOM manipulation\nsmooth evaluate-js -- <session-id> \\\n  \"document.querySelectorAll('a').length\""
      },
      {
        "title": "Profile Management",
        "body": "List all profiles:\n\nsmooth list-profiles\n\nDelete a profile:\n\nsmooth delete-profile <profile-id>\n\nWhen to use profiles:\n\n✅ Websites requiring authentication\n✅ Maintaining session state across multiple task runs\n✅ Avoiding repeated logins\n✅ Preserving cookies and local storage\n\nWhen to skip profiles:\n\nPublic websites that don't require authentication\nOne-off scraping tasks\nTesting scenarios"
      },
      {
        "title": "File Management",
        "body": "Upload files:\n\nsmooth upload-file /path/to/file.pdf --name \"document.pdf\" --purpose \"Contract for review\"\n\nDelete files:\n\nsmooth delete-file <file-id>"
      },
      {
        "title": "Best Practices",
        "body": "Always save session IDs - You'll need them for subsequent commands\nUse profiles for authenticated sessions - Track which profile is for which website\nWait 5 seconds after closing sessions - Ensures state is properly saved\nUse descriptive profile IDs - e.g., \"linkedin-personal\", \"twitter-company\"\nClose sessions when done - Graceful close (default) ensures proper cleanup\nUse structured output for data extraction - Provides clean, typed results\nRun sequential tasks in the same session - Keep the session continuous when steps rely on previous work.\nUse subagents with one session each for independent tasks - Run tasks in parallel to speed up work.\nCoordinate resources - When working with subagents, you must create and assign ONE section to each subagent without having them creating them.\nDo not add url query parameters to urls, e.g. avoid ?filter=xyz - Start at the base URL and let the agent navigate the UI to apply filters.\nSmooth is powered by an intelligent agent - Give it tasks, not individual steps."
      },
      {
        "title": "Troubleshooting",
        "body": "\"Session not found\" - The session may have timed out or been closed. Start a new one.\n\n\"Profile not found\" - Check smooth list-profiles to see available profiles.\n\nCAPTCHA or authentication issues - Use smooth live-view -- <session-id> to let the user manually intervene.\n\nTask timeout - Increase --max-steps or break the task into smaller steps."
      },
      {
        "title": "Profile Commands",
        "body": "smooth create-profile [--profile-id ID] - Create a new profile\nsmooth list-profiles - List all profiles\nsmooth delete-profile <profile-id> - Delete a profile"
      },
      {
        "title": "File Commands",
        "body": "smooth upload-file <path> [--name NAME] [--purpose PURPOSE] - Upload a file\nsmooth delete-file <file-id> - Delete an uploaded file"
      },
      {
        "title": "Session Commands",
        "body": "smooth start-session [OPTIONS] - Start a browser session\nsmooth close-session -- <session-id> [--force] - Close a session\nsmooth run -- <session-id> \"<task>\" [OPTIONS] - Run a task\nsmooth extract -- <session-id> --schema SCHEMA [OPTIONS] - Extract structured data\nsmooth evaluate-js -- <session-id> \"code\" [--args JSON] - Execute JavaScript\nsmooth live-view -- <session-id> - Get interactive live URL\nsmooth recording-url -- <session-id> - Get recording URL\nsmooth downloads -- <session-id> - Get downloads URL\n\nAll commands support --json flag for JSON output."
      }
    ],
    "body": "Smooth Browser\n\nSmooth CLI is a browser for AI agents to interact with websites, authenticate, scrape data, and perform complex web-based tasks using natural language.\n\nPrerequisites\n\nAssume the Smooth CLI is already installed. If not, you can install it by running:\n\npip install smooth-py\n\n\nAssume an API key is already configured. If you encounter authentication errors, configure it with:\n\nsmooth config --api-key <api-key>\n\n\nTo verify the configuration:\n\nsmooth config --show\n\n\nGet an API key at https://app.smooth.sh\n\nIf the account is out of credits, ask the user to upgrade their plan at https://app.smooth.sh\n\nBasic Workflow\n1. Create a Profile (Optional)\n\nProfiles are useful to persist cookies, login sessions, and browser state between sessions.\n\nsmooth create-profile --profile-id \"my-profile\"\n\n\nList existing profiles:\n\nsmooth list-profiles\n\n2. Start a Browser Session\nsmooth start-session --profile-id \"my-profile\" --url \"https://example.com\"\n\n\nOptions:\n\n--profile-id - Use a specific profile (optional, creates anonymous session if not provided)\n--url - Initial URL to navigate to (optional)\n--files - Comma-separated file IDs to make available in the session (optional)\n--device mobile|desktop - Device type (default: mobile)\n--profile-read-only - Load profile without saving changes\n--allowed-urls - Comma-separated URL patterns to restrict access to certain URLs only (e.g., \"https://example.com/,https://api.example.com/\")\n--no-proxy - Disable the default proxy (see note below)\n\nImportant: Save the session ID from the output - you'll need it for all subsequent commands.\n\nProxy behavior: By default, the CLI automatically configures a built-in proxy for the browser session. If a website blocks the proxy or you need direct connections, disable it with --no-proxy.\n\n3. Run Tasks in the Session\n\nExecute tasks using natural language:\n\nsmooth run -- <session-id> \"Go to the LocalLLM subreddit and find the top 3 posts\"\n\n\nWith structured output (for tasks requiring interaction):\n\nsmooth run -- <session-id> \"Search for 'wireless headphones', filter by 4+ stars, sort by price, and extract the top 3 results\" \\\n  --url \"https://shop.example.com\" \\\n  --response-model '{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"product\":{\"type\":\"string\",\"description\":\"Thenameoftheproductbeingdescribed.\"},\"sentiment\":{\"type\":\"string\",\"enum\":[\"positive\",\"negative\",\"neutral\"],\"description\":\"The overall sentiment about the product.\"}},\"required\":[\"product\",\"sentiment\"]}}'\n\n\nWith metadata (the agent will be):\n\nsmooth run -- <session-id> \"Fill out the form with user information\" \\\n  --metadata '{\"email\":\"user@example.com\",\"name\":\"John Doe\"}'\n\n\nOptions:\n\n--url - Navigate to this URL before running the task\n--metadata - JSON object with variables for the task\n--response-model - JSON schema for structured output\n--max-steps - Maximum agent steps (default: 32)\n--json - Output results as JSON\n\nNotes: It's important that you give tasks at the right level of abstraction. Not too prescriptive - e.g. single-step actions - and not too broad or vague.\n\nGood tasks:\n\n\"Search on Linkedin for people working as SDEs at Amazon, and return 5 profile urls\"\n\"Find the price of an iPhone 17 on Amazon\"\n\nBad tasks:\n\n\"Click search\" -> too prescriptive!\n\"Load google.com, write 'restaurants near me', click search, wait for the page to load, extract the top 5 results, and return them.\" -> too prescriptive! you can say \"search restaurants near me on google and return the top 5 results\"\n\"Find software engineers that would be a good fit for our company\" -> too broad! YOU need to plan how to achieve the goal and run well-defined tasks that compose into the given goal\n\nIMPORTANT: Smooth is powered by an intelligent agent, DO NOT over-controll it, and give it well-defined goal-oriented tasks instead of steps.\n\n4. Close the Session\n\nYou must close the session when you're done.\n\nsmooth close-session -- <session-id>\n\n\nImportant: Wait 5 seconds after closing to ensure cookies and state are saved to the profile if you need it for another session.\n\nCommon Use Cases\nAuthentication & Persistent Sessions\n\nCreate a profile for a specific website:\n\n# Create profile\nsmooth create-profile --profile-id \"github-account\"\n\n# Start session\nsmooth start-session --profile-id \"github-account\" --url \"https://github.com/login\"\n\n# Get live view to authenticate manually\nsmooth live-view -- <session-id>\n# Give the URL to the user so it can open it in the browser and log in\n\n# When the user confirms the login you can then close the session to save the profile data\nsmooth close-session -- <session-id>\n# Save the profile-id somewhere to later reuse it\n\n\nReuse authenticated profile:\n\n# Next time, just start a session with the same profile\nsmooth start-session --profile-id \"github-account\"\nsmooth run -- <session-id> \"Create a new issue in my repo 'my-project'\"\n\n\nKeep profiles organized: Save to memory which profiles authenticate to which services so you can reuse them efficiently in the future.\n\nSequential Tasks on Same Browser\n\nExecute multiple tasks in sequence without closing the session:\n\nSESSION_ID=$(smooth start-session --profile-id \"my-profile\" --json | jq -r .session_id)\n\n# Task 1: Login\nsmooth run $SESSION_ID \"Log into the website with the given credentials\"\n\n# Task 2: First action\nsmooth run $SESSION_ID \"Find the settings and change the notifications preferences to email only\"\n\n# Task 3: Second action\nsmooth run $SESSION_ID \"Find the billing section and give me the url of the latest invoice\"\n\nsmooth close-session $SESSION_ID\n\n\nImportant: run preserves the browser state (cookies, URL, page content) but not the browser agent's memory. If you need to carry information from one task to the next, you should pass it explicitly in the prompt.\n\nExample - Passing context between tasks:\n\n# Task 1: Get information\nRESULT=$(smooth run $SESSION_ID \"Find the product name on this page\" --json | jq -r .output)\n\n# Task 2: Use information from Task 1\nsmooth run $SESSION_ID \"Consider the product with name '$RESULT'. Now find 3 similar products offered by this online store.\"\n\n\nNotes:\n\nThe run command is blocking. If you need to carry out multiple tasks at the same time, you MUST use subagents (Task tool).\nAll tasks will use the current tab, you cannot request to run tasks in a new tab. If you need to preserve the current tab’s state, you can open a new session.\nEach session can run only one task at a time. To run tasks simultaneously, use subagents with one session each.\nThe maximum number of concurrent sessions depends on the user plan.\nIf useful, remind the user that they can upgrade the plan to give you more concurrent sessions.\nWeb Scraping with Structured Output\n\nOption 1: Using run with structured output:\n\nsmooth start-session --url \"https://news.ycombinator.com\"\nsmooth run -- <session-id> \"Extract the top 10 posts\" \\\n  --response-model '{\n    \"type\": \"object\",\n    \"properties\": {\n      \"posts\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"title\": {\"type\": \"string\"},\n            \"url\": {\"type\": \"string\"},\n            \"points\": {\"type\": \"number\"}\n          }\n        }\n      }\n    }\n  }'\n\n\nOption 2: Using extract for direct data extraction:\n\nThe extract command is more efficient for pure data extraction as it doesn't use agent steps.\n\nIt's like a smart fetch that can extract structured data from dynamically rendered websites:\n\nsmooth start-session\nsmooth extract -- <session-id> \\\n  --url \"https://news.ycombinator.com\" \\\n  --schema '{\n    \"type\": \"object\",\n    \"properties\": {\n      \"posts\": {\n        \"type\": \"array\",\n        \"items\": {\n          \"type\": \"object\",\n          \"properties\": {\n            \"title\": {\"type\": \"string\"},\n            \"url\": {\"type\": \"string\"},\n            \"points\": {\"type\": \"number\"}\n          }\n        }\n      }\n    }\n  }' \\\n  --prompt \"Extract the top 10 posts\"\n\n\nWhen to use each:\n\nUse extract when you're on the right page or know the right url and just need to pull structured data\nUse run when you need the agent to navigate, interact, or perform complex actions before extracting\nWorking with Files\n\nUpload files for use in sessions:\n\nFiles must be uploaded before starting a session, then passed to the session via file IDs:\n\n# Step 1: Upload files\nFILE_ID=$(smooth upload-file /path/to/document.pdf --purpose \"Contract to analyze\" --json | jq -r .file_id)\n\n# Step 2: Start session with the file\nsmooth start-session --files \"$FILE_ID\" --url \"https://example.com\"\n\n# Step 3: The agent can now access the file in tasks\nsmooth run -- <session-id> \"Analyze the contract document and extract key terms\"\n\n\nUpload multiple files:\n\n# Upload files\nFILE_ID_1=$(smooth upload-file /path/to/invoice.pdf --json | jq -r .file_id)\nFILE_ID_2=$(smooth upload-file /path/to/screenshot.png --json | jq -r .file_id)\n\n# Start session with multiple files\nsmooth start-session --files \"$FILE_ID_1,$FILE_ID_2\"\n\n\nDownload files from session:\n\nsmooth run -- <session-id> \"Download the monthly report PDF\" --url\nsmooth close-session -- <session-id>\n\n# After session closes, get download URL\nsmooth downloads -- <session-id>\n# Visit the URL to download files\n\nLive View & Manual Intervention\n\nWhen automation needs human input (CAPTCHA, 2FA, complex authentication):\n\nsmooth start-session --profile-id \"my-profile\"\nsmooth run -- <session-id> \"Go to secure-site.com and log in\"\n\n# If task encounters CAPTCHA or requires manual action:\nsmooth live-view -- <session-id>\n# Open the URL and complete the manual steps\n\n# Continue automation after manual intervention:\nsmooth run -- <session-id> \"Now navigate to the dashboard and export data\"\n\nDirect Browser Actions\n\nExtract data from current page:\n\nsmooth start-session --url \"https://example.com/products\"\nsmooth extract -- <session-id> \\\n  --schema '{\"type\":\"object\",\"properties\":{\"products\":{\"type\":\"array\"}}}' \\\n  --prompt \"Extract all product names and prices\"\n\n\nNavigate to URL then extract:\n\nsmooth extract -- <session-id> \\\n  --url \"https://example.com/products\" \\\n  --schema '{\"type\":\"object\",\"properties\":{\"products\":{\"type\":\"array\"}}}'\n\n\nExecute JavaScript in the browser:\n\n# Simple JavaScript\nsmooth evaluate-js -- <session-id> \"document.title\"\n\n# With arguments\nsmooth evaluate-js -- <session-id> \"(args) => {return args.x + args.y;}\" --args '{\"x\": 5, \"y\": 10}'\n\n# Complex DOM manipulation\nsmooth evaluate-js -- <session-id> \\\n  \"document.querySelectorAll('a').length\"\n\nProfile Management\n\nList all profiles:\n\nsmooth list-profiles\n\n\nDelete a profile:\n\nsmooth delete-profile <profile-id>\n\n\nWhen to use profiles:\n\n✅ Websites requiring authentication\n✅ Maintaining session state across multiple task runs\n✅ Avoiding repeated logins\n✅ Preserving cookies and local storage\n\nWhen to skip profiles:\n\nPublic websites that don't require authentication\nOne-off scraping tasks\nTesting scenarios\nFile Management\n\nUpload files:\n\nsmooth upload-file /path/to/file.pdf --name \"document.pdf\" --purpose \"Contract for review\"\n\n\nDelete files:\n\nsmooth delete-file <file-id>\n\nBest Practices\nAlways save session IDs - You'll need them for subsequent commands\nUse profiles for authenticated sessions - Track which profile is for which website\nWait 5 seconds after closing sessions - Ensures state is properly saved\nUse descriptive profile IDs - e.g., \"linkedin-personal\", \"twitter-company\"\nClose sessions when done - Graceful close (default) ensures proper cleanup\nUse structured output for data extraction - Provides clean, typed results\nRun sequential tasks in the same session - Keep the session continuous when steps rely on previous work.\nUse subagents with one session each for independent tasks - Run tasks in parallel to speed up work.\nCoordinate resources - When working with subagents, you must create and assign ONE section to each subagent without having them creating them.\nDo not add url query parameters to urls, e.g. avoid ?filter=xyz - Start at the base URL and let the agent navigate the UI to apply filters.\nSmooth is powered by an intelligent agent - Give it tasks, not individual steps.\nTroubleshooting\n\n\"Session not found\" - The session may have timed out or been closed. Start a new one.\n\n\"Profile not found\" - Check smooth list-profiles to see available profiles.\n\nCAPTCHA or authentication issues - Use smooth live-view -- <session-id> to let the user manually intervene.\n\nTask timeout - Increase --max-steps or break the task into smaller steps.\n\nCommand Reference\nProfile Commands\nsmooth create-profile [--profile-id ID] - Create a new profile\nsmooth list-profiles - List all profiles\nsmooth delete-profile <profile-id> - Delete a profile\nFile Commands\nsmooth upload-file <path> [--name NAME] [--purpose PURPOSE] - Upload a file\nsmooth delete-file <file-id> - Delete an uploaded file\nSession Commands\nsmooth start-session [OPTIONS] - Start a browser session\nsmooth close-session -- <session-id> [--force] - Close a session\nsmooth run -- <session-id> \"<task>\" [OPTIONS] - Run a task\nsmooth extract -- <session-id> --schema SCHEMA [OPTIONS] - Extract structured data\nsmooth evaluate-js -- <session-id> \"code\" [--args JSON] - Execute JavaScript\nsmooth live-view -- <session-id> - Get interactive live URL\nsmooth recording-url -- <session-id> - Get recording URL\nsmooth downloads -- <session-id> - Get downloads URL\n\nAll commands support --json flag for JSON output."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/antoniocirclemind/smoothbrowser",
    "publisherUrl": "https://clawhub.ai/antoniocirclemind/smoothbrowser",
    "owner": "antoniocirclemind",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/smoothbrowser",
    "downloadUrl": "https://openagent3.xyz/downloads/smoothbrowser",
    "agentUrl": "https://openagent3.xyz/skills/smoothbrowser/agent",
    "manifestUrl": "https://openagent3.xyz/skills/smoothbrowser/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/smoothbrowser/agent.md"
  }
}