Agentic coding deserves more than a chat box bolted onto VS Code

Hacker News Top Products

Summary

Polypore is an open-source agentic desktop IDE with dockable panels, built-in MCP server, and SDK for extensions, designed for agent-driven development.

No content available
Original Article
View Cached Full Text

Cached at: 06/17/26, 05:42 PM

evanklem/polypore

Source: https://github.com/evanklem/polypore

Polypore

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


Demo

https://github.com/user-attachments/assets/a3961bf3-46cd-4168-8e12-9acfcb2bf6b7


Install

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

PlatformFile
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 idea

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.


Panels

Eight panels are available from the + tab button:

PanelWhat it does
claudeClaude CLI terminal with slash-command quick-launch
codexCodex CLI terminal with slash-command quick-launch
previewLive runtime output: browser, CLI, or any dev server
editorMonaco editor with per-project diagnostics
diff-stackSide-by-side diff and scrubbable history feed
terminalStandalone pty terminal
debugVerify runs and diagnostics
memoryProject knowledge base with [[wikilinks]] and context inventory
agentFormation canvas, skills, MCP management, and secrets

SDK and plugins

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.


polypore-ide MCP server

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

NamespaceWhat 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

Secret broker

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.


Polyflow skills

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


Stack

ShellTauri 2, Rust
RendererReact 18, Vite, TypeScript
PanelsDockview
EditorMonaco
Terminalxterm.js, portable-pty
MCP sidecarNode, JSON-RPC
PersistenceSQLite via rusqlite
SecretsOS keyring via keyring crate
File watchingnotify
ContractsJSON Schema, codegen’d into packages/sdk/

Getting started

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):

npm run dev

Scripts

Command
npm run appDesktop app via Tauri
npm run app:buildProduction bundle
npm run devVite renderer on 127.0.0.1:1420
npm run typecheckCodegen + tsc --noEmit
npm testvitest renderer suite
npm run mcpMCP sidecar against cwd
npm run mcp:smokeJSON-RPC tools/list smoke
npm run mcp:pipeline-smokeEnd-to-end plugin + skill + secret
cd src-tauri && cargo testRust tests
cargo clippy --no-deps -- -D warningsRust lints

Architecture

┌────────────────────────────────────────────────────────────────────┐
│ 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.


Environment variables

POLYPORE_PROJECT_ROOTOverride cwd as the workspace root
POLYPORE_ENABLE_ACP=1Opt into the ACP adapter
POLYPORE_CONFIG_DIRSecrets metadata location (default ~/.config/polypore)
POLYPORE_UPDATE_ENDPOINTOverride the auto-updater endpoint

Contributing

See CONTRIBUTING.md.

License

MIT

Similar Articles

favorite Agentic Coding Harness

Reddit r/LocalLLaMA

The author compares several agentic coding harnesses (Codex CLI, Claude Code, Gemini CLI, OpenCode, Pi) and finds Pi the leanest and best for local models, praising its simplicity and compatibility with Qwen 27B-MXFP8.