多代理开发流程共享进程层

persistproc 是一个用于多代理开发工作流的共享进程层,允许代理和人类查看和控制长时间运行的进程,如Web服务器,旨在减少编码时复制粘贴的需求,并支持多种工具。

  • by irskep
  • Python
  • 本地部署
  • 8 星标
  • 更新于
在 GitHub 查看 irskep/persistproc-mcp

使用说明

持久程序

多代理开发工作流的共享过程层


完整文档: 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<br/>(web server)"]
    PP -.->|"streams output"| User
    
    Agent[Cursor] -.->|"output()<br/>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中使用终端。工程师有许多不同的工作流程。
  2. 仅 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<br/>diagnose issues"| PP
    Agent2[Cursor] -.->|"read logs<br/>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。或者,你可以跟随 GitHub上的此问题.

目前,当您希望代理能够 管理 进程,而不是 看看他们的输出。

可用工具

persistproc 暴露标准 模型上下文协议(MCP) 服务器上 http://127.0.0.1:8947。您可以使用任何兼容MCP的客户端以编程方式与其交互。

服务器公开了以下工具:

工具 说明
ctrl 统一进程控制:启动、停止或重新启动进程。
list 列出所有托管进程及其状态。可以选择按pid、命令或工作目录进行过滤,并提供日志路径。
output 从进程中检索捕获的输出。

此列表有意缩短,因为LLM在使用太多工具时表现较差,以至于一些IDE(如Cursor)对可以使用的工具数量有限制。

入门

1.安装 persistproc

pip install persistproc

2.启动服务器并配置代理

在专用终端中运行此程序并保持其运行。

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许可证获得许可。