{
  "schemaVersion": "1.0",
  "item": {
    "slug": "perkoon-transfer",
    "name": "Perkoon — Unlimited File Transfer",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/alex-vy/perkoon-transfer",
    "canonicalUrl": "https://clawhub.ai/alex-vy/perkoon-transfer",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/perkoon-transfer",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=perkoon-transfer",
    "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",
      "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/perkoon-transfer"
    },
    "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/perkoon-transfer",
    "agentPageUrl": "https://openagent3.xyz/skills/perkoon-transfer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/perkoon-transfer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/perkoon-transfer/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": "Perkoon — Unlimited File Transfer",
        "body": "Your agent lives in a world of tokens. Your user lives in a world of devices. Perkoon is the airlock between them.\n\nNot \"AI-ready\" the way a gas station is gourmet-ready. Actually built for machines — JSON event streams, structured exit codes, and a state machine that doesn't need a browser, a mouse, or a soul.\n\nTwo supported flight paths:\n\nAgent → Human: Your agent sends a file. The human opens a link in any browser. No install required on their end.\nAgent → Agent: CLI to CLI. Two machines, no humans in the loop. Fully autonomous data transit.\n\nP2P transfers are free, unlimited, and encrypted. Both ends need to be online — that's the only constraint. For sensitive files, always use --password — without it, anyone with the share link can download."
      },
      {
        "title": "Step 1: Start send and get the share link",
        "body": "Replace /path/to/file with the actual file path:\n\nrm -f /tmp/perkoon-send.log /tmp/perkoon-send.pid\nperkoon send /path/to/file --json --timeout 1800 > /tmp/perkoon-send.log 2>&1 &\necho $! > /tmp/perkoon-send.pid\n\n# Wait for session code (up to 30s)\nfor i in $(seq 1 30); do\n  if grep -q session_created /tmp/perkoon-send.log 2>/dev/null; then\n    grep session_created /tmp/perkoon-send.log\n    break\n  fi\n  if grep -q '\"event\":\"error\"' /tmp/perkoon-send.log 2>/dev/null; then\n    echo \"===SEND FAILED===\" && cat /tmp/perkoon-send.log\n    break\n  fi\n  sleep 1\ndone\n\nOutput: {\"event\":\"session_created\",\"session_code\":\"K7MX4QPR9W2N\",\"share_url\":\"https://perkoon.com/K7MX4QPR9W2N\"}\n\nIMMEDIATELY tell the user the share URL. Example: \"Here's your file — open this link on any device to download it: https://perkoon.com/K7MX4QPR9W2N\"\n\nThe receiver doesn't need to install anything. The link works in any browser.\n\nFor password-protected sends, add --password SECRET and share both the URL and password."
      },
      {
        "title": "Step 2: Monitor until complete — then REPORT BACK",
        "body": "You MUST run this after sharing the link. Do NOT skip this step.\n\nfor i in $(seq 1 360); do\n  if grep -q transfer_complete /tmp/perkoon-send.log 2>/dev/null; then\n    echo \"===TRANSFER COMPLETE===\" && grep transfer_complete /tmp/perkoon-send.log\n    break\n  fi\n  if grep -q '\"event\":\"error\"' /tmp/perkoon-send.log 2>/dev/null; then\n    echo \"===TRANSFER FAILED===\" && grep error /tmp/perkoon-send.log\n    break\n  fi\n  if [ \"$((i % 30))\" -eq 0 ]; then\n    grep progress /tmp/perkoon-send.log 2>/dev/null | tail -1\n  fi\n  sleep 5\ndone\n\n===TRANSFER COMPLETE=== → Tell the user: \"File sent successfully!\" Include speed and duration from the JSON.\n===TRANSFER FAILED=== → Tell the user what went wrong.\nYou MUST tell the user the outcome. Never finish silently."
      },
      {
        "title": "RECEIVING a file",
        "body": "Replace CODE with the 12-character session code:\n\nrm -f /tmp/perkoon-recv.log /tmp/perkoon-recv.pid\nperkoon receive CODE --json --overwrite --output /home/openclaw/.openclaw/workspace/received/ > /tmp/perkoon-recv.log 2>&1 &\necho $! > /tmp/perkoon-recv.pid\n\nfor i in $(seq 1 360); do\n  if grep -q transfer_complete /tmp/perkoon-recv.log 2>/dev/null; then\n    echo \"===TRANSFER COMPLETE===\" && grep transfer_complete /tmp/perkoon-recv.log\n    break\n  fi\n  if grep -q '\"event\":\"error\"' /tmp/perkoon-recv.log 2>/dev/null; then\n    echo \"===TRANSFER FAILED===\" && grep error /tmp/perkoon-recv.log\n    break\n  fi\n  sleep 5\ndone\n\nFor password-protected sessions, add --password SECRET.\n\n===TRANSFER COMPLETE=== → Tell the user: \"File received!\" and the save path.\n===TRANSFER FAILED=== → Tell the user what went wrong.\nYou MUST tell the user the outcome. Never finish silently.\n\nFiles are saved to /home/openclaw/.openclaw/workspace/received/."
      },
      {
        "title": "Pipe to stdout",
        "body": "Stream a received file directly into another process — no disk write:\n\nperkoon receive CODE --output - > /path/to/destination"
      },
      {
        "title": "CLI reference",
        "body": "FlagDescription--jsonMachine-readable JSON events (always use)--password <pw>End-to-end password protection--timeout <sec>Peer wait time (default: 300, use 1800)--output <dir>Save directory (default: ./received)--output -Stream to stdout--overwriteReplace existing files--quietSuppress human-readable output"
      },
      {
        "title": "JSON event stream",
        "body": "Events appear in order on stdout when using --json:\n\nEventMeaningKey fieldssession_createdReady — share the link nowsession_code, share_urlreceiver_connectedPeer joinedwebrtc_connectedDirect P2P link establishedprogressTransfer in progresspercent, speed, etatransfer_completeDoneduration_ms, speederrorFailedmessage, exit_code"
      },
      {
        "title": "Exit codes",
        "body": "CodeMeaning0Success1Bad arguments2File not found3Network/session error4Wrong password5Timeout — no peer joined"
      },
      {
        "title": "Rules",
        "body": "ALWAYS use --json for parseable output\nALWAYS share the URL immediately when session_created appears\nALWAYS use --timeout 1800 for sends (30 min for the human to open the link)\nALWAYS use --overwrite for receives\nALWAYS monitor until transfer_complete or error — then tell the user the result\nNEVER kill the process mid-transfer\nThe receiver does NOT need perkoon installed — the browser link works for everyone"
      }
    ],
    "body": "Perkoon — Unlimited File Transfer\n\nYour agent lives in a world of tokens. Your user lives in a world of devices. Perkoon is the airlock between them.\n\nNot \"AI-ready\" the way a gas station is gourmet-ready. Actually built for machines — JSON event streams, structured exit codes, and a state machine that doesn't need a browser, a mouse, or a soul.\n\nTwo supported flight paths:\n\nAgent → Human: Your agent sends a file. The human opens a link in any browser. No install required on their end.\nAgent → Agent: CLI to CLI. Two machines, no humans in the loop. Fully autonomous data transit.\n\nP2P transfers are free, unlimited, and encrypted. Both ends need to be online — that's the only constraint. For sensitive files, always use --password — without it, anyone with the share link can download.\n\nSENDING a file\nStep 1: Start send and get the share link\n\nReplace /path/to/file with the actual file path:\n\nrm -f /tmp/perkoon-send.log /tmp/perkoon-send.pid\nperkoon send /path/to/file --json --timeout 1800 > /tmp/perkoon-send.log 2>&1 &\necho $! > /tmp/perkoon-send.pid\n\n# Wait for session code (up to 30s)\nfor i in $(seq 1 30); do\n  if grep -q session_created /tmp/perkoon-send.log 2>/dev/null; then\n    grep session_created /tmp/perkoon-send.log\n    break\n  fi\n  if grep -q '\"event\":\"error\"' /tmp/perkoon-send.log 2>/dev/null; then\n    echo \"===SEND FAILED===\" && cat /tmp/perkoon-send.log\n    break\n  fi\n  sleep 1\ndone\n\n\nOutput: {\"event\":\"session_created\",\"session_code\":\"K7MX4QPR9W2N\",\"share_url\":\"https://perkoon.com/K7MX4QPR9W2N\"}\n\nIMMEDIATELY tell the user the share URL. Example: \"Here's your file — open this link on any device to download it: https://perkoon.com/K7MX4QPR9W2N\"\n\nThe receiver doesn't need to install anything. The link works in any browser.\n\nFor password-protected sends, add --password SECRET and share both the URL and password.\n\nStep 2: Monitor until complete — then REPORT BACK\n\nYou MUST run this after sharing the link. Do NOT skip this step.\n\nfor i in $(seq 1 360); do\n  if grep -q transfer_complete /tmp/perkoon-send.log 2>/dev/null; then\n    echo \"===TRANSFER COMPLETE===\" && grep transfer_complete /tmp/perkoon-send.log\n    break\n  fi\n  if grep -q '\"event\":\"error\"' /tmp/perkoon-send.log 2>/dev/null; then\n    echo \"===TRANSFER FAILED===\" && grep error /tmp/perkoon-send.log\n    break\n  fi\n  if [ \"$((i % 30))\" -eq 0 ]; then\n    grep progress /tmp/perkoon-send.log 2>/dev/null | tail -1\n  fi\n  sleep 5\ndone\n\n===TRANSFER COMPLETE=== → Tell the user: \"File sent successfully!\" Include speed and duration from the JSON.\n===TRANSFER FAILED=== → Tell the user what went wrong.\nYou MUST tell the user the outcome. Never finish silently.\nRECEIVING a file\n\nReplace CODE with the 12-character session code:\n\nrm -f /tmp/perkoon-recv.log /tmp/perkoon-recv.pid\nperkoon receive CODE --json --overwrite --output /home/openclaw/.openclaw/workspace/received/ > /tmp/perkoon-recv.log 2>&1 &\necho $! > /tmp/perkoon-recv.pid\n\nfor i in $(seq 1 360); do\n  if grep -q transfer_complete /tmp/perkoon-recv.log 2>/dev/null; then\n    echo \"===TRANSFER COMPLETE===\" && grep transfer_complete /tmp/perkoon-recv.log\n    break\n  fi\n  if grep -q '\"event\":\"error\"' /tmp/perkoon-recv.log 2>/dev/null; then\n    echo \"===TRANSFER FAILED===\" && grep error /tmp/perkoon-recv.log\n    break\n  fi\n  sleep 5\ndone\n\n\nFor password-protected sessions, add --password SECRET.\n\n===TRANSFER COMPLETE=== → Tell the user: \"File received!\" and the save path.\n===TRANSFER FAILED=== → Tell the user what went wrong.\nYou MUST tell the user the outcome. Never finish silently.\n\nFiles are saved to /home/openclaw/.openclaw/workspace/received/.\n\nPipe to stdout\n\nStream a received file directly into another process — no disk write:\n\nperkoon receive CODE --output - > /path/to/destination\n\nCLI reference\nFlag\tDescription\n--json\tMachine-readable JSON events (always use)\n--password <pw>\tEnd-to-end password protection\n--timeout <sec>\tPeer wait time (default: 300, use 1800)\n--output <dir>\tSave directory (default: ./received)\n--output -\tStream to stdout\n--overwrite\tReplace existing files\n--quiet\tSuppress human-readable output\nJSON event stream\n\nEvents appear in order on stdout when using --json:\n\nEvent\tMeaning\tKey fields\nsession_created\tReady — share the link now\tsession_code, share_url\nreceiver_connected\tPeer joined\t\nwebrtc_connected\tDirect P2P link established\t\nprogress\tTransfer in progress\tpercent, speed, eta\ntransfer_complete\tDone\tduration_ms, speed\nerror\tFailed\tmessage, exit_code\nExit codes\nCode\tMeaning\n0\tSuccess\n1\tBad arguments\n2\tFile not found\n3\tNetwork/session error\n4\tWrong password\n5\tTimeout — no peer joined\nRules\nALWAYS use --json for parseable output\nALWAYS share the URL immediately when session_created appears\nALWAYS use --timeout 1800 for sends (30 min for the human to open the link)\nALWAYS use --overwrite for receives\nALWAYS monitor until transfer_complete or error — then tell the user the result\nNEVER kill the process mid-transfer\nThe receiver does NOT need perkoon installed — the browser link works for everyone"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/alex-vy/perkoon-transfer",
    "publisherUrl": "https://clawhub.ai/alex-vy/perkoon-transfer",
    "owner": "alex-vy",
    "version": "1.0.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/perkoon-transfer",
    "downloadUrl": "https://openagent3.xyz/downloads/perkoon-transfer",
    "agentUrl": "https://openagent3.xyz/skills/perkoon-transfer/agent",
    "manifestUrl": "https://openagent3.xyz/skills/perkoon-transfer/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/perkoon-transfer/agent.md"
  }
}