[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94997":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":17,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":24,"readmeContent":25,"aiSummary":26,"trendingCount":16,"starSnapshotCount":16,"syncStatus":27,"lastSyncTime":28,"discoverSource":29},94997,"bivor","ryanlab\u002Fbivor","ryanlab","Bivor — a macOS desktop workbench for the pi coding agent","https:\u002F\u002Fbivor.dev",null,"TypeScript",206,25,106,1,0,99,74.14,"MIT License",false,"main",true,[],"2026-08-24 04:01:23","\u003Cp align=\"center\">\n  \u003Cimg src=\"docs\u002Flogo.png\" width=\"80\" alt=\"Bivor\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Bivor\u003C\u002Fh1>\n\n\u003Cp align=\"center\">A macOS desktop workbench based on the pi coding agent.\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fryanlab\u002Fbivor\u002Freleases\">\u003Cimg alt=\"Release\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fryanlab\u002Fbivor?style=flat-square&color=c2410c\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fryanlab\u002Fbivor\u002Factions\u002Fworkflows\u002Fci.yml\">\u003Cimg alt=\"CI\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Factions\u002Fworkflow\u002Fstatus\u002Fryanlab\u002Fbivor\u002Fci.yml?branch=main&style=flat-square\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"LICENSE\">\u003Cimg alt=\"License\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fryanlab\u002Fbivor?style=flat-square\" \u002F>\u003C\u002Fa>\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fryanlab\u002Fbivor\u002Fstargazers\">\u003Cimg alt=\"Stars\" src=\"https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fryanlab\u002Fbivor?style=flat-square\" \u002F>\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg alt=\"Electron\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FElectron-43-47848F?style=flat-square&logo=electron&logoColor=white\" \u002F>\n  \u003Cimg alt=\"React\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact-19-61DAFB?style=flat-square&logo=react&logoColor=black\" \u002F>\n  \u003Cimg alt=\"TypeScript\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTypeScript-3178C6?style=flat-square&logo=typescript&logoColor=white\" \u002F>\n  \u003Cimg alt=\"pnpm\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpnpm-10-F69220?style=flat-square&logo=pnpm&logoColor=white\" \u002F>\n  \u003Cimg alt=\"macOS\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FmacOS-000000?style=flat-square&logo=apple&logoColor=white\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"README.md\">\u003Cb>English\u003C\u002Fb>\u003C\u002Fa> |\n  \u003Ca href=\"README.zh-CN.md\">简体中文\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#features\">Features\u003C\u002Fa> ·\n  \u003Ca href=\"#install\">Install\u003C\u002Fa> ·\n  \u003Ca href=\"#developing-from-source\">Develop\u003C\u002Fa> ·\n  \u003Ca href=\"#architecture\">Architecture\u003C\u002Fa> ·\n  \u003Ca href=\"#license\">License\u003C\u002Fa>\n\u003C\u002Fp>\n\n**Bivor** (from *beaver* — the industrious builder) is a macOS desktop workbench based on the [pi coding agent](https:\u002F\u002Fgithub.com\u002Fbadlogic\u002Fpi-mono), built to match the experience of Codex \u002F Claude desktop apps — and go further with visual harness orchestration, guardrails, cloud VM sandboxes, and parallel git-worktree tasks.\n\nEach 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 `~\u002F.pi\u002Fagent\u002F`, so you can move between the terminal and the desktop app freely.\n\n## Features\n\n### Core chat & multitasking\n\n- **Parallel tasks** — every chat lives in its own utility process: crash-isolated, independently abortable\n- **Git worktree tasks** — one click runs an agent in a dedicated worktree + branch (`pi\u002Ftask-*`); multiple agents edit code simultaneously without conflicts, then merge back from the built-in merge panel\n- **Session tree & forking** — visual history tree; fork from any message (full history kept in the same file, switch branches anytime); \"edit & fork\" any user message; abandoned branches can carry an LLM-generated summary into the new branch\n- **Streaming UI** — collapsible thinking blocks, streaming Markdown with dual-theme shiki highlighting, cursor animation\n- **Tool call visualization** — live bash output, read\u002Fgrep\u002Fls results, inline diffs for edits, file previews for writes, with running\u002Fsuccess\u002Ffailure states and per-category styling\n- **Changes review** — aggregated per-file unified diffs of everything the session touched, compared against a git baseline\n- **Checkpoints & rollback** — a git snapshot (`refs\u002Fpi-checkpoints\u002F`, never touches your index) is taken before every prompt; restore the whole workspace or individual files from any user message\n- **Steer \u002F follow-up** — interject while the agent is running, or queue a follow-up; queued messages are visible and clearable\n- **Mission Control** (⌘O) — live grid of all tasks: status, current tool, inline approvals, subagents, tokens & cost\n- **Images** — paste \u002F drag \u002F pick images for multimodal models\n- **`!` bash & `@` file mentions** — prefix with `!` to run commands in the session shell (output streams into agent context); type `@` to fuzzy-search project files\n- **Search & export** — in-session search (⌘F), full-text search across all historical sessions, export to HTML or JSONL\n- **Auto-naming, retries, notifications** — LLM-generated titles, visible auto-retry on rate limits, system notifications when a background task finishes\n\n### Runtime presets\n\nPick how much power each chat gets — presets gate tools and UI surfaces:\n\n| Preset | What it is |\n|--------|------------|\n| **Daily** | Chat \u002F writing assistant. No coding side effects; web search, web fetch, memory |\n| **Coding** | Full agent: all tools, worktrees, sandbox, harness |\n| **Review** | Read\u002Fsearch only; guardrails deny write\u002Fedit\u002Fbash |\n| **Minimal** | Just `bash` + `read` + `edit` |\n\n### Harness orchestration & governance\n\n- **Visual assembly canvas** — the full agent pipeline as a live graph: model → system prompt (with sources, AGENTS.md composition, token estimates) → extra instructions → tools → extensions → skills → prompt templates\n- **Hot re-orchestration** — toggle skills\u002Fextensions or append system instructions per session; `session.reload()` recomposes the system prompt in place while keeping conversation history\n- **Guardrails** — per-tool allow\u002Fask\u002Fdeny policies, regex rules for bash commands, budgets (turns, tool calls, session cost), subagent limits, repeated-call circuit breaker; everything surfaces as inline approval cards\n- **Self-tuning** — the agent can propose assembly changes via `harness_propose`; proposals require approval and hot-apply after the turn\n- **Trajectory drawer** — per-step snapshots of the exact assembly and tool calls sent to the model\n- **Tool disclosure** — with large tool sets, tools collapse behind `tool_search` \u002F `tool_activate` to save context\n- **Preset library** — save and reuse harness configurations\n\n### Agent capabilities\n\n- **Execution worlds** — built-in bash\u002Fread\u002Fwrite\u002Fedit run either locally or inside a cloud VM (`set_execution_world`)\n- **Cloud VM sandbox (E2B)** — full desktop VM with live screen streaming, `vm_gui` mouse\u002Fkeyboard control, `vm_file` transfer, `vm_screenshot`\n- **Local sandbox** — macOS seatbelt profiles: `off` \u002F `workspace` \u002F `strict`\n- **Subagents** — `subagent_run` spawns up to 4 parallel workers (optionally readonly or VM-bound), monitored in a dock\n- **Browser** — headed Chrome\u002FEdge automation via puppeteer-core with a persistent profile\n- **Web** — Tavily-powered `web_search` plus keyless `web_fetch` (page → markdown)\n- **Code mode** — `code_run` executes JavaScript in `node:vm` with `pi.bash` \u002F `pi.log`, under the same guardrails and execution world\n- **Deploy** — one-command workspace deploy to Vercel (preview by default, secrets and `.env` excluded, approval required), plus a full deployments ops panel (logs, promote, rollback, redeploy)\n- **Project memory** — agent persists long-term memories to `.pi\u002Fmemory.md`, injected into the system prompt across sessions\n\n### Resources & interop\n\n- **Package management** — install \u002F remove \u002F bulk-update npm and git plugin packages (global or per-project), shared with the pi CLI `packages` config\n- **Skills & prompts** — list all sources (global \u002F project \u002F packages), create from a SKILL.md scaffold, edit, delete in-app\n- **MCP** — one-click `pi-mcp-adapter` install, visual server overview, edit global `mcp.json` \u002F project `.mcp.json`\n- **CLI interop** — reads and writes pi's JSONL session files directly (`~\u002F.pi\u002Fagent\u002Fsessions\u002F`); resume, rename, and trash historical sessions\n- **Project trust gating** — `.pi` project resources load only after explicit user consent, matching the pi CLI security model\n\n### Sessions, models & auth\n\n- **Model management** — full provider catalog from the pi SDK, thinking-level switching, context gauge, cost tracking, manual compaction\n- **API keys** — stored in `~\u002F.pi\u002Fagent\u002Fauth.json`, shared with the CLI; custom providers \u002F relays via `models.json`\n- **Desktop OAuth** — subscription accounts (Claude Pro, ChatGPT, Copilot, …) authorize in-app via browser flow, no terminal needed\n\n### Scheduler & UX\n\n- **Scheduled tasks** — interval \u002F daily \u002F weekly agent runs, in the background or opening a chat, with notifications\n- **Terminals** — multi-tab user PTYs per chat, plus an interactive agent shell you can type into while the agent works\n- **Design system** — warm Claude-style light\u002Fdark themes (follows system), serif headings, fine-grained motion\n- **Command palette** (⌘K), shortcuts overlay (⌘\u002F), usage dashboard, i18n (English \u002F 中文)\n\n## Install\n\nDownload the latest DMG from [Releases](https:\u002F\u002Fgithub.com\u002Fryanlab\u002Fbivor\u002Freleases) — `arm64` for Apple Silicon, `x64` for Intel Macs.\n\n> [!WARNING]\n> Builds are currently unsigned (no Apple Developer certificate yet). On first launch, right-click the app → **Open**, or clear the quarantine flag: `xattr -cr \u002FApplications\u002FBivor.app`.\n\n## Developing from source\n\nRequirements: macOS (Apple Silicon or Intel), Node.js ≥ 20, [pnpm](https:\u002F\u002Fpnpm.io).\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fryanlab\u002Fbivor.git\ncd bivor\npnpm install\npnpm dev          # electron-vite dev with HMR\npnpm typecheck\npnpm build        # build to out\u002F\npnpm dist:mac     # package DMG + ZIP into dist\u002F\n```\n\n### Configuration\n\n| What | Where |\n|------|-------|\n| Model API keys \u002F OAuth (shared with pi CLI) | `~\u002F.pi\u002Fagent\u002Fauth.json` — manage from Settings |\n| Custom providers \u002F relays | `models.json` (pi CLI-compatible) |\n| Sessions (shared with pi CLI) | `~\u002F.pi\u002Fagent\u002Fsessions\u002F` |\n| App config (optional keys below) | Electron `userData\u002Fbivor-config.json` |\n\nOptional integrations, each enabling extra tools when configured in Settings:\n\n- **E2B API key** — cloud VM sandbox (`E2B_API_KEY`)\n- **Tavily API key** — `web_search` (`TAVILY_API_KEY`)\n- **Vercel token** — deploy tool + deployments panel (`VERCEL_TOKEN`, `VERCEL_TEAM_ID`)\n- **`CHROME_PATH`** — override the browser binary used by the browser tool\n\n## Architecture\n\n```\n┌─────────────┐  IPC   ┌──────────────┐  postMessage  ┌────────────────────┐\n│  Renderer    │◄──────►│ Main process │◄─────────────►│ Utility process ×N │\n│  React 19    │        │ windows\u002Fmenu │               │ pi SDK             │\n│  zustand     │        │ global svcs  │               │ AgentSessionRuntime│\n└─────────────┘        └──────────────┘               └────────────────────┘\n```\n\n- `src\u002Fmain\u002F` — windows, menu, chat process orchestration, global services (model catalog \u002F auth \u002F OAuth \u002F sessions \u002F worktrees \u002F checkpoints \u002F scheduler \u002F terminals)\n- `src\u002Fhost\u002F` — agent host: embeds the pi SDK runtime, trims and forwards the event stream, tree navigation, sandbox \u002F guardrails \u002F subagents \u002F browser \u002F web \u002F code mode \u002F deploy \u002F memory\n- `src\u002Fpreload\u002F` — typed contextBridge API\n- `src\u002Frenderer\u002F` — React UI; the event-stream reducer lives in `stores\u002Fapp-store.ts`\n- `src\u002Fshared\u002Fprotocol.ts` — typed protocol shared across all three processes\n\n## Testing\n\n```bash\nnode scripts\u002Fsdk-smoke.mjs \u003Cprovider>    # SDK-level smoke test\nnode scripts\u002Fe2e-cdp.mjs full \"task\"     # real end-to-end UI run driven over CDP\nnode scripts\u002Fe2e-harness.mjs             # resources center + hot harness orchestration\nnode scripts\u002Fshot.mjs out.png \"js expr\"  # CDP screenshot \u002F state injection\n```\n\nE2E scripts require the app to be started with `--remote-debugging-port=9223`.\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\n[MIT](LICENSE)\n","Bivor 是一款面向 macOS 的桌面工作台应用，专为 pi 编码智能体（pi coding agent）设计，提供图形化交互环境。其核心功能包括：基于 Electron 的多会话并行隔离执行、Git 工作树任务自动化（自动创建 task-* 分支与沙箱）、可视化会话历史树与分支管理、以及与 pi CLI 共享配置与认证状态。技术上采用 TypeScript 开发，深度集成 pi SDK（AgentSessionRuntime），支持云虚拟机沙箱与安全执行守卫。适用于需要在本地 macOS 环境中高效协同运行多个代码生成任务、进行 Git 协同开发验证及 LLM 编程实验的开发者与工程师。",2,"2026-08-19 02:30:08","CREATED_QUERY"]