Keeps your network shares mounted.
velcro is a small menu bar app for macOS. When Wi‑Fi drops, your Mac sleeps, or you change networks, it quietly reconnects your SMB and NFS shares.
Version 0.11.0 · macOS 13 or later · Apple silicon and Intel · Free and open source
In the menu bar
Shares are grouped by server. Open one in Finder, reconnect it, or remove it. Pause velcro when you want an ejected share to stay ejected.
- AttachedEvery share is mounted.
- DetachedSomething dropped. velcro is reconnecting.
- PausedEjected shares stay ejected.
How it works
- Reconnects on its ownWhen the network changes, when your Mac wakes, and every minute in between.
- Never hangs your MacIt reads the mount table instead of touching a share, so a dead server can't freeze Finder or a terminal.
- Fallback hostsTry the LAN address first, then a Tailscale name, or any other route.
- No dialogsIt uses the password already in your keychain and writes problems to a log.
- SMB and NFSSMB is the better fit on a Mac. NFS works for servers that only speak it.
Also in the menu
- Voice recorder importPlug in a USB recorder and velcro copies its recordings to any folder you choose: on your Mac, on an external drive, in iCloud Drive, or on a NAS. It reads each copy back and compares its size and SHA-256, then clears the recorder and ejects it. If any file doesn't match, nothing is deleted. When the folder's drive or share is away, recordings wait on your Mac and move over once it's back.
- Send to an inboxPick a recent screenshot or file and velcro saves it in an inbox folder, on a share or one Dropbox or Syncthing keeps in sync, then copies its path. Add a rule and it copies the path another machine sees instead, ready to paste into a terminal over SSH. The clipboard only changes when you pick something.
- Mac mic for a serverRun Claude Code on a Linux machine over SSH and use
/voiceanyway.velcro mic on devboxgives that machine a microphone that is your Mac's, over SSH. Your Mac's microphone opens only while something there is recording, and closes as soon as it stops. - Mac screenshots on a serverCopy a screenshot on your Mac and press ⌃V in Claude Code on a Linux machine over SSH: it pastes.
velcro clip on devboxsends each image you copy straight to that machine over SSH, and only images: text and passwords stay on your Mac. No account, no relay. - Transcribe a voice memoPick an audio file, a Slack voice memo or a recording, and velcro copies its text. It uses the speech-to-text Claude Code's
/voiceuses, or ChatGPT's that Codex uses, signed in with your own Claude Code or Codex login, which it reads and never renews or shares.velcro transcribe memo.m4adoes the same in a terminal, on a Mac or Linux. It isn't a public API, so use it only with your own login and audio.
From recorder to notes
Import is the first step. On a server that sees your recordings folder, velcro recordings run takes every imported recording the rest of the way, one step at a time, from a timer.
- 1ImportPlug in the recorder. Each recording lands in your folder, checked byte for byte, with a line in
.velcro-import.jsonl. - 2TranscribeThe file is checked against that line, then turned into text by the engine you pick. There's no default: a local speech recognizer on your own machine is the usual choice for meetings, and
claudeorcodex(your own login) is there for short memos. - 3TidyYour command gets the text and writes notes, a summary, to-dos, whatever you keep.
- 4DeliverYour command hands each part to whoever should have it. velcro never decides who that is; your script does.
- Retries on its ownA step that fails is tried again after 10, 20, 40 minutes and so on, without redoing the steps before it. From the third failure, an alert command of yours runs, once a day.
- Try it alongside firstPoint
recordings.outat a separate folder and your commands at test targets while your current setup keeps running. Compare the text, then switch over. - Leaves recordings aloneNothing in the recordings folder is changed or deleted.
recordings.sinceskips what came in before you set it up.
velcro set recordings.dir /mnt/nas/me/recordings velcro set recordings.engine "whisper-cli -nt -f" # or claude velcro set recordings.tidy ~/bin/tidy-recording velcro set recordings.deliver ~/bin/deliver-recording velcro set recordings.since $(date +%F) velcro recordings # what is waiting velcro recordings run # run it now
Set it up your way
No NAS needed, and no code to change: every choice is in Settings, or one velcro set away.
- No NASSkip shares entirely. Import recordings into
~/Recordingsor an iCloud Drive folder, and send to a Dropbox folder. - External driveImport to
/Volumes/Backup/Recordings. Unplugged? Recordings wait on your Mac until it's back. - NASKeep its shares mounted, import to a folder on one, and send to an inbox your server also mounts.
- A recorder that also plays musicOnly take its recordings folder (
import.folder RECORD), so music elsewhere on it is never touched. - Keep a copy on the recorderTurn off deleting after verifying. Files already imported are recognized by their SHA-256 and skipped.
velcro recorder add /Volumes/VOICE # recorder plugged in velcro set import.folder RECORD # optional velcro set import.delete no # optional velcro set import.dest ~/Recordings # last: starts importing velcro set send.inbox ~/Dropbox/inbox velcro set map "~/Dropbox -> /home/me/Dropbox" velcro settings
Command line
Everything the app does is a velcro command, sharing the same settings.
velcro add smb://me@nas.local/home velcro add smb://me@192.168.1.10/photos nas.tail1234.ts.net velcro status velcro pause velcro import velcro send screenshot.png
Install
Let your agent do it. Paste this into Claude Code, Codex, or Cursor. It installs velcro, finds the shares you already have mounted, and asks before adding anything.
Set up velcro on this Mac (https://velcro.dgit.co). It keeps SMB and NFS shares mounted, and can also import a USB voice recorder and send files to a NAS inbox. 1. Install it: curl -fsSL https://velcro.dgit.co/install | sh If I only want the command line: curl -fsSL https://velcro.dgit.co/install | sh -s -- --cli-only velcro goes in ~/.local/bin; use the full path if that isn't on PATH yet. 2. List the shares mounted right now (mount -t smbfs; mount -t nfs) and ask which ones velcro should keep mounted. Add each with: velcro add smb://user@host/share (spaces as %20). If I reach that server another way too, like a Tailscale name, put it after the address as a fallback host. 3. Ask whether I want either of these, and set up only what I say yes to. Neither needs a NAS: - Voice recorder: I plug it in, you run velcro recorder add /Volumes/<its name>. Then, in this order because importing starts once import.dest is set: if recordings live in one folder (often RECORD), velcro set import.folder <that folder>; ask whether to keep recordings on the recorder (velcro set import.delete no); ask where they should go (~/Recordings, iCloud Drive, an external drive, or a share) and run velcro set import.dest <folder> last. - Send to an inbox: velcro set send.inbox <a folder on a share, or one Dropbox or Syncthing syncs>. If another machine sees it at a different path, velcro set map "<path on this Mac> -> <path there>". - Mac mic, if I use a Linux machine over SSH and want voice input there: check ssh <host> works without a password prompt, then velcro mic on <host>. - Mac clipboard, if I run Claude Code on a Linux machine over SSH and want ⌃V to paste images I copy on the Mac: check ssh <host> works without a password prompt, then velcro clip on <host>. - Transcribe, if I want audio files turned into text: only with my own Claude Code or Codex (ChatGPT) login on this machine. velcro set transcribe.lang <code> if I don't speak English, then velcro transcribe <file>. - Recordings, on a machine that always sees the recordings folder (usually a server): ask which engine (a local speech recognizer for meetings; claude or codex only if I ask), then velcro set recordings.dir, recordings.engine and any tidy or deliver commands I already have, and recordings.since today. Check with velcro recordings. 4. Finish with velcro status and tell me what's set up. Only change things with velcro commands; velcro help lists them. If macOS asks for a share's password, tell me to tick "Remember this password in my keychain".
Or run it yourself. The menu bar app and the velcro command:
curl -fsSL https://velcro.dgit.co/install | sh
Just the command, no app: add -s -- --cli-only after sh. Every download is checked against its published SHA-256 before anything is installed. Read the script.
Or download it.
- 1DownloadUnzip it and move velcro to Applications.
- 2Open itvelcro isn't notarized, so macOS says it can't check it. Click Done, then open System Settings › Privacy & Security and click Open Anyway. You only do this once.
- 3Add a shareChoose Add Share… in the menu and enter an address like
smb://me@nas.local/home. velcro starts at login from then on.
Guides
- How to automatically reconnect network shares on a MacmacOS mounts an SMB or NFS share once and doesn’t try again when the connection drops. Here are the ways to make shares come back on their own, and what each one misses.
- Why your Mac loses its NAS shares after sleepYou open the lid and the share on your Synology, TrueNAS, or Windows server is gone, or macOS says server connections were interrupted. What’s happening, and how to stop reconnecting by hand.
- Keep NAS shares mounted on a Mac at home and away (LAN and Tailscale)Use the fast local address at home and your Tailscale name everywhere else, without ejecting and reconnecting every time you leave the house.
- Copy recordings from a USB voice recorder to your NAS automatically on a MacPlug in the recorder and every recording lands on your NAS, checked byte for byte, with the recorder cleared and ejected. A manifest file makes it easy to feed a transcription pipeline.
- Send a screenshot from your Mac to a remote server (for Claude Code or Codex over SSH)When your coding agent runs on a server over SSH, pasting an image into the terminal doesn’t work. Put the file on a share both machines can see, and paste its path instead.
Questions
Why does macOS say it can't check velcro?
velcro is free and isn't notarized, which takes a paid Apple Developer membership. macOS only checks apps a browser downloaded, so installing with the curl command skips the dialog; the installer checks the download's SHA-256 instead. If you downloaded the zip, open velcro once, click Done, then click Open Anyway in System Settings › Privacy & Security. Or run xattr -dr com.apple.quarantine /Applications/velcro.app.
Do I need a NAS?
No. Keeping shares mounted is for people who have them, but recorder import and send work with any folder: on your Mac, on an external drive, in iCloud Drive, or one Dropbox or Syncthing keeps in sync. Set it in Settings or with velcro set; nothing in the code needs changing.
What will macOS ask me to allow?
Notifications, to tell you when an import or a send is done, and Login Items, to start at login. The first time velcro imports or sends, macOS may ask to let it open files on a removable volume or a network volume. Turning on Mac Mic asks for the microphone. velcro doesn't need Full Disk Access, Accessibility, or Screen Recording.
Does velcro see my passwords?
No. Share passwords stay in your keychain; macOS uses them to mount and velcro never reads them. If there's no saved password, macOS shows its own login window once. velcro keeps no tokens or keys of its own, except the CRM upload token you approve in the browser if you connect one (kept in the keychain).
What does it do with my clipboard?
It notices when you copy an image or a file and lists the last four in the menu. Copied images are kept in ~/Library/Application Support/velcro/clips until they drop off the list or velcro quits, and anything a password manager marks as private is skipped. velcro only writes to the clipboard when you pick something to send, and never sends anything on its own.
Where does it keep things?
Shares and settings in ~/.config/velcro, the log in ~/Library/Logs/velcro.log, and recordings waiting for the NAS in ~/Library/Application Support/velcro/import-queue.
How do I uninstall it?
Run velcro uninstall, then move velcro.app to the Trash. Delete ~/.config/velcro too if you want your settings gone.