File: README.md
📦 Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file.
It is perfect for when you need to feed your codebase to Large Language Models (LLMs) or other AI tools like Claude,
ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.
Please consider sponsoring me.
🏆 Open Source Awards Nomination
We're honored! Repomix has been nominated for the Powered by AI category at the JSNation Open Source Awards 2025.
This wouldn't have been possible without all of you using and supporting Repomix. Thank you!
🎉 New: Repomix Website & Discord Community!
- Try Repomix in your browser at repomix.com
- Join our Discord Server for support and discussion
We look forward to seeing you there!
🌟 Features
- AI-Optimized: Formats your codebase in a way that's easy for AI to understand and process.
- Token Counting: Provides token counts for each file and the entire repository, useful for LLM context limits.
- Simple to Use: You need just one command to pack your entire repository.
- Customizable: Easily configure what to include or exclude.
- Git-Aware: Automatically respects your
.gitignore,.ignore, and.repomixignorefiles. - Security-Focused: Incorporates Secretlint to detect files matching known credential formats and leave them out of the output.
- Code Compression: The
--compressoption uses Tree-sitter to extract key code elements, reducing token count while preserving structure.
🚀 Quick Start
Using the CLI Tool `>_`
You can try Repomix instantly in your project directory without installation:
npx repomix@latestOr install globally for repeated use:
# Install using npm
npm install repomix
# Alternatively using yarn
yarn global add repomix
# Alternatively using bun
bun add -g repomix
# Alternatively using Homebrew (macOS/Linux)
brew install repomix
# Then run in any project directory
repomixThat's it! Repomix will generate a repomix-output.xml file in your current directory, containing your entire
repository in an AI-friendly format.
You can then send this file to an AI assistant with a prompt like:
This file contains all the files in the repository combined into one.
I want to refactor the code, so please review it first.When you propose specific changes, the AI might be able to generate code accordingly. With features like Claude's
Artifacts, you could potentially output multiple files, allowing for the generation of multiple interdependent pieces of
code.
Happy coding! 🚀
Using The Website 🌐
Want to try it quickly? Visit the official website at repomix.com. Simply enter your repository
name, fill in any optional details, and click the Pack button to see your generated output.
Available Options
The website offers several convenient features:
- Customizable output format (XML, Markdown, or Plain Text)
- Instant token count estimation
- Much more!
Using The Browser Extension 🧩
Get instant access to Repomix directly from any GitHub repository! Our Chrome extension adds a convenient "Repomix" button to GitHub repository pages.
Install
- Chrome Extension: Repomix - Chrome Web Store
- Firefox Add-on: Repomix - Firefox Add-ons
Features
- One-click access to Repomix for any GitHub repository
- More exciting features coming soon!
Using The VSCode Extension ⚡️
A community-maintained VSCode extension called Repomix Runner (created by massdo) lets you run Repomix right inside your editor with just a few clicks. Run it on any folder, manage outputs seamlessly, and control everything through VSCode's intuitive interface.
Want your output as a file or just the content? Need automatic cleanup? This extension has you covered. Plus, it works smoothly with your existing repomix.config.json.
Try it now on the VSCode Marketplace!
Source code is available on GitHub.
Alternative Tools 🛠️
If you're using Python, you might want to check out Gitingest, which is better suited for Python ecosystem and data
science workflows:
https://github.com/cyclotruc/gitingest
📊 Usage
To pack your entire repository:
repomixTo pack a specific directory:
repomix path/to/directoryTo pack specific files or directories
using glob patterns:
repomix --include "src/**/*.ts,**/*.md"To exclude specific files or directories:
repomix --ignore "**/*.log,tmp/"To pack a remote repository:
repomix --remote https://github.com/yamadashy/repomix
# You can also use GitHub shorthand:
repomix --remote yamadashy/repomix
# You can specify the branch name, tag, or commit hash:
repomix --remote https://github.com/yamadashy/repomix --remote-branch main
# Or use a specific commit hash:
repomix --remote https://github.com/yamadashy/repomix --remote-branch 935b695
# Another convenient way is specifying the branch's URL
repomix --remote https://github.com/yamadashy/repomix/tree/main
# Commit's URL is also supported
repomix --remote https://github.com/yamadashy/repomix/commit/836abcd7335137228ad77feb28655d85712680f1To pack files from a file list (pipe via stdin):
# Using find command
find src -name "*.ts" -type f | repomix --stdin
# Using git to get tracked files
git ls-files "*.ts" | repomix --stdin
# Using grep to find files containing specific content
grep -l "TODO" **/*.ts | repomix --stdin
# Using ripgrep to find files with specific content
rg -l "TODO|FIXME" --type ts | repomix --stdin
# Using ripgrep (rg) to find files
rg --files --type ts | repomix --stdin
# Using sharkdp/fd to find files
fd -e ts | repomix --stdin
# Using fzf to select from all files
fzf -m | repomix --stdin
# Interactive file selection with fzf
find . -name "*.ts" -type f | fzf -m | repomix --stdin
# Using ls with glob patterns
ls src/**/*.ts | repomix --stdin
# From a file containing file paths
cat file-list.txt | repomix --stdin
# Direct input with echo
echo -e "src/index.ts\nsrc/utils.ts" | repomix --stdinThe --stdin option allows you to pipe a list of file paths to Repomix, giving you ultimate flexibility in selecting which files to pack.
When using --stdin, the specified files are effectively added to the include patterns. This means that the normal include and ignore behavior still applies - files specified via stdin will still be excluded if they match ignore patterns.
[!NOTE]
When using--stdin, file paths can be relative or absolute, and Repomix will automatically handle path resolution and deduplication.
To include git logs in the output:
# Include git logs with default count (50 commits)
repomix --include-logs
# Include git logs with specific commit count
repomix --include-logs --include-logs-count 10
# Combine with diffs for comprehensive git context
repomix --include-logs --include-diffsThe git logs include commit dates, messages, and file paths for each commit, providing valuable context for AI analysis of code evolution and development patterns.
To compress the output:
repomix --compress
# You can also use it with remote repositories:
repomix --remote yamadashy/repomix --compressTo initialize a new configuration file (repomix.config.json):
repomix --initOnce you have generated the packed file, you can use it with Generative AI tools like ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.
Docker Usage 🐳
You can also run Repomix using Docker.
This is useful if you want to run Repomix in an isolated environment or prefer using containers.
Basic usage (current directory):
docker run -v .:/app -it --rm ghcr.io/yamadashy/repomixTo pack a specific directory:
docker run -v .:/app -it --rm ghcr.io/yamadashy/repomix path/to/directoryProcess a remote repository and output to a output directory:
docker run -v ./output:/app -it --rm ghcr.io/yamadashy/repomix --remote https://github.com/yamadashy/repomixPrompt Examples
Once you have generated the packed file with Repomix, you can use it with AI tools like ChatGPT, DeepSeek, Perplexity, Gemini, Gemma, Llama, Grok, and more.
Here are some example prompts to get you started:
Code Review and Refactoring
For a comprehensive code review and refactoring suggestions:
This file contains my entire codebase. Please review the overall structure and suggest any improvements or refactoring opportunities, focusing on maintainability and scalability.Documentation Generation
To generate project documentation:
Based on the codebase in this file, please generate a detailed README.md that includes an overview of the project, its main features, setup instructions, and usage examples.Test Case Generation
For generating test cases:
Analyze the code in this file and suggest a comprehensive set of unit tests for the main functions and classes. Include edge cases and potential error scenarios.Code Quality Assessment
Evaluate code quality and adherence to best practices:
Review the codebase for adherence to coding best practices and industry standards. Identify areas where the code could be improved in terms of readability, maintainability, and efficiency. Suggest specific changes to align the code with best practices.Library Overview
Get a high-level understanding of the library
This file contains the entire codebase of library. Please provide a comprehensive overview of the library, including its main purpose, key features, and overall architecture.Feel free to modify these prompts based on your specific needs and the capabilities of the AI tool you're using.
Community Discussion
Check out our community discussion where users share:
- Which AI tools they're using with Repomix
- Effective prompts they've discovered
- How Repomix has helped them
- Tips and tricks for getting the most out of AI code analysis
Feel free to join the discussion and share your own experiences! Your insights could help others make better use of
Repomix.
Output File Format
Repomix generates a single file with clear separators between different parts of your codebase.
To enhance AI comprehension, the output file begins with an AI-oriented explanation, making it easier for AI models to
understand the context and structure of the packed repository.
XML Format (default)
The XML format structures the content in a hierarchical manner:
This file is a merged representation of the entire codebase, combining all repository files into a single document.
<file_summary>
(Metadata and usage AI instructions)
</file_summary>
<directory_structure>
src/
cli/
cliOutput.ts
index.ts
(...remaining directories)
</directory_structure>
<files>
<file path="src/index.js">
// File contents here
</file>
(...remaining files)
</files>
(Custom instructions from `output.instructionFilePath`)For those interested in the potential of XML tags in AI contexts:
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/use-xml-tags
When your prompts involve multiple components like context, instructions, and examples, XML tags can be a
game-changer. They help Claude parse your prompts more accurately, leading to higher-quality outputs.
This means that the XML output from Repomix is not just a different format, but potentially a more effective way to feed
your codebase into AI systems for analysis, code review, or other tasks.
Markdown Format
To generate output in Markdown format, use the --style markdown option:
repomix --style markdownThe Markdown format structures the content in a hierarchical manner:
This file is a merged representation of the entire codebase, combining all repository files into a single document.
# File Summary
(Metadata and usage AI instructions)
# Repository Structure
```
src/
cli/
cliOutput.ts
index.ts
```
(...remaining directories)
# Repository Files
## File: src/index.js
```
// File contents here
```
(...remaining files)
# Instruction
(Custom instructions from `output.instructionFilePath`)This format provides a clean, readable structure that is both human-friendly and easily parseable by AI systems.
JSON Format
To generate output in JSON format, use the --style json option:
repomix --style jsonThe JSON format structures the content as a hierarchical JSON object with camelCase property names:
{
"fileSummary": {
"generationHeader": "This file is a merged representation of the entire codebase, combined into a single document by Repomix.",
"purpose": "This file contains a packed representation of the entire repository's contents...",
"fileFormat": "The content is organized as follows...",
"usageGuidelines": "- This file should be treated as read-only...",
"notes": "- Some files may have been excluded based on .gitignore, .ignore, and .repomixignore rules..."
},
"userProvidedHeader": "Custom header text if specified",
"directoryStructure": "src/\n cli/\n cliOutput.ts\n index.ts\n config/\n configLoader.ts",
"files": {
"src/index.js": "// File contents here",
"src/utils.js": "// File contents here"
},
"instruction": "Custom instructions from instructionFilePath"
}This format is ideal for:
- Programmatic processing: Easy to parse and manipulate with JSON libraries
- API integration: Direct consumption by web services and applications
- AI tool compatibility: Structured format for machine learning and AI systems
- Data analysis: Straightforward extraction of specific information using tools like
jq
Working with JSON Output Using `jq`
The JSON format makes it easy to extract specific information programmatically:
# List all file paths
cat repomix-output.json | jq -r '.files | keys[]'
# Count total number of files
cat repomix-output.json | jq '.files | keys | length'
# Extract specific file content
cat repomix-output.json | jq -r '.files["README.md"]'
cat repomix-output.json | jq -r '.files["src/index.js"]'
# Find files by extension
cat repomix-output.json | jq -r '.files | keys[] | select(endswith(".ts"))'
# Get files containing specific text
cat repomix-output.json | jq -r '.files | to_entries[] | select(.value | contains("function")) | .key'
# Extract directory structure
cat repomix-output.json | jq -r '.directoryStructure'
# Get file summary information
cat repomix-output.json | jq '.fileSummary.purpose'
cat repomix-output.json | jq -r '.fileSummary.generationHeader'
# Extract user-provided header (if exists)
cat repomix-output.json | jq -r '.userProvidedHeader // "No header provided"'
# Create a file list with sizes
cat repomix-output.json | jq -r '.files | to_entries[] | "\(.key): \(.value | length) characters"'Plain Text Format
To generate output in plain text format, use the --style plain option:
repomix --style plainThis file is a merged representation of the entire codebase, combining all repository files into a single document.
================================================================
File Summary
================================================================
(Metadata and usage AI instructions)
================================================================
Directory Structure
================================================================
src/
cli/
cliOutput.ts
index.ts
config/
configLoader.ts
(...remaining directories)
================================================================
Files
================================================================
================
File: src/index.js
================
// File contents here
================
File: src/utils.js
================
// File contents here
(...remaining files)
================================================================
Instruction
================================================================
(Custom instructions from `output.instructionFilePath`)Command Line Options
Basic Options
-v, --version: Show version information and exit
CLI Input/Output Options
| Option | Description |
|---|---|
--verbose |
Enable detailed debug logging (shows file processing, token counts, and configuration details) |
--quiet |
Suppress all console output except errors (useful for scripting) |
--stdout |
Write packed output directly to stdout instead of a file (suppresses all logging) |
--stdin |
Read file paths from stdin, one per line (specified files are processed directly) |
--copy |
Copy the generated output to system clipboard after processing |
--token-count-tree [threshold] |
Show file tree with token counts; optional threshold to show only files with ≥N tokens (e.g., --token-count-tree 100) |
--top-files-len <number> |
Number of largest files to show in summary (default: 5) |
Repomix Output Options
| Option | Description |
|---|---|
-o, --output <file> |
Output file path (default: repomix-output.xml, use "-" for stdout) |
--style <style> |
Output format: xml, markdown, json, or plain (default: xml) |
--output-file-path-style <style> |
How file paths are shown in output: target-relative or cwd-relative (default: target-relative) |
--parsable-style |
Escape special characters to ensure valid XML/Markdown (needed when output contains code that breaks formatting) |
--compress |
Extract essential code structure (classes, functions, interfaces) using Tree-sitter parsing |
--output-show-line-numbers |
Prefix each line with its line number in the output |
--no-file-summary |
Omit the file summary section from output |
--no-directory-structure |
Omit the directory tree visualization from output |
--no-files |
Generate metadata only without file contents (useful for repository analysis) |
--remove-comments |
Strip all code comments before packing |
--remove-empty-lines |
Remove blank lines from all files |
--truncate-base64 |
Truncate long base64 data strings to reduce output size |
--header-text <text> |
Custom text to include at the beginning of the output |
--instruction-file-path |
Path to file containing custom instructions to include in output |
--split-output <size> |
Split output into multiple numbered files (e.g., repomix-output.1.xml); size like 500kb, 2mb, or 1.5mb |
--include-empty-directories |
Include folders with no files in directory structure |
--include-full-directory-structure |
Show complete directory tree in output, including files not matched by --include patterns |
--no-git-sort-by-changes |
Don't sort files by git change frequency (default: most changed files first) |
--include-diffs |
Add git diff section showing working tree and staged changes |
--include-logs |
Add git commit history with messages and changed files |
--include-logs-count <count> |
Number of recent commits to include with --include-logs (default: 50) |
File Selection Options
| Option | Description |
|---|---|
--include |
Include only files matching these glob patterns (comma-separated, e.g., "src/**/*.js,*.md") |
-i, --ignore |
Additional patterns to exclude (comma-separated, e.g., "*.test.js,docs/**") |
--no-gitignore |
Don't use .gitignore rules for filtering files |
--no-dot-ignore |
Don't use .ignore rules for filtering files |
--no-default-patterns |
Don't apply built-in ignore patterns (node_modules, .git, build dirs, etc.) |
Remote Repository Options
| Option | Description |
|---|---|
--remote |
Clone and pack a remote repository (GitHub URL or user/repo format) |
--remote-branch <name> |
Specific branch, tag, or commit to use (default: repository's default branch) |
--remote-trust-config |
Trust and load config files from remote repositories (disabled by default for security). On an interactive terminal, the config is shown and you are asked to confirm |
Configuration Options
| Option | Description |
|---|---|
-c, --config |
Use custom config file instead of repomix.config.json |
--init |
Create a new repomix.config.json file with defaults |
--global |
With --init, create config in home directory instead of current directory |
Security Options
--no-security-check: Skip scanning for sensitive data like API keys and passwords
Token Count Options
--token-count-encoding <encoding>: Tokenizer model for counting: o200k_base (GPT-4o), cl100k_base (GPT-3.5/4), etc. (default: o200k_base)--token-budget <number>: Fail with a non-zero exit code when the packed output exceeds N tokens. Useful as a guard in CI pipelines and agent workflows to keep output within a target model's context window. The output is still generated; only the exit code signals the overflow.
MCP
--mcp: Run as Model Context Protocol server for AI tool integration--sandbox [dir]: (with--mcp) confine the MCP server's file tools to a workspace directory (defaults to the working directory; e.g.--sandbox path/to/project) — every path is relative to that root, absolute/host paths are refused, and remote packing, skill generation, and attaching external outputs are disabled.
Agent Skills Generation
| Option | Description |
|---|---|
--skill-generate [name] |
Generate Claude Agent Skills format output to .claude/skills/<name>/ directory (name auto-generated if omitted) |
--skill-project-name <name> |
Override the project name used in generated Skills descriptions |
--skill-output |
Specify skill output directory path directly (skips location prompt) |
-f, --force |
Skip all confirmation prompts (skill directory overwrite, remote config trust) |
Watch Mode
-w, --watch: Watch for file changes and automatically re-pack. Debounces rapid changes (300ms) and logs a timestamp on each rebuild. Stop withCtrl+C.Watch mode only works with local directories, so it cannot be combined with
--remote, a positional remote repository URL,--stdout,--stdin,--split-output,--skill-generate, or--copy(whether set on the command line or in your config file).
Examples
# Basic usage
repomix
# Custom output
repomix -o output.xml --style xml
# Output to stdout
repomix --stdout > custom-output.txt
# Send output to stdout, then pipe into another command (for example, simonw/llm)
repomix --stdout | llm "Please explain what this code does."
# Custom output with compression
repomix --compress
# Process specific files
repomix --include "src/**/*.ts" --ignore "**/*.test.ts"
# Split output into multiple files (max size per part)
repomix --split-output 20mb
# Remote repository with branch
repomix --remote https://github.com/user/repo/tree/main
# Remote repository with commit
repomix --remote https://github.com/user/repo/commit/836abcd7335137228ad77feb28655d85712680f1
# Remote repository with shorthand
repomix --remote user/repo
# Watch mode — automatically re-pack on file changes
repomix --watch
repomix -w --include "src/**/*.ts"Updating Repomix
To update a globally installed Repomix:
# Using npm
npm update -g repomix
# Using yarn
yarn global upgrade repomix
# Using bun
bun update -g repomixUsing npx repomix is generally more convenient as it always uses the latest version.
Remote Repository Processing
Repomix supports processing remote Git repositories without the need for manual cloning. This feature allows you to
quickly analyze any public Git repository with a single command.
To process a remote repository, use the --remote option followed by the repository URL:
repomix --remote https://github.com/yamadashy/repomixYou can also use GitHub's shorthand format:
repomix --remote yamadashy/repomixYou can specify the branch name, tag, or commit hash:
# Using --remote-branch option
repomix --remote https://github.com/yamadashy/repomix --remote-branch main
# Using branch's URL
repomix --remote https://github.com/yamadashy/repomix/tree/mainOr use a specific commit hash:
# Using --remote-branch option
repomix --remote https://github.com/yamadashy/repomix --remote-branch 935b695
# Using commit's URL
repomix --remote https://github.com/yamadashy/repomix/commit/836abcd7335137228ad77feb28655d85712680f1[!NOTE]
For security, config files (repomix.config.*) in remote repositories are not loaded by default. This prevents untrusted repositories from executing code via config files. Your global config and CLI options are still applied. To trust a remote repository's config, use--remote-trust-configor setREPOMIX_REMOTE_TRUST_CONFIG=true— on an interactive terminal Repomix then shows that config and asks you to confirm before loading it. See Remote Repository Config Trust.When using
--configwith--remote, an absolute path is required (e.g.,--config /home/user/repomix.config.json).
Code Compression
The --compress option utilizes Tree-sitter to perform intelligent code extraction, focusing on essential function and class signatures while removing implementation details. This can help reduce token count while retaining important structural information.
repomix --compressFor example, this code:
import { ShoppingItem } from './shopping-item';
/**
* Calculate the total price of shopping items
*/
const calculateTotal = (
items: ShoppingItem[]
) => {
let total = 0;
for (const item of items) {
total += item.price * item.quantity;
}
return total;
}
// Shopping item interface
interface Item {
name: string;
price: number;
quantity: number;
}Will be compressed to:
import { ShoppingItem } from './shopping-item';
⋮----
/**
* Calculate the total price of shopping items
*/
const calculateTotal = (
items: ShoppingItem[]
) => {
⋮----
// Shopping item interface
interface Item {
name: string;
price: number;
quantity: number;
}[!NOTE]
This is an experimental feature that we'll be actively improving based on user feedback and real-world usage
Per-file Inclusion Levels (`output.patterns`)
While --compress applies one level to every file, output.patterns lets you control the detail level per glob from your config file. Each entry targets files by glob (matched the same way as include/ignore) and overrides the global output.compress setting for matching files:
{
"output": {
"compress": false, // global default acts as the catch-all
"patterns": [
{ "pattern": "docs/**/*", "compress": true },
{ "pattern": "website/**/*", "directoryStructureOnly": true }
]
}
}There are three levels:
- Full content (default) — the file's full content is included.
- Compressed (
compress: true) — the content is passed through the same Tree-sitter pipeline as--compress. - Directory-structure-only (
directoryStructureOnly: true) — the file is listed in the directory structure, but its content block is omitted from the output entirely.
Semantics:
- Patterns are evaluated in array order and the first matching pattern wins for a given file.
- A matched pattern's flags override the global
output.compresssetting. A pattern that matches without setting either flag forces full content for that file (useful for whitelisting files out of a globalcompress). directoryStructureOnlytakes precedence overcompresswhen both are set.- If no pattern matches, the global behavior applies (full content, or compressed when
output.compressistrue).
This is a config-file-only option; there is no CLI flag for per-pattern levels.
Token Count Optimization
Understanding your codebase's token distribution is crucial for optimizing AI interactions. Use the --token-count-tree option to visualize token usage across your project:
repomix --token-count-treeThis displays a hierarchical view of your codebase with token counts:
🔢 Token Count Tree:
────────────────────
└── src/ (70,925 tokens)
├── cli/ (12,714 tokens)
│ ├── actions/ (7,546 tokens)
│ └── reporters/ (990 tokens)
└── core/ (41,600 tokens)
├── file/ (10,098 tokens)
└── output/ (5,808 tokens)You can also set a minimum token threshold to focus on larger files:
repomix --token-count-tree 1000 # Only show files/directories with 1000+ tokensThis helps you:
- Identify token-heavy files that might exceed AI context limits
- Optimize file selection using
--includeand--ignorepatterns - Plan compression strategies by targeting the largest contributors
- Balance content vs. context when preparing code for AI analysis
Splitting Output for Large Codebases
When working with large codebases, the packed output may exceed file size limits imposed by some AI tools (e.g., Google AI Studio's 1MB limit). Use --split-output to automatically split the output into multiple files:
repomix --split-output 1mbThis generates numbered files like:
repomix-output.1.xmlrepomix-output.2.xmlrepomix-output.3.xml
Size can be specified with units: 500kb, 1mb, 2mb, 1.5mb, etc. Decimal values are supported.
[!NOTE]
Files are grouped by top-level directory to maintain context. A single file or directory will never be split across multiple output files.
MCP Server Integration
Repomix supports the Model Context Protocol (MCP), allowing AI assistants to directly interact with your codebase. When run as an MCP server, Repomix provides tools that enable AI assistants to package local or remote repositories for analysis without requiring manual file preparation.
repomix --mcpSandbox Mode
By default the MCP server can read any path the host user can. That is convenient for a trusted local assistant, but too broad when the server is exposed to an untrusted client or agent. The --sandbox flag confines the server's file tools to a single workspace directory:
# Confine to the current working directory
repomix --mcp --sandbox
# Confine to a specific directory
repomix --mcp --sandbox path/to/projectWhen sandbox mode is on, every path is relative to the workspace root (absolute, ~, .., and Windows drive/UNC paths are refused, as are paths that resolve outside the root through symlinks), and only the read-only, root-confined tools are registered; remote packing, skill generation, and attaching external outputs are disabled. The raw file tools (file_system_read_file, file_system_read_directory) are available only in sandbox mode, where the workspace root bounds what they can reach. This is an application-level confinement of the tool surface, not an OS-level sandbox. See the MCP Server guide for details.
Configuring MCP Servers
To use Repomix as an MCP server with AI assistants like Claude, you need to configure the MCP settings:
For VS Code:
You can install the Repomix MCP server in VS Code using one of these methods:
- Using the Install Badge:
- Using the Command Line:
code --add-mcp '{"name":"repomix","command":"npx","args":["-y","repomix","--mcp"]}'For VS Code Insiders:
code-insiders --add-mcp '{"name":"repomix","command":"npx","args":["-y","repomix","--mcp"]}'For Cline (VS Code extension):
Edit the cline_mcp_settings.json file:
{
"mcpServers": {
"repomix": {
"command": "npx",
"args": [
"-y",
"repomix",
"--mcp"
]
}
}
}For Cursor:
In Cursor, add a new MCP server from Cursor Settings > MCP > + Add new global MCP server with a configuration similar to Cline.
For Claude Desktop:
Edit the claude_desktop_config.json file with similar configuration to Cline's config.
For Claude Code:
To configure Repomix as an MCP server in Claude Code, use the following command:
claude mcp add repomix -- npx -y repomix --mcpAlternatively, you can use the official Repomix plugins (see Claude Code Plugins section below).
Using Docker instead of npx:
You can use Docker as an alternative to npx for running Repomix as an MCP server:
{
"mcpServers": {
"repomix-docker": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/yamadashy/repomix",
"--mcp"
]
}
}
}Once configured, your AI assistant can directly use Repomix's capabilities to analyze codebases without manual file preparation, making code analysis workflows more efficient.
Available MCP Tools
When running as an MCP server, Repomix provides the following tools:
- pack_codebase: Package a local code directory into a consolidated XML file for AI analysis
- Parameters:
directory: Absolute path to the directory to packcompress: (Optional, default: false) Enable Tree-sitter compression to extract essential code signatures and structure while removing implementation details. Reduces token usage by ~70% while preserving semantic meaning. Generally not needed since grep_repomix_output allows incremental content retrieval. Use only when you specifically need the entire codebase content for large repositories.includePatterns: (Optional) Specify files to include using fast-glob patterns. Multiple patterns can be comma-separated (e.g., "/*.{js,ts}", "src/,docs/**"). Only matching files will be processed.ignorePatterns: (Optional) Specify additional files to exclude using fast-glob patterns. Multiple patterns can be comma-separated (e.g., "test/,*.spec.js", "node_modules/,dist/**"). These patterns supplement .gitignore, .ignore, and built-in exclusions.outputPatterns: (Optional) Per-file inclusion levels, mirroring the config-fileoutput.patternsoption. An array of{ pattern, compress?, directoryStructureOnly? }entries; the first matching pattern wins,directoryStructureOnlytakes precedence overcompress, and a match with neither flag forces full content (useful for exempting files from a globalcompress). Overrides anyoutput.patternsfrom the target repository'srepomix.config.json.topFilesLength: (Optional, default: 10) Number of largest files by size to display in the metrics summary for codebase analysis.
- attach_packed_output: Attach an existing Repomix packed output file for AI analysis
- Parameters:
path: Path to a directory containing repomix-output.xml or direct path to a packed repository XML filetopFilesLength: (Optional, default: 10) Number of largest files by size to display in the metrics summary
- Features:
- Accepts either a directory containing a repomix-output.xml file or a direct path to an XML file
- Registers the file with the MCP server and returns the same structure as the pack_codebase tool
- Provides access to existing packed outputs without requiring re-processing
- Useful for working with previously generated packed repositories
- pack_remote_repository: Fetch, clone, and package a GitHub repository into a consolidated XML file for AI analysis
- Parameters:
remote: GitHub repository URL or user/repo format (e.g., "yamadashy/repomix", "https://github.com/user/repo", or "https://github.com/user/repo/tree/branch")compress: (Optional, default: false) Enable Tree-sitter compression to extract essential code signatures and structure while removing implementation details. Reduces token usage by ~70% while preserving semantic meaning. Generally not needed since grep_repomix_output allows incremental content retrieval. Use only when you specifically need the entire codebase content for large repositories.includePatterns: (Optional) Specify files to include using fast-glob patterns. Multiple patterns can be comma-separated (e.g., "/*.{js,ts}", "src/,docs/**"). Only matching files will be processed.ignorePatterns: (Optional) Specify additional files to exclude using fast-glob patterns. Multiple patterns can be comma-separated (e.g., "test/,*.spec.js", "node_modules/,dist/**"). These patterns supplement .gitignore, .ignore, and built-in exclusions.outputPatterns: (Optional) Per-file inclusion levels, mirroring the config-fileoutput.patternsoption. An array of{ pattern, compress?, directoryStructureOnly? }entries; the first matching pattern wins,directoryStructureOnlytakes precedence overcompress, and a match with neither flag forces full content (useful for exempting files from a globalcompress).topFilesLength: (Optional, default: 10) Number of largest files by size to display in the metrics summary for codebase analysis.
- read_repomix_output: Read the contents of a Repomix-generated output file. Supports partial reading with line range specification for large files.
- Parameters:
outputId: ID of the Repomix output file to readstartLine: (Optional) Starting line number (1-based, inclusive). If not specified, reads from beginning.endLine: (Optional) Ending line number (1-based, inclusive). If not specified, reads to end.
- Features:
- Specifically designed for web-based environments or sandboxed applications
- Retrieves the content of previously generated outputs using their ID
- Provides access to packed codebase without requiring file system access
- Supports partial reading for large files
- grep_repomix_output: Search for patterns in a Repomix output file using grep-like functionality with JavaScript RegExp syntax
- Parameters:
outputId: ID of the Repomix output file to searchpattern: Search pattern (JavaScript RegExp regular expression syntax)contextLines: (Optional, default: 0) Number of context lines to show before and after each match. Overridden by beforeLines/afterLines if specified.beforeLines: (Optional) Number of context lines to show before each match (like grep -B). Takes precedence over contextLines.afterLines: (Optional) Number of context lines to show after each match (like grep -A). Takes precedence over contextLines.ignoreCase: (Optional, default: false) Perform case-insensitive matching
- Features:
- Uses JavaScript RegExp syntax for powerful pattern matching
- Supports context lines for better understanding of matches
- Allows separate control of before/after context lines
- Case-sensitive and case-insensitive search options
- file_system_read_file: Read a file inside the sandbox workspace. Only available in sandbox mode (
--sandbox), where the workspace root bounds what it can reach.
- Parameters:
path: Path to the file to read, relative to the workspace root (e.g.src/index.ts)
- Notes:
- Not registered without
--sandbox - Content matching known secret formats (Secretlint) is refused as an additional heuristic safeguard — the access boundary is the workspace root, not the scan
- Not registered without
- file_system_read_directory: List the contents of a directory inside the sandbox workspace. Only available in sandbox mode (
--sandbox).
- Parameters:
path: Path to the directory to list, relative to the workspace root (e.g..orsrc)
- Features:
- Shows files and directories with clear indicators (
[FILE]or[DIR]) - Useful for exploring project structure and understanding codebase organization
- Shows files and directories with clear indicators (
Claude Code Plugins
Repomix provides official plugins for Claude Code that integrate seamlessly with the AI-powered development environment.
Installation
1. Add the Repomix plugin marketplace:
/plugin marketplace add yamadashy/repomix2. Install plugins:
# Install MCP server plugin (recommended foundation)
/plugin install repomix-mcp@repomix
# Install commands plugin (extends functionality)
/plugin install repomix-commands@repomix
# Install repository explorer plugin (AI-powered analysis)
/plugin install repomix-explorer@repomixNote: The repomix-mcp plugin is recommended as a foundation. The repomix-commands plugin provides convenient slash commands, while repomix-explorer adds AI-powered analysis capabilities. While you can install them independently, using all three provides the most comprehensive experience.
Alternatively, use the interactive plugin installer:
/pluginThis will open an interactive interface where you can browse and install available plugins.
Available Plugins
1. repomix-mcp (MCP Server Plugin)
Foundation plugin that provides AI-powered codebase analysis through MCP server integration.
Features:
- Pack local and remote repositories
- Read and search packed outputs
- Automatic Tree-sitter compression (~70% token reduction)
2. repomix-commands (Slash Commands Plugin)
Provides convenient slash commands for quick operations with natural language support.
Available Commands:
/repomix-commands:pack-local- Pack local codebase with various options/repomix-commands:pack-remote- Pack and analyze remote GitHub repositories
Example usage:
/repomix-commands:pack-local
Pack this project as markdown with compression
/repomix-commands:pack-remote yamadashy/repomix
Pack only TypeScript files from the yamadashy/repomix repository3. repomix-explorer (AI Analysis Agent Plugin)
AI-powered repository analysis agent that intelligently explores codebases using Repomix CLI.
Features:
- Natural language codebase exploration and analysis
- Intelligent pattern discovery and code structure understanding
- Incremental analysis using grep and targeted file reading
- Automatic context management for large repositories
Available Commands:
/repomix-explorer:explore-local- Analyze local codebase with AI assistance/repomix-explorer:explore-remote- Analyze remote GitHub repositories with AI assistance
Example usage:
/repomix-explorer:explore-local ./src
Find all authentication-related code
/repomix-explorer:explore-remote facebook/react
Show me the main component architectureThe agent automatically:
- Runs
npx repomix@latestto pack the repository - Uses Grep and Read tools to efficiently search the output
- Provides comprehensive analysis without consuming excessive context
Benefits
- Seamless Integration: Claude can directly analyze codebases without manual preparation
- Natural Language: Use conversational commands instead of remembering CLI syntax
- Always Latest: Automatically uses
npx repomix@latestfor up-to-date features - Secret Scanning: Secretlint flags files matching known credential formats so they are left out of the output
- Token Optimization: Tree-sitter compression for large codebases
For more details, see the plugin documentation in the .claude/plugins/ directory.
Agent Skills Generation
Repomix can generate Claude Agent Skills format output, creating a structured Skills directory that can be used as a reusable codebase reference for AI assistants. This feature is particularly powerful when you want to reference implementations from remote repositories.
Basic Usage
# Generate Skills from local directory
repomix --skill-generate
# Generate with custom Skills name
repomix --skill-generate my-project-reference
# Generate with a custom project name in Skills descriptions
repomix --skill-generate --skill-project-name "My Project"
# Generate from remote repository
repomix --remote https://github.com/user/repo --skill-generateWhen you run the command, Repomix prompts you to choose where to save the Skills:
- Personal Skills (
~/.claude/skills/) - Available across all projects on your machine - Project Skills (
.claude/skills/) - Shared with your team via git
Non-Interactive Usage
For CI pipelines and automation scripts, you can skip all interactive prompts using --skill-output and --force:
# Specify output directory directly
repomix --skill-generate --skill-output ./my-skills
# Skip overwrite confirmation with --force
repomix --skill-generate --skill-output ./my-skills --force
# Full non-interactive example
repomix --remote user/repo --skill-generate my-skill --skill-output ./output --forceGenerated Structure
The Skills are generated with the following structure:
.claude/skills/<skill-name>/
├── SKILL.md # Main Skills metadata & documentation
└── references/
├── summary.md # Purpose, format, and statistics
├── project-structure.md # Directory tree with line counts
├── files.md # All file contents (grep-friendly)
└── tech-stacks.md # Languages, frameworks, dependenciesWhat's Included
- SKILL.md: Contains Skills metadata, file/line/token counts, overview, and usage instructions
- summary.md: Explains the Skills' purpose, usage guidelines, and provides statistics breakdown by file type and language
- project-structure.md: Directory tree with line counts per file for easy file discovery
- files.md: All file contents with syntax highlighting headers, optimized for grep-friendly searching
- tech-stacks.md: Auto-detected tech stack per package from dependency files (
package.json,requirements.txt,Cargo.toml, etc.)
Auto-Generated Skills Names
If no name is provided, Repomix auto-generates one:
repomix src/ --skill-generate # → repomix-reference-src
repomix --remote user/repo --skill-generate # → repomix-reference-repo
repomix --skill-generate CustomName # → custom-name (normalized to kebab-case)Integration with Repomix Features
Skills generation respects all standard Repomix options:
# Generate Skills with file filtering
repomix --skill-generate --include "src/**/*.ts" --ignore "**/*.test.ts"
# Generate Skills with compression
repomix --skill-generate --compress
# Generate Skills from remote repository
repomix --remote yamadashy/repomix --skill-generateRepomix Explorer Skill (Agent Skills)
Repomix provides a ready-to-use Repomix Explorer skill that enables AI coding assistants to analyze and explore codebases using Repomix CLI. This skill is designed to work with various AI tools including Claude Code, Cursor, Codex, GitHub Copilot, and more.
Quick Install
For Claude Code, install the official Repomix Explorer plugin:
/plugin marketplace add yamadashy/repomix
/plugin install repomix-explorer@repomixFor Codex, Cursor, OpenClaw, and other Agent Skills-compatible assistants, install the standalone skill with the Skills CLI:
npx skills add yamadashy/repomix --skill repomix-explorerTo target a specific assistant, pass --agent:
npx skills add yamadashy/repomix --skill repomix-explorer --agent codex
npx skills add yamadashy/repomix --skill repomix-explorer --agent openclawFor Hermes Agent, install the single-file skill with Hermes Agent's native skills command:
hermes skills install https://raw.githubusercontent.com/yamadashy/repomix/main/skills/repomix-explorer/SKILL.mdWhat It Does
Once installed, you can analyze codebases with natural language instructions.
Analyze remote repositories:
"What's the structure of this repo?
https://github.com/facebook/react"Explore local codebases:
"What's in this project?
~/projects/my-app"This is useful not only for understanding codebases, but also when you want to implement features by referencing your other repositories.
⚙️ Configuration
Repomix supports multiple configuration file formats for flexibility and ease of use.
Configuration File Formats
Repomix will automatically search for configuration files in the following priority order:
- TypeScript (
repomix.config.ts,repomix.config.mts,repomix.config.cts) - JavaScript/ES Module (
repomix.config.js,repomix.config.mjs,repomix.config.cjs) - JSON (
repomix.config.json5,repomix.config.jsonc,repomix.config.json)
JSON Configuration
Create a repomix.config.json file in your project root:
repomix --initThis will create a repomix.config.json file with default settings.
TypeScript Configuration
TypeScript configuration files provide the best developer experience with full type checking and IDE support.
Installation:
To use TypeScript or JavaScript configuration with defineConfig, you need to install Repomix as a dev dependency:
npm install -D repomixExample:
// repomix.config.ts
import { defineConfig } from 'repomix';
export default defineConfig({
output: {
filePath: 'output.xml',
style: 'xml',
removeComments: true,
},
ignore: {
customPatterns: ['**/node_modules/**', '**/dist/**'],
},
});Benefits:
- ✅ Full TypeScript type checking in your IDE
- ✅ Excellent IDE autocomplete and IntelliSense
- ✅ Use dynamic values (timestamps, environment variables, etc.)
Dynamic Values Example:
// repomix.config.ts
import { defineConfig } from 'repomix';
// Generate timestamp-based filename
const timestamp = new Date().toISOString().slice(0, 19).replace(/[:.]/g, '-');
export default defineConfig({
output: {
filePath: `output-${timestamp}.xml`,
style: 'xml',
},
});JavaScript Configuration
JavaScript configuration files work the same as TypeScript, supporting defineConfig and dynamic values.
Configuration Options
Here's an explanation of the configuration options:
| Option | Description | Default |
|---|---|---|
input.maxFileSize |
Maximum file size in bytes to process. Files larger than this will be skipped | 50000000 |
input.processors |
Ordered array of { pattern, command, timeout?, onError? } entries that run an external command to transform matching files before packing (e.g. JSON→TOON). First matching glob wins. Runs arbitrary commands, so it runs only for local CLI runs (and remote repos with --remote-trust-config). See File Processors |
Not set |
output.filePath |
The name of the output file | "repomix-output.xml" |
output.style |
The style of the output (xml, markdown, json, plain) |
"xml" |
output.filePathStyle |
How file paths are shown in output (target-relative keeps paths relative to each target root, cwd-relative keeps paths relative to the current working directory) |
"target-relative" |
output.parsableStyle |
Whether to escape the output based on the chosen style schema. Note that this can increase token count. | false |
output.compress |
Whether to perform intelligent code extraction to reduce token count | false |
output.patterns |
Per-file inclusion levels. An ordered array of { pattern, compress?, directoryStructureOnly? } entries; the first matching glob wins and overrides the global output.compress for that file. See Per-file Inclusion Levels |
Not set |
output.headerText |
Custom text to include in the file header | null |
output.instructionFilePath |
Path to a file containing detailed custom instructions | null |
output.fileSummary |
Whether to include a summary section at the beginning of the output | true |
output.directoryStructure |
Whether to include the directory structure in the output | true |
output.files |
Whether to include file contents in the output | true |
output.removeComments |
Whether to remove comments from supported file types | false |
output.removeEmptyLines |
Whether to remove empty lines from the output | false |
output.showLineNumbers |
Whether to add line numbers to each line in the output | false |
output.truncateBase64 |
Whether to truncate long base64 data strings (e.g., images) to reduce token count | false |
output.copyToClipboard |
Whether to copy the output to system clipboard in addition to saving the file | false |
output.splitOutput |
Split output into multiple numbered files by maximum size per part (e.g., 1000000 for ~1MB). Keeps each file under the limit and avoids splitting files across parts |
Not set |
output.topFilesLength |
Number of top files to display in the summary. If set to 0, no summary will be displayed | 5 |
output.tokenCountTree |
Whether to display file tree with token count summaries. Can be boolean or number (minimum token count threshold) | false |
output.tokenBudget |
Fail with a non-zero exit code when the packed output exceeds this many tokens. Acts as a guard for CI/agent context limits; the output is still generated | Not set |
output.includeEmptyDirectories |
Whether to include empty directories in the repository structure | false |
output.includeFullDirectoryStructure |
When using include patterns, whether to display the complete directory tree (respecting ignore patterns) while still processing only the included files. Provides full repository context for AI analysis |
false |
output.git.sortByChanges |
Whether to sort files by git change count (files with more changes appear at the bottom) | true |
output.git.sortByChangesMaxCommits |
Maximum number of commits to analyze for git changes | 100 |
output.git.includeDiffs |
Whether to include git diffs in the output (includes both work tree and staged changes separately) | false |
output.git.includeLogs |
Whether to include git logs in the output (includes commit history with dates, messages, and file paths) | false |
output.git.includeLogsCount |
Number of git log commits to include | 50 |
include |
Patterns of files to include (using glob patterns) | [] |
ignore.useGitignore |
Whether to use patterns from the project's .gitignore file |
true |
ignore.useDotIgnore |
Whether to use patterns from the project's .ignore file |
true |
ignore.useDefaultPatterns |
Whether to use default ignore patterns | true |
ignore.customPatterns |
Additional patterns to ignore (using glob patterns) | [] |
security.enableSecurityCheck |
Whether to perform security checks on files | true |
tokenCount.encoding |
Token count encoding for OpenAI-compatible tokenization (e.g., o200k_base for GPT-4o, cl100k_base for GPT-4/3.5). Powered by gpt-tokenizer. |
"o200k_base" |
The configuration file supports JSON5 syntax, which allows:
- Comments (both single-line and multi-line)
- Trailing commas in objects and arrays
- Unquoted property names
- More relaxed string syntax
Schema Validation
You can enable schema validation for your configuration file by adding the $schema property:
{
"$schema": "https://repomix.com/schemas/latest/schema.json",
"output": {
"filePath": "repomix-output.xml",
"style": "xml"
}
}This provides auto-completion and validation in editors that support JSON schema.
Example Configuration
Example configuration:
/* Detailed source-code truncated for AI context efficiency. */Global Configuration
To create a global configuration file:
repomix --init --globalThe global configuration file will be created in:
- Windows:
%LOCALAPPDATA%\Repomix\repomix.config.json - macOS/Linux:
$XDG_CONFIG_HOME/repomix/repomix.config.jsonor~/.config/repomix/repomix.config.json
Note: Local configuration (if present) takes precedence over global configuration.
Include and Ignore
Include Patterns
Repomix now supports specifying files to include
using glob patterns. This allows for more
flexible and powerful file selection:
- Use
**/*.jsto include all JavaScript files in any directory - Use
src/**/*to include all files within thesrcdirectory and its subdirectories - Combine multiple patterns like
["src/**/*.js", "**/*.md"]to include JavaScript files insrcand all Markdown
files
Ignore Patterns
Repomix offers multiple methods to set ignore patterns for excluding specific files or directories during the packing
process:
- .gitignore: By default, patterns listed in your project's
.gitignorefiles and.git/info/excludeare used. This behavior can be controlled with theignore.useGitignoresetting or the--no-gitignorecli option. - .ignore: You can use a
.ignorefile in your project root, following the same format as.gitignore. This file is respected by tools like ripgrep and the silver searcher, reducing the need to maintain multiple ignore files. This behavior can be controlled with theignore.useDotIgnoresetting or the--no-dot-ignorecli option. - Default patterns: Repomix includes a default list of commonly excluded files and directories (e.g., node_modules,
.git, binary files). This feature can be controlled with theignore.useDefaultPatternssetting or the--no-default-patternscli option. Please
see defaultIgnore.ts for more details. - .repomixignore: You can create a
.repomixignorefile in your project root to define Repomix-specific ignore
patterns. This file follows the same format as.gitignore. - Custom patterns: Additional ignore patterns can be specified using the
ignore.customPatternsoption in the
configuration file. You can overwrite this setting with the-i, --ignorecommand line option.
Priority Order (from highest to lowest):
- Custom patterns (
ignore.customPatterns) - Ignore files (
.repomixignore,.ignore,.gitignore, and.git/info/exclude):- When in nested directories, files in deeper directories have higher priority
- When in the same directory, these files are merged in no particular order
- Default patterns (if
ignore.useDefaultPatternsis true and--no-default-patternsis not used)
This approach allows for flexible file exclusion configuration based on your project's needs. It helps optimize the size
of the generated pack file by ensuring the exclusion of security-sensitive files and large binary files, while
preventing the leakage of confidential information.
Note: Binary files are not included in the packed output by default, but their paths are listed in the "Repository
Structure" section of the output file. This provides a complete overview of the repository structure while keeping the
packed file efficient and text-based.
Custom Instruction
The output.instructionFilePath option allows you to specify a separate file containing detailed instructions or
context about your project. This allows AI systems to understand the specific context and requirements of your project,
potentially leading to more relevant and tailored analysis or suggestions.
Here's an example of how you might use this feature:
- Create a file named
repomix-instruction.mdin your project root:
# Coding Guidelines
- Follow the Airbnb JavaScript Style Guide
- Suggest splitting files into smaller, focused units when appropriate
- Add comments for non-obvious logic. Keep all text in English
- All new features should have corresponding unit tests
# Generate Comprehensive Output
- Include all content without abbreviation, unless specified otherwise
- Optimize for handling large codebases while maintaining output quality- In your
repomix.config.json, add theinstructionFilePathoption:
{
"output": {
"instructionFilePath": "repomix-instruction.md",
// other options...
}
}When Repomix generates the output, it will include the contents of repomix-instruction.md in a dedicated section.
Note: The instruction content is appended at the end of the output file. This placement can be particularly effective
for AI systems. For those interested in understanding why this might be beneficial, Anthropic provides some insights in
their documentation:
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/long-context-tips
Put long-form data at the top: Place your long documents and inputs (~20K+ tokens) near the top of your prompt, above
your query, instructions, and examples. This can significantly improve Claude's performance across all models.
Queries at the end can improve response quality by up to 30% in tests, especially with complex, multi-document inputs.
Comment Removal
When output.removeComments is set to true, Repomix will attempt to remove comments from supported file types. This
feature can help reduce the size of the output file and focus on the essential code content.
Supported languages include:
HTML, CSS, JavaScript, TypeScript, Vue, Svelte, Python, PHP, Ruby, C, C#, Java, Go, Rust, Swift, Kotlin, Dart, Shell,
and YAML.
Note: The comment removal process is conservative to avoid accidentally removing code. In complex cases, some comments
might be retained.
File Processors
input.processors runs an external command to transform a file's content before it is packed. Each entry targets files by glob (matched like include/ignore) and replaces the matching files' content with the command's standard output — useful for token-reducing or format-converting transforms such as JSON→TOON, SVG minification, or notebook→script conversion.
{
"input": {
"processors": [
{ "pattern": "**/*.json", "command": "npx @toon-format/cli {file}" }
]
}
}The {file} placeholder (required) is replaced with a temp file holding the file's content, and the command's stdout becomes the new content. Patterns are evaluated in order and the first match wins (one processor per file). Each entry also accepts timeout (ms, default 60000) and onError ("fail" to abort the pack, default; "skip" to warn and keep the original content).
Example commands (each is a command value paired with a suitable pattern):
| Pattern | command |
What it does |
|---|---|---|
**/*.json |
jq -c . {file} |
Compact JSON by stripping whitespace |
**/*.json |
npx @toon-format/cli {file} |
Convert JSON to TOON, a compact token-efficient format |
**/*.svg |
npx svgo -i {file} -o - |
Minify SVG |
**/*.ipynb |
jupyter nbconvert --to script --stdout {file} |
Convert a Jupyter notebook to a plain Python script |
Apply only one processor per file (first match wins), and make sure the tool it invokes is on your PATH (npx-based commands download it on first use).
[!WARNING]
File processors run arbitrary commands from your config file, so execution is default-deny:
- Enabled only for local CLI runs, where Repomix assumes the config in your working directory is your own — the same trust boundary as an npm script or a Makefile. As with those, if you run
repomixinside a repository you obtained from someone else without reviewing itsrepomix.config.jsonfirst, its processor commands will execute on your machine. Review the config of untrusted repositories before packing them.- Disabled for the library API (
pack()/runCli()), the MCP server, and the hosted repomix.com.- For remote repositories (
--remote), the cloned config — and its processors — is trusted only when you explicitly pass--remote-trust-config; without it the remote config is not even loaded.Active processors are printed at startup and in error messages, so reference credentials via environment variables (e.g.
$TOKEN), which are logged unexpanded, rather than inlining them. On timeout Repomix kills the command's shell, but a command that spawns its own long-lived background processes may leave them running. See the configuration guide for details.
🔍 Security Check
Repomix includes a security check feature that uses Secretlint to detect
potentially sensitive information in your files. This feature helps you identify possible security risks before sharing
your packed repository.
The security check results will be displayed in the CLI output after the packing process is complete. If any suspicious
files are detected, you'll see a list of these files along with a warning message.
Example output:
🔍 Security Check:
──────────────────
2 suspicious file(s) detected:
1. src/utils/test.txt
2. tests/utils/secretLintUtils.test.ts
Please review these files for potentially sensitive information.By default, Repomix's security check feature is enabled. You can disable it by setting security.enableSecurityCheck tofalse in your configuration file:
{
"security": {
"enableSecurityCheck": false
}
}Or using the --no-security-check command line option:
repomix --no-security-check[!NOTE]
Disabling security checks may expose sensitive information. Use this option with caution and only when necessary, such
as when working with test files or documentation that contains example credentials.
Remote Repository Config Trust
A repomix.config.* is code, not just data: a .ts / .js config is executed when loaded, input.processors runs
external commands, and path options can read files outside the repository. Loading one from an unfamiliar repository is
comparable to running its Makefile.
For that reason, a cloned repository's config is never loaded by default. Your global config and CLI options still
apply.
When you opt in with --remote-trust-config (or REPOMIX_REMOTE_TRUST_CONFIG=true) on an interactive terminal, Repomix
shows the config that is about to run and asks before loading it:
- Yes, once — trust this run only.
- Yes, and don't ask again for this repository — the decision is content-pinned: it records a hash of the config
you approved, so you are asked again if that repository later ships a different one (thedirenv allowmodel). - No (the default selection) — abort without loading the config.
The displayed config is written by the repository's author, so control, ANSI, and bidirectional characters are escaped,
the output is capped, every config line is prefixed, and symlinked configs pointing outside the clone are refused — what
you review is what runs.
The prompt is skipped with --force, in non-interactive shells such as CI (existing automation keeps working), and once
you have chosen to always trust that repository.
[!IMPORTANT]
The content pin covers the entry config file only. A.ts/.jsconfig canimportother files andinput.processorscan invoke external scripts; neither is hashed. Treat "don't ask again" as trust in the repository,
not only in the file you read.
See the security guide for the full trust model.
🤖 Using Repomix with GitHub Actions
You can also use Repomix in your GitHub Actions workflows. This is useful for automating the process of packing your codebase for AI analysis.
Basic usage:
- name: Pack repository with Repomix
uses: yamadashy/repomix/.github/actions/repomix@main
with:
output: repomix-output.xml
style: xmlUse --style to generate output in different formats:
- name: Pack repository with Repomix
uses: yamadashy/repomix/.github/actions/repomix@main
with:
output: repomix-output.md
style: markdown- name: Pack repository with Repomix (JSON format)
uses: yamadashy/repomix/.github/actions/repomix@main
with:
output: repomix-output.json
style: jsonPack specific directories with compression:
- name: Pack repository with Repomix
uses: yamadashy/repomix/.github/actions/repomix@main
with:
directories: src tests
include: "**/*.ts,**/*.md"
ignore: "**/*.test.ts"
output: repomix-output.txt
compress: trueUpload the output file as an artifact:
- name: Pack repository with Repomix
uses: yamadashy/repomix/.github/actions/repomix@main
with:
directories: src
output: repomix-output.txt
compress: true
- name: Upload Repomix output
uses: actions/upload-artifact@v7
with:
name: repomix-output
path: repomix-output.txtComplete workflow example:
name: Pack repository with Repomix
on:
workflow_dispatch:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
pack-repo:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v7
- name: Pack repository with Repomix
uses: yamadashy/repomix/.github/actions/repomix@main
with:
output: repomix-output.xml
- name: Upload Repomix output
uses: actions/upload-artifact@v7
with:
name: repomix-output.xml
path: repomix-output.xml
retention-days: 30See the complete workflow example here.
Action Inputs
| Name | Description | Default |
|---|---|---|
directories |
Space-separated list of directories to process (e.g., src tests docs) |
. |
include |
Comma-separated glob patterns to include files (e.g., **/*.ts,**/*.md) |
"" |
ignore |
Comma-separated glob patterns to ignore files (e.g., **/*.test.ts,**/node_modules/**) |
"" |
output |
Relative path for the packed file (extension determines format: .txt, .md, .xml) |
repomix-output.xml |
compress |
Enable smart compression to reduce output size by pruning implementation details | true |
style |
Output style (xml, markdown, json, plain) |
xml |
additional-args |
Extra raw arguments for the repomix CLI (e.g., --no-file-summary --no-security-check) |
"" |
repomix-version |
Version of the npm package to install (supports semver ranges, tags, or specific versions like 0.2.25) |
latest |
Action Outputs
| Name | Description |
|---|---|
output_file |
Path to the generated output file. Can be used in subsequent steps for artifact upload, LLM processing, or other operations. The file contains a formatted representation of your codebase based on the specified options. |
📚 Using Repomix as a Library
In addition to using Repomix as a CLI tool, you can also use it as a library in your Node.js applications.
Installation
npm install repomixBasic Usage
import { runCli, type CliOptions } from 'repomix';
// Process current directory with custom options
async function packProject() {
const options = {
output: 'output.xml',
style: 'xml',
compress: true,
quiet: true
} as CliOptions;
const result = await runCli(['.'], process.cwd(), options);
return result.packResult;
}Process Remote Repository
import { runCli, type CliOptions } from 'repomix';
// Clone and process a GitHub repo
async function processRemoteRepo(repoUrl) {
const options = {
remote: repoUrl,
output: 'output.xml',
compress: true
} as CliOptions;
return await runCli(['.'], process.cwd(), options);
}Using Core Components
If you need more control, you can use the low-level APIs:
import { searchFiles, collectFiles, processFiles, TokenCounter } from 'repomix';
async function analyzeFiles(directory) {
// Find and collect files
const { filePaths } = await searchFiles(directory, { /* config */ });
const rawFiles = await collectFiles(filePaths, directory);
const processedFiles = await processFiles(rawFiles, { /* config */ });
// Count tokens
const tokenCounter = new TokenCounter('o200k_base');
// Return analysis results
return processedFiles.map(file => ({
path: file.path,
tokens: tokenCounter.countTokens(file.content)
}));
}For more examples, check the source code at website/server/src/remoteRepo.ts which demonstrates how repomix.com uses the library.
Bundling
When bundling repomix with tools like Rolldown or esbuild, some dependencies must remain external and WASM files need to be copied:
External dependencies (cannot be bundled):
tinypool- Spawns worker threads using file paths
WASM files to copy:
web-tree-sitter.wasm→ Same directory as bundled JS (required for code compression feature)- Tree-sitter language files → Directory specified by
REPOMIX_WASM_DIRenvironment variable
For a working example, see website/server/scripts/bundle.mjs.
🌍 Community Projects
Discover amazing projects built by the Repomix community!
- Repomix Runner - VSCode extension for bundling files into a single output for AI processing
- Repomix Desktop - GUI desktop application for Repomix built with Python and CustomTkinter
- Python Repomix - Python implementation with AST-based compression
- Rulefy - Transform GitHub repos into custom Cursor AI rules using Claude AI
- Codebase MCP - MCP server that uses Repomix for AI-powered codebase analysis
- vibe-tools - CLI toolset for AI agents with web search, repo analysis, and browser automation
For more details, visit our Community Projects page.
🤝 Contribution
We welcome contributions from the community! To get started, please refer to our Contributing Guide.
Contributors
🔒 Privacy Policy
See our Privacy Policy.
📜 License
This project is licensed under the MIT License.
File: browser/README.md
Repomix Extension
A browser extension that adds a Repomix button to GitHub repository pages.
🚀 Features
- Adds a "Repomix" button to GitHub repository pages
- One-click redirect to Repomix (https://repomix.com)
- Seamlessly integrates with GitHub's UI design
- Works on Chrome, Firefox, and Edge
🛠️ Usage
- Install the browser extension
- Navigate to any GitHub repository page
- A "Repomix" button will appear in the page header action area
- Click the button to open the repository in Repomix
💻 Development
Prerequisites
- Node.js 22 or higher
Setup
# Install dependencies
npm install
# Generate icons
npm run generate-icons
# Development mode for Chrome
npm run dev chrome
# Development mode for Firefox
npm run dev firefox
# Development mode for Edge
npm run dev edgeBuild
# Build for all browsers
npm run build-all
# Build for specific browsers
npm run build chrome
npm run build firefox
npm run build edgeBuilt files will be generated in the dist/ folder.
Manual Installation
- Run
npm run build chrometo build - Open
chrome://extensions/in Chrome - Enable "Developer mode"
- Click "Load unpacked extension"
- Select the
dist/chromefolder
📝 Technical Specifications
- Manifest V3 - Latest browser extension specification
- Content Scripts - Direct button injection into GitHub pages
- Internationalization - English and Japanese support
- Cross-browser - Chrome, Firefox, Edge support
🔒 Privacy
This extension:
- Does not collect any data
- Does not track user behavior
- Only accesses github.com
- Requires minimal permissions
File: src/core/treeSitter/queries/README.md
Credits
Repomix uses modified versions of tree-sitter queries from Aider and Cline:
- https://github.com/Aider-AI/aider — licensed under the Apache License 2.0.
- https://github.com/cline/cline — licensed under the Apache License 2.0.
Aider uses modified versions of the tags.scm files from these open source
tree-sitter language implementations:
- https://github.com/tree-sitter/tree-sitter-c — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-c-sharp — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-cpp — licensed under the MIT License.
- https://github.com/Wilfred/tree-sitter-elisp — licensed under the MIT License.
- https://github.com/elixir-lang/tree-sitter-elixir — licensed under the Apache License, Version 2.0.
- https://github.com/elm-tooling/tree-sitter-elm — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-go — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-java — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-javascript — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-ocaml — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-php — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-python — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-ql — licensed under the MIT License.
- https://github.com/r-lib/tree-sitter-r — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-ruby — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-rust — licensed under the MIT License.
- https://github.com/tree-sitter/tree-sitter-typescript — licensed under the MIT License.
File: website/client/src/zh-tw/guide/development/index.md
title: 參與 Repomix 開發
參與 Repomix 開發
感謝您對 Repomix 的興趣!🚀 我們非常歡迎您的幫助,讓它變得更好。本指南將幫助您開始為專案做貢獻。
如何貢獻
- 為儲存庫加星: 通過為儲存庫加星來表示您的支持!
- 建立問題: 發現了bug?有新功能的想法?通過建立問題讓我們知道。
- 提交拉取請求: 找到了可以修復或改進的地方?提交PR吧!
- 傳播訊息: 在社交媒體、部落格或技術社群中分享您使用Repomix的經驗。
- 使用Repomix: 最有價值的反饋來自實際使用,請隨時將Repomix整合到您自己的專案中!
- 贊助: 通過成為贊助者來支持Repomix的開發。
快速開始
git clone https://github.com/yamadashy/repomix.git
cd repomix
npm install開發命令
# 運行 CLI
npm run repomix
# 運行測試
npm run test
npm run test-coverage
# 程式碼檢查
npm run lint程式碼風格
- 使用 Biome 進行程式碼檢查和格式化
- 使用依賴注入以提高可測試性
- 保持文件不超過 250 行
- 為新功能添加測試用例
Pull Request 提交指南
- 運行所有測試
- 通過程式碼檢查
- 更新文檔
- 遵循現有程式碼風格
開發環境設置
前提條件
- Node.js ≥ 22.0.0
- Git
- npm
- Docker(可選,用於運行網站或容器化開發)
本地開發
要為Repomix設置本地開發環境:
# 克隆儲存庫
git clone https://github.com/yamadashy/repomix.git
cd repomix
# 安裝依賴
npm install
# 運行CLI
npm run repomixNix開發
如果您啟用了 Nix flakes,可以進入預裝了 Node.js 24 和 Git 的可重現開發 shell:
nix develop在 shell 中,標準的 npm 工作流可以正常使用:
npm ci
npm run build
npm run test
npm run lint注意:此 shell 用於開發 Repomix 本身,不是用於將其作為 CLI 安裝。
Docker開發
您也可以使用Docker運行Repomix:
# 構建鏡像
docker build -t repomix .
# 運行容器
docker run -v ./:/app -it --rm repomix項目結構
項目組織為以下目錄:
src/
├── cli/ # CLI實現
├── config/ # 配置處理
├── core/ # 核心功能
│ ├── file/ # 文件處理
│ ├── metrics/ # 指標計算
│ ├── output/ # 輸出生成
│ ├── security/ # 安全檢查
├── mcp/ # MCP服務器集成
└── shared/ # 共享工具
tests/ # 反映src/結構的測試
website/ # 文檔網站
├── client/ # 前端(VitePress)
└── server/ # 後端API網站開發
Repomix網站使用VitePress構建。要在本地運行網站:
# 先決條件:系統上必須安裝Docker
# 啟動網站開發服務器
npm run website
# 在http://localhost:5173/訪問網站更新文檔時,您只需先更新英文版本。維護者將處理其他語言的翻譯。
發布流程
對於維護者和有興趣的貢獻者的發布流程:
- 更新版本
npm version patch # 或minor/major- 運行測試和構建
npm run test-coverage
npm run build- 發布
npm publish新版本由維護者管理。如果您認為需要發布,請打開一個Issue進行討論。
需要幫助?
File: website/client/src/zh-tw/guide/development/using-repomix-as-a-library.md
title: 作為庫使用 Repomix
作為庫使用 Repomix
除了作為 CLI 工具使用 Repomix 外,您還可以將其功能直接集成到 Node.js 應用程序中。
安裝
在您的項目中安裝 Repomix 作為依賴項:
npm install repomix基本用法
使用 Repomix 最簡單的方法是通過 runCli 函數,它提供與命令行界面相同的功能:
import { runCli, type CliOptions } from 'repomix';
// 使用自定義選項處理當前目錄
async function packProject() {
const options = {
output: 'output.xml',
style: 'xml',
compress: true,
quiet: true
} as CliOptions;
const result = await runCli(['.'], process.cwd(), options);
return result.packResult;
}result.packResult 包含有關處理文件的信息,包括:
totalFiles:處理的文件數量totalCharacters:總字符數totalTokens:總令牌數(對 LLM 上下文限制有用)fileCharCounts:每個文件的字符數fileTokenCounts:每個文件的令牌數
處理遠端倉庫
您可以克隆並處理遠端倉庫:
import { runCli, type CliOptions } from 'repomix';
// 克隆並處理 GitHub 倉庫
async function processRemoteRepo(repoUrl) {
const options = {
remote: repoUrl,
output: 'output.xml',
compress: true
} as CliOptions;
return await runCli(['.'], process.cwd(), options);
}[!NOTE]
基於安全考量,遠端倉庫中的設定檔預設不會被載入。如需信任遠端倉庫的設定,請在選項中加入remoteTrustConfig: true,或設定環境變數REPOMIX_REMOTE_TRUST_CONFIG=true。
使用核心組件
要獲得更多控制,您可以直接使用 Repomix 的低級 API:
import { searchFiles, collectFiles, processFiles, TokenCounter } from 'repomix';
async function analyzeFiles(directory) {
// 查找並收集文件
const { filePaths } = await searchFiles(directory, { /* 配置 */ });
const rawFiles = await collectFiles(filePaths, directory);
const processedFiles = await processFiles(rawFiles, { /* 配置 */ });
// 計算令牌
const tokenCounter = new TokenCounter('o200k_base');
// 返回分析結果
return processedFiles.map(file => ({
path: file.path,
tokens: tokenCounter.countTokens(file.content)
}));
}打包
使用 Rolldown 或 esbuild 等工具打包 repomix 時,某些依賴項必須保持為 external,並且需要複製 WASM 文件:
External 依賴項(無法打包):
tinypool- 使用文件路徑生成 worker 線程
需要複製的 WASM 文件:
web-tree-sitter.wasm→ 與打包後的 JS 相同的目錄(代碼壓縮功能需要)- Tree-sitter 語言文件 →
REPOMIX_WASM_DIR環境變數指定的目錄
有關實際示例,請參閱 website/server/scripts/bundle.mjs。
實際示例
Repomix 網站(repomix.com)使用 Repomix 作為庫來處理遠端倉庫。您可以在 website/server/src/remoteRepo.ts 中查看實現。
File: website/client/src/zh-tw/guide/tips/best-practices.md
title: AI 輔助開發最佳實踐:從實踐經驗談起
AI 輔助開發最佳實踐:從實踐經驗談起
雖然我還沒有完成一個大型的 AI 輔助開發項目,但我想分享一下到目前為止從與 AI 合作開發中學到的經驗。
基本開發方法
在與 AI 合作時,試圖一次性實現所有功能可能會導致意外問題和項目停滯。因此,從核心功能開始,一步一步穩紮穩打地構建每個功能是更有效的方法。
現有程式碼的重要性
這種方法之所以有效,是因為通過核心功能的實現,你可以將你理想中的設計和編碼風格具體化為實際程式碼。向 AI 傳達項目願景的最有效方式就是通過反映你的標準和偏好的程式碼本身。
從核心功能開始,確保每個功能在進入下一個功能之前都能正常工作,這樣整個項目就能保持一致性,使 AI 更容易生成更合適的程式碼。
模組化方法
將程式碼分解成更小的模組至關重要。根據經驗,將文件限制在 250 行左右的程式碼使得向 AI 提供清晰的指示更容易,並使試錯過程更有效。雖然令牌計數會是更準確的指標,但對人類開發者來說,行數更容易判斷,所以我們使用行數作為參考。
這不僅僅是關於前端、後端和數據庫等大單元的分離,而是關於更精細層面的功能劃分。例如,在一個功能內部,也要將驗證、錯誤處理等具體功能分離成獨立模組。
當然,大單元的分離也很重要,逐步實施模組化方法不僅讓指令更清晰,也讓 AI 能生成更合適的程式碼。這種方法不僅對 AI,對人類開發者來說也是有效的。
通過測試確保質量
我認為測試在 AI 輔助開發中尤為重要。測試不僅作為質量保證手段,還作為清晰展示程式碼意圖的文檔。當要求 AI 實現新功能時,現有的測試程式碼有效地充當了規範文檔。
測試也是驗證 AI 生成程式碼正確性的絕佳工具。例如,當讓 AI 為某個模組實現新功能時,預先編寫測試用例可以客觀評估生成的程式碼是否符合預期。這與測試驅動開發(TDD)的理念高度契合,在與 AI 協作時特別有效。
規劃與實現的平衡
在實現大規模功能之前,建議先與 AI 討論計劃。整理需求並考慮架構可以使後續實現更順暢。先整理需求,然後在新的對話中進行實現是個好方法。
此外,AI 的輸出必須經過人工審查,並在必要時進行調整。雖然 AI 輸出的質量通常處於中等水準,但與從頭開始編寫程式碼相比,仍然可以提高開發速度。
結語
通過實踐這些方法,你可以充分發揮 AI 的優勢,同時構建一個連貫的、高質量的程式碼庫。即使項目規模增長,每個部分都能保持清晰定義和易於管理的狀態。
File: website/client/src/zh-tw/guide/code-compress.md
title: 程式碼壓縮
程式碼壓縮
程式碼壓縮是一個強大的功能,它能夠在移除實現細節的同時智能提取關鍵程式碼結構。在需要減少令牌數量的同時保持程式碼庫的重要結構信息時,這個功能特別有用。
[!NOTE]
這是一個實驗性功能,我們將根據用戶反饋和實際使用情況積極改進。
基本用法
使用 --compress 標誌啟用程式碼壓縮:
repomix --compress也可以在遠端倉庫中使用:
repomix --remote user/repo --compress工作原理
壓縮算法使用 Tree-sitter 解析處理程式碼,提取並保留基本結構元素,同時移除實現細節。
壓縮會保留:
- 函數和方法簽名
- 介面和類型定義
- 類結構和屬性
- 重要的結構元素
同時會移除:
- 函數和方法實現
- 迴圈和條件邏輯細節
- 內部變量聲明
- 具體實現程式碼
示例
原始 TypeScript 程式碼:
import { ShoppingItem } from './shopping-item';
/**
* Calculate the total price of shopping items
*/
const calculateTotal = (
items: ShoppingItem[]
) => {
let total = 0;
for (const item of items) {
total += item.price * item.quantity;
}
return total;
}
// Shopping item interface
interface Item {
name: string;
price: number;
quantity: number;
}壓縮後:
import { ShoppingItem } from './shopping-item';
⋮----
/**
* Calculate the total price of shopping items
*/
const calculateTotal = (
items: ShoppingItem[]
) => {
⋮----
// Shopping item interface
interface Item {
name: string;
price: number;
quantity: number;
}配置
你可以在配置文件中啟用壓縮:
{
"output": {
"compress": true
}
}使用場景
程式碼壓縮在以下情況特別有用:
- 分析程式碼結構和架構
- 減少用於 LLM 處理的令牌數量
- 建立高層次文件
- 理解程式碼模式和簽名
- 共享 API 和介面設計
相關選項
你可以將壓縮與其他選項結合使用:
--remove-comments: 移除程式碼註釋(參見註釋移除)--remove-empty-lines: 移除空行--output-show-line-numbers: 在輸出中添加行號
相關資源
File: website/client/src/zh-tw/guide/command-line-options.md
title: 命令列選項
命令列選項
基本選項
-v, --version: 顯示版本資訊並退出
CLI 輸入/輸出選項
| 選項 | 說明 |
|---|---|
--verbose |
啟用詳細除錯日誌(顯示檔案處理、權杖計數和配置詳細資訊) |
--quiet |
抑制除錯誤外的所有控制台輸出(用於腳本編寫) |
--stdout |
將打包輸出直接寫入標準輸出而不是檔案(抑制所有日誌記錄) |
--stdin |
從標準輸入逐行讀取檔案路徑(指定的檔案直接處理) |
--copy |
處理後將產生的輸出複製到系統剪貼簿 |
--token-count-tree [threshold] |
顯示帶有權杖計數的檔案樹;可選閾值僅顯示 ≥N 權杖的檔案(例如:--token-count-tree 100) |
--top-files-len <number> |
摘要中顯示的最大檔案數(預設:5) |
Repomix 輸出選項
| 選項 | 說明 |
|---|---|
-o, --output <file> |
輸出檔案路徑(預設:repomix-output.xml,標準輸出使用 "-") |
--style <style> |
輸出格式:xml、markdown、json 或 plain(預設:xml) |
--output-file-path-style <style> |
輸出中顯示檔案路徑的方式:target-relative 或 cwd-relative(預設:target-relative) |
--parsable-style |
跳脫特殊字元以確保有效的 XML/Markdown(當輸出包含破壞格式的程式碼時需要) |
--compress |
使用 Tree-sitter 解析提取基本程式碼結構(類別、函數、介面) |
--output-show-line-numbers |
為輸出中的每行新增行號前綴 |
--no-file-summary |
從輸出中省略檔案摘要部分 |
--no-directory-structure |
從輸出中省略目錄樹視覺化 |
--no-files |
僅產生中繼資料而不包含檔案內容(用於儲存庫分析) |
--remove-comments |
打包前移除所有程式碼註釋 |
--remove-empty-lines |
從所有檔案中移除空行 |
--truncate-base64 |
截斷長 base64 資料字串以減少輸出大小 |
--header-text <text> |
在輸出開頭包含的自訂文字 |
--instruction-file-path |
包含要在輸出中包含的自訂指令的檔案路徑 |
--split-output <size> |
將輸出拆分為多個編號檔案(例如 repomix-output.1.xml);大小如 500kb、2mb 或 1.5mb |
--include-empty-directories |
在目錄結構中包含沒有檔案的資料夾 |
--include-full-directory-structure |
即使使用 --include 模式,也在目錄結構部分顯示完整的儲存庫樹 |
--no-git-sort-by-changes |
不按 git 變更頻率排序檔案(預設:最常變更的檔案優先) |
--include-diffs |
新增顯示工作樹和暫存變更的 git diff 部分 |
--include-logs |
新增包含訊息和變更檔案的 git 提交歷史 |
--include-logs-count <count> |
與 --include-logs 一起包含的最新提交數(預設:50) |
檔案選擇選項
| 選項 | 說明 |
|---|---|
--include |
僅包含與這些 glob 模式匹配的檔案(逗號分隔,例如:"src/**/*.js,*.md") |
-i, --ignore |
要排除的附加模式(逗號分隔,例如:"*.test.js,docs/**") |
--no-gitignore |
不使用 .gitignore 規則過濾檔案 |
--no-dot-ignore |
不使用 .ignore 規則過濾檔案 |
--no-default-patterns |
不套用內建忽略模式(node_modules、.git、建置目錄等) |
遠端儲存庫選項
| 選項 | 說明 |
|---|---|
--remote |
複製並打包遠端儲存庫(GitHub URL 或 user/repo 格式) |
--remote-branch <name> |
要使用的特定分支、標籤或提交(預設:儲存庫的預設分支) |
--remote-trust-config |
信任並載入遠端儲存庫的設定檔。受信任的設定可以執行命令並讀取本機檔案,因此請僅對您完全信任的儲存庫使用(出於安全考量預設停用)。在互動式終端中會顯示該設定並要求確認 |
組態選項
| 選項 | 說明 |
|---|---|
-c, --config |
使用自訂組態檔案而不是 repomix.config.json |
--init |
使用預設設定建立新的 repomix.config.json 檔案 |
--global |
與 --init 一起使用,在主目錄而不是當前目錄中建立組態 |
安全選項
--no-security-check: 跳過敏感資料(如 API 金鑰和密碼)的掃描
權杖計數選項
--token-count-encoding <encoding>: 計數用的分詞器模型:o200k_base(GPT-4o)、cl100k_base(GPT-3.5/4)等(預設:o200k_base)--token-budget <number>: 當打包輸出超過 N 個權杖時以非零退出碼失敗。可在 CI 流水線和 agent 工作流程中作為防護,使輸出保持在目標模型的上下文視窗內。輸出仍會產生,僅由退出碼標示溢位
MCP 選項
--mcp: 作為 Model Context Protocol 伺服器運行,用於 AI 工具整合--sandbox [dir]: (搭配--mcp使用)將 MCP 伺服器的檔案工具限制在一個工作區目錄內(預設為目前工作目錄;例如:--sandbox path/to/project)。所有路徑皆相對於該根目錄解析,絕對路徑/主機路徑會被拒絕,同時遠端打包、Skills 生成以及附加外部輸出功能皆會被停用。詳見 MCP 伺服器
Agent Skills 生成選項
| 選項 | 說明 |
|---|---|
--skill-generate [name] |
產生 Claude Agent Skills 格式輸出到 .claude/skills/<name>/ 目錄(省略名稱時自動產生) |
--skill-project-name <name> |
覆寫產生的 Skills 描述中使用的專案名稱 |
--skill-output |
直接指定技能輸出目錄路徑(跳過位置選擇提示) |
-f, --force |
跳過所有確認提示(技能目錄覆蓋、遠端設定信任) |
監視模式選項
-w, --watch: 監視檔案變更並自動重新打包。會偵測新增、修改和刪除的檔案,對快速連續的變更進行防抖處理(300 毫秒),並在每次重新建構後印出時間戳記。按Ctrl+C停止。
監視模式僅適用於本機目錄,因此無法與 --remote、作為位置參數傳入的遠端儲存庫 URL、--stdout、--stdin、--split-output、--skill-generate 或 --copy 組合使用。無論該選項是在命令列還是在組態檔中設定,這些限制都適用。
相關資源
- 設定 - 透過設定檔而非 CLI 旗標設定選項
- 輸出格式 - XML、Markdown、JSON 和純文字格式詳解
- 程式碼壓縮 -
--compress與 Tree-sitter 的運作原理 - 安全 -
--no-security-check停用的功能
範例
# 基本使用
repomix
# 自訂輸出檔案和格式
repomix -o my-output.xml --style xml
# 輸出到標準輸出
repomix --stdout > custom-output.txt
# 輸出到標準輸出,然後管道到另一個命令(例如,simonw/llm)
repomix --stdout | llm "請解釋這段程式碼的作用。"
# 使用壓縮的自訂輸出
repomix --compress
# 使用模式處理特定檔案
repomix --include "src/**/*.ts,*.md" --ignore "*.test.js,docs/**"
# 帶分支的遠端儲存庫
repomix --remote https://github.com/user/repo/tree/main
# 帶提交的遠端儲存庫
repomix --remote https://github.com/user/repo/commit/836abcd7335137228ad77feb28655d85712680f1
# 使用簡寫的遠端儲存庫
repomix --remote user/repo
# 使用簡寫的遠端儲存庫(自動檢測,無需 --remote)
repomix user/repo
# 使用stdin的檔案清單
find src -name "*.ts" -type f | repomix --stdin
git ls-files "*.js" | repomix --stdin
echo -e "src/index.ts\nsrc/utils.ts" | repomix --stdin
# Git整合
repomix --include-diffs # 包含git差異用於未提交的變更
repomix --include-logs # 包含git記錄(預設為最後50次提交)
repomix --include-logs --include-logs-count 10 # 包含最後10次提交
repomix --include-diffs --include-logs # 同時包含差異和記錄
# 權杖計數分析
repomix --token-count-tree
repomix --token-count-tree 1000 # 僅顯示擁有1000+權杖的檔案/目錄
# 監視模式:檔案變更時自動重新打包
repomix --watch
repomix -w --include "src/**/*.ts"File: website/client/src/zh-tw/guide/comment-removal.md
title: 註釋移除
註釋移除
Repomix 可以在生成輸出文件時自動移除程式碼中的註釋。這有助於減少干擾,讓程式碼更加簡潔。
使用方法
要啟用註釋移除,在 repomix.config.json 中將 removeComments 選項設置為 true:
{
"output": {
"removeComments": true
}
}支援的語言
Repomix 支援移除多種程式設計語言的註釋,包括:
- JavaScript/TypeScript (
//,/* */) - Python (
#,""",''') - Java (
//,/* */) - C/C++ (
//,/* */) - HTML (``)
- CSS (
/* */) - 以及更多語言...
示例
以下是 JavaScript 程式碼示例:
// 這是單行註釋
function test() {
/* 這是
多行註釋 */
return true;
}啟用註釋移除後,輸出將變為:
function test() {
return true;
}注意事項
- 註釋移除在其他處理步驟(如行號添加)之前執行
- 某些註釋,例如 JSDoc 註釋,可能會根據語言和上下文保留
- 如果你需要保留某些重要註釋,請考慮使用其他方式記錄這些信息,例如使用自定義指令
建議用法
- 選擇性使用:
- 對於需要向 AI 展示實現細節的程式碼,保留註釋
- 對於主要關注程式碼結構的分析,移除註釋
- 配合其他功能:
- 與
--remove-empty-lines選項組合使用,獲得更簡潔的輸出 - 使用自定義指令提供額外的上下文信息
- 效能考慮:
- 移除註釋可以減少輸出文件大小
- 對於大型程式碼庫特別有用
相關資源
File: website/client/src/zh-tw/guide/configuration.md
title: 設定
設定
Repomix可以透過設定檔或命令列選項進行設定。設定檔允許您自訂程式碼庫的處理和輸出方式。
設定檔格式
Repomix支援多種設定檔格式,以提供靈活性和易用性。
Repomix將按以下優先順序自動搜尋設定檔:
- TypeScript (
repomix.config.ts,repomix.config.mts,repomix.config.cts) - JavaScript/ES Module (
repomix.config.js,repomix.config.mjs,repomix.config.cjs) - JSON (
repomix.config.json5,repomix.config.jsonc,repomix.config.json)
JSON設定
在專案目錄中建立設定檔:
repomix --init這將建立一個帶有預設設定的repomix.config.json檔案。您還可以建立一個全域設定檔,在找不到本地設定時將使用它作為後備:
repomix --init --globalTypeScript設定
TypeScript設定檔提供最佳的開發體驗,具有完整的型別檢查和IDE支援。
安裝:
要使用帶有defineConfig的TypeScript或JavaScript設定,您需要將Repomix安裝為開發依賴:
npm install -D repomix範例:
// repomix.config.ts
import { defineConfig } from 'repomix';
export default defineConfig({
output: {
filePath: 'output.xml',
style: 'xml',
removeComments: true,
},
ignore: {
customPatterns: ['**/node_modules/**', '**/dist/**'],
},
});優勢:
- ✅ IDE中的完整TypeScript型別檢查
- ✅ 出色的IDE自動完成和IntelliSense
- ✅ 使用動態值(時間戳記、環境變數等)
動態值範例:
// repomix.config.ts
import { defineConfig } from 'repomix';
// 產生基於時間戳記的檔案名稱
const timestamp = new Date().toISOString().slice(0, 19).replace(/[:.]/g, '-');
export default defineConfig({
output: {
filePath: `output-${timestamp}.xml`,
style: 'xml',
},
});JavaScript設定
JavaScript設定檔的工作方式與TypeScript相同,支援defineConfig和動態值。
設定選項
| 選項 | 說明 | 預設值 |
|---|---|---|
input.maxFileSize |
要處理的最大檔案大小(位元組)。超過此大小的檔案將被跳過。用於排除大型二進位檔案或資料檔案 | 50000000 |
input.processors |
依序排列的 { pattern, command, timeout?, onError? } 項目陣列,會在打包前執行外部命令來轉換符合的檔案內容(例如 JSON→TOON)。第一個符合的 glob 優先。因為會執行任意命令,所以僅在本地 CLI 執行時(以及使用 --remote-trust-config 的遠端儲存庫)啟用。請參閱檔案處理器 |
未設定 |
output.filePath |
輸出檔案名。支援XML、Markdown和純文字格式 | "repomix-output.xml" |
output.style |
輸出樣式(xml、markdown、json、plain)。每種格式對不同的AI工具都有其優勢 |
"xml" |
output.filePathStyle |
輸出中顯示檔案路徑的方式(target-relative 表示路徑相對於每個目標根目錄,cwd-relative 表示路徑相對於目前工作目錄) |
"target-relative" |
output.parsableStyle |
是否根據所選樣式模式轉義輸出。可以提供更好的解析,但可能會增加令牌數量 | false |
output.compress |
是否使用Tree-sitter執行智慧程式碼提取,在保持結構的同時減少令牌數量 | false |
output.patterns |
每個檔案的包含層級。一個有序的 { pattern, compress?, directoryStructureOnly? } 項目陣列;第一個符合的 glob 優先,並覆寫該檔案的全域 output.compress 設定。請參閱每個檔案的包含層級 |
未設定 |
output.headerText |
要包含在檔案頭部的自訂文字。對於為AI工具提供上下文或指令很有用 | null |
output.instructionFilePath |
包含用於AI處理的詳細自訂指令的檔案路徑 | null |
output.fileSummary |
是否在輸出開頭包含顯示檔案計數、大小和其他指標的摘要部分 | true |
output.directoryStructure |
是否在輸出中包含目錄結構。幫助AI理解專案組織 | true |
output.files |
是否在輸出中包含檔案內容。設定為false時只包含結構和元資料 | true |
output.removeComments |
是否從支援的檔案類型中刪除註解。可以減少雜訊和令牌數量 | false |
output.removeEmptyLines |
是否從輸出中刪除空行以減少令牌數量 | false |
output.showLineNumbers |
是否為每行添加行號。有助於引用程式碼的特定部分 | false |
output.truncateBase64 |
是否截斷長的base64數據字符串(例如圖像)以減少令牌數量 | false |
output.copyToClipboard |
是否除了儲存檔案外還將輸出複製到系統剪貼簿 | false |
output.splitOutput |
按每部分最大大小將輸出拆分為多個編號檔案(例如,1000000 表示約1MB)。CLI 接受可讀大小如 500kb 或 2mb。使每個檔案保持在限制以下,並避免跨部分拆分來源檔案 |
未設定 |
output.tokenBudget |
當打包輸出超過此權杖數量時以非零退出碼失敗。作為 CI/agent 上下文限制的防護;輸出仍會產生 | 未設定 |
output.topFilesLength |
在摘要中顯示的頂部檔案數量。如果設定為0,則不顯示摘要 | 5 |
output.includeEmptyDirectories |
是否在儲存庫結構中包含空目錄 | false |
output.includeFullDirectoryStructure |
使用include模式時,是否顯示完整的目錄樹(遵守ignore模式)同時僅處理包含的檔案。為AI分析提供完整的儲存庫上下文 |
false |
output.git.sortByChanges |
是否按Git更改次數對檔案進行排序。更改較多的檔案顯示在底部 | true |
output.git.sortByChangesMaxCommits |
分析Git更改時要分析的最大提交數。限制歷史深度以提高效能 | 100 |
output.git.includeDiffs |
是否在輸出中包含Git差異。分別顯示工作樹和暫存區的更改 | false |
output.git.includeLogs |
是否在輸出中包含Git記錄。顯示提交歷史包括日期、訊息和檔案路徑 | false |
output.git.includeLogsCount |
在輸出中包含的git記錄提交數量 | 50 |
include |
要包含的檔案模式(使用glob模式) | [] |
ignore.useGitignore |
是否使用專案的.gitignore檔案中的模式 |
true |
ignore.useDotIgnore |
是否使用專案的.ignore檔案中的模式 |
true |
ignore.useDefaultPatterns |
是否使用預設忽略模式(node_modules、.git等) | true |
ignore.customPatterns |
額外的忽略模式(使用glob模式) | [] |
security.enableSecurityCheck |
是否使用Secretlint執行安全檢查以檢測敏感資訊 | true |
tokenCount.encoding |
OpenAI相容的令牌計數編碼(GPT-4o使用o200k_base,GPT-4/3.5使用cl100k_base)。使用 gpt-tokenizer。 |
"o200k_base" |
設定檔支援JSON5語法,允許:
- 註解(單行和多行)
- 物件和陣列中的尾隨逗號
- 無引號屬性名
- 更靈活的字串語法
模式验证
您可以透過添加$schema屬性為設定檔啟用模式验证:
{
"$schema": "https://repomix.com/schemas/latest/schema.json",
"output": {
"filePath": "repomix-output.md",
"style": "markdown"
}
}這在支援JSON結構描述的編輯器中提供自動完成和驗證功能。
設定檔範例
以下是完整設定檔(repomix.config.json)的範例:
{
"$schema": "https://repomix.com/schemas/latest/schema.json",
"input": {
"maxFileSize": 50000000,
// "processors": [
// { "pattern": "**/*.json", "command": "npx @toon-format/cli {file}" }
// ]
},
"output": {
"filePath": "repomix-output.xml",
"style": "xml",
"filePathStyle": "target-relative",
"parsableStyle": false,
"compress": false,
"headerText": "打包檔案的自訂頭部資訊",
"fileSummary": true,
"directoryStructure": true,
"files": true,
"removeComments": false,
"removeEmptyLines": false,
"topFilesLength": 5,
"showLineNumbers": false,
// "patterns": [
// { "pattern": "docs/**/*", "compress": true },
// { "pattern": "website/**/*", "directoryStructureOnly": true }
// ],
"truncateBase64": false,
"copyToClipboard": false,
"includeEmptyDirectories": false,
"git": {
"sortByChanges": true,
"sortByChangesMaxCommits": 100,
"includeDiffs": false,
"includeLogs": false,
"includeLogsCount": 50
}
},
"include": ["**/*"],
"ignore": {
"useGitignore": true,
"useDefaultPatterns": true,
// 模式也可以在 .repomixignore 中指定
"customPatterns": [
"additional-folder",
"**/*.log"
],
},
"security": {
"enableSecurityCheck": true
},
"tokenCount": {
"encoding": "o200k_base"
}
}設定檔位置
Repomix按以下順序尋找設定檔:
- 當前目錄中的本地設定檔(優先順序:TS > JS > JSON)
- TypeScript:
repomix.config.ts,repomix.config.mts,repomix.config.cts - JavaScript:
repomix.config.js,repomix.config.mjs,repomix.config.cjs - JSON:
repomix.config.json5,repomix.config.jsonc,repomix.config.json
- TypeScript:
- 全域設定檔(優先順序:TS > JS > JSON)
- Windows:
- TypeScript:
%LOCALAPPDATA%\Repomix\repomix.config.ts,.mts,.cts - JavaScript:
%LOCALAPPDATA%\Repomix\repomix.config.js,.mjs,.cjs - JSON:
%LOCALAPPDATA%\Repomix\repomix.config.json5,.jsonc,.json
- TypeScript:
- macOS/Linux:
- TypeScript:
~/.config/repomix/repomix.config.ts,.mts,.cts - JavaScript:
~/.config/repomix/repomix.config.js,.mjs,.cjs - JSON:
~/.config/repomix/repomix.config.json5,.jsonc,.json
- TypeScript:
- Windows:
命令列選項優先於設定檔設定。
包含模式
Repomix支援使用glob模式指定要包含的檔案。這允許更靈活和強大的檔案選擇:
- 使用
**/*.js包含任何目錄中的所有JavaScript檔案 - 使用
src/**/*包含src目錄及其子目錄中的所有檔案 - 組合多個模式,如
["src/**/*.js", "**/*.md"]以包含src中的JavaScript檔案和所有Markdown檔案
您可以在設定檔中指定包含模式:
{
"include": ["src/**/*", "tests/**/*.test.js"]
}或使用--include命令列選項進行一次性過濾。
忽略模式
Repomix提供多種方法來設定忽略模式,以在打包過程中排除特定檔案或目錄:
- .gitignore:預設情況下,使用專案的
.gitignore檔案和.git/info/exclude中列出的模式。此行為可以透過ignore.useGitignore設定或--no-gitignoreCLI選項控制。 - .ignore:您可以在專案根目錄中使用
.ignore檔案,格式與.gitignore相同。ripgrep和the silver searcher等工具也會使用此檔案,減少維護多個忽略檔案的需求。此行為可以透過ignore.useDotIgnore設定或--no-dot-ignoreCLI選項控制。 - 預設模式:Repomix包含常見排除檔案和目錄的預設清單(例如node_modules、.git、二進制檔案)。此功能可以透過
ignore.useDefaultPatterns設定或--no-default-patternsCLI選項控制。有關詳細資訊,請參閱defaultIgnore.ts。 - .repomixignore:您可以在專案根目錄中建立
.repomixignore檔案來定義Repomix特定的忽略模式。此檔案遵循與.gitignore相同的格式。 - 自訂模式:可以使用設定檔中的
ignore.customPatterns選項指定其他忽略模式。您可以使用-i, --ignore命令列選項覆寫此設定。
優先順序(從高到低):
- 自訂模式(
ignore.customPatterns) - 忽略檔案(
.repomixignore、.ignore、.gitignore和.git/info/exclude):- 在巢狀目錄中時,更深層目錄中的檔案具有更高優先順序
- 在同一目錄中時,這些檔案以不特定的順序合併
- 預設模式(如果
ignore.useDefaultPatterns為true且未使用--no-default-patterns)
這種方法允許根據專案需求靈活設定檔案排除。它透過確保排除安全敏感檔案和大型二進制檔案來幫助優化產生的打包檔案的大小,同時防止機密資訊外洩。
**注意:**預設情況下,二進制檔案不包含在打包輸出中,但它們的路徑列在輸出檔案的「倉庫結構」部分。這提供了倉庫結構的完整概覽,同時保持打包檔案高效且基於文字。有關詳細資訊,請參閱二進制檔案處理。
.repomixignore範例:
# 快取目錄
.cache/
tmp/
# 建置輸出
dist/
build/
# 日誌
*.log預設忽略模式
當ignore.useDefaultPatterns為true時,Repomix自動忽略以下常見模式:
node_modules/**
.git/**
coverage/**
dist/**完整列表請參見defaultIgnore.ts
二進制檔案處理
二進制檔案(如圖像、PDF、編譯的二進制檔案、歸檔檔案等)經過特殊處理以保持高效的基於文字的輸出:
- 檔案內容:二進制檔案不包含在打包輸出中,以保持檔案基於文字且對AI處理高效
- 目錄結構:二進制檔案路徑被列出在目錄結構部分,提供倉庫的完整概覽
這種方法確保您獲得倉庫結構的完整視圖,同時保持針對AI消費優化的高效的基於文字的輸出。
範例:
如果您的倉庫包含logo.png和app.jar:
- 它們將出現在目錄結構部分
- 它們的內容將不會包含在檔案部分
目錄結構輸出:
src/
index.ts
utils.ts
assets/
logo.png
build/
app.jar這樣,AI工具可以理解這些二進制檔案存在於您的專案結構中,而無需處理其二進制內容。
**注意:**您可以使用input.maxFileSize設定選項(預設值:50MB)控制最大檔案大小閾值。大於此限制的檔案將被完全跳過。
進階功能
程式碼壓縮
程式碼壓縮功能(透過output.compress: true啟用)使用Tree-sitter智慧提取基本程式碼結構,同時移除實作細節。這有助於在保持重要的結構資訊的同時減少令牌數量。
主要優點:
- 顯著減少令牌數量
- 保留類別和函式簽名
- 保持匯入和匯出
- 保留型別定義和介面
- 移除函式本體和實作細節
更多詳細資訊和範例,請參閱程式碼壓縮指南。
每個檔案的包含層級
output.compress 會對每個檔案套用單一層級,而 output.patterns 則讓您可以從設定檔中依 glob 控制細節層級。每個項目透過 glob 鎖定檔案(比對方式與 include/ignore 相同),並針對符合的檔案覆寫全域 output.compress 設定。
{
"output": {
"compress": false, // 全域預設值作為萬用後備
"patterns": [
{ "pattern": "docs/**/*", "compress": true },
{ "pattern": "website/**/*", "directoryStructureOnly": true }
]
}
}每個檔案會解析為以下三種層級之一:
- 完整內容(預設):包含檔案的完整內容。
- 壓縮(
compress: true):內容會通過與output.compress相同的 Tree-sitter 處理流程。 - 僅目錄結構(
directoryStructureOnly: true):檔案會列在目錄結構中,但其內容區塊會完全從輸出中省略。
規則如下:
- 模式會依陣列順序評估,對於指定的檔案,第一個符合的模式優先。
- 符合的模式的旗標會覆寫全域
output.compress設定。若模式符合但未設定任何旗標,則會強制該檔案使用完整內容,這對於將檔案從全域compress中加入白名單很方便。 - 當同一個模式同時設定
directoryStructureOnly與compress時,directoryStructureOnly優先。 - 若沒有任何模式符合,則套用全域行為(完整內容,或當
output.compress為true時為壓縮)。
此選項僅限設定檔使用;沒有對應的 CLI 旗標。
檔案處理器
input.processors 會執行外部命令,在檔案內容被打包之前進行轉換。每個項目透過 glob 鎖定檔案(比對方式與 include/ignore 相同),並以該命令的標準輸出取代符合檔案的內容。這對於縮減令牌數量或轉換格式的處理很有用,例如將 JSON 轉換為 TOON、壓縮 SVG,或將 notebook 轉換為純腳本。
{
"input": {
"processors": [
{
"pattern": "**/*.json",
"command": "npx @toon-format/cli {file}"
}
]
}
}運作方式:
- Repomix 會將每個符合的檔案內容寫入暫存檔案,並以其路徑取代命令中的
{file}佔位符(此佔位符為必要)。 - 此命令會透過 shell 執行,因此管線與
npx等工具都能運作。其標準輸出會成為該檔案的新內容,接著會像其他檔案一樣流經管線的其餘部分(安全檢查、令牌計數與輸出產生)。 - 模式會依陣列順序評估,第一個符合的模式優先——一個檔案最多只會被一個處理器轉換(不會串聯處理)。
各處理器的選項:
timeout:等待命令執行的最長時間(毫秒)。預設值:60000(60 秒)。請注意,npx在快取為空時可能需要額外時間下載套件。onError:命令以非零狀態退出或逾時時的處理方式。"fail"(預設)會中止整個打包過程;"skip"會記錄警告並回退使用該檔案的原始內容。
範例命令(每個都是與合適的 pattern 搭配的 command 值):
| 模式 | command |
作用 |
|---|---|---|
**/*.json |
jq -c . {file} |
去除空白以壓縮 JSON |
**/*.json |
npx @toon-format/cli {file} |
將 JSON 轉換為 TOON,一種精簡且節省 token 的格式 |
**/*.svg |
npx svgo -i {file} -o - |
壓縮 SVG |
**/*.ipynb |
jupyter nbconvert --to script --stdout {file} |
將 Jupyter notebook 轉換為純 Python 指令碼 |
由於第一個符合的模式優先,因此每個檔案只套用一個處理器——例如,對於 **/*.json 只選擇 jq 或 TOON 轉換器其中之一。命令必須將轉換後的內容寫入標準輸出,而且它呼叫的工具必須在你的 PATH 上可用(基於 npx 的命令會在首次使用時下載工具)。
::: warning 安全性
檔案處理器會執行來自您設定檔的任意命令,因此遵循嚴格的信任模型:
- 僅在本地 CLI 執行時啟用 —— Repomix 會假設您工作目錄中的設定檔屬於您自己,這與 npm 腳本或 Makefile 的信任邊界相同。同樣地,如果您在他人提供的儲存庫中執行
repomix,卻事先未檢查其repomix.config.json,其處理器命令就會在您的機器上執行。在打包不受信任的儲存庫之前,請先檢查其設定檔。 - 在函式庫 API(
pack()/runCli())、MCP 伺服器,以及託管的 repomix.com 中皆為停用狀態,因此這些管道都無法從設定檔執行命令。 - 對於遠端儲存庫(
--remote),複製儲存庫的設定 —— 以及其處理器 —— 只有在您明確傳入--remote-trust-config時才會被信任。若未傳入,遠端設定甚至不會被載入。
啟動時會記錄目前啟用的處理器,讓來自不熟悉設定檔的意外處理器變得可見。由於命令會在啟動時與錯誤訊息中被印出,請透過環境變數(例如 $TOKEN)參照憑證,而非直接寫在命令中,因為環境變數在記錄時不會被展開。
:::
注意事項:
- 不建議在同一個檔案上同時使用會改變格式的處理器與
output.compress、output.removeComments或output.patterns的compress:這些步驟是依檔案的原始副檔名來分派的,因此會對轉換後的內容執行錯誤的語言處理器。基於同樣的原因,Markdown 輸出中的程式碼區塊也會依原始副檔名標記(例如,JSON→TOON 轉換後的檔案會標記為json)。壓縮是盡力而為,解析失敗時會靜默回退為轉換後的內容。 - 使用
--watch時,符合的檔案會在每次重新建置時重新處理,也就是每次都會重新執行該命令。 - 逾時時,Repomix 會終止該命令所在的 shell;若命令自行產生了長期執行的背景程序,這些程序可能會繼續執行。
- 處理器只會看到文字檔案(二進位檔案會在處理前被排除),其輸出會以 UTF-8 讀取。
Git整合
output.git設定提供強大的Git感知功能:
sortByChanges:當設定為true時,檔案按Git更改次數(修改該檔案的提交數)排序。更改次數較多的檔案出現在輸出的底部。這有助於優先處理更活躍開發的檔案。預設值:truesortByChangesMaxCommits:計算檔案更改次數時要分析的最大提交數。預設值:100includeDiffs:當設定為true時,在輸出中包含Git差異(同時分別包含工作樹和暫存區的更改)。這允許讀者查看儲存庫中的待處理更改。預設值:falseincludeLogs:當設定為true時,在輸出中包含Git記錄。顯示提交歷史包括日期、訊息和檔案路徑。這有助於AI理解開發模式和檔案關係。預設值:falseincludeLogsCount:在git記錄中包含的最近提交數量。預設值:50
設定範例:
{
"output": {
"git": {
"sortByChanges": true,
"sortByChangesMaxCommits": 100,
"includeDiffs": true,
"includeLogs": true,
"includeLogsCount": 25
}
}
}安全檢查
當security.enableSecurityCheck啟用時,Repomix使用Secretlint在將程式碼庫包含在輸出中之前檢測敏感資訊。這有助於防止意外暴露:
- API金鑰
- 存取令牌
- 私密金鑰
- 密碼
- 其他敏感憑證
註解移除
當output.removeComments設定為true時,將從支援的檔案類型中移除註解,以減少輸出大小並專注於核心程式碼內容。這在以下情況特別有用:
- 處理大量文件化的程式碼
- 嘗試減少令牌數量
- 專注於程式碼結構和邏輯
有關支援的語言和詳細範例,請參閱註解移除指南。
相關資源
- 命令列選項 - 完整的 CLI 參考(CLI 選項優先於設定檔設定)
- 輸出格式 - 各種輸出格式的詳細說明
- 安全 - Repomix 如何偵測敏感資訊
- 程式碼壓縮 - 透過 Tree-sitter 減少令牌數量
- GitHub 倉庫處理 - 遠端倉庫處理選項