代理式编程值得拥有的不仅仅是一个嵌入 VS Code 的聊天框。
Agentic coding deserves more than a chat box bolted onto VS Code

原始链接: https://github.com/evanklem/polypore

Polypore 是一款以智能体为核心的开源(MIT 协议)桌面 IDE,基于 Tauri 2 和 React 构建。与传统代码编辑器不同,它完全围绕智能体工作流进行架构设计,采用高度模块化、可停靠的 UI,其中每个面板都是一个沙盒化的 iframe。 核心功能包括: * **智能体内核:** 专为作为主要用户的 AI 智能体而设计,内置记忆系统、调试工具和一个强大的 MCP 服务器。 * **可扩展性:** 开发者可以通过 SDK 创建自定义面板。第三方插件使用与内置工具相同的 HostRpcServer 契约。 * **安全执行:** 智能体通过 22 种以上的专用工具控制 IDE。一套安全的密钥处理系统可确保智能体在执行认证任务时无需查看明文凭据,凭据将保留在操作系统钥匙串中进行隔离。 * **工作流自动化:** 包含 15 个斜杠命令(Polyflow),涵盖从头脑风暴、TDD 到架构改进和 QA 的整个软件开发生命周期。 Polypore 不受语言和操作系统限制,提供了一个灵活且高性能的环境,允许在不影响核心的情况下对组件进行更换或扩展。目前适用于 Linux、macOS 和 Windows。

Hacker News 最新 | 往日 | 评论 | 提问 | 展示 | 招聘 | 提交 登录 Agentic coding 值得拥有的不仅仅是安装在 VS Code 上的聊天框 (github.com/evanklem) 17 点 由 evanklem2004 发布于 1 小时前 | 隐藏 | 往日 | 收藏 | 4 条评论 帮助 blitzar 5 分钟前 | 下一条 [-] 如果有人给我 600 亿美元让我把聊天框塞进 VS Code,我很乐意去做。 回复 grim_io 18 分钟前 | 上一条 | 下一条 [-] 这可能是我见过最奇怪的产品视频剪辑决定之一。 回复 evanjrowley 13 分钟前 | 父评论 | 下一条 [-] 曾经有过比这音乐更好的 IDE 演示视频吗? 回复 antonvs 9 分钟前 | 上一条 | 下一条 [-] > Agentic coding 值得拥有的不仅仅是安装在 VS Code 上的聊天框 所以,那是 Antigravity 2.0 吗? 回复 指南 | 常见问题 | 列表 | API | 安全 | 法律 | 申请加入 YC | 联系 搜索:
相关文章

原文

Agentic desktop IDE. Language agnostic, OS agnostic. Every surface is a dockable panel: split, reorder, close what you don't need. The built-in panels cover most workflows. If they don't, the SDK is there.

Tauri 2 · React 18 · Dockview · Monaco · MIT · no telemetry


polyporedemo1080.mp4

Download the build for your platform from the latest release. Polypore updates itself after the first install.

Platform File
Linux .AppImage (any distro), .deb (Debian/Ubuntu), .rpm (Fedora/RHEL)
macOS .dmg (Apple Silicon or Intel)
Windows _x64_en-US.msi or _x64-setup.exe

On Linux the AppImage needs FUSE (fuse2 on Arch). Mark it executable and run it:

chmod +x Polypore_*_amd64.AppImage
./Polypore_*_amd64.AppImage

To build from source instead, see Getting started below.


The agentic tooling space moves fast. The right models, CLIs, and orchestration patterns shift faster than a typical IDE's release cycle. Polypore is structured to keep up. Every surface is a sandboxed panel behind a shared contract. Any piece of the IDE can be swapped, extended, or dropped without touching the core.

This is not a code editor with an agent panel added later. The layout, the memory system, the debug tooling, and the MCP server are all designed around the agent as the primary actor.


Eight panels are available from the + tab button:

Panel What it does
claude Claude CLI terminal with slash-command quick-launch
codex Codex CLI terminal with slash-command quick-launch
preview Live runtime output: browser, CLI, or any dev server
editor Monaco editor with per-project diagnostics
diff-stack Side-by-side diff and scrubbable history feed
terminal Standalone pty terminal
debug Verify runs and diagnostics
memory Project knowledge base with [[wikilinks]] and context inventory
agent Formation canvas, skills, MCP management, and secrets

Third-party panels are sandboxed iframes using the same HostRpcServer contract as the built-ins. Write a plugin in any framework, drop it in .polypore/plugins/<id>/, and it appears in the panel strip. Agents can drive it through the MCP server the same way they drive built-in panels.


A Node MCP sidecar ships with Polypore. Claude Code picks it up from .mcp.json automatically. Gives agents direct IDE control through 22+ tools:

Namespace What agents can do
polypore.debug.* Start sessions, set breakpoints, step, capture console/DOM/network
polypore.memory.* Read/write the knowledge base, link entries, write handoff documents
polypore.verify.* Declare and run verification suites
polypore.tasks.* Create and update tasks visible in the IDE in real time
polypore.phase.* Report workflow phase to the live UI
polypore.secrets.* Make mediated HTTP requests without seeing the secret value
polypore.skills.* Read the active skill library
polypore.format.* Trigger formatters in-editor

Secrets live in the OS keyring. When Polypore spawns an agent it strips every registered secret from the environment and replaces it with a POLYPORE_SECRET_HANDLE_<KEY> sentinel. Agents call polypore.secrets.use with an HTTP request; Polypore injects the value and masks it on the way back. The model never sees plaintext.


15 slash commands in packages/polyflow/ covering the full development loop:

/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


Shell Tauri 2, Rust
Renderer React 18, Vite, TypeScript
Panels Dockview
Editor Monaco
Terminal xterm.js, portable-pty
MCP sidecar Node, JSON-RPC
Persistence SQLite via rusqlite
Secrets OS keyring via keyring crate
File watching notify
Contracts JSON Schema, codegen'd into packages/sdk/

Prerequisites: Node 20+, Rust stable (rustup). Linux also needs libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev.

npm ci
cd src-tauri && cargo build && cd ..
npm run app

For renderer-only development (no Tauri bridge):


Command
npm run app Desktop app via Tauri
npm run app:build Production bundle
npm run dev Vite renderer on 127.0.0.1:1420
npm run typecheck Codegen + tsc --noEmit
npm test vitest renderer suite
npm run mcp MCP sidecar against cwd
npm run mcp:smoke JSON-RPC tools/list smoke
npm run mcp:pipeline-smoke End-to-end plugin + skill + secret
cd src-tauri && cargo test Rust tests
cargo clippy --no-deps -- -D warnings Rust lints

┌────────────────────────────────────────────────────────────────────┐
│ Tauri shell (Rust, src-tauri/)                                     │
│  ├─ host_broker (HTTP)    → emits Tauri events to the renderer     │
│  ├─ secret_broker (HTTP)  → OS keyring, never returns plaintext    │
│  ├─ agent runtimes        → stdio adapters per CLI; ACP opt-in     │
│  ├─ pty (portable-pty)    ├─ persistence (rusqlite)                │
│  ├─ snapshotter           ├─ fs_watch (notify)                     │
│  └─ plugin:// protocol    → serves .polypore/plugins/<id>/<asset>  │
├────────────────────────────────────────────────────────────────────┤
│ Renderer (React + Dockview)                                        │
│  ├─ HostRpcServer (packages/host)  shared contract for all plugins │
│  ├─ PolyporeHost loopback          built-in plugins use this       │
│  ├─ PluginLoader                   3rd-party iframes use this      │
│  └─ built-in panels (plugins/)                                     │
├────────────────────────────────────────────────────────────────────┤
│ polypore-ide MCP sidecar (Node, packages/mcp-server/)              │
│  ├─ 22+ tools → host_broker for live state changes                 │
│  └─ secrets.* → secret_broker, value never returned to agent       │
└────────────────────────────────────────────────────────────────────┘

Contracts live in schemas/ and codegen into packages/sdk/src/types.gen.ts and packages/sdk/src/validators.gen.ts. Run npm run codegen after editing a schema.


POLYPORE_PROJECT_ROOT Override cwd as the workspace root
POLYPORE_ENABLE_ACP=1 Opt into the ACP adapter
POLYPORE_CONFIG_DIR Secrets metadata location (default ~/.config/polypore)
POLYPORE_UPDATE_ENDPOINT Override the auto-updater endpoint

See CONTRIBUTING.md.

MIT

联系我们 contact @ memedata.com