How to Add a Whole Folder of Files to Claude

Stacks of paper folders and documents, representing adding a folder of files to Claude

I add files to Claude constantly — code snippets, design docs, reference images, API specs. But the day I tried to drag an entire project folder into the chat, I hit the wall that every Claude user eventually finds: there’s no folder upload. Here’s the honest breakdown of what you can actually do when you want to add a whole folder of files to Claude as context.

Why You Can’t Just Upload a Folder

Claude’s web app (claude.ai) works with individual files. There’s no directory picker, no “upload folder” button, no recursive file tree import. This isn’t an oversight — the browser security model prevents any web app from reading your local filesystem without you explicitly choosing each file. The web UI is stateless about your disk.

If you’ve heard that Claude can read folders, that’s a different tool: Claude Code (the CLI) and Claude Desktop with an MCP connector have real filesystem access, but the claude.ai web app does not — more on whether Claude can read local folders.

Option 1: Add Files Individually

The bluntest approach is to select multiple files in the attachment picker. You can shift-click or cmd-click to select several at once in most OS file pickers, and claude.ai accepts multiple files per message. For five or ten files this is fine. For fifty, it gets painful quickly — and you’ll be re-uploading the same files every new chat.

Works best when: you have a small, stable set of reference files and you’re doing a one-off task.

Option 2: Zip the Folder

ZIP the directory, upload the archive. Claude can read the structure and contents of a zip file without you needing to extract it first. This is genuinely useful when you want to hand over a whole project layout — Claude can see your folder hierarchy, read source files inside the archive, and reason about the structure as a whole.

The practical ceiling here is file size: Claude’s attachment limit applies to the zip itself, so a large monorepo with binaries is going to hit the wall fast. Also, every new conversation means re-uploading the zip if you’re working outside a Project.

Works best when: you have a bounded, moderate-sized folder and want Claude to reason about structure as well as content.

Option 3: Use a Claude Project’s Knowledge Files (The Right Tool for Ongoing Work)

This is the approach I reach for on anything I’ll work on across multiple sessions. Claude Projects let you upload knowledge files that persist across every chat within that project — you upload once, and every conversation in the project has that context without you lifting a finger.

Each knowledge file can be up to 30 MB, and Projects are available on all plans (Free, Pro, Max, Team, Enterprise — Free is capped at five projects, paid plans are unlimited). You also get a persistent system prompt (project instructions) that applies everywhere in the project.

The catch: you’re still adding files one at a time to the knowledge base. There’s no “import folder” button in Projects either. For a directory of twenty files, that’s twenty uploads. For a directory of two hundred files, you need to make hard choices about what Claude actually needs — not everything, just the files most likely to be referenced.

This is also where I’d use the zip trick selectively: zip sub-directories that are dense but reference-only (like a vendor library), and upload your core source files individually so Claude can reference them cleanly.

Works best when: you have a persistent project, a manageable number of important files, and you’re doing repeated work across multiple chats.

What to Do When You Have Hundreds of Files

Don’t try to feed them all in — Claude’s context window is finite, and uploading everything doesn’t mean the model uses it well. Be deliberate: upload the handful of core files Claude actually needs to a Project knowledge base, and describe the rest in a project instruction or paste snippets inline. For large codebases, Claude Code (the CLI) is the right tool — real filesystem access, no manual uploads.

The Next Problem: All Those Resulting Chats

Once you’ve done this work across a project, you end up with a pile of chats that’s hard to navigate — and Claude has no native folders for individual conversations. That’s the problem I built NorthLab Folders to solve: a browser extension that adds real folders to claude.ai (and ChatGPT), with per-chat pinning, subfolders, and bulk Markdown export. More in the guide to how to add folders to Claude.

Frequently asked questions

Can I upload a whole folder to Claude?

Not as a raw folder — claude.ai has no native folder-upload button. Your options are to add files individually (tedious but reliable), zip the folder and upload the ZIP, or use a Claude Project and upload each file as a knowledge file (up to 30 MB each, persistent across every chat in that project).

What’s the file size limit for Claude Projects?

Each knowledge file in a Project can be up to 30 MB. There’s no published hard cap on the total number of files, but in practice large collections of big files will hit context-window limits during a conversation. For hundreds of files, you’ll need to be selective about what you actually include.

Can Claude read a folder on my computer?

The claude.ai web app cannot read or watch a folder on your machine — it only works with files you explicitly upload. Local filesystem access is a feature of Claude Code (the CLI tool) and Claude Desktop with MCP connectors. See the full breakdown in the sibling post on whether Claude can read local folders.

How do I add a lot of files to Claude at once?

The most practical approach for a large set is to use a Claude Project: upload key files as knowledge files so they persist across every chat without re-uploading. For code repos with hundreds of files, you’ll need to prioritise — include the files Claude will actually need rather than the entire tree. Alternatively, zip the folder and let Claude work from the archive.