Add files, a folder or a .zip and get one Markdown, XML or plain-text pack with a file tree and a token estimate. Nothing leaves your browser.
A context pack is one text that holds many files, so you can paste a whole small project into a chat with an AI model instead of attaching files one by one. This tool reads the files you add, drops the ones that would only waste space, and writes the rest in the order of their paths. Markdown gives each file a heading and a fenced code block with the language taken from the extension, so src/app.js is labelled js. XML tags wrap each file in a file element with its path. Plain text separates files with a line of equals signs. A file tree sits at the top so the model sees the layout before the code. The same files in the same order always produce the same pack.
By default the tool skips node_modules, .git, dist, build, .next, .nuxt, coverage, __pycache__, .venv and .idea folders, lock files such as package-lock.json and any file ending in .lock, files ending in .min.js, .min.css or .map, and .DS_Store. A .gitignore at the top level of what you add is applied too, with git's own pattern rules: star and question mark, character classes such as [0-9] and [a-c] (a class can be negated), double star across folders, a leading or inner slash to anchor, a trailing slash for folders, a backslash to escape, and a leading exclamation mark to bring a file back. As in git, a file cannot be brought back when a folder above it is left out. Not read: .gitignore files inside sub folders, .git/info/exclude and global ignore files. Paths longer than 1,000 characters or more than 64 folders deep are left out and listed. Binary files are found by a NUL byte in the first 8,000 bytes and are always left out, and so are files that are not valid UTF-8 text and files over the size limit, which starts at 1,024 KB. Add your own patterns, one per line: a name matches at any depth, a slash at the start or in the middle anchors it, a trailing slash means folders only, and a line starting with an exclamation mark brings files back. The last line that matches a path wins. The table lists every reason with a count, so a missing file is easy to trace.
The token count is an estimate: the characters in the whole pack divided by 4, rounded up. A pack of 4,000 characters shows about 1,000 tokens, and a file of 400 characters next to one of 1,200 shows 100 and 300, so the second file is 75 percent of the files' tokens. Real tokenisers differ by model and by content, so treat the figure as a rough guide and keep some margin. Set a budget and the meter turns amber near the limit and red over it. The table of largest files has a tick box for each file, so you can drop the heaviest ones until the pack fits.
Hide secrets is on by default. It replaces private key blocks, AWS access key ids, keys and tokens from OpenAI, Anthropic, GitHub, Google, Slack and Stripe, JSON Web Tokens, Bearer and Basic authorization values and user:password@ in URLs with a [REDACTED: TYPE] label. It matches patterns, so it can miss a secret in another shape, and it does not look for passwords or tokens written as password= or token= values, emails, IP addresses or card numbers. Read the pack before you share it, and keep .env files out with a pattern. The tool does not call any AI model, count tokens exactly, follow nested .gitignore files or run any file. Up to 5,000 files, 5 MB per file and 60 MB of text are read; a .zip can be 50 MB. Everything happens in this tab.
Add the files, a folder or a .zip, check the token estimate against your model's limit, then press Copy pack and paste it into the chat. Markdown output, with a heading and a code block for each file, is a good default.
Download the repository as a .zip and add that .zip here. The top folder name such as repo-main is removed, node_modules and lock files are skipped, and you get one pack with a file tree. Cloned folders work too, through Add a folder.
The tool shows characters divided by 4, rounded up, so 40,000 characters is about 10,000 tokens. That is an estimate. The count your model reports can differ, so keep some margin below your limit.
Look at the Why files were left out table. Usual reasons are a default exclude such as a lock file, a .gitignore line, your own pattern, a NUL byte that marks a binary file, text that is not UTF-8, or a size over the Largest file setting, 1,024 KB by default.
Add one pattern per line in Exclude patterns, for example *.test.js to skip every test file, or docs/ to skip a folder. Put ! in front of a line, such as !docs/keep.md, to bring a file back. The last matching line wins.
No. The files are processed in your browser and not uploaded, and the page never sends file names or text anywhere. Your option choices, such as the format, are saved in this browser; your files and patterns are not.