{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ngrok-preview",
    "name": "Ngrok Preview",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/wynnsu/ngrok-preview",
    "canonicalUrl": "https://clawhub.ai/wynnsu/ngrok-preview",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ngrok-preview",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ngrok-preview",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "references/troubleshooting.md",
      "scripts/ngrok_preview.py"
    ],
    "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/ngrok-preview"
    },
    "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/ngrok-preview",
    "agentPageUrl": "https://openagent3.xyz/skills/ngrok-preview/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ngrok-preview/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ngrok-preview/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": "ngrok-preview",
        "body": "Provide a temporary preview window for task outputs. Keep it fast, scoped, and easy: generate link -> send link -> close link."
      },
      {
        "title": "One-time setup",
        "body": "Install ngrok if missing.\nConfigure auth token once:\n\nngrok config add-authtoken \"$NGROK_AUTHTOKEN\"\nngrok config check\n\nIf token is not preconfigured, pass --auth-token when running the script."
      },
      {
        "title": "Per-task workflow",
        "body": "Collect only task artifacts (images/charts/files) for this request.\nCreate a session-scoped temporary preview link.\nSend the link with explicit expiry in Telegram.\nStop and delete the preview session after user confirms or task ends.\n\nUse this command from the skill directory:\n\npython3 scripts/ngrok_preview.py up \\\n  --title \"<task title>\" \\\n  --session-id \"<task-id>\" \\\n  --ttl-minutes 120 \\\n  --source \"<artifact-path-1>\" \\\n  --source \"<artifact-path-2>\"\n\nThe command returns JSON including:\n\npublic_url\nexpires_at\nsession_id\nstop_command"
      },
      {
        "title": "Session ID convention (context binding)",
        "body": "Use IDs that map to the current conversation/task:\n\ntg-<date>-<topic>\ntask-<short-request-id>\n\nThis keeps each link tied to one task context."
      },
      {
        "title": "Telegram send pattern",
        "body": "After up succeeds, send a concise message:\n\n🔗 Temporary preview link (valid for <X> minutes)\n<public_url>\n\nScope: artifacts from this task only\nThis link will be cleaned up after expiry\n\nIf not currently in Telegram, still return the same link format in the active channel."
      },
      {
        "title": "Safety boundaries",
        "body": "Publish only task-specific outputs, never broad directories (do not expose workspace root).\nKeep TTL short (default 120 minutes; use shorter when possible).\nTreat link as temporary access, not persistent hosting.\nStop session when no longer needed:\n\npython3 scripts/ngrok_preview.py down --session-id \"<task-id>\" --delete-session-dir\n\nPeriodically clear expired sessions:\n\npython3 scripts/ngrok_preview.py cleanup"
      },
      {
        "title": "Command quick reference",
        "body": "# List sessions\npython3 scripts/ngrok_preview.py status\n\n# Create preview (auto-generate session id)\npython3 scripts/ngrok_preview.py up \\\n  --title \"image results\" \\\n  --source ./outputs/result-1.png \\\n  --source ./outputs/result-2.png\n\n# Stop latest session\npython3 scripts/ngrok_preview.py down"
      },
      {
        "title": "Troubleshooting",
        "body": "If link creation fails, check references/troubleshooting.md and follow the minimum recovery sequence."
      }
    ],
    "body": "ngrok-preview\n\nProvide a temporary preview window for task outputs. Keep it fast, scoped, and easy: generate link -> send link -> close link.\n\nOne-time setup\nInstall ngrok if missing.\nConfigure auth token once:\nngrok config add-authtoken \"$NGROK_AUTHTOKEN\"\nngrok config check\n\n\nIf token is not preconfigured, pass --auth-token when running the script.\n\nPer-task workflow\nCollect only task artifacts (images/charts/files) for this request.\nCreate a session-scoped temporary preview link.\nSend the link with explicit expiry in Telegram.\nStop and delete the preview session after user confirms or task ends.\n\nUse this command from the skill directory:\n\npython3 scripts/ngrok_preview.py up \\\n  --title \"<task title>\" \\\n  --session-id \"<task-id>\" \\\n  --ttl-minutes 120 \\\n  --source \"<artifact-path-1>\" \\\n  --source \"<artifact-path-2>\"\n\n\nThe command returns JSON including:\n\npublic_url\nexpires_at\nsession_id\nstop_command\nSession ID convention (context binding)\n\nUse IDs that map to the current conversation/task:\n\ntg-<date>-<topic>\ntask-<short-request-id>\n\nThis keeps each link tied to one task context.\n\nTelegram send pattern\n\nAfter up succeeds, send a concise message:\n\n🔗 Temporary preview link (valid for <X> minutes)\n<public_url>\n\nScope: artifacts from this task only\nThis link will be cleaned up after expiry\n\n\nIf not currently in Telegram, still return the same link format in the active channel.\n\nSafety boundaries\nPublish only task-specific outputs, never broad directories (do not expose workspace root).\nKeep TTL short (default 120 minutes; use shorter when possible).\nTreat link as temporary access, not persistent hosting.\nStop session when no longer needed:\npython3 scripts/ngrok_preview.py down --session-id \"<task-id>\" --delete-session-dir\n\nPeriodically clear expired sessions:\npython3 scripts/ngrok_preview.py cleanup\n\nCommand quick reference\n# List sessions\npython3 scripts/ngrok_preview.py status\n\n# Create preview (auto-generate session id)\npython3 scripts/ngrok_preview.py up \\\n  --title \"image results\" \\\n  --source ./outputs/result-1.png \\\n  --source ./outputs/result-2.png\n\n# Stop latest session\npython3 scripts/ngrok_preview.py down\n\nTroubleshooting\n\nIf link creation fails, check references/troubleshooting.md and follow the minimum recovery sequence."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/wynnsu/ngrok-preview",
    "publisherUrl": "https://clawhub.ai/wynnsu/ngrok-preview",
    "owner": "wynnsu",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ngrok-preview",
    "downloadUrl": "https://openagent3.xyz/downloads/ngrok-preview",
    "agentUrl": "https://openagent3.xyz/skills/ngrok-preview/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ngrok-preview/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ngrok-preview/agent.md"
  }
}