How I built a persistent Taildrop file receiver to move files between Sprites and any device on your tailnet.
One of the things I kept running into while working on Sprites was needing to move files between my local machine and cloud sandboxes. SSH/SCP works, but it’s clunky. I wanted something that felt native — drag and drop from Finder, or a quick CLI command.
Tailscale’s Taildrop is perfect for this, but it’s designed for interactive use. You receive a file, and the receiver exits. For a cloud sandbox that might be running unattended, you need something that keeps listening.
So I built spritedrop.
How it worksh2
Spritedrop is a small Go binary that wraps tailscale file get in a persistent loop. It continuously listens for incoming Taildrop files, saves them to ~/incoming, and restarts the receiver. It runs as a systemd service or Sprite service, so it starts automatically and survives reboots.
The install script handles everything — installing Tailscale if needed, authenticating, setting a hostname, and registering the service:
bash <(curl -fsSL https://raw.githubusercontent.com/kylemclaren/spritedrop/main/install.sh)Once installed, sending files is as simple as:
# CLItailscale file cp myfile.txt my-sprite:
# Or right-click in Finder → Share → TaildropThe tailnet architectureh2
For projects with multiple Sprites, I recommend creating a dedicated tailnet using a GitHub organization. This keeps your Sprites isolated and discoverable:
- Create a GitHub org (e.g.,
myproject-sprites) - Sign up for Tailscale using that org
- Install spritedrop on each Sprite — they automatically join the same tailnet
This gives you a private network where any device can send files to any Sprite, and Sprites can send files to each other.
Claude Code integrationh2
Since Sprites are often used with Claude Code, spritedrop installs a /spritedrop skill that lets you check incoming files and send files directly from the Claude Code session:
/spritedrop # Check incoming files and status/spritedrop send <file> <device> # Send a file to another deviceThis turned out to be one of the most useful features — AI agents can now receive and send files across your tailnet without any manual intervention.
What I learnedh2
Building spritedrop reinforced something I keep coming back to: the best developer tools are the ones that disappear. You shouldn’t have to think about file transfer. You just drop a file and it shows up. Tailscale’s networking layer makes this possible, and spritedrop just makes it persistent.
Check it out on GitHub.