에이전트 코딩은 VS Code 채팅 상자 이상의 가치를 요구한다
Source: [해커 뉴스](https://github. com/evanklem/polypore)
에이전시 데스크톱 IDE. 언어 무관, OS 무관. 모든 표면은 분할·재배열·불필요한 것을 닫는 드ockable 패널이다. 내장된 패널은 대부분의 워크플로우를 커버한다. 필요하면 SDK가 있다.
Tauri 2 · React 18 · Dockview · Monaco · MIT · 텔레메트리 없음
Demo
polyporedemo1080.mp4
Install
플랫폼에 맞는 빌드를 최신 릴리스에서 다운로드하세요. Polypore는 최초 설치 후 자동으로 업데이트됩니다.
Platform
- Linux
.AppImage(모든 배포판),.deb(Debian/Ubuntu),.rpm(Fedora/RHEL) - macOS
.dmg(Apple 실리콘 또는 인텔) - Windows
_x64_en-US.msi_혹은_x64-setup.exe_
Linux에서 AppImage는 FUSE가 필요합니다 (fuse2 on Arch). 실행 파일에 실행 권한을 부여하고 실행하세요:
chmod +x Polypore_amd64.AppImage
./Polypore_amd64.AppImage
소스에서 직접 빌드하려면 아래 시작하기를 참고하세요.
The idea
에이전시 툴링 공간은 빠르게 움직인다. 올바른 모델, CLI, 그리고 오케스트레이션 패턴은 일반적인 IDE 릴리스 주기보다 더 빨리 바뀐다. Polypore는 이를 따라갈 수 있도록 설계되어 있다. 모든 표면은 공유 계약 뒤에 격리된 패널로 구성된다. IDE의 어느 부분도 핵심부에 손을 대지 않고 교체, 확장, 혹은 제거할 수 있다.
이것은 나중에 에이전시 패널을 추가한 코드 에디터가 아니다. 레이아웃, 메모리 시스템, 디버깅 툴링, 그리고 MCP 서버는 모두 에이전트를 주요 행위자로 중심으로 설계되어 있다.
Panels
플러스(+) 탭에서 8개의 패널을 사용할 수 있습니다:
Panel | What it does
claude | Claude CLI 터미널, 슬래시 명령으로 빠른 시작
codex | Codex CLI 터미널, 슬래시 명령으로 빠른 시작
preview | 실시간 런타임 출력: 브라우저, CLI, 또는 어떤 개발 서버든
editor | Monaco 에디터, 프로젝트별 진단 제공
diff-stack | 옌 배치된 디프와 스크러블 히스토리 피드
terminal | 독립적 pty 터미널
debug | 실행 및 디버깅 검증
memory | 프로젝트 지식 베이스, [[위키 링크]]과 컨텍스트 인벤토리
agent | 형성 캔버스, 스킬, MCP 관리, 그리고 비밀
SDK and plugins
제3자 패널은 HostRpcServer 계약을 사용해 빌트인과 동일한 샌드박스 iframe으로 제공된다. cualquier 프레임워크로 플러그인을 작성하고 .polypore/plugins//에 넣으면 패널 스트립에 나타난다. 에이전트는 MCP 서버를 통해 내장된 패널과 동일하게 이를 제어할 수 있다.
polypore-ide MCP server
Node MCP 사이드가 Polypore와 함께 배포됩니다. Claude Code는 자동으로 .mcp.json에서 이를 감지합니다. 에이전트에게 22개 이상의 도구를 통해 직접 IDE 제어 기능을 제공합니다:
Namespace | What agents can do
polypore.debug.* | 세션 시작, 브레이크포인트 설정, 단계 실행, 콘솔/DOM/네트워크 캡처
polypore.memory.* | 지식 베이스 읽기/쓰기, 항목 연결, 전송 문서 작성
polypore.verify.* | 검증 스위트 선언 및 실행
polypore.tasks.* | 실시간으로 IDE에 표시되는 작업 생성 및 업데이트
polypore.phase.* | 실시간 UI에 워크플로우 단계 보고
polypore.secrets.* | 비밀 값 없이 중계된 HTTP 요청 수행
polypore.skills.* | 활성 스킬 라이브러리 읽기
polypore.format.* | 에디터에서 포맷터 트리거
Secret broker
비밀은 OS 키링에 저장됩니다. Polypore가 에이전트를 시작하면 등록된 모든 비밀을 환경에서 제거하고 POLYPORE_SECRET_HANDLE_ 플래그로 대체합니다. 에이전트는 polypore.secrets.use를 HTTP 요청으로 호출하고, Polypore는 값을 주입하여 되돌아올 때 마스킹합니다. 모델은 평문 jamais 보지 않습니다.
Polyflow skills
15개의 슬래시 명령어는 packages/polyflow/에 있으며 전체 개발 루프를 포괄합니다:
/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
- Shell → 쉘
- Tauri 2, Rust → Tauri 2, Rust
- Renderer → 렌더러 (React 18, Vite, 타입스크립트)
- Panels → 패널 (Dockview)
- Editor → Monaco
- Terminal → xterm.js, portable-pty
- MCP sidecar → MCP 사이드카 (Node, JSON‑RPC)
- Persistence → 지속성 (SQLite via rusqlite)
- Secrets → 비밀 (OS 키링 via
keyring크레이트) - File watching →
notify - Contracts → 계약 (JSON Schema,
packages/sdk/에 코드 생성)
Getting started
선행 조건: 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
렌더러 전용 개발 (Tauri 브리지 없이):
npm run dev
Scripts
Command | Description
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 사이드카 실행
npm run mcp:smoke | JSON‑RPC 도구/리스트 스모크 테스트
npm run mcp:pipeline-smoke | 엔드투엔드 플러그인 + 스킬 + 비밀 테스트
cd src-tauri && cargo test | Rust 테스트 실행
cargo clippy --no-deps -- -D warnings | Rust 린트 (경고 오류 발생)
Architecture
/ │
├────────────────────────────────────────────────────────────────────┤
│ Renderer (React + Dockview) │
│ ├─ HostRpcServer (packages/host) 모든 플러그인을 위한 공유 계약 │
│ ├─ PolyporeHost 루프백, 내장 플러그인이 이를 사용함 │
│ ├─ PluginLoader, 서드파티 iframe이 이를 사용함 │
│ └─ built-in panels (plugins/) │
├────────────────────────────────────────────────────────────────────┤
│ polypore-ide MCP 사이드카 (Node, packages/mcp-server/) │
│ ├─ 22개 이상 도구 → host_broker를 통해 실시간 상태 변경 │
│ └─ secrets.* → secret_broker, 값은 에이전트에게 절대 반환되지 않음 │
└────────────────────────────────────────────────────────────────────┘
┌────────────────────────────────────────────────────────────────────┐
│ Tauri 쉘 (Rust, src-tauri/) │
│ ├─ host_broker (HTTP) → Tauri 이벤트를 렌더러에 전송 │
│ ├─ secret_broker (HTTP) → OS 키링, 평문 jamais 반환되지 않음 │
│ ├─ 에이전트 런타임 → CLI별 stdio 어댑터; ACP 옵션 추가 │
│ ├─ pty (portable-pty) 및 persistence (rusqlite) │
│ ├─ snapshotter 및 fs_watch (notify) │
│ └─ plugin:// 프로토콜 → .polypore/plugins/ 제공 │
├────────────────────────────────────────────────────────────────────┤
│ Renderer (React + Dockview) │
│ ├─ HostRpcServer (packages/host) 모든 플러그인을 위한 공유 계약 │
│ ├─ PolyporeHost 루프백, 내장 플러그인이 이를 사용함 │
│ ├─ PluginLoader, 서드파티 iframe이 이를 사용함 │
│ └─ built-in panels (plugins/) │
├────────────────────────────────────────────────────────────────────┤
│ polypore-ide MCP 사이드카 (Node, packages/mcp-server/) │
│ ├─ 22개 이상 도구 → host_broker를 통해 실시간 상태 변경 │
│ └─ secrets.* → secret_broker, 값은 에이전트에게 절대 반환되지 않음 │
└────────────────────────────────────────────────────────────────────┘
계약은 schemas/에 있으며, 수정한 스키마 후 npm run codegen을 실행하면 packages/sdk/src/types.gen.ts와 packages/sdk/src/validators.gen.ts로 코드 생성이 됩니다.
Environment variables
POLYPORE_PROJECT_ROOT: cwd를 워크스페이스 루트로 지정POLYPORE_ENABLE_ACP=1: ACP 어댑터 사용 활성화POLYPORE_CONFIG_DIR: 비밀 메타데이터 위치 (기본값~/.config/polypore)POLYPORE_UPDATE_ENDPOINT: 자동 업데이트 엔드포인트를 대체
Contributing
자세한 내용은 CONTRIBUTING.md 를 참고하세요.