Skip to content

kumarmanishbit/prism

Repository files navigation

Prism

A calm, premium macOS workspace for orchestrating AI coding agents in parallel.

Prism is a native macOS workspace built for the way developers actually work with AI now — not one chat window at a time, but many agents in parallel, each with their own context, working directory, and role.

Split your screen into as many terminals as you need. Route Claude Code to the backend, Codex to the frontend, Aider to the tests — and keep them all in view, all focused, without juggling tabs.

Repo: https://github.com/kumarmanishbit/prism


Highlights

  • Parallel AI agents — run multiple Claude Code, Codex, Aider, or Gemini CLI sessions side by side; never wait on one to finish.
  • Native macOS terminals — full PTY per pane. Any CLI works: shells, REPLs, agents, servers.
  • Workspaces + profiles — group related terminals; save launch configs (cwd, shell, env, startup command) as one-click profiles.
  • Mosaic layout — split horizontally or vertically to any depth. Layouts, scrollback, and pane names persist across restarts.
  • Voice input⌘⇧D to dictate straight into the active pane. On-device speech recognition via a bundled Swift helper.
  • Command palette⌘K for everything: spawn, switch, rename, launch a profile.
  • Design system — semantic tokens, calm dark surface, per-pane color tinting, keyboard-first focus rings. Inspired by Cursor, Raycast, Warp, Arc, and Linear.
  • Auto-updates — signed builds pull updates from GitHub Releases via electron-updater.

Quick start

Requires Node 20+, npm 10+, Xcode command-line tools (xcode-select --install), and macOS 11 (Big Sur) or later.

git clone https://github.com/kumarmanishbit/prism.git
cd prism
npm install
npm run dev

npm run dev boots the Vite renderer, builds the main and preload bundles, launches Electron with HMR on both sides, and starts the mac-speech-helper for voice input.


Building for distribution

Unsigned local build (for personal use):

export CSC_IDENTITY_AUTO_DISCOVERY=false
npm run package

Outputs .dmg (arm64 + x64) and .zip files to release/. Users must right-click → Open on first launch (Gatekeeper blocks a double-click on unsigned builds).

Signed + notarized (for real distribution) — requires a Developer ID Application certificate:

export CSC_LINK=/path/to/DeveloperID.p12
export CSC_KEY_PASSWORD='cert-password'
export APPLE_ID='you@example.com'
export APPLE_APP_SPECIFIC_PASSWORD='xxxx-xxxx-xxxx-xxxx'
export APPLE_TEAM_ID='ABCDE12345'
npm run package

Notarization adds ~5–15 min per architecture. See electron-builder docs for detail.

Publish to GitHub Releases (also feeds the auto-updater):

export GH_TOKEN='github-personal-access-token'
npm run package -- --publish always

Scripts

Command Purpose
npm run dev Dev server + main/preload build + Electron with HMR
npm run typecheck Type-check main, preload, and renderer projects
npm run build Production build of renderer + main/preload
npm run package Bundle a macOS .dmg + .zip via electron-builder
npm run clean Remove build outputs

Architecture

src/
├── main/           Electron main process (Node). Windows, IPC, PTY, storage, menu, updater.
├── preload/        Context-isolated preload. Exposes one typed `invoke` bridge.
├── renderer/       React app. UI in components; non-UI logic in services + stores.
│   ├── components/     Reusable primitives (Button, IconButton, icons, ...)
│   ├── features/       Feature verticals (terminal, workspaces, profiles, voice, ...)
│   ├── layouts/        App shell, sidebar, top bar
│   ├── pages/          Route-level views
│   ├── services/       IPC client, providers
│   ├── store/          Zustand stores (workspaces, terminals, profiles, settings)
│   ├── theme/          TS palette mirror consumed by non-CSS code (xterm)
│   └── styles/         Tailwind + globals; design tokens as CSS custom properties
├── shared/         Types, IPC channels, constants used by both processes.
└── resources/
    └── mac-speech-helper/  Swift helper for on-device speech recognition

Key design decisions

  • IPC is fully typed against a single IpcContract in src/shared/ipc/. Adding a channel is a one-file addition on each side.
  • Zustand stores with _-prefixed private setters — public methods orchestrate; private ones mutate. Stores never import React.
  • Terminal panes are overlay-positioned, not children of the mosaic tree. Splits, drags, closes, and maximize preserve xterm scrollback because the DOM node never remounts.
  • Focus is imperative — pane focus flows through a controller registry, not React state, so click→focus latency is one frame.
  • Design tokens live in CSS custom properties as R G B triplets so Tailwind's <alpha-value> can inject opacity. TS mirror in src/renderer/theme/colors.ts for xterm and other non-CSS consumers.
  • No pure black or pure white anywhere in the palette — reduces glare on dark surfaces and OLED bloom.

Documentation

  • CONTRIBUTING.md — how to file issues, propose changes, and open PRs.
  • Inline comments explain the why behind non-obvious code — start there before reaching for external docs.

Tech stack

  • Electron 42 — desktop shell
  • React 18 + TypeScript — renderer
  • Vite 5 — renderer + main/preload bundler
  • Tailwind CSS 3 — utility layer over CSS custom-property tokens
  • Zustand 5 — state
  • xterm.js 5 — terminal rendering
  • node-pty — native PTY sessions
  • react-mosaic-component — split-pane layout engine
  • electron-store — persistent settings, workspaces, profiles
  • electron-updater — GitHub-Release-backed auto-updates
  • Swift (via SwiftPM) — mac-speech-helper for on-device speech recognition

License

Apache License 2.0 — see LICENSE for the full text.


Acknowledgments

Design language draws from Cursor, Raycast, Warp, Arc Browser, Linear, GitHub Desktop, and macOS Sonoma. Terminal palette inspired by GitHub Dark and One Dark.

About

Prism is a native macOS workspace built for developers who work alongside AI. Run Claude Code, Codex, Aider, and other agents in parallel — each in its own pane, all under one calm surface.

Resources

License

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors