打开网易新闻 查看精彩图片

大多数开发者在部署第5个AI代理时都会撞上同一堵墙。Claude Code在终端窗口里重写后端服务,Codex在另一个窗口生成测试用例,Cursor正在改组件,还有三个标签页你早就忘了检查。没人知道别人在干什么,成本蹭蹭涨,两个代理重复干同一块活儿,某个代理跑了6小时一无所获——因为根本没人给它定过清晰目标。

Paperclip就是来修这个的。这是一个开源协调平台,把你手里散落的AI代理整编成一家"正规公司":组织架构图、明确分工、任务管理、预算上限、审计日志,该有的都有。GitHub上35,000+星,用时不到三周。这个数字本身就在说话——多少开发者被同样的 frustration(挫败感)折磨过。

这篇文章讲清楚怎么搭起来、怎么搭你的第一家"代理公司"、怎么让它真的跑起来,而不是让你盯着六个终端窗口当监工。

它到底是什么:不是造轮子,是当管家

它到底是什么:不是造轮子,是当管家

装之前得先明白Paperclip的定位。它不是代理本身,不替代你的AI供应商,也不给你加个聊天界面。它是代理的协调层——组织它们、跟踪进度、控制预算、同步公司级目标上下文。

支持清单:Claude Code、OpenAI Codex、Cursor、Gemini CLI,以及任何支持webhook或heartbeat的代理。你自己把代理接进来,Paperclip负责管公司。

如果你只是偶尔用一个代理,别折腾这个。如果你同时在跑多个代理,它是基础设施级别的工具。

环境要求极简:Node.js 20+、pnpm 9.15+。不用外接数据库,内置PostgreSQL。

一行命令起步:

npx paperclipai onboard --yes

这条命令拉下CLI、跑完默认配置、在3100端口启动服务。浏览器开 http://127.0.0.1:3100 进控制台。

想改代码或贡献:

git clone https://github.com/paperclipai/paperclip.git

cd paperclip

pnpm install

pnpm dev

Docker路线:

docker compose -f docker-compose.quickstart.yml up --build

本地文件结构长这样:

~/.paperclip/instances/default/

config.json — 服务器和存储配置

db/ — PostgreSQL数据文件

secrets/master.key — 加密密钥

logs/ — 服务器日志

data/storage/ — 文件附件

workspaces// — 每个代理的工作目录

本地模式用 local_trusted 认证,不用注册账号直接进控制台

自检命令:

paperclipai doctor

自动修复:

paperclipai doctor --repair

搭你的第一家"公司"

搭你的第一家"公司"

"公司"是代理、任务、目标、预算的顶层容器。创建命令:

npx paperclipai company create --name "MySoftwareCo"

控制台里能看到公司仪表板,侧边栏有:代理(Agents)、任务(Tasks)、目标(Objectives)、预算(Budgets)、审计(Audit)。

先定目标。目标描述公司要达成什么,代理据此对齐上下文。创建命令:

npx paperclipai objective create \

--company "MySoftwareCo" \

--name "Ship v2 API" \

--description "Rewrite the user service with proper auth and rate limiting"

目标会进系统提示词,每个代理都知道公司在忙什么。

然后设预算。预算是硬性上限,防止代理烧钱失控。创建命令:

npx paperclipai budget create \

--company "MySoftwareCo" \

--name "Monthly API Dev" \

--limit 500.00 \

--currency USD

预算可以按公司、项目或单个代理切分。触及上限时代理自动暂停,等人工批复。

把代理接进组织

把代理接进组织

代理是干活的员工。Paperclip不内置代理,你得把现成的接进来。

Claude Code的接入方式:

终端里启动Claude Code时加环境变量:

export PAPERCLIP_WEBHOOK_URL="http://127.0.0.1:3100/webhook"

export PAPERCLIP_AGENT_ID="claude-backend"

export PAPERCLIP_COMPANY="MySoftwareCo"

claude

Claude Code的每次操作都会同步到Paperclip:执行了什么命令、改了哪些文件、花了多长时间。

Cursor的接入方式:

Cursor不支持直接webhook,用heartbeat模式。启动一个轻量适配器:

npx paperclipai adapter cursor \

--company "MySoftwareCo" \

--agent-id "cursor-frontend" \

--workspace "./frontend"

适配器每30秒扫描一次Cursor的工作区,把文件变更、终端输出、耗时推给Paperclip。

OpenAI Codex的接入方式:

Codex CLI原生支持webhook:

codex --webhook http://127.0.0.1:3100/webhook \

--agent-id "codex-tests" \

--company "MySoftwareCo"

通用webhook格式:

POST /webhook

Content-Type: application/json

"agent_id": "string",

"company": "string",

"event": "task_start|task_complete|file_change|command_run|error",

"data": { ... },

"timestamp": "ISO8601",

"cost": { "input_tokens": n, "output_tokens": n, "usd": n.nnn }

任何能发这个JSON的代理都能接进来。

任务系统:别让代理各自为战

任务系统:别让代理各自为战

没有任务管理,多代理就是 chaos(混乱)。Paperclip的任务系统确保代理知道该干什么、什么时候干、跟谁协作。

创建任务:

npx paperclipai task create \

--company "MySoftwareCo" \

--name "Implement OAuth flow" \

--description "Add Google and GitHub OAuth to the auth service" \

--objective "Ship v2 API" \

--budget "Monthly API Dev" \

--assignee "claude-backend" \

--priority high \

--deadline "2024-01-15T23:59:59Z"

任务进了系统,Claude Code的上下文里会自动出现这个任务描述。它知道优先级、截止日期、花的是哪个预算。

任务状态流转:backlog(待办)→ in_progress(进行中)→ review(审核)→ done(完成)→ archived(归档)。

代理完成任务时推送:

"event": "task_complete",

"data": {

"task_id": "task_123",

"summary": "Implemented OAuth with Passport.js, added tests",

"files_changed": ["auth/oauth.js", "tests/oauth.test.js"],

"cost": { "usd": 12.34 }

控制台里能看到完整时间线,谁干了什么、花了多少、产出是什么。

依赖关系:任务可以互相依赖。A任务完成前B任务不能启动。Paperclip会自动协调代理的执行顺序。

npx paperclipai task link --from task_123 --to task_456 --type blocks

组织架构图:看得见谁在干什么

组织架构图:看得见谁在干什么

代理多了之后,"谁负责什么"会变成谜。Paperclip的组织架构图功能把这个问题可视化。

控制台里打开 Org Chart(组织架构图)标签页,能看到:

• 每个代理的当前状态:空闲/工作中/阻塞/错误

• 正在执行的任务

• 实时成本累计

• 最近活动的时间线

代理按团队分组。你可以创建"后端组"、"前端组"、"测试组",把代理放进去。

npx paperclipai team create \

--company "MySoftwareCo" \

--name "Backend Squad" \

--lead "claude-backend"

npx paperclipai team join \

--team "Backend Squad" \

--agent "codex-tests"

团队有共享的上下文窗口。组内代理能看到彼此的任务状态,减少重复劳动。

实时同步用WebSocket。代理状态变化时,组织架构图自动刷新,不用手动刷新页面。

审计与复盘:钱花哪了、时间去哪了

审计与复盘:钱花哪了、时间去哪了

多代理最大的坑是"不知道钱怎么没的"。Paperclip的审计日志给每个操作留痕。

查询命令:

npx paperclipai audit list \

--company "MySoftwareCo" \

--from "2024-01-01" \

--to "2024-01-31"

输出包括:

• 每次API调用的token数和费用

• 执行的命令和返回码

• 文件变更的diff摘要

• 任务切换的时间点

成本分析:

npx paperclipai budget report \

--company "MySoftwareCo" \

--budget "Monthly API Dev"

报告按代理、按任务、按日期维度拆解。你能看到"cursor-frontend花了$200改CSS"这种细节。

异常检测:系统会自动标记异常模式。比如某个代理连续3小时没有文件输出,或者单次调用花费超过预算的10%。

导出功能:审计日志可以导出为JSON或CSV,进你自己的BI工具。

高级玩法:把Paperclip嵌进你的工作流

高级玩法:把Paperclip嵌进你的工作流

基础跑通之后,可以玩更细的。

CI/CD集成:在GitHub Actions里启动Paperclip,让代理在PR上自动跑。

workflow片段:

- name: Start Paperclip

run: |

npx paperclipai onboard --yes

npx paperclipai company create --name "PR-Review-$(echo ${{ github.sha }} | cut -c1-7)"

npx paperclipai agent register --name "pr-reviewer" --type claude

npx paperclipai task create --name "Review PR" --assignee "pr-reviewer"

- name: Run Review

env:

PAPERCLIP_WEBHOOK_URL: "http://127.0.0.1:3100/webhook"

run: claude --prompt "Review this PR: ${{ github.event.pull_request.html_url }}"

每次PR自动生成一个临时公司,跑完销毁,成本完全隔离。

自定义适配器:如果你的代理不走标准webhook,可以写适配器。Paperclip提供Node.js SDK:

import { PaperclipClient } from '@paperclipai/sdk'

const client = new PaperclipClient({

baseUrl: 'http://127.0.0.1:3100',

company: 'MySoftwareCo'

await client.agent.heartbeat({

agentId: 'my-custom-agent',

status: 'working',

currentTask: 'task_789',

cost: { usd: 0.05 }

插件系统:控制台可以插自定义面板。写一个React组件,打包成umd格式,放进 ~/.paperclip/plugins/,重启后出现在侧边栏。

多公司管理:如果你同时管多个项目,Paperclip支持公司切换。

npx paperclipai company list

npx paperclipai company switch --name "OtherProject"

配置隔离,数据隔离,预算隔离。

踩坑记录:来自早期用户的反馈

踩坑记录:来自早期用户的反馈

GitHub Issues里能看到真实用户的声音。

「heartbeat间隔设太短,日志把磁盘撑爆了。」—— 默认30秒,有人改成5秒,一天写了50GB日志。现在文档里加了警告。

「PostgreSQL在WSL2上性能崩了。」—— Windows用户常见问题,官方推荐用Docker Desktop的WSL2后端,或者直接用Docker Compose。

「代理崩溃后状态卡在'in_progress',阻塞了依赖任务。」—— 加了超时检测,代理30分钟没心跳自动标记为stalled。

「预算警告阈值不能自定义。」—— v0.3.0加了 --threshold 参数,默认80%警告,可改。

「想要Slack通知。」—— 社区插件已经有了,webhook推给Slack Incoming Webhook。

版本节奏:每周发minor版本,breaking change进major。v1.0之前API可能变,锁版本建议用 exact version。

路线图公开:GitHub Projects里能看到。Q1重点是多租户支持(团队版),Q2是云端托管选项。

它不能做什么:边界意识

它不能做什么:边界意识

讲清楚限制,避免期待错位。

Paperclip不执行代码。它只协调代理,代码执行在代理自己的环境里。如果代理在沙箱里跑,Paperclip管不了沙箱内部。

不解决代理能力问题。如果Claude Code看不懂你的代码库,Paperclip帮不了。它只是让多个"看不懂的代理"不要互相干扰。

不替代版本控制。代理改的文件还是要进git。Paperclip跟踪文件变更,但真正的版本管理靠Git。

不做自动故障恢复。代理崩了它会标记状态,但不会自动重启。你得自己配supervisor或者systemd。

不保证安全。本地模式的 local_trusted 认证假设你信任本机用户。多用户场景要配OIDC或LDAP,文档里有指引但不算一键开箱。

成本跟踪是尽力而为。代理报的cost依赖供应商API返回,有些调用(比如本地模型)可能没有费用数据,会显示为$0。

一个用户在公司仪表板的截图里评论:「终于能看到钱去哪了,之前每个月AI账单像黑箱。」这条反馈被团队置顶在README里。