{"id":50232938,"url":"https://github.com/samfoy/pi-dashboard","last_synced_at":"2026-06-20T10:02:08.766Z","repository":{"id":351427091,"uuid":"1210952272","full_name":"samfoy/pi-dashboard","owner":"samfoy","description":"Web dashboard for the pi coding agent — multi-session chat, file browser, doc collaboration, terminal, and more","archived":false,"fork":false,"pushed_at":"2026-06-18T19:52:49.000Z","size":9191,"stargazers_count":37,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-06-18T21:26:09.491Z","etag":null,"topics":["ai-coding-agent","chat-ui","dashboard","developer-tools","pi-coding-agent","web-ui"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/samfoy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-14T23:33:54.000Z","updated_at":"2026-06-18T19:52:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/samfoy/pi-dashboard","commit_stats":null,"previous_names":["samfoy/pi-dashboard"],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/samfoy/pi-dashboard","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samfoy%2Fpi-dashboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samfoy%2Fpi-dashboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samfoy%2Fpi-dashboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samfoy%2Fpi-dashboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/samfoy","download_url":"https://codeload.github.com/samfoy/pi-dashboard/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/samfoy%2Fpi-dashboard/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34565244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-20T02:00:06.407Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-coding-agent","chat-ui","dashboard","developer-tools","pi-coding-agent","web-ui"],"created_at":"2026-05-26T19:00:32.254Z","updated_at":"2026-06-20T10:02:08.759Z","avatar_url":"https://github.com/samfoy.png","language":"TypeScript","funding_links":[],"categories":["Extensions"],"sub_categories":[],"readme":"# Pi Dashboard\n\nA web and iOS dashboard for the [pi coding agent](https://github.com/mariozechner/pi-coding-agent). Chat with pi, manage multiple sessions, browse files, and run terminals — from your browser or iPhone.\n\n![Pi Dashboard](https://img.shields.io/badge/status-alpha-orange)\n\n## Features\n\n### Chat\n- **Multi-slot sessions** — run multiple pi conversations, each with its own working directory, model, and history\n- **Streaming responses** — real-time token streaming with thinking blocks, tool calls, and inline images\n- **Slash commands** — `/clear`, `/compact`, `/import`, and custom commands from pi extensions\n- **Fork \u0026 resume** — fork a conversation at any point, or resume past sessions\n- **Context usage** — live token/context tracking per session\n\n### Files \u0026 Editing\n- **File browser** — directory tree navigation with workspace picker\n- **Document panel** — syntax-highlighted code viewer, markdown preview, PDF/XLSX rendering\n- **Inline comments** — comment on line ranges, review and send feedback to the agent\n- **Diff view** — word-level diff highlighting with accept/reject\n\n### Terminal \u0026 Monitoring\n- **Integrated terminal** — full PTY terminal via xterm.js and node-pty\n- **Background processes** — live status cards for subagents and long-running tasks\n- **System monitor** — CPU, memory, disk, and process stats\n- **Streaming logs** — real-time pi internal log viewer\n\n### iOS App\n- **Native SwiftUI** — full chat interface with markdown rendering, thinking blocks, and tool call display\n- **Session list** — browse, search, and manage all chat slots\n- **Push notifications** — get notified when pi needs approval or finishes a task\n- **Siri Shortcuts** — \"Ask Pi\", \"Send to Pi\", \"Check Pi Status\", \"Get Active Chats\"\n- **Session history** — browse and resume past sessions\n- **Project picker** — switch working directories per session\n\n### Desktop App (Optional)\n- **Electron wrapper** — native window with system tray\n- **SSH tunnel management** — automatic tunnel setup for remote servers\n\n## Quick Start\n\n```bash\ngit clone https://github.com/samfoy/pi-dashboard.git\ncd pi-dashboard\nnpm run setup    # installs deps + builds frontend\nnpm start        # starts server with auto-restart\n```\n\nOpen http://localhost:7777.\n\n### Requirements\n\n- Node.js 18+\n- [pi](https://github.com/mariozechner/pi-coding-agent) installed and on PATH\n\n### Run as a Service (macOS)\n\n```bash\n./ctl.sh install   # installs launchd plist, starts on boot\n./ctl.sh start     # start the service\n./ctl.sh stop      # stop the service\n./ctl.sh restart   # restart\n./ctl.sh status    # check status\n./ctl.sh logs      # tail stdout/stderr\n```\n\nLogs: `~/Library/Logs/pi-dashboard/stdout.log` and `stderr.log`.\n\n### Environment Variables\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `PI_DASH_PORT` | `7777` | Server port |\n\n## Architecture\n\n```\npi-dashboard/\n├── backend/\n│   ├── server.js          # Express + WebSocket server, chat routing, file/doc APIs\n│   ├── pi-manager.js      # Spawns pi --mode rpc processes, one per chat slot\n│   ├── pty-manager.js     # Terminal sessions via node-pty\n│   ├── pi-env.js          # Pi environment detection (extensions, models, memory stats)\n│   └── session-store.js   # Slot state persistence, session JSONL parsing\n├── frontend/              # React + TypeScript + Tailwind + Vite\n│   └── src/\n│       ├── pages/         # ChatPage, ChatSidebar, TerminalPage, LogsPage, SettingsPage, SystemPage\n│       ├── components/    # MarkdownPanel, DiffView, FileBrowser, InlineComments, WelcomeView\n│       └── store/         # Redux slices (chat, dashboard, settings, notifications)\n├── ios/PiDash/            # Native iOS app (SwiftUI)\n│   └── PiDash/\n│       ├── Views/         # Chat, SlotList, Settings, Common\n│       ├── ViewModels/    # ChatViewModel, SlotListViewModel\n│       ├── Intents/       # Siri Shortcuts (AskPi, SendToPi, CheckStatus, GetActiveChats)\n│       └── Networking/    # API client\n├── desktop/               # Optional Electron wrapper\n├── run.sh                 # Auto-restart wrapper\n├── start.sh               # Startup script (used by launchd)\n├── restart.sh             # Graceful restart via SIGUSR2\n├── ctl.sh                 # Service management (install/start/stop/restart/logs)\n└── pi-dash-connect.sh     # SSH tunnel helper for remote access\n```\n\nThe backend spawns pi as a child process using JSON-RPC mode (`pi --mode rpc`), one per chat slot. The React frontend and iOS app connect via WebSocket for real-time streaming. Slot metadata is persisted to `~/.pi/agent/pi-web-sessions.json`; message history lives in pi's session files and is loaded on demand.\n\nIdle pi processes are automatically reaped after 30 minutes and restart transparently on the next message.\n\n## Remote Access\n\n### Tailscale (recommended)\n\nIf both machines are on the same Tailscale network, just hit the Tailscale IP directly:\n\n```\nhttp://\u003ctailscale-ip\u003e:7777\n```\n\n### SSH Tunnel\n\n```bash\nPI_DASH_HOST=your-server PI_DASH_USER=you ./pi-dash-connect.sh\n```\n\nOr manually:\n\n```bash\nssh -f -N -L 7777:localhost:7777 user@your-remote-host\nopen http://localhost:7777\n```\n\n## iOS App\n\nThe iOS app lives in `ios/PiDash/`. Open `PiDash.xcodeproj` in Xcode and build for your device.\n\nConfigure the server URL in the app's settings. Supports both local network and Tailscale connections.\n\nFeatures: full chat with markdown/code rendering, thinking block expansion, tool call details, session management, push notifications for approval requests, and Siri Shortcuts for hands-free interaction.\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamfoy%2Fpi-dashboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsamfoy%2Fpi-dashboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsamfoy%2Fpi-dashboard/lists"}