{"id":3149,"name":"Perkoon — Agent Data Layer","description":"File transfer for humans and the things replacing them. Small files get free cloud delivery — a durable share link with no receiver needed (fire-and-forget). Larger files transfer directly between machines over WebRTC with no size limit. No accounts.","card_url":"https://perkoon.com/.well-known/agent-card.json","endpoint":"https://perkoon.com/a2a","protocol_version":"0.3.0","first_seen":"2026-10-08T14:33:41.187497+00:00","last_verified":"2026-10-08T14:33:41.187497+00:00","card":{"url":"https://perkoon.com/a2a","name":"Perkoon — Agent Data Layer","skills":[{"id":"describe","name":"Describe Capabilities","tags":["info","help","capabilities"],"examples":["What can Perkoon do?","How does file transfer work?","Tell me about Perkoon"],"inputModes":["application/json"],"description":"Learn what Perkoon can do without creating a session. Returns capabilities, usage instructions, and next_steps for follow-up actions.","outputModes":["application/json"]},{"id":"send-files","name":"Send Files","tags":["file-transfer","p2p","free","webrtc","cli"],"examples":["I want to send a file","Create a transfer session","Set up a P2P transfer for report.pdf"],"inputModes":["application/json"],"description":"Create a transfer session. Returns a browser URL (sender_url) for your user and CLI commands for autonomous agents. If you have shell access: `npx -y perkoon@latest send <file> --session <code> --sender-key <key> --json` (small files sent without --session relay via free cloud delivery and finish immediately; larger files stream P2P). If not: share the sender_url with your user to open in their browser.","outputModes":["application/json"]},{"id":"receive-files","name":"Receive Files","tags":["download","receive","p2p","free"],"examples":["Receive files from session A1B2C3D4E5F6","Join transfer A1B2C3D4E5F6","Download from A1B2C3D4E5F6"],"inputModes":["application/json"],"description":"Join an existing transfer session to receive files. CLI: `npx -y perkoon@latest receive <code> --json`. Or open the receiver_url in a browser.","outputModes":["application/json"]},{"id":"session-status","name":"Session Status","tags":["status","check","session"],"examples":["Check status of session A1B2C3D4E5F6","Is session A1B2C3D4E5F6 still active?"],"inputModes":["application/json"],"description":"Check the status of an existing transfer session.","outputModes":["application/json"]}],"version":"1.5.0","provider":{"url":"https://perkoon.com","organization":"Perkoon"},"resources":[{"url":"https://www.npmjs.com/package/@perkoon/mcp","type":"mcp-server","description":"MCP server for coding agents. Run: npx -y @perkoon/mcp (stdio transport). Adds send_file, receive_file, check_session as native tools."},{"url":"https://www.npmjs.com/package/perkoon","type":"cli-tool","description":"npx -y perkoon@latest — zero-install headless transfers (free cloud delivery for small files, P2P for the rest)"},{"url":"https://perkoon.com/create","type":"http-entry-point","method":"POST","description":"Browser-context session-creation entry. POST form fields: session[source]=agent_browser (or agent_skill for discovery attribution) and session[tos_accepted]=true. Returns 302 to /<SESSION_CODE> with TOS auto-accepted. REQUIRES CSRF token + session cookie (Phoenix browser pipeline) — works seamlessly from a Playwright browser context. For cookie-less agents (curl, MCP, scripts), use POST /a2a JSON-RPC at the `url` field above instead."},{"url":"https://perkoon.com/skills/perkoon/SKILL.md","type":"claude-skill","description":"Claude Skill (`skills/perkoon/SKILL.md`) — drop into your project's `skills/` or `.claude/skills/` directory. Frontmatter `name: perkoon` triggers on send/receive intent. Body documents all four entry points (MCP, CLI, A2A, browser) with concrete invocation examples and stable selectors."},{"url":"https://perkoon.com/automate","type":"documentation","description":"Full agent automation guide"}],"extensions":{"clientCapabilities":{"example":{"nodeJs":true,"shellAccess":true},"description":"Optional. Include in your DataPart to get an optimized response for your runtime."}},"rateLimits":{"a2a":"Every JSON-RPC POST to /a2a (send-files, receive-files, session-status) counts against the 10/min create budget; the separate join/status budgets apply only to the REST /api/v1/sessions paths.","scope":"per-ip","window":"60s","onExceeded":"HTTP 429 with Retry-After header (seconds); same value in JSON body as retry_after. Limits key on IP, not agent identity — clients behind a shared egress IP (NAT, CI, cloud gateway) share one budget, so pace batch sends.","joinsPerMinute":30,"createsPerMinute":10,"statusChecksPerMinute":20},"description":"File transfer for humans and the things replacing them. Small files get free cloud delivery — a durable share link with no receiver needed (fire-and-forget). Larger files transfer directly between machines over WebRTC with no size limit. No accounts.","capabilities":{"multiTurn":false,"streaming":false,"pushNotifications":false,"stateTransitionHistory":false},"protocolVersion":"0.3.0","documentationUrl":"https://perkoon.com/automate","defaultInputModes":["application/json"],"defaultOutputModes":["application/json"],"preferredTransport":"JSONRPC"},"signature_status":"unsigned","signature_detail":"No card signature supplied","signature_key_url":null,"signature_checked_at":"2026-10-08T14:33:41.187497+00:00","domain_claimed_at":null,"domain_proof_checked_at":null,"source_name":"A2A Registry","source_url":"https://a2aregistry.org/api/agents","last_check":{"checked_at":"2026-10-08T14:33:41.187497+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"skills":[{"skill_id":"describe","name":"Describe Capabilities","description":"Learn what Perkoon can do without creating a session. Returns capabilities, usage instructions, and next_steps for follow-up actions.","tags":["info","help","capabilities"],"quality_warning":false},{"skill_id":"receive-files","name":"Receive Files","description":"Join an existing transfer session to receive files. CLI: `npx -y perkoon@latest receive <code> --json`. Or open the receiver_url in a browser.","tags":["download","receive","p2p","free"],"quality_warning":false},{"skill_id":"send-files","name":"Send Files","description":"Create a transfer session. Returns a browser URL (sender_url) for your user and CLI commands for autonomous agents. If you have shell access: `npx -y perkoon@latest send <file> --session <code> --sender-key <key> --json` (small files sent without --session relay via free cloud delivery and finish immediately; larger files stream P2P). If not: share the sender_url with your user to open in their browser.","tags":["file-transfer","p2p","free","webrtc","cli"],"quality_warning":false},{"skill_id":"session-status","name":"Session Status","description":"Check the status of an existing transfer session.","tags":["status","check","session"],"quality_warning":false}],"quality_flags":[],"check_history":{"checks":1,"passed":1},"recent_checks":[{"checked_at":"2026-10-08T14:33:41.187497+00:00","success":true,"http_status":200,"detail":"Agent Card validated"}],"endpoint_tls_check":null,"protocol_check":null,"events":[],"relationships":[],"verification":{"agent_card_url":"https://perkoon.com/.well-known/agent-card.json","last_successful_card_check":"2026-10-08T14:33:41.187497+00:00","latest_card_check":{"checked_at":"2026-10-08T14:33:41.187497+00:00","success":true,"http_status":200,"detail":"Agent Card validated"},"signature_status":"unsigned","signature_checked_at":"2026-10-08T14:33:41.187497+00:00","task_endpoint_tested":false,"task_execution_tested":false,"endpoint_tls_checked_at":null,"endpoint_tls_reachable":null,"protocol_check_state":null,"protocol_checked_at":null,"provider_identity_verified":false,"domain_claimed_at":null,"domain_proof_checked_at":null}}