Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

517 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Picot (π-cot(e))

English | 中文

A local desktop GUI for the Pi coding agent. No cloud, no account — runs entirely on your machine.

License: MIT Latest release Platform

Picot ships a known-good build of the pi runtime inside the .app bundle, so there's no separate pi install to manage, no PATH shenanigans, and no version drift between Picot and the agent it talks to. Open any project folder, start chatting with the agent, browse sessions and files — no terminal required. Multiple projects run in parallel, each in its own window with its own isolated agent process.

Picot hero


Contents


Install

Download from GitHub Releases

You do not need to install the pi CLI separately — Picot bundles its own pi runtime.

macOS unsigned release notice

Picot currently ships macOS builds without Apple Developer ID signing/notarization. Expected Gatekeeper behavior:

"Picot" cannot be opened because the developer cannot be verified.

To allow it:

  1. Drag Picot.app into /Applications
  2. Right-click → Open
  3. If blocked: System Settings → Privacy & Security → Open Anyway

macOS Gatekeeper warning

Then click Done:

Allow app in macOS security settings


Quick Start

  1. Launch Picot
  2. Click a project bubble or pick a folder
  3. Start chatting — the embedded pi agent starts automatically

Provide your model credentials via pi /login inside any workspace, or by writing ~/.pi/agent/auth.json directly. Picot doesn't manage credentials itself. The interface is available in English and Chinese.


Features

📸 UI Preview

Picot workspace and project UI

💬 Chat
  • Full markdown rendering with syntax-highlighted code blocks
  • Streaming responses with live typing indicator (powered by remend)
  • Image attachments — paste, drag & drop, or button
  • Inline diff viewer for edit tool calls (red/green lines)
  • Tool-call cards and thinking blocks rendered live
  • Copy any message with one click
  • Scroll-to-bottom button with unread indicator
  • Message queuing — type while the agent is working; messages queue as pills and auto-send when ready
  • @ file mentions — type @ in any composer to search and insert a file-path reference (workspace, ../, ~/, or absolute); shared across Main, Side, and Quick Chat
  • Conversation turn navigator — Codex-style dot rail beside the chat; hover a dot for a preview, click to jump to that turn
  • Command palette — quick access to Compact, Expand/Collapse All Tools, Settings, and Help
  • Fork from any message — branch a new session off any point in the conversation
⚡ Temporary chats
  • Side Chat keeps tools available in an isolated, unsaved Pi process for the current workspace; open up to five as tabs alongside file tabs in the right panel — the panel stays open while any Side Chat tab remains, and collapses only when both file and Side Chat tabs are closed.
  • Quick Chat is a single non-modal, tool-free, unsaved chat. Open it from the icon directly after the sidebar search field.
  • Both compose with the same model selector, thinking-level control, voice input, and icon controls as the primary chat. They are available only in authenticated desktop windows, never through mobile or LAN access.
🗂️ Multi-Session & Multi-Agent
  • Multiple agents in parallel — each session spawns its own headless pi process; no new OS window, no interruption of running sessions
  • Browse and resume any past session from the sidebar
  • Full-text search across all session history with highlighted snippets
  • Sessions sorted by creation time; live session marked with a green dot
  • Inline session rename, favourites, tags, and filtering
  • Workspace Focus — use the arrow on the current workspace to switch the left sidebar into a task view, including before a new task has created its first saved session
  • Safe individual deletion — delete a session from Focus or ARCHIVED; running sessions are refused by the server
  • RECENT — a cross-workspace, most-recently-used list keeps the last five visited sessions at the top of the sidebar
📥 Agent Inbox (Beta)
  • Connect a Telegram bot — incoming DMs land in a pinned Agent Inbox session, kept separate from your normal project chats
  • Dispatch tasks from the inbox to any open project's agent; track pending / running / done in a resizable task panel
  • Task lifecycle events (dispatched, needs input, done, failed) round-trip back to the inbox, including a reply to the original Telegram sender
  • Built-in Telegram Doctor check to diagnose bot/token/connectivity issues from Settings
🗃️ Projects & Workspace
  • Multi-project — each project gets its own window, working directory, session history, and agent
  • Shows the current git branch in the project header
  • Open in external editor — launch VS Code, Cursor, or any app directly from Picot
  • Native folder picker to open any project without touching the terminal
📱 Mobile & LAN Access

LAN and mobile access panel

Picot on mobile

  • LAN QR code — scan to open Picot on any device on the same network
  • Mobile-optimised URL handling and App Launcher support (installable as PWA on iOS/Android)
📦 Package Manager

Built-in package manager UI

  • Browse, install, and remove community packages from within the UI
  • Built on top of pi install — no separate package commands needed
💰 Cost & Usage Dashboard

Cost dashboard overview

Per-model and trend breakdown

  • Per-session cost tracking with live token/cost metrics
  • Full cost dashboard with infobar, trends, and per-model breakdown
  • Context window visualiser — click the token pill to see cached tokens, fresh input, and available space
🎨 Themes & Appearance
  • Six built-in themes: Dusk (default), Dawn, Midnight, Clean, Terracotta, Sage
  • Frosted-glass header and input bar (backdrop-filter: blur)
  • Native macOS title bar overlay integration
  • Window dragging from the header area — feels like a native app
  • Language — switch the live interface between English, Simplified Chinese, or the system preference
🎤 Voice Input
  • Mic button in the input area using Web Speech API (on-device dictation)
  • Live transcription into the textarea; pulses red while recording
🗄️ File Browser, Preview & Editor
  • Right sidebar with a lazy-loaded workspace file tree
  • Click a file to open it in a resizable, tabbed preview panel; tabs are restored separately for each workspace
  • Preview Markdown, images, PDF documents, and source files; Markdown is sanitized before rendering
  • Edit supported text files in the built-in CodeMirror editor with syntax highlighting, line wrapping, search, go-to-line, auto-save, and external-change conflict protection
  • Double-click to open a file in its native desktop application
  • Drag a file from the tree onto the chat input to insert a workspace-relative @path reference
⚙️ Settings & Control

Settings and controls

  • Model picker with search/filter and keyboard support
  • Thinking level toggle (off / low / medium / high)
  • Auto and manual context compaction with status display
  • Push notification toggle
  • Skills management — Settings → Skills: browse every discovered skill per source root and toggle individual skills or whole groups using Pi's !/+/- rule semantics (takes effect on next session/restart)
  • Auto-updater — Settings → General → Updates for one-click in-app updates

For Developers

Architecture

Picot starts a Rust HostServer and a managed native pi --mode rpc process. The WebView talks to /v2/ws on the host, and the host bridges those frames to Pi over stdio RPC. The bundled picot-bridge.mjs extension provides Picot-specific Pi commands; it does not serve the app UI.

┌──────────────────────────────────────────────────────┐
│ Picot .app                                       │
│                                                      │
│   Tauri + native HostServer (Rust)                   │
│      ├─► spawn  pi --mode rpc --extension picot-bridge.mjs │
│      ├─► bridge stdio RPC frames over /v2/ws         │
│      └─► OS Window ──► WebView ──► native host HTTP  │
│                                                      │
│   resources/                                         │
│      ├─ public/             (frontend)               │
│      ├─ extensions/         (picot-bridge.mjs)       │
│      └─ pi/                 (bun-compiled pi binary) │
└──────────────────────────────────────────────────────┘
                       │
                       ▼ reads / writes
              ~/.pi/agent/
                 ├─ sessions/   (chat history)
                 ├─ auth.json   (API keys)
                 └─ settings.json

This diagram is a public-facing summary. The source-of-truth version — kept in sync with this one — lives in AGENTS.md, which also covers goals, constraints, and per-module conventions for anyone contributing code.

Pi capabilities integrated

Picot does not re-implement agent logic — it embeds Pi and exposes its runtime capabilities through a native UI.

  • Embedded pi --mode rpc runtime — one managed process per workspace, isolated by project
  • Streaming RPC bridge — token-by-token output, tool-call events, and thinking blocks rendered live
  • Session lifecycle APIs — create, switch, and resume sessions; full per-project history
  • Native host server — Rust owns the HTTP/WebSocket surface and bridges browser frames to Pi RPC
  • Extension compatibility — user extensions from ~/.pi/agent/extensions/ and .pi/extensions/ are auto-loaded
  • Credential reuse — reads Pi's existing ~/.pi/agent/auth.json; no separate login needed

Build from source

git clone https://github.com/shixin-guo/picot.git
cd picot
bun install --frozen-lockfile
bun run dev      # fetch embedded pi binary + start tauri dev with hot reload

To make a release build:

bun run build    # downloads embedded pi binary, then runs tauri build

For the full command reference (tests, lint/format, Rust checks, bumping the embedded pi version), see AGENTS.md → Common commands.

Project docs

  • AGENTS.md — architecture, module conventions, and the full command reference for anyone (human or agent) working in this repo
  • ROADMAP.md — shipped, in-progress, and planned features
  • docs/adr/ — architecture decision records
  • docs/DESIGN.md — design tokens and UI primitives

Upstream

Picot is a maintained fork of Tau, adapted for Pi-first, local development workflows. Key additions:

  • Native Pi runtime manager — spawns and supervises pi --mode rpc processes
  • Embedded pi runtime — no separate global install; Picot ships its own binary
  • Protocol v2 host bridge — typed routing for runtime, data, auth, and extension UI frames
  • Host data plane — Rust serves session and workspace data directly to the native UI

License

MIT

About

Local Codex-style desktop GUI for the Pi coding agent

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages