智能体编码,不应只是VS Code上附带的聊天框
摘要
Polypore 是一个开源的智能体桌面IDE,具有可停靠面板、内置MCP服务器和扩展SDK,专为智能体驱动的开发而设计。
查看缓存全文
缓存时间: 2026/06/17 17:42
evanklem/polypore 来源:https://github.com/evanklem/polypore
Polypore 智能体桌面 IDE
语言无关,操作系统无关。每个表面都是可停靠的面板:拆分、重新排序、关闭不需要的。内置面板覆盖大多数工作流。如果不够,还有 SDK。
Tauri 2 · React 18 · Dockview · Monaco · MIT · 无遥测
演示
https://github.com/user-attachments/assets/a3961bf3-46cd-4168-8e12-9acfcb2bf6b7
安装
从最新发布版下载对应平台的构建包(https://github.com/evanklem/polypore/releases/latest)。首次安装后 Polypore 会自动更新。
| 平台 | 文件 |
|---|---|
| Linux | .AppImage(任何发行版)、.deb(Debian/Ubuntu)、.rpm(Fedora/RHEL) |
| macOS | .dmg(Apple Silicon 或 Intel) |
| Windows | _x64_en-US.msi 或 _x64-setup.exe |
在 Linux 上,AppImage 需要 FUSE(Arch 上为 fuse2)。赋予执行权限并运行:
chmod +x Polypore_*_amd64.AppImage
./Polypore_*_amd64.AppImage
如果希望从源码构建,请参见下方的入门。
理念
智能体工具领域变化极快。合适的模型、CLI 和编排模式变化速度远超典型 IDE 的发布周期。Polypore 的结构设计就是为了跟上节奏。
每个表面都是一个沙盒化的面板,背后是共享契约。IDE 的任何部分都可以在不触及核心的情况下进行替换、扩展或移除。
这不是一个后来加上智能体面板的代码编辑器。布局、内存系统、调试工具和 MCP 服务器都围绕智能体作为主要参与者而设计。
面板
从 + 标签按钮可以访问八个面板:
| 面板 | 功能 |
|---|---|
| claude | Claude CLI 终端,支持斜杠命令快速启动 |
| codex | Codex CLI 终端,支持斜杠命令快速启动 |
| preview | 实时运行输出:浏览器、CLI 或任何开发服务器 |
| editor | Monaco 编辑器,包含按项目的诊断信息 |
| diff-stack | 并排对比与可回溯的历史记录源 |
| terminal | 独立 pty 终端 |
| debug | 验证运行和诊断信息 |
| memory | 项目知识库,支持 [[wikilinks]] 和上下文清单 |
| agent | 编排画布、技能、MCP 管理和密钥 |
SDK 与插件
第三方面板是沙盒化的 iframe,使用与内置面板相同的 HostRpcServer 契约。用任何框架编写插件,放入 .polypore/plugins/<plugin-name>/,它就会出现在面板条中。智能体可以通过 MCP 服务器像驱动内置面板一样驱动它。
polypore-ide MCP 服务器
Polypore 附带一个 Node MCP sidecar。Claude Code 会自动从 .mcp.json 中拾取它。通过 22+ 个工具为智能体提供 IDE 直接控制:
| 命名空间 | 智能体可以做什么 |
|---|---|
polypore.debug.* | 启动会话、设置断点、单步执行、捕获 console/DOM/network |
polypore.memory.* | 读写知识库、链接条目、编写交接文档 |
polypore.verify.* | 声明并运行验证套件 |
polypore.tasks.* | 创建和更新任务,IDE 中实时可见 |
polypore.phase.* | 向实时 UI 报告工作流阶段 |
polypore.secrets.* | 在看不到密钥值的情况下发起中介 HTTP 请求 |
polypore.skills.* | 读取当前技能库 |
polypore.format.* | 在编辑器中触发格式化器 |
密钥代理
密钥存储在操作系统钥匙串中。当 Polypore 启动智能体时,它会从环境中剥离所有已注册的密钥,并替换为 POLYPORE_SECRET_HANDLE_ 哨兵。智能体使用 HTTP 请求调用 polypore.secrets.use;Polypore 注入值并在返回时屏蔽它。模型永远不会看到明文。
Polyflow 技能
packages/polyflow/ 中有 15 个斜杠命令,覆盖完整的开发循环:
/polyflow
/polyflow-go
/polyflow-brainstorming
/polyflow-writing-plans
/polyflow-executing-plans
/polyflow-tdd
/polyflow-iterate
/polyflow-debug
/polyflow-review
/polyflow-design-interface
/polyflow-prd
/polyflow-improve-architecture
/polyflow-qa
/polyflow-glossary
/polyflow-compact
技术栈
| 外壳 | Tauri 2, Rust |
| 渲染器 | React 18, Vite, TypeScript |
| 面板 | Dockview |
| 编辑器 | Monaco |
| 终端 | xterm.js, portable-pty |
| MCP sidecar | Node, JSON-RPC |
| 持久化 | SQLite via rusqlite |
| 密钥 | OS keyring via keyring crate |
| 文件监听 | notify |
| 契约 | JSON Schema,代码生成到 packages/sdk/ |
入门
前置条件: Node 20+, Rust stable (rustup (https://rustup.rs))。Linux 还需要 libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev。
npm ci
cd src-tauri && cargo build && cd ..
npm run app
仅开发渲染器(无 Tauri 桥接):
npm run dev
脚本
| 命令 | |
|---|---|
npm run app | 通过 Tauri 运行桌面应用 |
npm run app:build | 生产构建包 |
npm run dev | Vite 渲染器运行在 127.0.0.1:1420 |
npm run typecheck | 代码生成 + tsc --noEmit |
npm test | vitest 渲染器测试套件 |
npm run mcp | 针对当前工作目录的 MCP sidecar |
npm run mcp:smoke | JSON-RPC tools/list 冒烟测试 |
npm run mcp:pipeline-smoke | 端到端插件 + 技能 + 密钥 |
cd src-tauri && cargo test | Rust 测试 |
cargo clippy --no-deps -- -D warnings | Rust lint |
架构
┌────────────────────────────────────────────────────────────────────┐
│ Tauri 外壳 (Rust, src-tauri/) │
│ ├─ host_broker (HTTP) → 向渲染器发送 Tauri 事件 │
│ ├─ secret_broker (HTTP) → 操作系统钥匙串,绝不返回明文 │
│ ├─ agent runtimes → 每 CLI 的 stdio 适配器;ACP opt-in │
│ ├─ pty (portable-pty) │
│ ├─ persistence (rusqlite) │
│ ├─ snapshotter │
│ ├─ fs_watch (notify) │
│ └─ plugin:// 协议 → 提供 .polypore/plugins/<name>/ 的内容 │
├────────────────────────────────────────────────────────────────────┤
│ 渲染器 (React + Dockview) │
│ ├─ HostRpcServer (packages/host) 所有插件的共享契约 │
│ ├─ PolyporeHost 回环,内置插件使用此契约 │
│ ├─ PluginLoader 第三方 iframe 使用此契约 │
│ └─ 内置面板 (plugins/) │
├────────────────────────────────────────────────────────────────────┤
│ polypore-ide MCP sidecar (Node, packages/mcp-server/) │
│ ├─ 22+ 工具 → host_broker 用于实时状态变更 │
│ └─ secrets.* → secret_broker,值从不返回给智能体 │
└────────────────────────────────────────────────────────────────────┘
契约位于 schemas/ 并代码生成到 packages/sdk/src/types.gen.ts 和 packages/sdk/src/validators.gen.ts。编辑架构后运行 npm run codegen。
环境变量
POLYPORE_PROJECT_ROOT | 覆盖工作目录作为工作区根目录 |
POLYPORE_ENABLE_ACP=1 | 选择加入 ACP 适配器 |
POLYPORE_CONFIG_DIR | 密钥元数据位置(默认 ~/.config/polypore) |
POLYPORE_UPDATE_ENDPOINT | 覆盖自动更新端点 |
贡献
参见 CONTRIBUTING.md。
许可证
相似文章
@pierceboggan:VS Code已被数百万开发者用于智能体编程。然而,编辑器布局传统上一直……
VS Code 引入了新的'Agents'功能,允许开发者跨多个项目与多个智能体协作,将其能力扩展到单一任务工作流之外。
@PratikKadam_: VS Code 中的新代理窗口
VS Code 正在引入一个新的代理窗口,很可能是一个面向开发者的AI驱动助手。
最喜欢的代理式编码工具
作者比较了几种代理式编码工具(Codex CLI、Claude Code、Gemini CLI、OpenCode、Pi),认为Pi最精简且最适合本地模型,赞赏其简洁性以及与Qwen 27B-MXFP8的兼容性。
我构建了一个开源编码代理,让上下文可见且可编辑 — 你可以精确策划大语言模型所看到的内容
作者构建了 Nice Coding Agent,这是一个开源编码工作台,具有可见且可编辑的上下文堆栈,允许用户精确策划大语言模型所看到的内容。它具备本地优先检索、沙盒执行和混合代码搜索功能,旨在让开发者对上下文组装拥有控制和可见性。
Show HN: Y – 一个基于Electron的可塑编码代理桌面应用
Y是一个可塑的、以聊天为先的桌面应用,能够并行运行像Claude Code和Codex这样的本地编码代理,并具备自我修改的UI功能。