Repomix 命令行选项完全指南:输入输出、文件筛选、远程仓库、Token 预算与 MCP 集成
【免费下载链接】repomix📦 Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. 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.项目地址: https://gitcode.com/GitHub_Trending/rep/repomix
本文是 Repomix CLI 的完整命令参考。Repomix 是一款将整个代码仓库打包成单一、AI 友好的文件的工具,打包结果可以直接交给 Claude、ChatGPT、DeepSeek、Gemini 等大语言模型使用。文章系统梳理了从输入输出控制、文件选择、远程仓库打包,到安全扫描、Token 计数、MCP 服务器、Agent Skills 生成与监视模式(Watch Mode)的全部 CLI 选项,并结合源码说明其默认值、参数校验与底层实现原理。读完本文,你将能够精确掌握 Repomix 每个命令行标志的用途与组合约束,并为 CI 流水线和 Agent 工作流配置可靠的打包流程。
基础选项
| 选项 | 说明 |
|---|---|
-v, --version | 显示版本信息并退出 |
在 src/cli/cliRun.ts 中,该选项由 Commander 注册为-v, --version,命中后会调用 versionAction.ts 输出当前 Repomix 版本。从源码结构看,版本号通过 packageJsonParse.ts 从 package.json 中读取,保证与安装版本一致。
CLI 输入/输出选项
| 选项 | 说明 |
|---|---|
--verbose | 启用详细的调试日志(显示文件处理、Token 计数和配置细节) |
--quiet | 除错误外抑制所有控制台输出(适合脚本编写) |
--stdout | 将打包结果直接写入 stdout 而非文件(抑制所有日志) |
--stdin | 从 stdin 逐行读取文件路径(指定文件会被直接处理) |
--copy | 处理完成后将生成的输出复制到系统剪贴板 |
--token-count-tree [threshold] | 显示带 Token 计数的文件树;可选阈值仅显示 Token ≥ N 的文件(如--token-count-tree 100) |
--top-files-len <number> | 摘要中显示的最大文件数量(默认:5) |
这些选项在源码中的行为值得注意:
--verbose与--quiet在 cliRun.ts 中通过 Commander 的.conflicts()声明为互斥,二者同时使用时命令会直接报错;--stdout与--output同样互斥。- 日志级别与输出模式联动:
--quiet或--stdout会将日志级别设为SILENT,--verbose设为DEBUG,否则为INFO。这意味着--stdout模式天然适合管道场景,不会混入任何日志噪声。 --stdout还有一种等价写法:-o -(输出路径为-)。在 cliRun.ts 中,options.output === '-'会被自动转换为 stdout 模式。--token-count-tree的阈值参数会经正则/^\d+$/校验,非负整数字符串才会被转换为数字,否则抛出RepomixError。- 便于脚本使用:
--stdin模式下会跳过版本号横幅输出,避免干扰fzf等交互式管道工具的输出。
Repomix 输出选项
| 选项 | 说明 |
|---|---|
-o, --output <file> | 输出文件路径(默认:repomix-output.xml,使用"-"表示 stdout) |
--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 <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 commit 历史 |
--include-logs-count <count> | --include-logs包含的最近提交数(默认:50) |
输出格式与默认值
输出样式由 configSchema.ts 中的repomixOutputStyleSchema限定为xml、markdown、json、plain四种。每种样式有对应的默认输出文件名(defaultFilePathMap):
| 样式 | 默认输出文件 |
|---|---|
xml | repomix-output.xml |
markdown | repomix-output.md |
plain | repomix-output.txt |
json | repomix-output.json |
文件路径样式target-relative/cwd-relative通过repomixOutputFilePathStyleSchema的picklist校验,非法值会在配置解析阶段直接被拒绝。
拆分输出的尺寸解析
--split-output的值不会直接按字符串使用,而是经 sizeParse.ts 的parseHumanSizeToBytes解析为字节数(如500kb、2mb、1.5mb),拆分逻辑在 outputSplit.ts 中实现,生成repomix-output.1.xml、repomix-output.2.xml这样的编号文件序列。
代码压缩
--compress通过 treeSitter 模块 对各类语言进行语法树解析,只提取类、函数、接口等核心结构,大幅减少交给 LLM 的 Token 量。仓库中为 C、C++、C#、CSS、Dart、Go、Java、JavaScript、PHP、Python、Ruby、Rust、Solidity、Swift、TypeScript、Vue 等语言提供了独立的查询文件(见 queries 目录)。压缩后代码会显著失去原始格式,适合需要把大仓库塞进模型上下文窗口的场景。
覆盖与冲突
--split-output与--stdout、--skill-generate、--copy存在冲突(拆分输出必须写入文件系统);--skill-generate与--stdout、--copy同样不兼容。这些校验在 defaultAction.ts 的validateConflictingOptions中实现。
文件选择选项
| 选项 | 说明 |
|---|---|
--include <patterns> | 仅包含匹配这些 glob 模式的文件(逗号分隔,如"src/**/*.js,*.md") |
-i, --ignore <patterns> | 额外的排除模式(逗号分隔,如"*.test.js,docs/**") |
--no-gitignore | 过滤文件时不使用.gitignore规则 |
--no-dot-ignore | 过滤文件时不使用.ignore规则 |
--no-default-patterns | 不应用内置忽略模式(node_modules、.git、构建目录等) |
include/ignore 的底层行为
--include和--ignore的逗号分隔字符串在 defaultAction.ts 中经splitPatterns拆分为数组:--include写入config.include,--ignore写入config.ignore.customPatterns。真正的匹配与过滤逻辑位于 fileSearch.ts 和 fileCollect.ts。
注意--no-gitignore、--no-dot-ignore、--no-default-patterns这类--no-*标志的特殊语义:源码只在标志被显式传入(即值为false)时才覆盖配置文件。也就是说,配置文件里开启的 gitignore 规则,只有你在命令行显式使用--no-gitignore才会被关闭;不传时以配置文件为准。三个忽略开关的默认值均为true(见 configSchema.ts)。
远程仓库选项
| 选项 | 说明 |
|---|---|
--remote <url> | 克隆并打包远程仓库(支持 GitHub URL 或user/repo格式) |
--remote-branch <name> | 指定使用的分支、标签或提交(默认:仓库默认分支) |
--remote-trust-config | 信任并加载远程仓库的配置文件。被信任的配置可以执行命令并读取本地文件,因此只应对完全信任的仓库使用(出于安全默认禁用)。在交互式终端中会显示配置并要求确认 |
远程打包的完整流程
--remote的实际处理在 remoteAction.ts 中完成:
- 将仓库克隆或下载到临时目录(GitHub 仓库优先尝试 zip archive 下载,失败后回退到 git 浅克隆);
- 在临时目录中对仓库执行打包;
- 将输出文件复制回当前目录;
- 清理临时目录。
远程模式下的安全设计值得关注:
--config在远程模式下必须使用绝对路径,防止从克隆仓库中加载攻击者控制的配置;- 默认情况下不会加载克隆仓库自带的
repomix.config.*(skipLocalConfig: true),只有在显式--remote-trust-config且用户确认后才会加载; - 克隆仓库中的
input.processors(可执行任意命令的文件处理器)只有在信任远程配置时才生效; - 远程模式跳过 Repopack 迁移(
skipMigration: true),避免把临时克隆中的遗留文件改写成未经过审核的配置。
--remote-trust-config也可以环境变量REPOMIX_REMOTE_TRUST_CONFIG=true触发,配合--force可跳过交互式确认。
位置参数自动识别
除了--remote,Repomix 还支持直接在位置参数中传远程仓库:
- 显式 URL(
https://、git@、ssh://、git://)会被自动识别为远程仓库; user/repo简写形式只有在本地不存在同名路径、且通过 GitHub 可达性探测(git ls-remote)后才被当作远程仓库处理,避免把拼错的本地路径误判为克隆意图(见 cliRun.ts)。
配置选项
| 选项 | 说明 |
|---|---|
-c, --config <path> | 使用自定义配置文件替代repomix.config.json |
--init | 使用默认设置创建新的repomix.config.json |
--global | 与--init一起使用时,在 home 目录而非当前目录创建配置 |
配置文件与 CLI 的优先级
Repomix 的配置合并顺序是:默认值 → 文件配置 → CLI 选项(defaultAction.ts 的mergeConfigs)。CLI 上未指定的选项会沿用配置文件中的值,因此把常用参数写进repomix.config.json、把临时调整放到命令行,是推荐的使用方式。--init生成的配置骨架可参考仓库根目录的 repomix.config.json。配置文件允许使用 JS/TS 格式(通过defineConfig获得类型提示),详见 configuration.md。
安全选项
--no-security-check:跳过对 API 密钥和密码等敏感数据的扫描(请谨慎使用;输出中可能泄露机密信息)
安全扫描默认开启(security.enableSecurityCheck默认值为true)。扫描逻辑位于 securityCheck.ts,它通过 securityCheckWorker.ts 在独立 worker 线程中检测类密钥模式,一旦发现敏感数据会在打包前提示并默认拒绝输出。关于该选项禁用的具体检查项,参考 security.md。
Token 计数选项
--token-count-encoding <encoding>:用于计数的 tokenizer 模型:o200k_base(GPT-4o)、cl100k_base(GPT-3.5/4)等(默认:o200k_base)--token-budget <number>:打包输出超过 N token 时以非零退出码失败。适合在 CI 流水线和 Agent 工作流中作为护栏,确保输出保持在目标模型的上下文窗口内。输出仍然会生成,只有退出码标识超出
支持的编码与 Token 预算机制
当前支持的 tokenizer 编码定义在 tokenEncodings.ts:o200k_base、cl100k_base、p50k_base、p50k_edit、r50k_base。默认o200k_base对应 GPT-4o,cl100k_base对应 GPT-3.5/4 系列。
--token-budget的取值必须是正整数(Number(v) < 1会报错)。它在打包完成、输出已生成之后才校验(cliTokenBudget.ts 与 defaultAction.ts),因此它是"护栏"而非"中止器":超限时输出文件依然存在,但命令以非零退出码结束,方便 CI 捕获。远程模式下该检查会延迟到输出复制出临时目录之后执行,避免临时目录被提前清理。Token 计数使用 TokenCounter.ts 实现,并带缓存(tokenCountCache.ts)。
MCP 选项
--mcp:作为 Model Context Protocol 服务器运行,用于 AI 工具集成--sandbox [dir]:(与--mcp一起使用)将 MCP 服务器的文件工具限制在某个工作区目录中(默认为工作目录;如--sandbox path/to/project)。所有路径都相对于该根目录,绝对路径/宿主机路径会被拒绝,远程打包、技能生成和附加外部输出都会被禁用。参见 MCP 服务器
沙箱的强制机制
--sandbox的根目录会先经canonicalizeSandboxRoot(cliRun.ts)通过realpath规范化,消除符号链接差异(如 macOS 上/tmp与/private/tmp的一致性),确保路径守卫、输出虚拟化与错误脱敏都基于同一真实路径。路径越界检测由 pathScope.ts 的resolveWithinRoot实现,绝对路径和宿主机路径一律拒绝。此外沙箱模式下:
- 不会加载任何配置文件(包括操作者的全局配置),防止
output.instructionFilePath把工作区外的文件读入 Agent 可见的输出; - 远程打包、技能生成、附加外部输出被禁用;
- 未与
--mcp组合使用时,--sandbox仅打印警告并无效。
Agent Skills 生成选项
| 选项 | 说明 |
|---|---|
--skill-generate [name] | 以 Claude Agent Skills 格式将输出生成到.claude/skills/<name>/目录(未指定名称时自动生成) |
--skill-project-name <name> | 覆盖生成的 Skills 描述中使用的项目名 |
--skill-output <path> | 直接指定技能输出目录路径(跳过位置提示) |
-f, --force | 跳过所有确认提示(技能目录覆盖、远程配置信任) |
--skill-generate会基于打包结果生成符合 Claude Agent Skills 规范的技能包(含SKILL.md与示例文件),落地逻辑在 packSkill.ts,技能名由 skillUtils.ts 根据目录或远程 URL 自动推导。源码层面的约束包括:
--skill-output、--skill-project-name、--force单独使用(未与--skill-generate组合)会直接报错;--skill-output与--skill-project-name不能为空字符串;- 远程仓库场景下,技能默认输出到当前目录并询问位置,项目名从仓库 URL 推导,
SKILL.md中的来源 URL 会经redactUrl脱敏,避免把带凭据的远程地址写进即将提交的文件。
监视模式选项
-w, --watch:监视文件变化并自动重新打包。新增、修改、删除的文件都会被检测到,快速变更会被 debounce(300 ms),每次重建后打印时间戳。按Ctrl+C停止。
监视模式仅适用于本地目录,因此不能与--remote、位置参数形式的远程仓库 URL、--stdout、--stdin、--split-output、--skill-generate或--copy组合使用。无论这些选项是在命令行还是配置文件中设置,限制都同样适用。
Watch 模式的实现细节
监视模式由 watchAction.ts 基于 chokidar 实现,值得注意的设计点:
- 300 ms debounce:
REBUILD_DEBOUNCE_MS = 300,连续变更事件会被合并为一次重建,防止保存文件时触发多次打包; - 写入稳定性阈值:
WRITE_STABILITY_THRESHOLD_MS = 100,文件大小需保持稳定 100 ms 才触发变更事件,避免打包到写入一半的文件; - 重建防重入:构建中的标志
isRebuilding防止并发打包,若重建期间又有变更到来,会排队一次后续重建; - 忽略过滤器:watch 的忽略规则与打包器保持一致(
buildWatchIgnoreFilter),chokidar 不会进入node_modules、.git和被 gitignore 的目录,既避免大项目上的EMFILE错误,也减少无谓重建; - 优雅退出:监听
SIGINT/SIGTERM,Ctrl+C时先关闭 watcher 并等待进行中的重建完成; - 配置文件中的
splitOutput、stdout(含output.filePath === '-')、skillGenerate、copyToClipboard与 watch 的冲突会在合并配置后再次校验(watchAction.ts),因为命令行层的校验(cliRun.ts 的validateWatchOptions)看不到配置文件里的设置。
完整示例
# 基本用法 repomix # 自定义输出文件与格式 repomix -o my-output.md --style markdown repomix -o my-output.json --style json # 输出到 stdout repomix --stdout > custom-output.txt # 输出到 stdout,然后管道给其他命令(例如 simonw/llm) repomix --stdout | llm "Please explain what this code does." # 自定义输出并压缩 repomix --compress # 拆分输出为多个文件(每部分最大大小) repomix --split-output 20mb # 使用模式处理特定文件 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 diffs repomix --include-logs # 包含 git 日志(默认最近 50 条提交) repomix --include-logs --include-logs-count 10 # 包含最近 10 条提交 repomix --include-diffs --include-logs # 同时包含 diffs 和 logs # Token 计数分析 repomix --token-count-tree repomix --token-count-tree 1000 # 只显示 1000+ token 的文件/目录 # 监视模式:文件变化时自动重新打包 repomix --watch repomix -w --include "src/**/*.ts"组合建议
- CI 上下文护栏:
repomix --compress --token-budget 120000,输出超限时 CI 立即以非零码失败; - Agent 工作流:
repomix --stdout --no-file-summary --remove-comments直接向 LLM 管道输送精简代码; - 仓库分析:
repomix --no-files --include-full-directory-structure仅生成元数据与完整目录树; - 远程仓库审计:先
repomix --remote user/repo(默认不信任远程配置),确认内容可信后再考虑--remote-trust-config。
相关资源
- 配置文件 — 在配置文件中设置选项而非使用 CLI 标志
- 输出格式 — XML、Markdown、JSON 和纯文本格式的细节
- 代码压缩 —
--compress选项如何与 Tree-sitter 配合 - 安全 —
--no-security-check禁用的具体检查 - MCP 服务器 —
--mcp与--sandbox的完整用法
【免费下载链接】repomix📦 Repomix is a powerful tool that packs your entire repository into a single, AI-friendly file. 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.项目地址: https://gitcode.com/GitHub_Trending/rep/repomix
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考