持久程序
多代理开发工作流的共享过程层
](https://badge.fury.io/py/persistproc)  
______________________________________________________________________
完整文档: stevesleep.com/persistproc.
是什么 persistproc?
Persistproc是一个MCP服务器和命令行工具,它让代理和人类看到和控制像web服务器这样的长时间运行的进程。目标是减少使用AI编码时需要进行的复制和粘贴量,使您更容易使用多个代理,并且与工具无关。
没有配置文件。进程完全在运行时进行管理。这不是supervisord的替代品。
示例用例:基本web开发
假设你正在开发一个待办事项列表应用程序,它有一个你通常开始使用的开发服务器 npm run dev。此服务器监视您的代码是否有更改,对其进行类型检查、lints操作,并热重新加载页面。当出现错误时,它会将错误打印到您的终端。
如果你正在使用Cursor或Claude Code等LLM代理,如果你看到错误,你可能会将其从终端复制/粘贴到代理,并询问如何修复。然后代理可能会进行一些更改,也许你遇到了另一个错误,所以你再次复制/粘贴,代理会进行另一个更改…等等。
如果代理可以直接看到变化,你就不需要做任何事情!有了persistproc,这是可能的。而不是说 npm run dev,说 persistproc npm run dev,代理可以立即读取其输出,甚至重新启动它。否则,您仍然可以在原始终端中看到它的输出,并像往常一样用Ctrl+C杀死它。
graph TB
User[User] -->|"persistproc npm run dev"| PP[persistproc server]
PP |"manages / logs"| NPM["npm run dev
(web server)"]
PP -.->|"streams output"| User
Agent[Cursor] -.->|"output()
restart()"| PP
style PP fill:#e1f5fe,stroke:#01579b,stroke-width:2px
style NPM fill:#fff3e0,stroke:#e65100,stroke-width:2px
style User fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
style Agent fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px\[!注意\] 为什么不直接使用Cursor,让代理打开一个终端呢? 1. 不是每个人都喜欢在Cursor/VCode中使用终端。工程师有许多不同的工作流程。 1. _仅_ Cursor的代理可以看到进程,而不是Claude Code、Gemini CLI等。
示例用例:复杂web开发
假设你需要运行四个进程才能让你的web应用程序在本地运行。也许是API、前端服务器、SCSS构建器和Postgres。每个服务都会发出自己的日志。
如果在本地测试时遇到错误,可以读取所有四个日志文件以找出发生了什么。
但是,如果您使用persistproc启动这些进程,那么代理可以一次读取所有内容,并可能为您提供更快的诊断。
graph TB
User[User] -->|"starts processes"| PP[persistproc server]
subgraph processes["Managed Processes"]
API[API Server]
FE[Frontend Server]
SCSS[SCSS Builder]
DB[Postgres]
end
PP |"manages / logs"| processes
Agent1[Claude Code] -.->|"read logs
diagnose issues"| PP
Agent2[Cursor] -.->|"read logs
diagnose issues"| PP
style PP fill:#e1f5fe,stroke:#01579b,stroke-width:2px
style API fill:#fff3e0,stroke:#e65100,stroke-width:2px
style FE fill:#fff3e0,stroke:#e65100,stroke-width:2px
style SCSS fill:#fff3e0,stroke:#e65100,stroke-width:2px
style DB fill:#fff3e0,stroke:#e65100,stroke-width:2px
style User fill:#f3e5f5,stroke:#4a148c,stroke-width:2px
style Agent1 fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
style Agent2 fill:#e8f5e9,stroke:#1b5e20,stroke-width:2px
style processes fill:#f5f5f5,stroke:#999,stroke-width:1px,stroke-dasharray: 5 5\[!注意\] 如果我的进程由另一个系统启动怎么办? 那么,最好的办法是将日志文件写入可预测的位置,并告诉代理它们的位置, 而不是尝试使用persistproc。或者,你可以跟随 . 目前,当您希望代理能够 _管理_ 进程,而不是 看看他们的输出。
可用工具
persistproc 暴露标准 模型上下文协议(MCP) 服务器上 http://127.0.0.1:8947。您可以使用任何兼容MCP的客户端以编程方式与其交互。
服务器公开了以下工具:
| 工具 | 说明 |
|---|---|
| ctrl | 统一进程控制:启动、停止或重新启动进程。 |
| list | 列出所有托管进程及其状态。可以选择按pid、命令或工作目录进行过滤,并提供日志路径。 |
| output | 从进程中检索捕获的输出。 |
此列表有意缩短,因为LLM在使用太多工具时表现较差,以至于一些IDE(如Cursor)对可以使用的工具数量有限制。
入门
1.安装 persistproc
pip install persistproc2.启动服务器并配置代理
在专用终端中运行此程序并保持其运行。
persistproc serve第一件事 persistproc serve 输出是各种代理的配置说明,如果还没有,请按照这些说明进行操作。
3.启动流程
在另一个终端中, cd 转到项目的目录,然后通过以下方式运行命令 persistproc.
# Example: starting a Node.js development server
cd /path/to/your/project
persistproc npm run dev命令被发送到服务器,其输出被流式传输到您的终端。您可以安全地关闭此终端,进程将继续运行。
\[!提示\] 或者,只需让您的代理“使用persistproc运行您的开发服务器”,它可能会通过查看您的package.json文件并使用运行它persistproc.
有了这个,您的代理现在可以使用可用的工具来管理您的开发环境。
代理交互示例
一旦您的代理连接,您就可以要求它管理您的流程。假设您已经启动了一个web服务器 persistproc npm run dev (PID 12345),您现在可以与它进行交互。
- 你:“列出正在运行的进程。”
- 代理:通话 list() 并向您展示跑步过程 npm run dev 过程。
- 你:“web服务器似乎卡住了。你能重新启动它吗?”
- 代理:确定正确的流程和呼叫 ctrl(action="restart", pid=12345).
- 你:“显示web服务器的任何错误。”
- 代理:通话 output(pid=12345, stream="stderr") 检索最新的错误日志。
发展
在完全配置的virtualenv中运行persistproc ./pp.运行其他命令,例如 pytest 在virtualenv中 uv run.
许可证
该项目根据MIT许可证获得许可。
