Polter is a desktop-first developer control plane for shaping project-specific workspaces around machines, repositories, commands, services, and operational panels. The current repository is a pnpm + Turborepo monorepo with an Electron desktop app in apps/desktop, a Remotion presentation package in apps/presentation, and shared non-visual TypeScript services in packages/core.
The product direction is a serious control plane with this hierarchy: Machine -> Projects -> Project Workspaces -> Panels. A user selects a machine, chooses one of that machine's projects, and assembles project workspaces from panels for commands, pipelines, processes, repositories, services, infrastructure, databases, agents, logs, runbooks, and release work. The current Electron renderer is intentionally UI-only and mock-first: it demonstrates the desktop experience without running real backend, IPC, process, MCP, script, or declarative apply operations from the renderer.
Developer operations often spread across machines, repositories, shell history, package scripts, GitHub CLI, Vercel CLI, Supabase CLI, local process managers, MCP configuration, logs, runbooks, and one-off project notes. Polter brings those operational primitives into one desktop control plane so a developer can inspect the active machine, choose a project, stage commands, compose project workspaces, arrange panels, and keep automation surfaces explicit.
- Electron desktop app with a main window and a global Commander overlay.
- Separate Remotion composition for Polter's product presentation video and future interactive preview surfaces.
- UI-only renderer control plane with mock data for machine-scoped projects, project workspaces, Processes, Pipelines, Scripts, Infrastructure, Tool Status, MCP, Skill Setup, Project Config, Settings, and command feature views.
- Dockable project workspace model where panels are the product unit for commands, pipelines, terminals, logs, infrastructure, future machines, environments, databases, agents, quality gates, APIs, and runbooks.
- Typed preload bridge exposed as
window.polter. - Explicit IPC channel catalog in
apps/desktop/src/shared/ipc.ts. - Shared command catalog for Supabase, GitHub CLI, Vercel CLI, Git, and package-manager commands.
- Shared process manager, pipeline engine, declarative planner, MCP installer, config storage, and desktop service helpers in
packages/core. - Project-level
.polter/config.jsonsupport for tool metadata, child repositories, environment entries, and pipelines. - Local global config through the
confpackage for global pipelines and saved desktop repositories. - Electron Builder packaging configuration for unsigned macOS, Windows, and Linux artifacts.
| Area | Technology |
|---|---|
| Workspace | pnpm@10.33.0, Turborepo |
| Desktop runtime | Electron, electron-vite, Electron Builder |
| Renderer | React 19, TypeScript, Vite, Tailwind CSS, shadcn/ui, Radix/Base UI-style primitives |
| Presentation | Remotion, React, TypeScript, Tailwind CSS |
| UI utilities | lucide-react, cmdk, motion, sonner, Orama, dnd-kit, react-resizable-panels |
| Core services | TypeScript, Zod, execa, conf, eventemitter3, p-limit, p-retry, which |
| MCP support | @modelcontextprotocol/sdk plus local MCP installation helpers |
| Tests | Vitest, Testing Library React, jsdom |
Polter is split into four active layers:
apps/desktop: Electron main process, preload bridge, renderer shell, feature modules, UI components, tests, design contract, and packaging config.apps/presentation: Remotion source for the Polter presentation video and exported player-ready composition.packages/core: shared non-visual services for commands, runners, processes, pipelines, declarative planning, config, MCP setup, IPC helpers, and desktop adapters.- Root workspace: package orchestration, Turborepo tasks, workspace lockfile, docs, and project-level
.polter/config.json.
The product hierarchy is Machine -> Projects -> Project Workspaces -> Panels. Today the renderer models that direction with UI-only and mock-first workspace state, while packages/core holds reusable command, process, pipeline, config, and MCP helpers that future runtime adapters can wire into the control plane.
The renderer is currently isolated from real runtime services. apps/desktop/src/main/ipc.ts registers public channels, but most handlers deliberately throw UI-only mode errors. The active renderer uses apps/desktop/src/renderer/features/workbench/mock-workbench-adapter.ts instead of calling real IPC or starting processes.
flowchart LR
User["Developer"] --> Desktop["Electron Desktop"]
Desktop --> Machine["Active Machine"]
Machine --> Project["Selected Project"]
Project --> Workspace["Project Workspaces"]
Workspace --> Panels["Dockable Panels"]
Desktop --> Main["Main Process"]
Main --> Window["Window and Commander Overlay"]
Desktop --> Preload["Preload Bridge"]
Preload --> Bridge["window.polter"]
Bridge --> Channels["IPC_CHANNELS"]
Desktop --> Renderer["React Renderer"]
Renderer --> Mock["Mock Workbench Adapter"]
Main -.-> Channels
Core["@polterware/core"] --> Commands["Command Catalog"]
Core --> Processes["Process Manager"]
Core --> Pipelines["Pipeline Engine"]
Core --> Config["Config Storage"]
Core --> MCP["MCP Setup"]
See docs/architecture.md for the full technical architecture.
.
├── apps/
│ ├── desktop/ # Active Electron desktop app
│ └── presentation/ # Remotion presentation video package
├── packages/
│ └── core/ # Shared non-visual TypeScript services
├── docs/ # Product, architecture, setup, API, storage, and workflow docs
├── legacy/ # Retained archived code, not part of the active product
├── screenshots/ # Placeholder folder for future visual evidence
├── .github/workflows/ # Contains a stale release workflow
├── .polter/config.json # Project-level Polter config for this checkout
├── pnpm-workspace.yaml
├── turbo.json
└── package.json
- Node.js compatible with the Electron and TypeScript toolchain in this workspace.
- pnpm. The root manifest declares
pnpm@10.33.0. - Git for normal repository work.
- Optional CLIs for core command catalog workflows: Supabase CLI, GitHub CLI (
gh), Vercel CLI, and a supported package manager (npm,pnpm,yarn, orbun).
Install dependencies from the repository root:
pnpm installThe workspace packages are declared in pnpm-workspace.yaml:
packages:
- "apps/*"
- "packages/*"Copy .env.example when local overrides are needed:
cp .env.example .envCurrent documented variables:
| Variable | Purpose |
|---|---|
ELECTRON_RENDERER_URL |
Development renderer URL consumed by Electron when a Vite renderer server is active. |
POLTER_LOG_FORMAT |
Core diagnostic log format. Supported values are inferred from code as text or json. |
POLTER_LOG_LEVEL |
Core diagnostic log level. |
POLTER_DEBUG |
Enables debug mode when set to 1 or true. |
EDITOR |
Preferred editor for config/edit flows. |
VISUAL |
Preferred visual editor. Takes precedence over EDITOR. |
No required production secrets were identified in the current active workspace.
The root development script delegates to Turborepo and filters the desktop package:
pnpm devThe desktop package script runs:
electron-vite devAgent sessions in this repository must not execute development, preview, build, or distribution commands. When runtime verification is needed, Erick should run the relevant command locally.
Root scripts:
| Script | What it does |
|---|---|
pnpm dev |
Runs turbo run dev --filter=@polterware/desktop. |
pnpm build |
Runs turbo run build. |
pnpm preview |
Runs turbo run preview --filter=@polterware/desktop. |
pnpm dist |
Runs desktop distribution through Turbo. |
pnpm dist:mac |
Builds a macOS desktop package target. |
pnpm dist:win |
Builds a Windows desktop package target. |
pnpm dist:linux |
Builds a Linux desktop package target. |
pnpm dist:all |
Builds all configured desktop package targets. |
pnpm design:lint |
Runs the desktop DESIGN.md lint task. |
pnpm deps:electron |
Prints the Electron dependency version from the desktop package. |
pnpm typecheck |
Runs package type-checking through Turbo. |
pnpm test |
Runs package tests through Turbo. |
Desktop package scripts are defined in apps/desktop/package.json. Core package scripts are defined in packages/core/package.json.
Presentation package scripts are defined in apps/presentation/package.json.
Run all active workspace tests:
pnpm testRun type-checking:
pnpm typecheckThe current test suite includes:
- Electron main-process tests for IPC registration and global shortcuts.
- Preload bridge tests for channel routing and Commander focus events.
- Renderer tests for root surface selection, navigation catalogs, mock workbench behavior, scripts, pipelines, processes, and Commander search.
- Core tests for command metadata, config storage, execution helpers, process manager behavior, IPC protocol, package manager detection, YAML writer, pins, suggested args, and error modeling.
Build the workspace:
pnpm buildThe desktop build uses electron-vite and writes:
- Main process output to
apps/desktop/out/main. - Preload output to
apps/desktop/out/preload. - Renderer output to
apps/desktop/out/renderer.
Polter is packaged as an Electron desktop app through Electron Builder:
pnpm dist
pnpm dist:mac
pnpm dist:win
pnpm dist:linux
pnpm dist:allCurrent package targets from apps/desktop/electron-builder.yml:
- macOS
dmg - Windows
nsisforx64 - Linux
AppImage
Signing, notarization, publishing, auto-update, rollback, and production release channels were not identified in the current active codebase.
The existing .github/workflows/release.yml appears stale for the current monorepo because it uses Bun and root-level src/index.tsx / src/mcp.ts paths that do not exist in the active workspace layout.
Open the desktop app in development:
pnpm devRun static checks:
pnpm typecheck
pnpm test
pnpm design:lintInspect the configured Electron dependency version:
pnpm deps:electronExample .polter/config.json shape from this repository:
{
"version": 1,
"tools": {
"supabase": {}
},
"pipelines": []
}- Active product surface: Electron desktop app in
apps/desktop. - Active shared logic: TypeScript core package in
packages/core. - Product hierarchy:
Machine -> Projects -> Project Workspaces -> Panels. - Renderer runtime state: UI-only and mock-first.
- Packaging: local unsigned Electron Builder configuration exists.
- Deployment/release automation: not production-ready in the current active workspace.
- Database: no database, ORM, migrations, or seeds are active.
- HTTP API: not present.
Useful next steps based on the current codebase:
- Translate more of the panel catalog into real panel ids only when a panel has useful mock behavior or real adapters.
- Replace UI-only IPC handlers with carefully scoped real handlers when runtime integration is approved.
- Decide whether
.github/workflows/release.ymlshould be removed or rewritten for Electron packaging. - Add durable local storage if project workspaces, panel layouts, command registry, audit history, machine registry, or process history move beyond config files and memory.
- Add signing, notarization, release channel, and rollback policy before public distribution.
- Add screenshots to
screenshots/and reference them from this README when the UI is ready for portfolio presentation.
No root license file or root license field was identified in the active workspace.