# Send Perkoon — Unlimited File Transfer to your agent
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
## Fast path
- 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.
## Suggested prompts
### New install

```text
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.
```
### Upgrade existing

```text
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.
```
## Machine-readable fields
```json
{
  "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": {
    "downloadUrl": "/downloads/perkoon-transfer",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=perkoon-transfer",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "packageFormat": "ZIP package",
    "primaryDoc": "SKILL.md",
    "includedAssets": [
      "SKILL.md"
    ],
    "downloadMode": "redirect",
    "sourceHealth": {
      "source": "tencent",
      "slug": "perkoon-transfer",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T23:36:10.007Z",
      "expiresAt": "2026-05-07T23:36:10.007Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=perkoon-transfer",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=perkoon-transfer",
        "contentDisposition": "attachment; filename=\"perkoon-transfer-2.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null,
        "slug": "perkoon-transfer"
      },
      "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/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."
      ]
    }
  },
  "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"
  }
}
```
## Documentation

### Perkoon — Unlimited File Transfer

Your agent lives in a world of tokens. Your user lives in a world of devices. Perkoon is the airlock between them.

Not "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.

Two supported flight paths:

Agent → Human: Your agent sends a file. The human opens a link in any browser. No install required on their end.
Agent → Agent: CLI to CLI. Two machines, no humans in the loop. Fully autonomous data transit.

P2P 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.

### Step 1: Start send and get the share link

Replace /path/to/file with the actual file path:

rm -f /tmp/perkoon-send.log /tmp/perkoon-send.pid
perkoon send /path/to/file --json --timeout 1800 > /tmp/perkoon-send.log 2>&1 &
echo $! > /tmp/perkoon-send.pid

# Wait for session code (up to 30s)
for i in $(seq 1 30); do
  if grep -q session_created /tmp/perkoon-send.log 2>/dev/null; then
    grep session_created /tmp/perkoon-send.log
    break
  fi
  if grep -q '"event":"error"' /tmp/perkoon-send.log 2>/dev/null; then
    echo "===SEND FAILED===" && cat /tmp/perkoon-send.log
    break
  fi
  sleep 1
done

Output: {"event":"session_created","session_code":"K7MX4QPR9W2N","share_url":"https://perkoon.com/K7MX4QPR9W2N"}

IMMEDIATELY tell the user the share URL. Example: "Here's your file — open this link on any device to download it: https://perkoon.com/K7MX4QPR9W2N"

The receiver doesn't need to install anything. The link works in any browser.

For password-protected sends, add --password SECRET and share both the URL and password.

### Step 2: Monitor until complete — then REPORT BACK

You MUST run this after sharing the link. Do NOT skip this step.

for i in $(seq 1 360); do
  if grep -q transfer_complete /tmp/perkoon-send.log 2>/dev/null; then
    echo "===TRANSFER COMPLETE===" && grep transfer_complete /tmp/perkoon-send.log
    break
  fi
  if grep -q '"event":"error"' /tmp/perkoon-send.log 2>/dev/null; then
    echo "===TRANSFER FAILED===" && grep error /tmp/perkoon-send.log
    break
  fi
  if [ "$((i % 30))" -eq 0 ]; then
    grep progress /tmp/perkoon-send.log 2>/dev/null | tail -1
  fi
  sleep 5
done

===TRANSFER COMPLETE=== → Tell the user: "File sent successfully!" Include speed and duration from the JSON.
===TRANSFER FAILED=== → Tell the user what went wrong.
You MUST tell the user the outcome. Never finish silently.

### RECEIVING a file

Replace CODE with the 12-character session code:

rm -f /tmp/perkoon-recv.log /tmp/perkoon-recv.pid
perkoon receive CODE --json --overwrite --output /home/openclaw/.openclaw/workspace/received/ > /tmp/perkoon-recv.log 2>&1 &
echo $! > /tmp/perkoon-recv.pid

for i in $(seq 1 360); do
  if grep -q transfer_complete /tmp/perkoon-recv.log 2>/dev/null; then
    echo "===TRANSFER COMPLETE===" && grep transfer_complete /tmp/perkoon-recv.log
    break
  fi
  if grep -q '"event":"error"' /tmp/perkoon-recv.log 2>/dev/null; then
    echo "===TRANSFER FAILED===" && grep error /tmp/perkoon-recv.log
    break
  fi
  sleep 5
done

For password-protected sessions, add --password SECRET.

===TRANSFER COMPLETE=== → Tell the user: "File received!" and the save path.
===TRANSFER FAILED=== → Tell the user what went wrong.
You MUST tell the user the outcome. Never finish silently.

Files are saved to /home/openclaw/.openclaw/workspace/received/.

### Pipe to stdout

Stream a received file directly into another process — no disk write:

perkoon receive CODE --output - > /path/to/destination

### CLI reference

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

### JSON event stream

Events appear in order on stdout when using --json:

EventMeaningKey fieldssession_createdReady — share the link nowsession_code, share_urlreceiver_connectedPeer joinedwebrtc_connectedDirect P2P link establishedprogressTransfer in progresspercent, speed, etatransfer_completeDoneduration_ms, speederrorFailedmessage, exit_code

### Exit codes

CodeMeaning0Success1Bad arguments2File not found3Network/session error4Wrong password5Timeout — no peer joined

### Rules

ALWAYS use --json for parseable output
ALWAYS share the URL immediately when session_created appears
ALWAYS use --timeout 1800 for sends (30 min for the human to open the link)
ALWAYS use --overwrite for receives
ALWAYS monitor until transfer_complete or error — then tell the user the result
NEVER kill the process mid-transfer
The receiver does NOT need perkoon installed — the browser link works for everyone
## Trust
- Source: tencent
- Verification: Indexed source record
- Publisher: alex-vy
- Version: 1.0.2
## Source health
- Status: healthy
- Item download looks usable.
- Yavira can redirect you to the upstream package for this item.
- Health scope: item
- Reason: direct_download_ok
- Checked at: 2026-04-30T23:36:10.007Z
- Expires at: 2026-05-07T23:36:10.007Z
- Recommended action: Download for OpenClaw
## Links
- [Detail page](https://openagent3.xyz/skills/perkoon-transfer)
- [Send to Agent page](https://openagent3.xyz/skills/perkoon-transfer/agent)
- [JSON manifest](https://openagent3.xyz/skills/perkoon-transfer/agent.json)
- [Markdown brief](https://openagent3.xyz/skills/perkoon-transfer/agent.md)
- [Download page](https://openagent3.xyz/downloads/perkoon-transfer)