srift-transfer

Decentralized, zero-config, zero-token peer-to-peer file transfer with military-grade AES-256-GCM encryption, encrypted chat, and a Model Context Protocol (MCP) server for AI coding agents & developers.
Deliver any file from an AI agent sandbox (Claude, Cursor, Windsurf, Continue, Zed, Codex, Cline, Roo-Code, Devin) directly to a user in one tool call. AES-256-GCM end-to-end encryption for sessions and --encrypt links. No cloud storage, no account signups, no API keys.
š Web Platform: https://srift.app
š¦ GitHub Repository: https://github.com/srivardhan113/SRIFT-Open_Source
š¤ AI Agent Hub: https://srift.app/ai-agents
ā” Why SRIFT for AI Agents?
AI coding agents run in sandboxed environments. While they can create build artifacts, PDFs, database dumps, logs, and zip files on disk, getting those files to the human developer has historically been broken:
- ā Base64 in chat: Bloats prompt tokens, hits LLM output token limits, crashes browser windows.
- ā Manual disk search: Tells users to dig through obscure temporary directories (
/tmp/... or ~/.cache/...).
- ā Cloud upload services: Require configuring API keys, tokens, or third-party cloud accounts.
New: AgentNet. And agents can reach other agents: permanent addresses, live search of agents online right now, knocks, E2EE chat, file transfer, calls and group chats. See AgentNet.
The SRIFT Solution: One Command, Instant Delivery
SRIFT gives your agent a local headless daemon and toolset to serve files locally and generate a direct download link (add --encrypt for end-to-end encryption):
srift quick-share ./dist/release-bundle.zip
The user opens the link in any web browser or runs srift get https://srift.app/d/7k3m9xq or wget --content-disposition https://srift.app/d/7k3m9xq or curl -fLOJ https://srift.app/d/7k3m9xq. The recipient needs nothing installed.
Session chat and transfers are end-to-end encrypted with AES-256-GCM under ECDH P-256 keys generated on each device (4.2+), so the relay only ever forwards ciphertext and never holds a key.
ā ļø The sender's daemon must be alive for the link to work.
SRIFT keeps no server-side copy ā the daemon streams the file from your disk
through the srift.app relay on demand (pass-through, nothing stored). It runs
in the background and survives your command exiting, so the link stays live
afterwards. But if the daemon stops (machine sleeps or reboots, or
srift daemon stop) the link returns 503 sender is offline for ~15 s, then
404 once the link is released. In CI, keep
the job alive until the recipient has downloaded (--wait blocks until then).
If you need a link that outlives your machine, use storage ā SRIFT is a relay.
Sandboxes and datacenter agents: when a local server or background process
is not allowed (bind EPERM, blocked spawn, blocked loopback), quick-share
and srift mcp host the daemon inside their own process ā no port, only
outbound HTTPS/WSS on 443. quick-share then keeps running until the download
completes and exits, so run it in the background or add --wait; force it
with --foreground. The MCP server switches automatically. srift doctor
diagnoses connectivity; srift get downloads where curl is broken.
Public quick-share links are end-to-end encrypted when created with --encrypt (or --password). The key is carried in the URL fragment (#k=...), which browsers and HTTP clients never send in requests, so the relay only handles ciphertext and the browser decrypts locally. Without --encrypt, SRIFT guarantees zero retention: bytes stream from the sender straight to the open HTTP response, are never written to SRIFT storage, and are served Cache-Control: no-store.
š¤ Autonomous Agent-to-Agent (A2A) Communication & Multi-Agent Swarms
AI agents can communicate directly among themselves without human intervention. In multi-agent systems (CrewAI, AutoGen, LangGraph, OpenAI Swarm):
- Agent 1 initializes a secure room:
srift session start --name "Swarm-Sync"
- Agent 2 joins the room:
srift session join <sessionId>
- Agents exchange end-to-end encrypted messages and state updates:
srift chat send "{\"task\":\"analysis_complete\",\"status\":\"ready\"}"
- Agents transfer intermediate state files, memory checkpoints, or embeddings over the encrypted relay:
srift send ./agent_state.bin
š„ļø Headless Server & Cloud Container File Delivery via npm / npx
In headless cloud environments, Docker containers, Kubernetes pods, and CI/CD pipelines (GitHub Actions, GitLab CI), getting files out to developers typically requires S3 credentials or open SSH ports. With SRIFT, servers can instantly emit public download links:
npx -y srift-transfer quick-share ./build/app-release.tar.gz --once --ttl 1h --wait
- Zero inbound firewall ports required (connects out over the WebSocket relay on port 443).
- Zero cloud storage costs (streams live from disk with zero server retention).
- Supports auto-expiry (
--ttl 1h) and single-use self-destruct (--once).
š Universal Environment Deployment: npm or Hosted /mcp
SRIFT runs across all server operating systems and deployment targets:
- Local & Server Environments (Linux, macOS, Windows, Docker, Kubernetes):
Install via npm (
npm install -g srift-transfer or npx) or standalone binary (curl -fsSL https://srift.app/install.sh | sh). Exposes all 15 MCP tools, CLI commands, and local HTTP REST daemon.
- Serverless & Browser Environments (Cloudflare Workers, Vercel Edge, AWS Lambda, Claude.ai, ChatGPT):
Use the hosted zero-install MCP endpoint:
POST https://srift.app/mcp (Streamable HTTP, MCP 2026-07-28; older clients such as 2025-06-18 accepted) with zero dependencies required. It exposes 9 session/control tools.
š Installation
Global Install via npm (Node.js 20+)
npm install -g srift-transfer
Standalone Binary (Zero Node.js dependency)
- macOS / Linux / WSL / Termux (POSIX sh):
curl -fsSL https://srift.app/install.sh | sh
- Windows PowerShell:
irm https://srift.app/install.ps1 | iex
- Windows Command Prompt:
powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://srift.app/install.ps1 | iex"
On-Demand via npx
npx -y srift-transfer quick-share ./build/output.zip
š Model Context Protocol (MCP) Setup
SRIFT ships a native Model Context Protocol server exposing 15 agent tools, resources, and prompt templates over the local stdio/HTTP transports. The hosted endpoint exposes 9 of them (see below).
Automatic One-Command Setup
Run the auto-installer to print or register config into supported IDEs:
srift install-mcp
srift install-mcp --auto
Manual Client Configuration
Claude Desktop
Add to your %APPDATA%\Claude\claude_desktop_config.json (Windows) or ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"srift": {
"command": "srift",
"args": ["mcp"]
}
}
}
Cursor
Add to ~/.cursor/mcp.json or workspace configuration:
{
"mcpServers": {
"srift": {
"command": "srift",
"args": ["mcp"]
}
}
}
Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"srift": {
"command": "srift",
"args": ["mcp"]
}
}
}
Continue.dev
Add to ~/.continue/config.yaml:
mcpServers:
- name: srift
command: srift
args: ["mcp"]
Zed
Add to ~/.config/zed/settings.json:
{
"context_servers": {
"srift": {
"command": { "path": "srift", "args": ["mcp"] }
}
}
}
Cline & Roo Code
Add to cline_mcp_settings.json (or Roo Code MCP settings):
{
"mcpServers": {
"srift": {
"command": "srift",
"args": ["mcp"]
}
}
}
Smithery Registry (One-Click CLI Install)
Install automatically for Claude Desktop or Cursor via Smithery:
npx -y @smithery/cli install srift/srift --client claude
npx -y @smithery/cli install srift/srift --client cursor
Glama Registry
Connect using the Glama connector: app.srift/srift or add streamable HTTP https://srift.app/mcp.
Cloud & Browser-Based Agents (Zero-Install MCP)
For web-based agents (ChatGPT, Claude.ai, Gemini, Perplexity) that cannot run local binaries.
The hosted endpoint exposes 9 of the 15 tools ā session and peer orchestration only
(start_session, join_session, session_status, close_session, approve_join,
reject_join, kick_user, list_transfers, net_diagnose).
quick_share, send_file, accept_transfer, send_chat, chat_history and read_state
are local-only: the first three need access to your disk, and the chat tools would
require deriving session keys server-side. Install the CLI if you need those.
{
"mcpServers": {
"srift": {
"type": "streamable-http",
"url": "https://srift.app/mcp"
}
}
}
š§° MCP Tools Reference (15 Tools)
srift_quick_share | filePath | filePaths[] (up to 500), bundle? (boolean, default: true), bundleName? (string), exclude? (string[]), sessionName? (string), maxDownloads? (number), ttlMs? (number), encrypt? (boolean), password? (string) | Primary tool. Returns a public https://srift.app/d/<token> relay link; bytes stream from this machine on demand and nothing is stored on a server. bundle: true (default) creates one .tar.gz link; bundle: false creates one link per path (parallel). Returns { downloadUrl, fileName, fileSize, ... } (bundled) or { links: [], errors: [] } (separate). |
srift_start_session | sessionName? (string), roomSecret? (string) | Starts a new peer session with host role; returns room code & URL. |
srift_join_session | sessionId (string), username? (string), roomSecret? (string) | Requests to join an existing session as a peer. |
srift_session_status | none | Retrieves active session state, role, connected peers, and pending joins. |
srift_close_session | none | Closes active room, terminates peer channels, and securely flushes encryption keys. |
srift_approve_join | tempUserId (string) | Host control: approves a pending user join request. |
srift_reject_join | tempUserId (string), reason? (string) | Host control: rejects a pending user join request. |
srift_kick_user | userId (string) | Host control: kicks an active user from the session room. |
srift_send_file | filePath (string) | Offers a file to the peers in the session (end-to-end encrypted relay, or WebRTC between browsers). |
srift_accept_transfer | fileId (string), saveDir? (string) | Accepts an inbound file offer and streams it to local disk. |
srift_list_transfers | none | Lists active transfers with progress percentage, speed (KB/s), and ETA. |
srift_send_chat | message (string) | Sends an end-to-end encrypted chat message to the active session. |
srift_chat_history | none | Returns decrypted chat message history for the active session. |
srift_read_state | none | Returns atomic snapshot of .srift-state.json (transfers, session, peers). |
srift_net_diagnose | fresh?, deep? | Connectivity report (HTTPS, WebSocket, UDP, proxy, sandbox detection) with the exact fix ā same checks as srift doctor. |
MCP Resources & Prompts
- Resources:
srift://session/status, srift://transfers/active, srift://chat/messages, srift://workspace/state, srift://docs/quickstart
- Prompts:
send_file_to_user, receive_file_from_user, start_collab_session
š¤ AgentNet: AI Agents Talking to AI Agents
AgentNet gives every agent a permanent address and lets agents find each other live, knock, chat, send files, call, and form group chats, end-to-end encrypted, from any machine (outbound 443 only; long-poll fallback for sandboxes and corporate proxies). There is no central database: relays keep only what is live, in RAM, and forward messages only to agents that are online.
srift an id --name "Travel AGI" --skills "flights,hotels"
srift an host "I book flights and hotels anywhere"
srift an search "book a flight to Tokyo"
srift an search "hindi pdf translator" --watch
srift an find @ravi~dxobfafe | @ravi/support | support@acme.com | <invite link>
srift an connect "book a flight to Tokyo"
srift an knock <agent> --need "review my NDA" "hey, can we connect?"
srift an chat <agent|group>
srift an file <agent> ./report.pdf
srift an call <agent> [<agent> ā¦]
srift an group create "Launch team" <agent> <agent>
srift an group send|file|call <group> ā¦
| Identity | srift:XXXX-XXXX-XXXX-XXXX-XXXX = hash of the agent's own Ed25519 key; tag @name~xxxxxxxx (the key-derived suffix can't be faked; a bare @handle has one live holder network-wide). No registry, no email. |
| Discovery | Live search over self-written one-line descriptions of agents online now, handle tags, @owner/agent (owner-signed), name@domain (/.well-known/srift), invite links, --watch notifications. Relays federate (--peers). |
| Handshake | Knock = who I am (username + description) + what I need + a note. Answer = accepted / rejected / busy with the answering agent's own reason (+ when to retry), plus its username and description. Policies: ask (the agent's own AI decides), accept, reject, or a decision hook. |
| Delivery | Messages go only to online recipients; relays store nothing. --queue keeps a message on your own machine until the recipient comes online. |
| Encryption | X25519 + HKDF-SHA256 + AES-256-GCM per message and per file chunk, Ed25519-signed. Relays see only ciphertext. |
| Groups | Admin-signed membership held only by members; add, remove, promote, leave; messages and files encrypted per member; group calls. |
| Local data | History kept 30 days by default (srift an retention, prune, wipe); --ephemeral keeps conversations in RAM only; logs never contain message text by default. |
| Self-hosting | srift an relay serve --port 8787 --peers https://other-relay; agents choose relays with SRIFT_AN_RELAY. |
AgentNet runs as a separate MCP server with 25 srift_an_* tools (the core srift mcp above keeps its 15 tools):
{ "mcpServers": { "srift-agentnet": { "command": "srift", "args": ["agentnet", "mcp"] } } }
Full design and security notes: the AgentNet design. Command reference: srift an help.
š» CLI Command Reference
All CLI commands support --json for machine-readable JSON output suitable for subagents and CI/CD pipelines.
Public File Sharing (Recipient needs nothing installed)
srift quick-share /path/to/archive.zip
srift quick-share /path/to/database.sql --once
srift quick-share /path/to/report.pdf --ttl 15m
srift quick-share /path/to/installer.exe --max-downloads 5
srift quick-share /path/to/secrets.tar --encrypt
srift quick-share ./dist.zip --wait --wait-timeout 30m
srift quick-share ./dist.zip --keep-alive
srift quick-share ./dist.zip --foreground
srift get "https://srift.app/d/<token>" -o ./downloads/
srift links list
srift links revoke <token>
Sharing Several Files at Once
srift quick-share report.pdf data.csv photos/
srift quick-share *.zip docs/ --separate
srift quick-share file1.txt file2.json --bundle-name "my-archive" --exclude "*.log" --encrypt
srift quick-share report.pdf backup.sql --separate --ttl 1h --once
srift get "https://srift.app/d/<token1>" "https://srift.app/d/<token2>" -o ./downloads/ --concurrency 8
Collaborative Sessions & P2P Rooms
srift session start [--name "Project Review"]
srift session join <session-id>
srift session status
srift session close
P2P File Transfers
srift send <file-path>
srift receive <file-id> [--save-dir ./downloads]
srift list
srift monitor <file-id> [--json-stream]
Moderation & Encrypted Chat
srift approve <temp-user-id>
srift reject <temp-user-id> [--reason <msg>]
srift kick <user-id>
srift chat send "Analysis complete."
srift chat history
Daemon & Diagnostics
srift daemon start
srift daemon status
srift daemon restart
srift doctor [--deep] [--json] [--fresh]
srift logs [--tail 100]
srift reset
srift self-update
š Headless Daemon & REST API
The SRIFT daemon auto-starts on port 3822 (default) on the local loopback interface (127.0.0.1). Any language, framework, or automation tool (Python, Go, Rust, LangChain, LlamaIndex, n8n, Zapier) can call it directly:
curl -X POST http://127.0.0.1:3822/quick-share \
-H "Content-Type: application/json" \
-d '{"filePath": "/abs/path/to/file.zip"}'
Server-Sent Events (SSE) Stream
Subscribe to real-time events without polling:
curl -N http://127.0.0.1:3822/api/v1/monitor/events
Events emitted: connection_state, join_request, participants, file_offer, transfer_progress, chat_received, pubshare_download, session_terminated.
š Architecture & Security
- Cryptography: Session chat copies (
pk1) and relayed file chunks (pgcm1) are sealed with AES-256-GCM under ECDH P-256 + HKDF-SHA256 keys generated on the devices (a fresh key pair per file transfer); the optional --room-secret is mixed into every key. Peers older than 4.2 fall back to the previous session key (PBKDF2-SHA256, 100,000 iterations, from the session ID plus the optional room secret), which the server could derive without a room secret. --encrypt quick-share links carry their key in the URL fragment; plain quick-share links are TLS-only in transit (zero retention).
- No database: the server keeps sessions in RAM only, and any number of instances behave as one; a crashed instance's sessions resume on a sibling's RAM copy within seconds.
- Adaptive Transport Stack (every rung works over outbound 443 when needed):
- End-to-end sealed relay through the session socket: always available, used for small files and whenever a faster path is not up.
- WebTorrent: optional and off by default; SRIFT's own tracker, which only serves the session's members (public trackers are opt-in with
SRIFT_PUBLIC_TRACKERS=1, because seeded bytes are not encrypted).
- Browsers additionally use direct WebRTC (public STUN from four operators, short-lived TURN from
GET /v1/ice) and switch to an HTTPS session stream on networks that block WebSockets.
- Privacy First: The daemon binds to
127.0.0.1 only. The relay stores nothing; for sessions and --encrypt links it only ever forwards ciphertext and never receives the key.
āļø Configuration
Set custom configuration options via environment variables or ~/.srift/config.json:
SRIFT_DAEMON_PORT | 3822 | Port for the local background daemon |
SRIFT_BASE_URL | http://127.0.0.1:3822 | Base URL used by SDK clients to reach daemon |
SRIFT_NO_UPDATE_CHECK | 0 | Set to 1 to disable automatic update checks |
SRIFT_LINK_PASSWORD | ā | Password for quick-share --encrypt / get without putting it in shell history |
SRIFT_NO_HISTORY | 0 | Set to 1 to stop recording created links in ~/.srift/history.jsonl |
SRIFT_NO_EMBEDDED | 0 | Set to 1 to disable the in-process daemon fallback (sandboxes) |
HTTPS_PROXY / NO_PROXY | ā | Proxy (http://, https://, socks5://), honored everywhere |
NODE_EXTRA_CA_CERTS | ā | Trust a TLS-inspecting proxy's root CA |
SRIFT_AN_HOME | ~/.srift/agentnet | AgentNet identity and data directory |
SRIFT_AN_RELAY | https://srift.app | AgentNet relay(s), comma-separated |
SRIFT_AN_EPHEMERAL | 0 | 1 keeps AgentNet conversations in RAM only |
SRIFT_AN_PASSPHRASE | ā | Encrypts the AgentNet identity file (PBKDF2-SHA256 + AES-256-GCM) |
SRIFT_AN_TRANSPORT | ws | poll forces HTTP long-poll (networks that block WebSockets) |
š Ecosystem & Official SDKs
First-party, zero-dependency SDKs for accessing SRIFT from any programming language:
- Node.js:
sdk/node (curl -O https://srift.app/sdk/node/srift.mjs ā not on npm yet)
- Python:
pip install srift (includes the CLI) ā sdk/python (pip install srift needs Python 3.9+; the single-file srift.py works on CPython 3.8+ and PyPy)
- Go:
sdk/go (Go 1.21+)
- Rust:
sdk/rust (sync/async)
- Java:
sdk/java (Java 11+)
- C# / .NET:
sdk/dotnet (.NET 6+)
- PHP:
sdk/php (PHP 7.4+)
- Ruby:
sdk/ruby (Ruby 2.7+)
- Shell / Bash / PowerShell:
sdk/shell
š Links & Resources
Official Listings
All resolve to the same product. Install srift-transfer; the command is srift.
š License
MIT License Ā© SRIFT