You followed the setup guide , you’ve got your AI assistant running in a VM, and now you’re wondering: how do I actually get files in there?
If you’re comfortable with the command line, scp or rsync work fine. If your virtualization software has built-in file sharing, that works too (though depending on how much you want to sandbox things, it may come with tradeoffs). But if you want something simple that works from any browser, we can build a drag-and-drop file upload in about five minutes.
If you followed along with the weather page at the end of the setup guide, this is another example of the same pattern, just slightly more advanced. You give your assistant a prompt, watch it work through the problem, and end up with a running tool. The more you do this, the more you start thinking of things you can build the same way.
The Prompt
Open a terminal in your VM, start Claude Code, and give it this:
Build me a simple file upload server. I want to:
- Have a nice drag-and-drop web interface that I access from my browser
- Save uploaded files to ~/uploads/
- Limit file size to 100MB
- Show upload progress Use Bun. Keep it simple.
Your assistant will think through the request, plan its approach, write the code, and start the server. It will figure out the VM’s IP address (since you’re accessing it from another machine, not localhost) and give you a URL to open in your browser.
Drag a file in. Check ~/uploads/. That’s it.
What Can You Do With It?
This is where it gets interesting. The upload server itself is just plumbing. The real value is what happens once your assistant has access to those files.
Say you had a handful of meeting transcripts. You could drop them in, then ask your assistant to pull out all the action items, decisions, and blockers across every meeting.
Analyze all meeting notes in ~/uploads/. Create:
- A consolidated action item list with owners and status
- All decisions made and when
- Current blockers and their resolution status
- A timeline of how the project evolved
Or ask it to build you a nice dashboard view of that information, something you can open in your browser and actually scan through quickly.
The same idea applies to anything you might want to process: PDFs, notes, data exports, research. Once the files are accessible to your assistant, you can work with them conversationally. Describe what you want, and it builds the thing.
Making It Permanent
There’s one problem with what we just built: the upload server only runs inside your current session. Close the terminal, and it’s gone.
So ask your assistant to fix that. Something like:
Can you set up the upload service to run long-term in the background? Pick a port where it can stay running, set it up as a service so it auto-restarts if it crashes or if the server reboots, and document how it’s set up so we can refer back to it.
Depending on what operating system you’re running, your assistant will probably set up something like a systemd service (the standard way Linux manages background processes), choose a port, and make sure the upload server starts automatically. When it’s done, your file drop should always be available, whether you’re in a Claude Code session or not.
Before You Leave This Running
A couple things worth thinking about.
Data sensitivity
Your VM sandbox keeps the assistant from accessing your main computer, but anything you drop into that uploads folder becomes part of what it can read and process. If the content is sensitive, consider whether you’re comfortable with it being sent to the cloud for processing. Using example data while you’re learning is a good approach. Get comfortable with how the system works, then decide what real data you’re ready to bring in.
Network exposure
If you’re running this in a VM on your local machine, the risk is relatively low. The upload form is only reachable from your network. But if you’re running this on a VPS or any server exposed to the internet, this is not code you want sitting on an open port. There’s no authentication, no encryption, and we haven’t done any security review of what the assistant built. Anyone who can reach that port can upload files to your server. Keep this on a private network, or behind a firewall. If you need remote file access on a public server, that’s a different problem that deserves a more thoughtful solution.
What’s Next
This is one small example of a bigger pattern. Your assistant can build tools, run them, and turn them into permanent services, all from a conversation. The upload server just happens to be a practical first step because it solves the “how do I get files in here” problem. From here, you can start exploring what else your assistant can do with the files you give it, and what other tools it can build for you along the way.
Part of the PAI Setup Series. Previous: Setting Up Your Personal AI Assistant