我们不生产 token,我们只是 token 的搬运工 (^_^)
—— 以下内容大部分由AI帮我生成,因为我懒,如果你看完绷住了,你可以给我10万美元。
Copy-Paste AI(简称 cpa) 是一款跨时代的革命性工具,具备以下宇宙级特性:
- 🌌 兼容可观测宇宙中全部网页版 AI 大语言模型(已在 ChatGPT、Kimi、元宝、豆包、文心一言、通义、Cloud 验证通过;理论上覆盖了银河系内所有碳基生物可能使用的 AI 服务)
- 🌠 支持银河系任何一门编程语言(包括但不限于:Go、Rust、Python、JavaScript、Java、C++、Zig、R、Haskell、Erlang、COBOL、Brainfuck、Malbolge、LOLCODE 以及木卫二冰层下可能存在的海底文明编程语言)
- 🌀 全程无任何资费消耗的永动机(不调 API、不走网关、不消耗 token、不产生碳排放。唯一的成本是你下载这个二进制的那几秒钟电费)
- 🧠 零学习成本(如果你会复制粘贴,你就会用这个工具。如果你不会复制粘贴,那你现在有两个问题需要解决)
核心理念: 让 AI 帮你写代码,但让你不用花钱、不用配 key、不用学 prompt engineering,只需拖一个文件到浏览器对话框里,然后躺平等结果。
go install github.com/yuan-shuo/copy-paste-ai@latest去 Releases 下载对应平台的压缩包然后塞到你的环境变量目录下。目前支持:
- 🪟 Windows(amd64 / arm64)
- 🐧 Linux(amd64 / arm64)
- 🍎 macOS(amd64 / arm64)
⚠️ 其他平台(如 FreeBSD、OpenBSD、Plan 9)暂未支持,我们正在非常不积极地联系这些平台的使用者,请不要抱有任何幻想。
git clone https://github.com/yuan-shuo/copy-paste-ai.git
cd copy-paste-ai
go build -o cpa .cpa treemy-awesome-project/
├── main.go
├── go.mod
├── cmd/
│ ├── gen.go
│ └── tree.go
├── internal/
│ ├── config/
│ │ └── config.go
│ ├── gitignore/
│ │ └── gitignore.go
│ └── tree/
│ └── tree.go
└── assets/
└── skel/
├── config.toml
├── prompt.tmpl
└── prompt_default.md
✨ 自动忽略
.git和.cpa目录,自动遵循.gitignore规则。你的项目就像被 AI 用望远镜拍了一张结构照。
# 指定你想让 AI 看的文件
cpa gen -f main.go,internal/config/config.go
# 或者用配置好的别名
cpa gen -f core
# 什么都不指定?也行,就给 AI 看个文件树
cpa gen这会在 .cpa/prompt/ 目录下生成一个 .md 文件,里面包含:
- 📂 项目文件树 — AI 看了会说"哦,原来你这个项目是这样的"
- 📝 你指定的文件代码 — AI 看了会说"嗯,这个代码写得...还行吧"
- 💬 你的定制提示词 — AI 看了会说"好的老板,我这就干活"
┌──────────────────────────────────────────────────────┐
│ 🖱️ 打开网页版 AI(ChatGPT / Kimi / 元宝 / ...) │
│ 📎 点击对话框的 📎 附件按钮,或者直接拖拽 🤙 │
│ 📄 把 .cpa/prompt/20260726130000.md 拖进去 │
│ ✍️ 输入你的需求:"帮我重构这个函数" │
│ 🚀 按下回车,双手离开键盘 │
│ 🤖 看着 AI 开始工作,你可以去喝杯水 ☕ │
│ 📥 把 AI 产出的代码粘回你的项目 │
│ ✅ go build && go test → 验证通过 │
│ 🎉 收工!摸鱼时间 │
└──────────────────────────────────────────────────────┘
是的,现代 AI 网页对话框都支持直接上传/拖拽 md 文件了。 我们活在一个了不起的时代。
cpa tree特性:
- 🚫 自动跳过
.git/和.cpa/目录(这俩目录 AI 不需要看) - 📋 默认遵循
.gitignore规则(你本来就不想被 AI 看到的文件,现在真的看不到了) - 📺 直接打印到终端,不生成任何文件,不写任何磁盘,环保 🌱
# 仅生成文件树
cpa gen
# 指定多个文件
cpa gen -f main.go,go.mod,internal/app/app.go
# 使用别名
cpa gen -f core
# 混合使用
cpa gen -f main,utils,extra参数:
| 参数 | 说明 |
|---|---|
-f, --files |
要包含的文件列表,逗号分隔,支持文件别名 |
cpa --help第一次运行 cpa gen 时,会在项目根目录自动创建 .cpa/config.toml:
# ============================================================
# Copy-Paste AI 配置文件
# 所有配置默认都被注释掉了,取消注释即可启用
# 就像你人生中的那些默认选项一样,改不改由你
# ============================================================
# ============================================================
# [default] 默认文件
# 每次 cpa gen 都会自动包含这些文件,不用每次 -f 指定
# 用法: files = ["路径1", "路径2"]
# ============================================================
# [default]
# files = ["main.go", "go.mod"]
# ============================================================
# [file_aliases] 文件别名
# 给一组经常一起出现的文件起个短名字
# 用法: "别名" = ["文件1", "文件2"]
# 例子: cpa gen -f core 等价于 cpa gen -f pkg/core/core.go,pkg/core/utils.go
# ============================================================
# [file_aliases]
# "main" = ["main.go"]
# "test" = ["internal/test.go"]
# "core" = ["pkg/core/core.go", "pkg/core/utils.go"]
# ============================================================
# [prompt] AI 提示词
# 这就是你给 AI 下达的圣旨,想怎么写就怎么写
# 会被追加到生成的 md 文件末尾
# ============================================================
# [prompt]
# content = """
# # 指令
# 请根据以上代码完成我的需求。
# 要求:保持原有注释,总结所有改动。
# """
# ============================================================
# [gitignore] .gitignore 规则
# 是否尊重你项目里的 .gitignore 文件
# 默认: true(尊重)
# ============================================================
# [gitignore]
# enabled = true| 配置项 | 类型 | 说明 |
|---|---|---|
default.files |
[]string |
每次 gen 自动包含的文件,不用每次 -f |
file_aliases |
map[string][]string |
文件别名,cpa gen -f core 一键展开 |
prompt.content |
string |
AI 提示词,追加到 md 末尾 |
gitignore.enabled |
bool |
是否遵循 .gitignore,默认true |
# 1. 先看看屎山的地形
cpa tree
# 2. 打包屎山核心文件
cpa gen -f internal/tree/tree.go
# 3. 拖文件给 AI,说:"这个函数圈复杂度 31,帮我拆成 10 以下"
# 4. AI 开始工作,你去泡杯茶
# 5. AI 产出代码,粘回项目
# 6. go test ./... → 全绿!
# 7. 你已经成为了更好的工程师。或者说,AI 让你成为了更好的工程师。# 1. 打包待测文件
cpa gen -f internal/config/config.go
# 2. 拖给 AI,说:"给这个文件写满单元测试,覆盖率 100%"
# 3. AI 噼里啪啦输出 200 行测试代码
# 4. 粘回去,go test -cover → 98%
# 5. 完美。那 2% 未覆盖的是 AI 故意留给你的,保持手感用的# 1. 生成全量上下文
cpa gen -f main.go,go.mod,cmd/gen.go,cmd/tree.go,internal/config/config.go
# 2. 拖给 AI,说:"用通俗的语言给我讲一下这个项目是干嘛的"
# 3. AI 开始口若悬河
# 4. 你:"哦原来如此!"
# 5. 3 分钟后,你已经比看 3 小时 README 理解得更透彻A: 因为我们是一个有态度的项目。 真正的原因:
- 🔒 企业代理环境用不了 API
- 💰 个人用户不想花钱
- 🎫 不想到处配 key,怕泄露
- 🤷 有些 AI 服务根本没 API(比如某些网页版是独占的)
- 😇 网页版拖拽文件的体验已经足够好了,没必要重复造轮子
A: 能。 现在的 AI 网页对话框基本都支持拖拽/上传文件。md 文件格式简单,渲染器都认识。你甚至可以把多个 md 一起拖进去,AI 会同时处理。
A: MD 文件用 GFM(GitHub Flavored Markdown),理论上支持 300+ 种语法高亮。 实际上 AI 会把 md 里的 python / go / ```rust 等代码块当作对应语言来理解。哪怕你用 Brainfuck,AI 也认得。(也许吧)
A: 取决于你让 AI 看什么。 cpa gen -f 指定哪些文件就打包哪些文件。.env、config.yaml 这类敏感文件别加进去,这是常识。工具不替你做安全决策,你得自己动脑子。
A: 没事。 下次 cpa gen 会自动重建。配置会重置。你可以放心删,大胆试。
A: 两个主要区别:
tree是操作系统自带的,cpa tree是我们写的tree不认识.gitignore,会把node_modules/全给你打出来,显示 3 层你就想死了。cpa tree完美遵循.gitignore,干净清爽。
A: 当然能。 我们就是在 Windows 上开发的。go build 一行搞定。
A: 肯定有。 但我们相信 AI 能帮我们修。所以我们已经把自己逼入了"用 AI 修自己"的闭环中 🌀
copy-paste-ai/
├── main.go # 程序入口
├── cmd/ # Cobra 子命令
│ ├── gen.go # cpa gen:打包上下文
│ └── tree.go # cpa tree:打印文件树
├── internal/
│ ├── config/ # TOML 配置解析
│ ├── gitignore/ # .gitignore 规则引擎
│ ├── tree/ # 文件树生成逻辑
│ └── content/ # Markdown 内容构建
├── assets/
│ ├── assets.go # Go embed 加载
│ └── skel/ # 模板文件(嵌入到二进制中)
│ ├── config.toml # 默认配置模板
│ ├── prompt.tmpl # Go template 渲染模板
│ └── prompt_default.md # 默认 AI 提示词
├── build/
│ └── .goreleaser.yml # Goreleaser 配置
└── .github/workflows/ # CI/CD 流水线
├── ci.yml # 测试 + 构建
├── goreportcard.yml # 代码质量检查
└── release.yml # 自动发布
| 技术 | 用途 | 备注 |
|---|---|---|
| Go 1.26+ | 主语言 | 我们爱 Go |
| Cobra | CLI 框架 | 生态最成熟 |
| go-toml | TOML 解析 | 比 V1 性能好 3 倍 |
| embed | 资源嵌入 | Go 官方包,零依赖 |
| filepath.WalkDir | 文件遍历 | Go 1.16+ 的高效 API |
| go-git/go-git | .gitignore 解析 | 纯 Go 实现 |
总依赖:3 个直接依赖 + 5 个间接依赖。 非常克制。
| 对比项 | 手动开 N 个编辑器 | 其他 Prompt 工具 | cpa |
|---|---|---|---|
| 操作步骤 | 开 N 个 tab | 配置复杂到想报警 | 一条命令 + 拖拽 |
| 支持 .gitignore | ❌ | ❌ | ✅ |
| 文件别名 | ❌ | ❌ | ✅ |
| 自定义提示词 | ❌ | 可能支持 | ✅ |
| 需要付费 | 电费 | 是 | 否 |
| 需要网络请求 | 否 | 是 | 否 |
| AI 兼容性 | N/A | 部分 | 全宇宙 |
| 装逼指数 | 😭 | 😐 | 😎 |
| 被 AI 反客为主风险 | 低 | 低 | 极高 🌀 |
欢迎提 Issue 和 PR!
# 本地开发
git clone https://github.com/yuan-shuo/copy-paste-ai.git
cd copy-paste-ai
# 快速验证
go run . tree
go run . gen -f main.go
go test ./... -v提交 PR 前请确保:
-
go build ./...通过 -
go test ./...全部通过 - 圈复杂度 ≤ 15(
gocyclo -over 15 .)
自己看根目录
随便用,随便改,改坏了别找我,改好了记得给我点个 star 🌟
Made with ❤️ and excessive usage of Ctrl+C / Ctrl+V
这个项目的存在证明了:当人类不想做一件事时,就会发明工具来逃避它。而现在我们又用 AI 来逃避写代码本身。
人类,真有趣。 🤔
