The project's README from github.com/ryanlab/bivor. As one markdown file: README.md.
A macOS desktop workbench based on the pi coding agent.
Features · Install · Develop · Architecture · License
Bivor (from beaver — the industrious builder) is a macOS desktop workbench based on the pi coding agent, built to match the experience of Codex / Claude desktop apps — and go further with visual harness orchestration, guardrails, cloud VM sandboxes, and parallel git-worktree tasks.
Each chat runs the pi SDK (AgentSessionRuntime) inside its own isolated Electron utility process. Sessions, auth, skills, prompts, and MCP config are fully shared with the pi CLI under ~/.pi/agent/, so you can move between the terminal and the desktop app freely.
pi/task-*); multiple agents edit code simultaneously without conflicts, then merge back from the built-in merge panelrefs/pi-checkpoints/, never touches your index) is taken before every prompt; restore the whole workspace or individual files from any user message! bash & @ file mentions — prefix with ! to run commands in the session shell (output streams into agent context); type @ to fuzzy-search project filesPick how much power each chat gets — presets gate tools and UI surfaces:
| Preset | What it is |
|---|---|
| Daily | Chat / writing assistant. No coding side effects; web search, web fetch, memory |
| Coding | Full agent: all tools, worktrees, sandbox, harness |
| Review | Read/search only; guardrails deny write/edit/bash |
| Minimal | Just bash + read + edit |
session.reload() recomposes the system prompt in place while keeping conversation historyharness_propose; proposals require approval and hot-apply after the turntool_search / tool_activate to save contextset_execution_world)vm_gui mouse/keyboard control, vm_file transfer, vm_screenshotoff / workspace / strictsubagent_run spawns up to 4 parallel workers (optionally readonly or VM-bound), monitored in a dockweb_search plus keyless web_fetch (page → markdown)code_run executes JavaScript in node:vm with pi.bash / pi.log, under the same guardrails and execution world.env excluded, approval required), plus a full deployments ops panel (logs, promote, rollback, redeploy).pi/memory.md, injected into the system prompt across sessionspackages configpi-mcp-adapter install, visual server overview, edit global mcp.json / project .mcp.json~/.pi/agent/sessions/); resume, rename, and trash historical sessions.pi project resources load only after explicit user consent, matching the pi CLI security model~/.pi/agent/auth.json, shared with the CLI; custom providers / relays via models.jsonDownload the latest DMG from Releases — arm64 for Apple Silicon, x64 for Intel Macs.
[!WARNING] Builds are currently unsigned (no Apple Developer certificate yet). On first launch, right-click the app → Open, or clear the quarantine flag:
xattr -cr /Applications/Bivor.app.
Requirements: macOS (Apple Silicon or Intel), Node.js ≥ 20, pnpm.
git clone https://github.com/ryanlab/bivor.git
cd bivor
pnpm install
pnpm dev # electron-vite dev with HMR
pnpm typecheck
pnpm build # build to out/
pnpm dist:mac # package DMG + ZIP into dist/
| What | Where |
|---|---|
| Model API keys / OAuth (shared with pi CLI) | ~/.pi/agent/auth.json — manage from Settings |
| Custom providers / relays | models.json (pi CLI-compatible) |
| Sessions (shared with pi CLI) | ~/.pi/agent/sessions/ |
| App config (optional keys below) | Electron userData/bivor-config.json |
Optional integrations, each enabling extra tools when configured in Settings:
E2B_API_KEY)web_search (TAVILY_API_KEY)VERCEL_TOKEN, VERCEL_TEAM_ID)CHROME_PATH — override the browser binary used by the browser tool┌─────────────┐ IPC ┌──────────────┐ postMessage ┌────────────────────┐
│ Renderer │◄──────►│ Main process │◄─────────────►│ Utility process ×N │
│ React 19 │ │ windows/menu │ │ pi SDK │
│ zustand │ │ global svcs │ │ AgentSessionRuntime│
└─────────────┘ └──────────────┘ └────────────────────┘
src/main/ — windows, menu, chat process orchestration, global services (model catalog / auth / OAuth / sessions / worktrees / checkpoints / scheduler / terminals)src/host/ — agent host: embeds the pi SDK runtime, trims and forwards the event stream, tree navigation, sandbox / guardrails / subagents / browser / web / code mode / deploy / memorysrc/preload/ — typed contextBridge APIsrc/renderer/ — React UI; the event-stream reducer lives in stores/app-store.tssrc/shared/protocol.ts — typed protocol shared across all three processesnode scripts/sdk-smoke.mjs <provider> # SDK-level smoke test
node scripts/e2e-cdp.mjs full "task" # real end-to-end UI run driven over CDP
node scripts/e2e-harness.mjs # resources center + hot harness orchestration
node scripts/shot.mjs out.png "js expr" # CDP screenshot / state injection
E2E scripts require the app to be started with --remote-debugging-port=9223.
See CONTRIBUTING.md.