code2prompt:把整个代码库折叠成一条 LLM 提示词
A CLI tool to convert your codebase into a single LLM prompt with source tree, prompt templating, and token counting.
秒懂
- 它是什么?
- code2prompt 是一个用 Rust 写的命令行工具,能把代码库转换成结构化的 LLM 提示词,附带源码树、模板和 token 估算。它面向手动复制代码给 ChatGPT 的开发者,也提供 Python 绑定和 MCP 服务,但它的估算方式有明确取舍。
- 适合谁用?
- 适合那些频繁把本地代码喂给 ChatGPT、Claude 或自己构建 agent 的开发者,尤其是需要保留 .gitignore 规则和 Git 上下文的人。如果你的工作流依赖精确的 token 数量来管理上下文窗口,code2prompt 的估算方式可能不够,因为它不会对最终渲染的完整提示词重新分词,且估算排除 JSON 输出外壳。
- 能商用吗?
- 可以。MIT 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
- 还在维护吗?
- 在维护。仓库最近一次提交在 4 天前。
- 用什么语言写的?
- 主要是 Rust(依据 GitHub 的语言统计)。
以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。
开源项目深度解析
它解决的是复制粘贴的脏活
把代码库喂给 LLM 之前,你得先决定哪些文件要包含,哪些要排除,还要把目录结构整理成模型能看懂的形式。手动做这件事,遇到大型项目会花掉大量时间,而且容易漏掉关键的配置文件。code2prompt 的目标是把这一串操作压缩成一条命令:输入一个目录,输出一份格式化的提示词,里面带源码树、文件内容和可选的 Git 元数据。它面向两类人:一是手动把上下文贴进 ChatGPT 或 Claude 的开发者,二是通过 Python SDK 或 MCP 服务构建自动化 agent 的工程师。文档里提到它支持 CSV、Notebook、JSONL 等格式的智能读取,这说明它不只是把文本文件拼起来,而是针对不同文件类型做预处理。
核心机制:遍历、过滤、模板、估算
根据 README 的流程描述,code2prompt 的工作分几步。它有一个内部 Rust 核心库,负责安全的文件遍历,遵守 .gitignore 规则,并整理 Git 元数据。然后它把选中的文件内容交给 Handlebars 模板引擎,生成最终的提示词。token 估算采用并行按文件计数的方式,并加上估算的模板开销,可选行号。这里有个关键细节:估算不会对完整渲染的提示词重新分词,而且排除 JSON 输出外壳。换句话说,它给你的是一个近似值,不是精确的 token 数。输出默认到 stdout,用 -c 参数可以复制到剪贴板,也可以用 --output-file 保存到文件。CLI 之外还有 TUI 模式,适合不想记参数的人。
安装与基本用法:三条路径
安装方式有三种主流选择。用 Cargo 安装:cargo install code2prompt,如果系统是 Wayland 且需要剪贴板集成,要加 feature 标志:cargo install --features wayland code2prompt。macOS 用户可以用 Homebrew:brew install code2prompt。Python 开发者则通过 pip 安装 code2prompt-rs,这是 Rust 核心的绑定,适合嵌入到自动化脚本或 RAG 管道。基本用法很简单,在项目根目录运行 code2prompt . 就会把提示词打印到 stdout,加 -c 复制到剪贴板。保存到文件用 code2prompt path/to/project --output-file prompt.txt。
模板与过滤:控制输出形状
提示词的质量取决于结构,code2prompt 用 Handlebars 模板让你自定义输出格式。这意味着你可以为不同场景准备不同模板,比如代码审查、生成文档或解释架构。过滤方面,它支持用 glob 模式包含或排除文件,同时尊重 .gitignore 规则。这个组合很实用:你不需要在命令行里重复排除 node_modules 或 target 目录,因为 .gitignore 已经声明了。但要注意,glob 模式是叠加在 .gitignore 之上的,如果你不小心用了一个宽泛的包含模式,可能会把忽略的文件拉回来。文档没有详细说明优先级冲突时的行为,这是使用前需要自己验证的地方。
Git 集成与上下文增强
除了静态文件内容,code2prompt 还能把 Git 信息塞进提示词。它支持包含 diff、log 和分支比较。这对代码审查场景很有价值:你可以在提示词里带上当前分支相对于 main 的变更,让 LLM 只关注改动部分,而不是整个代码库。Git 元数据由核心库负责结构化,意味着它会以一致的格式呈现,而不是简单地把 git log 的输出倒进去。但这也带来一个限制:如果项目不在 Git 仓库里,这部分功能就不可用。对于用 zip 包或复制目录方式分发的代码,你只能得到纯文件内容。
生态扩展:Python SDK 与 MCP 服务
code2prompt 不止是一个 CLI。它提供 Python 绑定,通过 PyPI 上的 code2prompt-rs 包分发,这让你可以在 agent 脚本里直接调用,不必每次启动子进程。更进一步的集成是 MCP 服务器,运行后允许 agentic 应用读取本地代码库,同时避免把整个上下文窗口撑爆。README 里展示了一个四层生态:Rust 核心库、CLI/TUI、Python SDK 和 MCP 服务。这种分层设计意味着你可以在不同抽象级别使用同一套过滤和模板逻辑。不过,MCP 服务器的具体配置方式在 README 里没有展开,文档站点应该有更详细的说明,但这里无法确认。
Agent 技能:减少探索往返
项目还提供了一个 Agent Skill,可以通过 Vercel 的 Skills CLI 安装:npx skills add mufeedvh/code2prompt。这个技能教会 agent 先用 sem-core 生成一个紧凑的函数和类地图,再按需读取相关源码和测试文件。它的目的是减少 agent 在仓库里来回探索的轮次。技能安装时会临时克隆仓库以获取 skill 文件夹和模板,但不会安装整个仓库。如果只想给特定 agent 装,比如 Codex,可以加 --agent codex --global 参数。这个设计把 code2prompt 从被动工具变成了 agent 工作流的一部分,但注意 CLI 本身需要单独安装,skill 只负责指导 agent 如何使用它。
局限与替代方案
最明显的局限是 token 估算的近似性。README 明确说估算不会对最终渲染的提示词重新分词,且排除 JSON 输出外壳。如果你的提示词包含大量模板变量或特殊格式,实际 token 数可能与估算有偏差。另一个限制是特殊文件格式的转换依赖内置的读取器,对于未知格式,它可能只是当作纯文本处理。替代方案方面,你可以用 tree-sitter 或简单的 find + grep 脚本自己生成文件清单,再用 cat 拼接,但这会丢失 .gitignore 尊重和 Git 元数据。更接近的替代是 GitHub 的 Copilot 或类似工具,但那些是内嵌在编辑器里的,不提供独立的提示词导出。如果你需要精确的 token 计数,应该使用 tiktoken 之类的专用库,配合 code2prompt 的输出做二次校验。
编辑结论
适合那些频繁把本地代码喂给 ChatGPT、Claude 或自己构建 agent 的开发者,尤其是需要保留 .gitignore 规则和 Git 上下文的人。如果你的工作流依赖精确的 token 数量来管理上下文窗口,code2prompt 的估算方式可能不够,因为它不会对最终渲染的完整提示词重新分词,且估算排除 JSON 输出外壳。若你只需要简单地把文件拼接起来,tree-sitter 或 grep 加脚本可能更轻量。采用前先验证:确认你的代码库中特殊文件格式(如 CSV、Notebook、JSONL)能被正确转换,检查 Handlebars 模板是否符合你的输出结构,并测试 --output-file 与剪贴板集成在目标平台(尤其是 Wayland)上的表现。code2prompt 的定位是上下文工程的前端,不是 token 计数的精确仪器,这个边界决定了它是否适合你。
社区笔记