{"id":50137671,"url":"https://github.com/devin-marks/pi-forge","last_synced_at":"2026-05-30T04:02:53.718Z","repository":{"id":355116994,"uuid":"1225557539","full_name":"Devin-Marks/pi-forge","owner":"Devin-Marks","description":"A fully featured WebUI development environment for the Pi Coding Agent.","archived":false,"fork":false,"pushed_at":"2026-05-21T01:37:34.000Z","size":13982,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-21T02:59:22.491Z","etag":null,"topics":["coding-agent","pi","pi-coding-agent","pi-mono","pi-package","pi-workbench","rest-api"],"latest_commit_sha":null,"homepage":"https://devin-marks.github.io/pi-forge/","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/Devin-Marks.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-30T12:00:40.000Z","updated_at":"2026-05-21T01:37:09.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/Devin-Marks/pi-forge","commit_stats":null,"previous_names":["devin-marks/pi-workbench","devin-marks/pi-forge"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/Devin-Marks/pi-forge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Devin-Marks%2Fpi-forge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Devin-Marks%2Fpi-forge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Devin-Marks%2Fpi-forge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Devin-Marks%2Fpi-forge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Devin-Marks","download_url":"https://codeload.github.com/Devin-Marks/pi-forge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Devin-Marks%2Fpi-forge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33415032,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T22:14:44.296Z","status":"ssl_error","status_checked_at":"2026-05-23T22:14:43.778Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["coding-agent","pi","pi-coding-agent","pi-mono","pi-package","pi-workbench","rest-api"],"created_at":"2026-05-23T23:07:13.050Z","updated_at":"2026-05-30T04:02:53.705Z","avatar_url":"https://github.com/Devin-Marks.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/icon.png\" alt=\"pi-forge\" width=\"120\" height=\"120\"/\u003e\n\u003c/p\u003e\n\n# pi-forge\n\n[![CI](https://github.com/Devin-Marks/pi-forge/actions/workflows/ci.yml/badge.svg)](https://github.com/Devin-Marks/pi-forge/actions/workflows/ci.yml)\n[![Release](https://img.shields.io/github/v/release/Devin-Marks/pi-forge?sort=semver)](https://github.com/Devin-Marks/pi-forge/releases)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)\n\nA self-hosted browser UI for the [pi coding agent](https://github.com/badlogic/pi-mono).\nChat with the agent against your code, browse files, run a terminal, and review\ndiffs — all from one tab.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/img0.png\" alt=\"pi-forge in action\" width=\"1200\"/\u003e\n\u003c/p\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eMore screenshots\u003c/summary\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/img1.png\" alt=\"Screenshot\" width=\"1000\"/\u003e\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003cimg src=\"docs/images/img2.png\" alt=\"Screenshot\" width=\"1000\"/\u003e\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003cimg src=\"docs/images/img3.png\" alt=\"Screenshot\" width=\"1000\"/\u003e\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003cimg src=\"docs/images/img4.png\" alt=\"Screenshot\" width=\"1000\"/\u003e\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003cimg src=\"docs/images/img5.png\" alt=\"Screenshot\" width=\"1000\"/\u003e\n  \u003cbr/\u003e\u003cbr/\u003e\n  \u003cimg src=\"docs/images/img6.png\" alt=\"Screenshot\" width=\"1000\"/\u003e\n\u003c/p\u003e\n\n\u003c/details\u003e\n\n## Why pi-forge?\n\n- **Self-hosted, single-tenant.** Your code, your provider keys, your container.\n  No cloud, no analytics, no multi-tenant cross-talk.\n- **Container-native.** Ships as a Docker image; deploys to Docker Compose,\n  Kubernetes, or OpenShift with the manifests in this repo. Bind-mount your\n  project tree, set an API key, go.\n- **Same API the UI uses.** Every browser interaction is a REST or SSE call\n  documented at `/api/docs`. Scripts, CI pipelines, and the chat UI hit the\n  same endpoints — no shadow surface.\n\n## Quick start\n\n### Docker (recommended for ongoing use)\n\n```bash\ngit clone https://github.com/Devin-Marks/pi-forge.git\ncd pi-forge\ncp docker/.env.example docker/.env       # edit auth + paths if you want\ncd docker \u0026\u0026 docker compose up -d --build\n```\n\n### npm (no Docker, runs from your shell)\n\n```bash\nnpx pi-forge                  # one-shot\nnpm install -g pi-forge       # or install globally, then `pi-forge`\n```\n\nBy default pi-forge listens on `http://localhost:3000`, reads provider config\nfrom `~/.pi/agent/` (shared with the host `pi` CLI if you have one), and\nstores its own state in `~/.pi-forge/`. Override with flags or env vars —\nevery server env var has a matching `--flag`:\n\n```bash\npi-forge --port 4000 --workspace-path ~/Code\npi-forge --api-key @/run/secrets/api-key --no-expose-docs\npi-forge --help            # full flag table grouped by category\n```\n\nFlags win when both a flag and the matching env var are set. See\n[`docs/configuration.md`](./docs/configuration.md) for the full mapping.\n\nOpen the listed URL, add a project (a folder under your workspace path),\ndrop a provider API key into Settings, and start a session.\n\nFor source builds and a development setup see\n[`CONTRIBUTING.md`](./CONTRIBUTING.md); for everything else follow the\n[Documentation](#documentation) table below.\n\n## Features\n\n- **Streaming chat** — token-by-token rendering with inline tool calls and results.\n- **Branchable session tree** — fork at any prior turn, navigate the tree,\n  bookmark abandoned branches, summarize-on-navigate.\n- **Per-turn diff panel** — every file the agent touched in the last turn,\n  aggregated into one reviewable changeset.\n- **Workspace tools in one tab** — file browser, tabbed CodeMirror editor with\n  ripgrep search, integrated `node-pty` terminal (persists across page refresh),\n  and a full git panel (status, diff, stage, commit, push, branch, log).\n- **MCP integration** — connect remote servers (StreamableHTTP / SSE) AND\n  local stdio servers; per-project `.mcp.json` with a per-project trust\n  gate on stdio (you opt in once per project), per-tool toggles, master\n  kill-switch in Settings.\n- **Pi-subagents support** — built-in surfacing of the community\n  [pi-subagents](https://github.com/nicobailon/pi-subagents) plugin (install\n  separately): rich tool card for parent calls, child sessions in the project\n  sidebar with cascade-delete on parent removal.\n- **Session orchestration** — opt-in supervisor mode for a session\n  (`ORCHESTRATION_ENABLED=true`, then toggle per-session): adds an\n  `orchestrate_*` tool group so the agent can spawn, observe, message,\n  interrupt, and kill worker sessions in the same project. Worker\n  events stream back into the supervisor's inbox; the supervisor's\n  LLM wakes on activity and reacts.\n- **Webhooks** — HTTPS POST deliveries on agent and session events\n  (`agent_end`, `ask_user_question`, `process_alert`, `auto_retry_end`,\n  `compaction_end`, `session_created`, `session_deleted`). Global or\n  per-project scope, optional HMAC-SHA256 signing, custom headers (Bearer\n  tokens etc., redacted on the wire), delivery history with retries.\n- **Background-process tool** — the `process` tool lets the agent\n  spawn long-running processes (dev servers, watchers, builds) that\n  outlive a single turn. Per-session manager, log capture, regex\n  watches, alerts on exit.\n- **Browser-native `todo` + `ask_user_question` tools** — drop-in\n  contract-compatible implementations of the community plugins; live\n  panel in the chat surface, per-session state.\n- **Quick actions** — operator-defined chips in the chat toolbar\n  that either run a shell command in the active project's cwd or\n  insert/send a templated prompt to the active session.\n- **Provider management** — Anthropic / OpenAI / Google / OpenRouter built-in,\n  plus custom OpenAI-compatible endpoints (vLLM, LiteLLM, Ollama, internal\n  gateways) via `models.json`.\n- **Per-project overrides** — tri-state toggles (enable / disable / inherit)\n  for skills, tools, and prompts; cascade view shows every project's override\n  at a glance.\n- **Auth that fits ops** — browser password + JWT (auto-generated signing key,\n  persisted across restarts) and / or a static API key for scripts and CI.\n  Loopback bind by default.\n- **Programmatic API** — REST + SSE with auto-generated OpenAPI 3 spec at\n  `/api/docs/json` and an interactive Swagger UI at `/api/docs`.\n- **Installable PWA** — manifest with raster + maskable icons, offline page,\n  mobile-tuned chat surface, \"Add to Home Screen\" on desktop and mobile.\n\nThe full feature grid (with categories and screenshots) is on the\n[project site](https://devin-marks.github.io/pi-forge/#features).\n\n## Documentation\n\n**Install \u0026 deploy**\n- [Docker image](./docs/containers.md) — image internals, volumes, env, troubleshooting\n- [Private-network deployment](./docs/deployment.md) — reverse proxy, auth, multi-deploy patterns\n- [Kubernetes / OpenShift](./kubernetes/DEPLOY.md) — manifests + walkthroughs\n- [Security model](./SECURITY.md) — threat model + vulnerability reporting\n\n**Configure \u0026 extend**\n- [Configuration \u0026 env vars](./docs/configuration.md) — every flag, env var, and pi config file\n- [MCP servers](./docs/mcp.md) — remote + stdio servers, per-project trust gate, per-tool toggles\n- [Webhooks](./docs/webhooks.md) — HTTPS POSTs on agent/session events, HMAC signing, retry\n- [Session orchestration](./docs/orchestration.md) — supervisor sessions that spawn and coordinate workers\n- [Background processes](./docs/processes.md) — the `process` tool for dev servers, watchers, builds\n- [`todo` tool](./docs/todo.md) · [`ask_user_question` tool](./docs/ask-user-question.md) — browser-native plugin tools\n- [Quick actions](./docs/quick-actions.md) — operator-defined chat-toolbar chips\n- [Mobile / PWA install](./docs/mobile.md) — \"Add to Home Screen\" on iOS / Android\n\n**Use programmatically**\n- [API examples](./docs/api-examples.md) — curl / Python / Node walkthroughs against `/api/v1`\n- [SSE event catalogue](./docs/sse-events.md) — every event type with example payload\n\n**Project**\n- [Architecture \u0026 data flow](./docs/architecture.md) — component map, request lifecycles\n- [Contributing](./CONTRIBUTING.md) — dev setup, PR process, release flow\n- [`CLAUDE.md`](./CLAUDE.md) — agent-facing conventions and gotchas\n- [Privacy](./PRIVACY.md) · [Code of Conduct](./CODE_OF_CONDUCT.md)\n\n## Versions\n\nEach pi-forge release pins exact patch versions of the pi SDK trio\n(`pi-coding-agent`, `pi-agent-core`, `pi-ai`) — no caret/tilde — so a\ntransparent SDK upgrade can't surprise an existing install. Pinned versions\nlive in [`packages/server/package.json`](./packages/server/package.json).\n\nOnly the latest tag is supported. Breaking SDK changes pi-forge had to absorb\nappear in the release notes' **Changed** section. Per-tag notes:\n[CHANGELOG.md](./CHANGELOG.md).\n\n## Heads up\n\npi-forge drives a coding agent that runs real commands (`bash`, `write`,\n`edit`) as the container user. Review what it does, set provider-side spending\nlimits, and run it on a private network — pi-forge is not designed for\npublic-internet exposure. See [`SECURITY.md`](./SECURITY.md) for the threat\nmodel and [`docs/deployment.md`](./docs/deployment.md) for deploy guidance.\n\n## License\n\nMIT — see [`LICENSE`](./LICENSE). Built on\n[pi-mono](https://github.com/badlogic/pi-mono), the upstream pi agent SDK.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevin-marks%2Fpi-forge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevin-marks%2Fpi-forge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevin-marks%2Fpi-forge/lists"}