together 2.5.4
together: ^2.5.4 copied to clipboard
A tool to merge text/code files in a folder
Together #
A simple command-line tool to concatenate text and code files, respecting .gitignore rules.
Why? #
I often need to provide a complete project context to AI models. This tool simplifies the process of bundling all relevant files into a single text file, making it easy to upload or paste.
Example: Manual Exclusion #
You can manually specify every file or folder to ignore. This is powerful but can be verbose.
tog \
/path/to/project/** \
--output=ai.txt \
--ignore-folders=vendor \
--ignore-folders=test_files \
--ignore-folders=bin \
--ignore-extensions=lock,bash \
--ignore-files=LICENSE.md
Example: Using a .gitignore file (Recommended) #
For a much cleaner command, you can add the same rules to a .gitignore file and use the --gitignore flag.
First, your .gitignore file would look like this:
# .gitignore
vendor/
test_files/
bin/
*.lock
*.bash
LICENSE.md
Then, the command becomes simple and reusable:
tog /path/to/project/** --output=ai.txt --gitignore
Personal usage on this project #
Since I do this a lot of times, I use a makefile on every project. The command below uses the project's own
.gitignoreto exclude development files.
⚡ make
dart ./main.dart . --output=ai.txt --gitignore
Skipping file ./.DS_Store due to encoding issues.
Adding file ./main.dart
Adding file ./README.md
Adding file ./pubspec.yaml
Adding file ./tests.dart
Output file: ai.txt
Usage #
- Download the binary for your OS from the releases page.
- Make it executable:
chmod +x /path/to/downloaded/tog - (Optional) Move it to a directory in your PATH:
mv /path/to/downloaded/tog /usr/local/bin/ - Run it from your terminal:
tog <path1> <path2> ... [options]
<path> Specifies paths to process. Use glob patterns for more control.
--output Specifies the output file name
(defaults to "output.txt")
--ignore-extensions Specifies file extensions to ignore (comma separated)
--ignore-folders Specifies folders to globally ignore (can be used multiple times)
--ignore-files Specifies files to globally ignore (can be used multiple times)
--gitignore Ignores files and directories based on the .gitignore file
in the current directory.
Glob Pattern Examples #
src/*.dart: Match all Dart files directly inside thesrcdirectory.lib/docs/file.txt: Process a single, specific file.assets/*: Match all files and directories directly insideassets(e.g.,assets/logo.png), but not in subdirectories (e.g., notassets/icons/add.svg).assets/**: Match all files and directories insideassetsand all of its subdirectories, recursively.**/*.dart: Match all files ending with.dartin the current directory and all subdirectories.lib/{src,test}/*.dart: Match Dart files in either thesrcortestsubdirectories oflib.**/*.{js,ts}: Match all JavaScript and TypeScript files in any subdirectory.
Using Dart #
Run #
dart run main.dart path/to/any/folder path/to/another/folder/* specific/file.txt
Compile #
make will compile the binary for your OS to ~/bin/tog.
tog path/to/any/folder path/to/another/folder/* specific/file.txt