fyai
A command-line tool to combine files from a directory into a single file for AI processing, with flexible filtering options.

Features
- Combines multiple text files into one output file
- Can process a remote git repository in a temporary directory
- Supports configuration via CLI options and config files (YAML)
- Filters files by:
- Size
- File extensions (e.g.,
.txt,.md) - Directory inclusion/exclusion
- File inclusion/exclusion
- Optionally respects
.gitignorerules (can be disabled)
- Preserves file boundaries with headers showing filename and size
- Customizable input directory and output file
Installation
Install via Cargo
Or,
This installs the fyai binary to ~/.cargo/bin/. Ensure this directory is in your PATH.
Usage
Run fyai in your terminal to combine files:
Config File Support
You can specify options in a config file (YAML format):
- Local config:
./fyai.yaml(used if present in current directory) - Global config: System config directory (platform-specific), used if no local config found
- Precedence: Local config overrides global config. CLI options override both config files.
To see the exact global config path on your system, run:
Example fyai.yaml
directory: ./src
output: combined.txt
include_ext:
- md
- txt
exclude_dirs:
- node_modules
- dist
min_size: 10240
max_size: 512000
respect_gitignore: true
tree_only: false
All CLI options can be set in the config file. CLI flags always take precedence.
Basic Usage
- Combines all files from the current directory into
fyai.txt
Examples
-
Combine only
.txtand.mdfiles from a specific directory: -
Exclude all
.logand.tmpfiles from the output: -
Include only files named
README.mdandmain.rsfrom thesrcanddocsdirectories: -
Exclude all files named
LICENSEandconfig.jsonfrom any directory: -
Include all files (no size minimum) up to 1MB:
-
Custom output file with files between 10KB and 500KB, excluding
distandnode_modulesdirectories: -
Output only the project directory structure (no file contents):
-
Ignore .gitignore rules and include all files (even those normally excluded):
-
Run against a remote GitHub/GitLab repository without leaving the clone on disk:
-
Run against a specific commit:
-
Generate a config template:
Output Format
The combined file includes headers for each source file:
- File: example.txt (12345 bytes)
[contents of example.txt]
- File: notes.md (67890 bytes)
[contents of notes.md]
Contributing
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Submit a pull request
License
MIT. See LICENSE for more details.
Changelog
See CHANGELOG.md for release notes.