A simple CLI tool that dumps text files from directories into a format that's easy for LLMs to understand. Features include directory tree visualization, URL content fetching, and flexible filtering options.
When working with LLMs, you often need to provide multiple files as context. This tool makes it super easy by:
- Walking through directories recursively
- Filtering out binary files and respecting
.gitignore - Outputting text files in structured XML or Markdown formats
- Visualizing directory structure with tree view
- Fetching content from URLs via Exa API
- Providing flexible filtering and pattern matching
- Filtering by file extension with
-e/--ext
# Download the latest release for your platform from:
# https://github.com/Kabilan108/dump/releases/latest
# Example for Linux:
curl -L https://github.com/Kabilan108/dump/releases/latest/download/dump_linux_amd64 -o dump
chmod +x dump
sudo mv dump /usr/local/bin/# Using go install
go install github.com/kabilan108/dump@latest
# Or clone and build
git clone https://github.com/kabilan108/dump
cd dump
make build# Install directly
nix profile install github:kabilan108/dump
# Or run without installing
nix run github:kabilan108/dump
# For development
nix develop# Dump all text files from current directory
dump
# Dump from specific directories
dump src/ tests/ docs/
# Dump with directory flags
dump -d src/ -d tests/
# Include specific files using glob patterns
dump -g "*.go" -g "*.md"
# Include specific files using extensions (case-insensitive)
dump -e go -e md
# Add ignore patterns (can use multiple times)
dump -i "*.log" -i "node_modules"
# Filter out lines matching a regex pattern
dump -f "TODO|FIXME"
# Include directory tree structure in output
dump -t
# List file paths only (no content)
dump -l
# Markdown output format instead of XML
dump -o md
# Custom XML tag name
dump --xml-tag source
# Fetch content from URLs (requires EXA_API_KEY)
dump -u https://docs.example.com/api
# Mix local files and URLs
dump -d src/ -u https://github.com/user/repo
# Custom timeout and live crawl for URLs
dump -u https://example.com --timeout 30 --live
# Combine options
dump src/ tests/ -g "*.go" -i "vendor" -f "^//.*" -t
# Get help
dump -h| Flag | Long Flag | Description |
|---|---|---|
-d |
--dir |
Directory to scan (can be repeated) |
-g |
--glob |
Glob pattern to match files (can be repeated) |
-e |
--ext |
File extension to include (repeatable). Accepts go, .go, MD, etc. |
-f |
--filter |
Skip lines matching this regex |
-h |
--help |
Display help message |
-i |
--ignore |
Glob pattern to ignore files/dirs (can be repeated) |
-l |
--list |
List file paths only (no content) |
-o |
--out-fmt |
Output format: xml or md (default "xml") |
-t |
--tree |
Show directory tree structure |
-u |
--url |
URL to fetch content from via Exa API (can be repeated) |
-v |
--version |
Display version information |
--xml-tag |
Custom XML tag name for wrapping content (only for xml output) | |
--timeout |
Timeout in seconds for URL fetching (default 15) | |
--live |
Force fresh content from URLs (livecrawl=always) | |
--tmux |
Capture tmux panes: current/all (current window)/%<id>/<win>.<pane>/@<pane_id> (repeatable) |
|
--tmux-lines |
Lines of history per tmux pane (default 500; 0 = full) |
Files are output in this format:
<file path="relative/path/to/file">
content of the file goes here
multiple lines are preserved
</file>URLs are output as:
<file url="https://example.com">
fetched content goes here
</file>When using -o md, files are output as code blocks:
```relative/path/to/file
content of the file goes here
multiple lines are preserved
```URLs are output as:
```https://example.com
fetched content goes here
```When using -t, shows directory structure:
.
├── src/
│ ├── main.go
│ └── utils/
│ └── helper.go
└── README.md
When using -l, shows only file paths:
src/main.go
src/utils/helper.go
README.md
The tool can fetch content from URLs using the Exa API:
# Set your Exa API key
export EXA_API_KEY="your-api-key"
# Fetch content from URLs
dump -u https://docs.example.com/api -u https://github.com/user/repo
# Combine with local files
dump -d src/ -u https://example.com/docs
# Use live crawl for fresh content
dump -u https://example.com --live
# Custom timeout
dump -u https://example.com --timeout 30Dump tmux panes alongside files and URLs.
# Current pane
dump --tmux current
# Specific panes (by id and by window.pane)
dump --tmux %1 --tmux 0.1
# All panes in current window with full history
dump --tmux all --tmux-lines 0
# Limit history lines (default 500)
dump --tmux current --tmux-lines 200Markdown output for tmux panes is formatted as:
```shell
# tmux-pane: id='%1' session='mysess' window='0' pane='1'
<pane content>
```XML output for tmux panes uses a fixed tag:
<tmux_pane id='%1' session='mysess' window='0' pane='1'>
<pane content>
</tmux_pane>EXA_API_KEYenvironment variable must be set- URLs are processed after local file processing
- Default timeout is 15 seconds (configurable with
--timeout) - Use
--liveflag to force fresh content retrieval
# Dump current directory
dump
# Dump specific directories with tree view
dump -t -d src/ -d docs/
# Only Go files, ignore vendor, show tree
dump -g "*.go" -i "vendor" -t# Skip comment lines and show only file paths
dump -f "^\s*//" -l
# Markdown output with custom patterns
dump -o md -g "*.md" -g "*.txt" -i "node_modules"
# Combine globs and extensions (OR semantics)
# Includes files that match any glob OR any listed extension
dump -g "**/*.test.js" -e go -e md# Mix local and remote content
dump -d src/ -u https://raw.githubusercontent.com/user/repo/main/README.md
# Multiple URLs with custom timeout
dump -u https://example.com/api -u https://docs.example.com --timeout 30MIT

