Prism is a local Electron + React browser with a dark, Chromium-powered shell and real webviews for website access.
- Tab strip with live favicons and per-tab loading spinners, toolbar, omnibox, bookmark bar, Prism-branded new-tab search surface, styled error + warning pages.
- Multi-tab state with back, forward, reload/stop, home, close, new tab, and keyboard shortcuts:
Cmd/Ctrl+L(omnibox),Cmd/Ctrl+T(new tab),Cmd/Ctrl+R(reload),Cmd/Ctrl+K(command palette),Cmd/Ctrl+F+Cmd/Ctrl+G(find in page),Esc(stop loading),Cmd/Ctrl+Shift+A(assistant). - A Cmd/Ctrl+K command palette: jump to open tabs, bookmarks, and recent history, run browser actions, summon AI agents, or route free text straight to the local AI.
- Real website loading through Electron/Chromium
<webview>tabs. - Prism Extension Store at
prism://extensions, with a 100-entry clean-room catalog and first-batch installable MV3 packages. - Local Ollama agent overlay with conversation continuity, relevance-ranked private memory, summonable agent personas, approval-gated risky actions, a live context meter, and contextual entry points: one-click Summarize this page, explain selection, compare tabs, and quick-action chips — all running on-device.
- Security pipeline for URL normalization, HTTPS upgrading, suspicious host/path detection, executable download blocking, permission denial, and non-web scheme blocking.
- A hardened Electron host process with sandboxed webviews, disabled Node integration, denied permission prompts, blocked downloads, and blocked popup windows.
- Fast UI response through a local React chrome layer while remote pages load in shared-cache, sandboxed Chromium webviews.
npm install
npm run desktopPrism runs on macOS, Windows, and Linux from the same codebase. npm install downloads the
matching Electron binary; npm run desktop builds the renderer and launches the app.
npm run dist:win # Windows -> release/Prism-<version>-win-x64.exe (portable)
npm run dist:mac # macOS -> release/Prism-<version>-mac-arm64.dmg + .zipThe artifacts land in release/. The Windows portable .exe is self-contained — copy it anywhere
and double-click; it is unsigned, so the first launch shows the standard SmartScreen prompt
(More info → Run anyway).
Windows note: electron-builder's winCodeSign toolchain ships macOS symlinks that Windows can
only unpack from an elevated shell or with Developer Mode on. dist:win runs
scripts/prepare-wincodesign.cjs first (predist:win), which stages those tools in the
electron-builder cache so packaging works from an ordinary terminal — no admin required. It is a
no-op once the cache is prepared and never fails the build.
On first launch Prism opens an AI setup wizard: it detects Ollama (running / installed-but-stopped / missing), scans this machine for local models (Ollama's store, LM Studio folders, loose GGUF files — names and sizes only), can download a starter model with live progress, applies a recommended per-task model routing in one click, and captures behavior preferences plus optional custom instructions. Re-run it anytime from Settings → Run AI setup or the command palette.
- Models. The assistant expects Ollama at
http://127.0.0.1:11434and defaults toqwen2.5:7b. Every installed model gets metadata-based guidance (fastest / quick everyday / balanced reasoning / deep synthesis), and Settings → Per-task model routing lets you pin a specific model for chat, summaries, deep multi-tab work, agent planning, and agent final answers. Models are pre-warmed (keep_alive) so first prompts skip the cold load. - Hardware efficiency. Prism keeps Ollama's RAM use in check: a residency governor evicts the soonest-expiring resident model before loading another whenever the total would exceed the memory budget (default: half of system RAM; override with
FORM_AI_MEMORY_BUDGET_GB), and keep-alive is adaptive — 13B+ models unload after 3 minutes idle, small models after 10 (FORM_OLLAMA_KEEP_ALIVEoverrides both). Settings → Privacy & data shows what's resident right now with a one-click Unload, and the assistant's reset button frees everything. - Agents. Summon focused agents with slash commands in the composer —
/research,/summarize,/organize,/factcheck,/write— or from the palette ("Summon Researcher")./agentslists everything. Each persona runs the same safety-gated agent loop with its own instructions, tool whitelist, step budget, and model bias; build your own in Settings → Custom agents. - Memory. The agent keeps a private, encrypted local memory (preferences, workflows, task notes, source facts). Memories are relevance-ranked into prompts (keyword + site + recency scoring), ephemeral kinds expire after 45 days, near-duplicates are consolidated, and the assistant panel's Memory tab offers search, edit, tidy, export, and import.
- Token efficiency. Conversations carry a rolling on-device summary plus recent turns instead of full history, background tabs contribute metadata only (full text on demand or in deep mode), and a context meter above the composer shows the estimated prompt size against the routed model's window.
- Safety. Risky browser actions need approval; YOLO mode skips confirmations for actions you clearly asked for, while prompt-injection guards stay on in every mode. Payment, credential, and sensitive-page steps always pause for you — Autopilot included. Page content is always fenced as untrusted data.
AI chats, agent memory, and prompts never leave this machine. The renderer cannot make network calls at all (CSP connect-src 'none'); the main process refuses any non-loopback Ollama endpoint unless you explicitly export FORM_ALLOW_REMOTE_OLLAMA=1; chat history and agent memory rest in OS-keychain-encrypted files under the app's data directory. Settings → Privacy & data shows every local store, its encryption status, and one-click clearing. Memory Export writes plaintext JSON by design — it is a deliberate, user-initiated copy.
npm run build
npm run smoke:electron
npm run test:assistant
npm run test:onboarding
npm test # full suite