agegr/pi-webPublic

Web UI for the pi coding agent

AI summary: A local web-based UI for the Pi coding agent, offering rich session browsing, project previews, and real-time chat.

Stars
7.1K
+57 today
Forks
1K
Watchers
21
Open issues
57
Open PRs
14
Contributors
~122
Commits
881
Branches
1

TypeScriptMITCreated Mar 22, 2026Last push 2d agoLatest release v0.10.0+230 stars this week+1.2K this month

Quick answers

What is pi-web?
A local web-based UI for the Pi coding agent, offering rich session browsing, project previews, and real-time chat.
What does pi-web do?
Pi Web is a local web application that serves as an exceptionally rich graphical interface for the Pi CLI coding agent. It operates by continually reading local Pi session files and rendering them into a beautiful browser workspace, seamlessly transforming raw terminal output into highly readable Markdown. The interface enables developers to intuitively browse past sessions organized by project, interact via real-time chat, configure AI models, and actively manage agent skills. Crucially, it incorporates a comprehensive file explorer that previews project files natively within the browser, providing immense immediate context while the agent works. This completely eliminates the need to constantly switch back and forth between a terminal window and an IDE.
Who is pi-web for?
Developers and active users of the Pi coding agent who desperately want a richer, highly visual, web-based workspace rather than interacting strictly through the CLI.
How do I get started with pi-web?
npx @agegr/pi-web@latest
How popular is pi-web on GitHub?
agegr/pi-web has 7,054 stars and 1,042 forks on GitHub, and gained 230 stars in the last 7 days.
What license does pi-web use?
agegr/pi-web is released under the MIT license.

Star history

since Jul 27, 2026
02K4K6KJul 2026Aug 2026Sep 2026Oct 2026
7.1K stars as of Oct 4, 2026. Measured daily since Jul 27, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepOctMonWedFri2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 1 commit2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 1 commit2026-03-23: 7 commits2026-03-24: 15 commits2026-03-25: 6 commits2026-03-26: 7 commits2026-03-27: 3 commits2026-03-28: 1 commit2026-03-29: 0 commits2026-03-30: 1 commit2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 2 commits2026-04-03: 1 commit2026-04-04: 0 commits2026-04-05: 11 commits2026-04-06: 6 commits2026-04-07: 2 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 3 commits2026-04-12: 0 commits2026-04-13: 2 commits2026-04-14: 1 commit2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 3 commits2026-04-18: 1 commit2026-04-19: 1 commit2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 4 commits2026-04-24: 4 commits2026-04-25: 9 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 4 commits2026-04-30: 0 commits2026-05-01: 4 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 3 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 1 commit2026-05-09: 1 commit2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 1 commit2026-05-13: 1 commit2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 2 commits2026-05-22: 1 commit2026-05-23: 3 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 2 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 1 commit2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 8 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 4 commits2026-06-09: 3 commits2026-06-10: 1 commit2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 1 commit2026-06-17: 1 commit2026-06-18: 0 commits2026-06-19: 0 commits2026-06-20: 0 commits2026-06-21: 0 commits2026-06-22: 0 commits2026-06-23: 7 commits2026-06-24: 5 commits2026-06-25: 0 commits2026-06-26: 15 commits2026-06-27: 3 commits2026-06-28: 0 commits2026-06-29: 7 commits2026-06-30: 0 commits2026-07-01: 12 commits2026-07-02: 9 commits2026-07-03: 12 commits2026-07-04: 12 commits2026-07-05: 1 commit2026-07-06: 15 commits2026-07-07: 0 commits2026-07-08: 0 commits2026-07-09: 0 commits2026-07-10: 1 commit2026-07-11: 9 commits2026-07-12: 0 commits2026-07-13: 0 commits2026-07-14: 6 commits2026-07-15: 18 commits2026-07-16: 9 commits2026-07-17: 2 commits2026-07-18: 0 commits2026-07-19: 0 commits2026-07-20: 0 commits2026-07-21: 9 commits2026-07-22: 11 commits2026-07-23: 4 commits2026-07-24: 4 commits2026-07-25: 22 commits2026-07-26: 7 commits2026-07-27: 11 commits2026-07-28: 6 commits2026-07-29: 4 commits2026-07-30: 9 commits2026-07-31: 13 commits2026-08-01: 3 commits2026-08-02: 0 commits2026-08-03: 0 commits2026-08-04: 0 commits2026-08-05: 0 commits2026-08-06: 7 commits2026-08-07: 16 commits2026-08-08: 14 commits2026-08-09: 9 commits2026-08-10: 3 commits2026-08-11: 12 commits2026-08-12: 15 commits2026-08-13: 0 commits2026-08-14: 1 commit2026-08-15: 11 commits2026-08-16: 3 commits2026-08-17: 18 commits2026-08-18: 3 commits2026-08-19: 0 commits2026-08-20: 11 commits2026-08-21: 1 commit2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 31 commits2026-08-26: 10 commits2026-08-27: 0 commits2026-08-28: 0 commits2026-08-29: 0 commits2026-08-30: 0 commits2026-08-31: 0 commits2026-09-01: 0 commits2026-09-02: 0 commits2026-09-03: 0 commits2026-09-04: 0 commits2026-09-05: 43 commits2026-09-06: 5 commits2026-09-07: 1 commit2026-09-08: 5 commits2026-09-09: 2 commits2026-09-10: 4 commits2026-09-11: 27 commits2026-09-12: 0 commits2026-09-13: 1 commit2026-09-14: 0 commits2026-09-15: 3 commits2026-09-16: 5 commits2026-09-17: 0 commits2026-09-18: 9 commits2026-09-19: 27 commits2026-09-20: 0 commits2026-09-21: 0 commits2026-09-22: 13 commits2026-09-23: 14 commits2026-09-24: 0 commits2026-09-25: 0 commits2026-09-26: 0 commits2026-09-27: 0 commits2026-09-28: 0 commits2026-09-29: 3 commits2026-09-30: 32 commits2026-10-01: 27 commits2026-10-02: 37 commits2026-10-03: 10 commits2026-10-04: 0 commits2026-10-05: 0 commits2026-10-06: 0 commits2026-10-07: 0 commits2026-10-08: 0 commits2026-10-09: 0 commits2026-10-10: 0 commits
813 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Very active

    813 commits in 52 weeks

  • Community-driven

    ~122 contributors

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

  • Repeat trending

    16 trending appearances

What pi-web does

Pi Web is a local web application that serves as an exceptionally rich graphical interface for the Pi CLI coding agent. It operates by continually reading local Pi session files and rendering them into a beautiful browser workspace, seamlessly transforming raw terminal output into highly readable Markdown. The interface enables developers to intuitively browse past sessions organized by project, interact via real-time chat, configure AI models, and actively manage agent skills. Crucially, it incorporates a comprehensive file explorer that previews project files natively within the browser, providing immense immediate context while the agent works. This completely eliminates the need to constantly switch back and forth between a terminal window and an IDE.

Developers and active users of the Pi coding agent who desperately want a richer, highly visual, web-based workspace rather than interacting strictly through the CLI.

  • Session browsing: Continuously reads local files to accurately visualize past interactions, structured tool calls, and context usage in a clean UI.
  • Contextual file viewing: Directly renders complex project files, including source code, PDFs, and images, right in the browser while chatting.
  • Real-time chat interface: Delivers a sophisticated browser-based chat window featuring deep Markdown and Mermaid support for interacting with the agent.
  • Model configuration: Empowers users to rapidly switch active models, manage sensitive API keys, and seamlessly adjust thinking levels from the web UI.
  • Git worktree support: Enables effortlessly switching Git worktrees directly from the sidebar so new sessions strictly follow the chosen code checkout.

Where teams use it

Visual Agent Interaction

Developers who highly prefer a ChatGPT-like web interface over terminal commands for managing complex, multi-turn coding conversations with the Pi agent.

Session Debugging

Engineers carefully review past agent sessions to quickly understand exactly which tools were called and what precise data was returned in a structured format.

Rapid Model Switching

Users effortlessly toggle between entirely different LLMs via the web UI to accurately compare performance and execution cost on specific programming tasks.

Safe Exploration

Developers can strategically branch off an earlier message in a complex session to safely try completely different implementation directions without losing state.

Getting started: npx @agegr/pi-web@latest

README

main branch

Pi Web

中文文档 | 日本語 | Русский

Local browser UI for the pi coding agent. Pi Web uses the same local configuration and session files as pi, so you can browse and resume conversations, run agent turns, configure models and resources, and inspect project files from a browser.

Try the interactive demo → The real Pi Web UI runs entirely in your browser, with sample sessions, files and models. There is nothing to install; replies are pre-written and no model is called.

Pi Web displaying a pi session with structured Markdown, tool calls, and project navigation

Features

  • Session workspace: browse, resume, rename, export, and delete conversations grouped by project, with running state, context usage, cost, and compaction details.
  • Two ways to branch: New session creates an independent session file from an earlier message; Edit from here creates a branch inside the current session.
  • Project file tools: browse and upload files, inspect Git diffs, and preview source, Markdown, images, audio, PDFs, and DOCX files with automatic refresh.
  • Git worktrees: switch checkouts from the sidebar while keeping sessions from the same repository grouped together.
  • Web-based configuration: manage provider login and API keys, models, model tests, plugin packages, and skills without leaving Pi Web.
  • English, Simplified Chinese, and Traditional Chinese UI: Pi Web follows the browser language initially and provides a language switcher in the top bar.

Quick Start

Pi Web requires Node.js 22.19.0 or newer. Check your version with node --version, then run:

npx @agegr/pi-web@latest

The CLI opens a browser after the server is ready. If it does not, open http://127.0.0.1:30141. Pi Web listens only on 127.0.0.1 by default.

If no model provider is configured yet, open the Models panel to sign in or add an API key.

To install the pi-web command globally:

npm install -g @agegr/pi-web@latest
pi-web

To update, stop the running process with Ctrl+C and run the same install command again. To uninstall, run npm uninstall -g @agegr/pi-web.

Configuration

For port and hostname, command-line options override the corresponding environment variables. Either --no-open or PI_WEB_NO_OPEN=1 disables automatic browser opening. Run pi-web --help (or -h) to print startup options and exit without starting the server. Unknown options exit with an error.

Option or environment variable Purpose Default
--help, -h Print startup options and exit —
--port <port>, -p <port>, or PORT Server port 30141
--hostname <host>, -H <host>, or PI_WEB_HOSTNAME Bind hostname 127.0.0.1
--no-open or PI_WEB_NO_OPEN=1 Do not open a browser automatically Browser opens
PI_WEB_SKIP_VERSION_CHECK=1 Disable Pi Web update checks Unset
PI_WEB_ALLOWED_HOSTS Additional exact proxy or custom hostnames, comma-separated Unset
PI_WEB_PASSWORD Enable browser password login; API clients may use Basic Auth with username pi Authentication disabled
PI_WEB_IDLE_TIMEOUT_MS Session idle timeout in milliseconds, up to 2147483647; 0 disables idle shutdown; invalid or out-of-range values use the default 600000 (10 min)
PI_WEB_SHUTDOWN_DEADLINE_MS How long extensions get to handle session_shutdown before a closing session is disposed anyway, in milliseconds up to 2147483647; 0, invalid or out-of-range values use the default 5000 (5 s)

For example:

pi-web --help
pi-web -p 8080 -H 0.0.0.0 --no-open

Remote Access

Binding to a non-loopback address exposes an agent that can execute high-privilege actions. On a trusted LAN, require a long random password:

PI_WEB_PASSWORD='a-long-random-password' pi-web --hostname 0.0.0.0

Password authentication does not encrypt the connection. Do not expose Pi Web over plain HTTP to the internet; use HTTPS through a trusted reverse proxy or a trusted VPN. If a reverse proxy sends an external hostname, add that exact name to PI_WEB_ALLOWED_HOSTS. This allow-list does not change the address Pi Web binds to.

HTTP Proxy

Server-side model and API requests honor the standard HTTP_PROXY, HTTPS_PROXY, and NO_PROXY environment variables.

On macOS or Linux:

HTTP_PROXY=http://127.0.0.1:7890 \
HTTPS_PROXY=http://127.0.0.1:7890 \
NO_PROXY=localhost,127.0.0.1 \
npx @agegr/pi-web@latest

On Windows PowerShell:

$env:HTTP_PROXY = "http://127.0.0.1:7890"
$env:HTTPS_PROXY = "http://127.0.0.1:7890"
$env:NO_PROXY = "localhost,127.0.0.1"
npx @agegr/pi-web@latest

Notes

  • Agent data: Pi Web reads pi data from ~/.pi/agent by default, including session files under sessions/<encoded-cwd>/<timestamp>_<uuid>.jsonl. Set PI_CODING_AGENT_DIR to use another pi agent directory.
  • Filesystem access: Pi Web must be able to read the agent data directory and the working directories recorded by its sessions. Run Pi Web in the same filesystem environment as pi when sharing existing sessions.
  • Shared configuration: the Models panel uses pi's model, settings, and credential storage, so changes are visible to both interfaces.
  • File access boundary: the file browser is limited to working directories selected in Pi Web and project or session roots it already knows about; it is not a general filesystem browser.
  • Git worktrees: see Worktrees in Pi Web for switcher visibility, worktree creation, and removal behavior.

Downstream Session Context Menu

Electron wrappers and other downstream integrations can provide a session-row context menu without patching SessionSidebar. Listen for the cancelable pi-web:session-row-contextmenu browser event and call preventDefault() synchronously when the integration will handle it:

window.addEventListener("pi-web:session-row-contextmenu", (event) => {
  event.preventDefault();
  const { id, path, cwd, name, clientX, clientY, refresh } = event.detail;

  void openSessionMenu({ id, path, cwd, name, clientX, clientY }).then((changed) => {
    if (changed) refresh();
  });
});

The detail object contains id, path, cwd, optional name, pointer coordinates, and a refresh() callback for actions that change the session list. If no listener cancels the extension event, Pi Web preserves the browser's native context menu. This hook is browser-side and independent of Pi agent extensions.

Extension Session Liveness

Server-side Pi extensions with detached work can prevent automatic idle session eviction through the versioned global registry:

const liveness = globalThis[Symbol.for("@agegr/pi-web/session-liveness/v1")];
const release = liveness?.version === 1
  ? liveness.register({
      name: "my-extension",
      sessionId,
      sessionFile: sessionFile || undefined,
      isActive: () => detachedJobs.size > 0,
    })
  : () => {};

Register once per active extension session and call the returned idempotent release function on session shutdown, replacement, or reload. isActive must be synchronous, cheap, and scoped to the supplied exact session id or file. Provider errors fail safe by preserving that session. This lease only affects automatic idle eviction; explicit shutdown and Stop fallback cleanup still take precedence.

Development

npm install
npm run dev

The development server runs at http://127.0.0.1:30141. Run the common checks with:

npm test
node_modules/.bin/tsc --noEmit
npm run lint

Do not run next build or npm run build during normal development. It writes to .next/ and can interfere with the development server; leave builds for release work.

Contributor guides: Internationalization and Release process.

Repository Layout

app/             Next.js UI and API routes
components/      React UI components
hooks/           Client state and interaction hooks
lib/             Session, agent, model, file, Git, and security logic
public/          Static assets and PWA files
bin/             npm CLI entrypoint and launch option parsing
docs/            Focused user and contributor guides
demo/            Static browser demo published to GitHub Pages (see demo/README.md)

See AGENTS.md for the architecture notes and detailed file map.

License

MIT

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

36 total
  1. v0.10.0v0.10.0Oct 2, 2026

    ## 中文 这一版改动较大:Pi Web 开始完整支持 MCP,并升级到 pi 1.0。 ### 重点 - **MCP 服务器**:在「设置 › MCP」里管理。粘贴安装命令或配置即可添加,支持测试连接、OAuth 登录/退出、开关、删除(可撤销),以及选择工具如何提供给模型(代码模式 / 工具搜索 / 直接 / 隐藏)。 - **代码模式**:可选「自动」或「始终开启」,可设置是否接管内置工具、工具清单预算。聊天里会把 codemode 调用显示成脚本和它调用的工具。 - **项目信任**:信任对话框会列出项目 `.pi/mcp.json` 里的服务器和它们会运行的命令。新文件夹可以在添加服务器时一并信任。 - **只读会话更安全**:只读工具预设下,没有标记只读的 MCP 工具会被拦截。 - **升级到 pi 1.0**: - MCP 服务器不再拖慢第一条消息,只有「直接」工具的服务器会被等待。 - MCP 登录按服务器保存,同一个 URL 的不同服务器可以用不同账号。旧的登录会自动迁移。 - 代码模式提示词约少 40%,脚本可以生成图片(`models.generateImages()`)。 - Anthropic 登录新增「复制代码」方式,适合浏览器和 Pi Web 不在同一台机器时使用。 - 支持在 `mcp.json` 里写 `description`、`oauth.clientName`、`oauth.authServerMetadataUrl`、`auth.provider`。 ### 新增 - 运行中也能分叉会话、调整推理等级。 - 发送键可选 Enter 或 Ctrl+Enter;输入框里 Markdown 列表会自动续行。 - `/mcp` 直接打开「设置 › MCP」。 - 技能和插件支持「全部启用 / 全部停用」。 - 文件夹选择器可以新建文件夹;侧边栏可以在系统文件管理器中打开工作区;默认工作目录按本地日期创建(`~/pi-cwd/YYYYMMDD`)。 ### 修复 - 支持 Safari / iOS 16.2;手机上输入框不再被键盘挡住。 - Stop 能结束输出被子进程占住的 bash 命令。 - 自动压缩时显示「正在压缩」而不是「等待模型」。 - 修复子代理结果、断线重连、草稿、扩展对话框、工作树删除、Markdown 渲染等多处问题。 ### 升级注意 - 曾选过「代码模式,按搜索查找」(`codemode-deferred`)的服务器现在按「代码模式」处理,行为相同,无需修改。 - 项目 `.pi/mcp.json` 里使用 `auth` 的服务器会被拒绝(只允许写在全局 `mcp.json`);名称只差 `-` 和 `_` 的服务器,后一个会被跳过。 npm:`@agegr/p

  2. v0.9.3v0.9.3Sep 23, 2026

    ## 中文 - 升级上游 pi 依赖至 `0.87.1`,同步最新模型目录及相关修复。 - 修复认证、模型配置和会话事件问题,并做少量界面与依赖调整。 ## English - Upgrade upstream pi dependencies to `0.87.1`, including updated model catalogs and fixes. - Fix authentication, model configuration, and session event issues, with minor UI and dependency updates.

  3. v0.9.2v0.9.2Sep 22, 2026

    ## 中文 `v0.9.2` 重点改善了模型管理、长会话性能、多标签页体验,以及子代理运行的可靠性。同时补齐了一批文件查看、上传、插件管理和跨平台兼容问题。 > [!IMPORTANT] > 如果 Pi Web 可从公网访问,建议尽快升级。旧版使用的 Next.js 版本存在无需登录即可在服务器上执行代码的安全漏洞;本版已升级到 Next.js 16.3.5 并关闭不必要的图片处理入口。 ### 升级 直接运行最新版: ```bash npx @agegr/pi-web@latest ``` 或更新全局安装: ```bash npm install -g @agegr/pi-web@latest ``` ### 模型管理更直观 - 现在可以直接在 **设置 → 模型** 中启用或停用单个模型,也可以按模型服务商批量操作,不再需要手动编辑配置文件。已有选择、思考级别设置和暂时不可用的条目会被尽量保留;项目级配置存在时,界面会明确提示当前设置只读。([#930](https://github.com/agegr/pi-web/pull/930)) - 新增 **刷新模型列表** 按钮。模型服务商发布新模型后,可以立即获取最新列表,无需等待 Pi Web 更新,也无需先运行 Pi 命令行工具;离线模式下会给出明确提示。([#938](https://github.com/agegr/pi-web/pull/938)) - 由扩展添加的模型服务商现在也会出现在模型设置和登录页面中,可以正常管理其 API Key。([#833](https://github.com/agegr/pi-web/pull/833)) - 新增 OpenCode Go 用量与额度展示;较早的用量数据会显示“多久前更新”,避免把旧数据误认为当天数据。([#844](https://github.com/agegr/pi-web/pull/844), [8b084d3](https://github.com/agegr/pi-web/commit/8b084d338)) ### 长会话更快、更完整 - 会话列表会先显示已有信息,再在后台补充尚未读取的详情;会话搜索不会因为后台活动而反复刷新和重新排序。切回最近打开的会话时,会立即恢复已经加载的内容,也不会丢掉用户手动加载过的更早记录。([#940](https://github.com/agegr/pi-web/pull/940)) - 自动生成会话名称时,不再把整段历史和所有工具输出发送给模型。在 120 轮会话的基准中,模型输入量从约 74,000 token 降到约 1,700,耗时从约 3.8 秒降到约 1.3 秒。([#807](https://github.com/agegr/pi-web/pull/807))

  4. v0.9.1v0.9.1Sep 11, 2026

    ## 中文 基于 `v0.9.0..v0.9.1` 的提交整理。 ### 新增 - 新增 provider 用量配额展示(`6d53fd5`)。 - 完善内置 subagent 工作流:并发队列、持久化恢复、worktree 隔离、profile 支持和扩展工具选择器(`f106531`,`b77a25f`,`a31d5c5`,`bbe2f7d`,`2661247`,`e3fbbf6`)。 - 新增浏览器密码登录(`e685cac`)。 - 新增可读主题(`448e146`)。 - 新增大文本文件预览分页(`0e71201`)。 - 支持通过 `sidebar=collapsed` 参数以折叠侧栏打开嵌入式界面(`a74aef8`)。 ### 修复 - 保存 Agents profile 时保留其他运行时使用的 frontmatter 和扩展工具选择器(`553f2d7`)。 - 修复打开活动会话时流式输出丢失、SSE 重连时 shell 输出丢失、首次消息分支和重复命令提交问题(`4787a14`,`def1478`,`585d56c`,`d10988d`)。 - 修复模型显示恢复、扩展提示 Markdown 渲染和已废弃 `enabledModels` 诊断残留(`ed840ed`,`f4a700d`,`f607816`)。 - 修复 iOS 后台推送、终端 UTF-8 编码、Linux 终端预构建加载失败和运行时会话删除(`3e9fcfa`,`2e914db`,`ce18006`,`edf0deb`)。 - 改善文件选择器定位与键盘循环选择,并保留富文本粘贴链接(`1b88ec7`,`dab9850`,`5173f6a`)。 ### 改进 - 删除会话时同步删除 subagent 后代,并让选中的会话保持运行(`e83f4b5`,`0ff1138`)。 - 压缩会话 JSON 响应,改善大规模会话加载效率(`09383ae`)。 - 将主题和语言设置集中到设置面板,并修正主 worktree 标签(`2eb95b9`,`894c735`)。 ### 内部调整 - CI 固定使用 Node.js `22.19.0`,并更新 CLI、国际化和发布校验文档(`effa464`,`0ff32dd`,`c8c63a1`)。 - 发布 npm 包 `@agegr/[email protected]`。 ## English Prepared from commits in `v0.9.0..v0.9.1`. ### Added - Added provider usage quota visibility (`6d53fd5`). - Expanded the built-in subagent workflow with concurrent q

  5. v0.9.0v0.9.0Sep 5, 2026

    ## 中文 基于 `v0.8.11..v0.9.0` 的提交整理。 ### 新增 - 在文件面板中新增工作区终端标签页,支持恢复、重连、重启和可靠的进程清理(`9290c27`,#695)。 - 新增会话全文搜索,可查看命中片段、跳转到具体消息,并同步跨窗口变化(`1cbd96f`)。 - 支持选中助手回复中的文本后在当前对话提问,或从该位置创建带引用的新分支对话(`c0abfc2`,#698)。 - 重新启用内置 subagent 的 Agents 设置入口和运行时开关;该功能仍默认关闭(`237d0ca`)。 - 插件设置新增版本检查、单项更新和批量更新(`50b7f79`,#611)。 - 文件面板新增视频预览;完成的 Mermaid 图表默认显示预览并支持 SVG 下载(`9dceb23`,#655;`f3925bf`,#693)。 - 新增聊天内容宽度、字号和思考块默认展开设置;流式生成时可用 Alt/Option+Enter 发送跟进消息,并在模型不支持图片时给出提示(`039e843`,`8aec7a1`,`abb74bf`,`6d7c5e0`)。 - 新增 `PI_WEB_IDLE_TIMEOUT_MS`,可调整或关闭会话空闲回收(`e9f954a`,#665)。 ### 修复 - 修复压缩与分页后历史消息缺失、最新回复丢失和 minimap 无法导航的问题(`cd6032b`,`0ddb21f`)。 - 保留新会话未发送的文字与图片草稿,并恢复每个会话独立的阅读位置(`77ffe3c`,`430fe4d`)。 - 扩展请求对话框现在可折叠、支持键盘导航和截止时间提示;同时修正状态栏长文本及 widget 间距(`7c5f4e6`,`2356904`,`cc1394d`,`2e1c402`)。 - 修复子路径部署导航、Windows 盘符根目录访问,以及 Ctrl/Cmd 点击含编码字符的本地文件链接(`5de2d9a`,`0c525c8`,`5f8056d`)。 - 修复扩展后台任务仍运行时会话被错误回收,以及父会话文件缺失时无法删除子会话(`f57b565`,`9cf8d4d`)。 - 修复移动端流式输出时页面随键盘跳动,并改善 iOS/PWA 图标可读性(`be428cf`,`8c18f21`)。 - 修复宽 Markdown 表格无法横向滚动、模型加载失败后选择器消失、重复完成通知不再提醒及技能 frontmatter 围栏被改写的问题(`07dd093`,`18923e6`,`edf574a`,`ff63346`)。 ### 改进 - 缓存未变化的会话元数据并虚拟化侧栏列表,改善大量会话时的扫描和渲染速度(`8cbafdd`,`5f8f47b`)。 - 缓存文件语法高亮树,减少文件面板开关和文本选择时的卡顿(`5548

Code frequency

additions and deletions
+67.7K-67.7KWeek of 2026-03-15: +17,428 linesWeek of 2026-03-15: -0 linesWeek of 2026-03-22: +10,614 linesWeek of 2026-03-22: -6,705 linesWeek of 2026-03-29: +158 linesWeek of 2026-03-29: -92 linesWeek of 2026-04-05: +2,766 linesWeek of 2026-04-05: -1,495 linesWeek of 2026-04-12: +1,795 linesWeek of 2026-04-12: -1,166 linesWeek of 2026-04-19: +1,804 linesWeek of 2026-04-19: -1,214 linesWeek of 2026-04-26: +9,178 linesWeek of 2026-04-26: -2,206 linesWeek of 2026-05-03: +1,656 linesWeek of 2026-05-03: -425 linesWeek of 2026-05-10: +264 linesWeek of 2026-05-10: -67 linesWeek of 2026-05-17: +5,021 linesWeek of 2026-05-17: -5,317 linesWeek of 2026-05-24: +264 linesWeek of 2026-05-24: -8 linesWeek of 2026-05-31: +1,532 linesWeek of 2026-05-31: -531 linesWeek of 2026-06-07: +631 linesWeek of 2026-06-07: -335 linesWeek of 2026-06-14: +47 linesWeek of 2026-06-14: -14 linesWeek of 2026-06-21: +3,855 linesWeek of 2026-06-21: -1,024 linesWeek of 2026-06-28: +7,433 linesWeek of 2026-06-28: -1,005 linesWeek of 2026-07-05: +2,171 linesWeek of 2026-07-05: -790 linesWeek of 2026-07-12: +3,884 linesWeek of 2026-07-12: -724 linesWeek of 2026-07-19: +8,600 linesWeek of 2026-07-19: -2,355 linesWeek of 2026-07-26: +8,804 linesWeek of 2026-07-26: -1,973 linesWeek of 2026-08-02: +7,262 linesWeek of 2026-08-02: -1,144 linesWeek of 2026-08-09: +9,422 linesWeek of 2026-08-09: -2,877 linesWeek of 2026-08-16: +11,143 linesWeek of 2026-08-16: -3,381 linesWeek of 2026-08-23: +5,981 linesWeek of 2026-08-23: -8,692 linesWeek of 2026-08-30: +9,924 linesWeek of 2026-08-30: -1,825 linesWeek of 2026-09-06: +5,187 linesWeek of 2026-09-06: -1,125 linesWeek of 2026-09-13: +4,400 linesWeek of 2026-09-13: -824 linesWeek of 2026-09-20: +67,711 linesWeek of 2026-09-20: -2,087 linesWeek of 2026-09-27: +56,574 linesWeek of 2026-09-27: -6,205 linesWeek of 2026-10-04: +0 linesWeek of 2026-10-04: -0 linesMar 15, 2026Oct 4, 2026
+265.5K lines added, -55.6K removed over the last year.

Commits per week

last 52 weeks
1090Week of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 1 commitsWeek of 2026-03-22: 40 commitsWeek of 2026-03-29: 4 commitsWeek of 2026-04-05: 22 commitsWeek of 2026-04-12: 7 commitsWeek of 2026-04-19: 18 commitsWeek of 2026-04-26: 8 commitsWeek of 2026-05-03: 5 commitsWeek of 2026-05-10: 2 commitsWeek of 2026-05-17: 6 commitsWeek of 2026-05-24: 2 commitsWeek of 2026-05-31: 9 commitsWeek of 2026-06-07: 8 commitsWeek of 2026-06-14: 2 commitsWeek of 2026-06-21: 30 commitsWeek of 2026-06-28: 52 commitsWeek of 2026-07-05: 26 commitsWeek of 2026-07-12: 35 commitsWeek of 2026-07-19: 50 commitsWeek of 2026-07-26: 53 commitsWeek of 2026-08-02: 37 commitsWeek of 2026-08-09: 51 commitsWeek of 2026-08-16: 36 commitsWeek of 2026-08-23: 41 commitsWeek of 2026-08-30: 43 commitsWeek of 2026-09-06: 44 commitsWeek of 2026-09-13: 45 commitsWeek of 2026-09-20: 27 commitsWeek of 2026-09-27: 109 commitsWeek of 2026-10-04: 0 commitsOct 12, 2025Oct 4, 2026
813 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 7 commitsSun 1:00 — 4 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 0 commitsSun 10:00 — 0 commitsSun 11:00 — 0 commitsSun 12:00 — 0 commitsSun 13:00 — 0 commitsSun 14:00 — 2 commitsSun 15:00 — 2 commitsSun 16:00 — 2 commitsSun 17:00 — 1 commitsSun 18:00 — 2 commitsSun 19:00 — 3 commitsSun 20:00 — 7 commitsSun 21:00 — 3 commitsSun 22:00 — 2 commitsSun 23:00 — 5 commitsMon 0:00 — 2 commitsMon 1:00 — 0 commitsMon 2:00 — 2 commitsMon 3:00 — 0 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 0 commitsMon 7:00 — 0 commitsMon 8:00 — 1 commitsMon 9:00 — 0 commitsMon 10:00 — 0 commitsMon 11:00 — 0 commitsMon 12:00 — 1 commitsMon 13:00 — 4 commitsMon 14:00 — 3 commitsMon 15:00 — 2 commitsMon 16:00 — 6 commitsMon 17:00 — 15 commitsMon 18:00 — 0 commitsMon 19:00 — 7 commitsMon 20:00 — 1 commitsMon 21:00 — 12 commitsMon 22:00 — 17 commitsMon 23:00 — 5 commitsTue 0:00 — 1 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 1 commitsTue 8:00 — 2 commitsTue 9:00 — 2 commitsTue 10:00 — 0 commitsTue 11:00 — 6 commitsTue 12:00 — 1 commitsTue 13:00 — 3 commitsTue 14:00 — 4 commitsTue 15:00 — 7 commitsTue 16:00 — 6 commitsTue 17:00 — 9 commitsTue 18:00 — 4 commitsTue 19:00 — 12 commitsTue 20:00 — 7 commitsTue 21:00 — 18 commitsTue 22:00 — 22 commitsTue 23:00 — 16 commitsWed 0:00 — 9 commitsWed 1:00 — 5 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 5 commitsWed 6:00 — 1 commitsWed 7:00 — 0 commitsWed 8:00 — 1 commitsWed 9:00 — 2 commitsWed 10:00 — 2 commitsWed 11:00 — 1 commitsWed 12:00 — 6 commitsWed 13:00 — 4 commitsWed 14:00 — 6 commitsWed 15:00 — 7 commitsWed 16:00 — 8 commitsWed 17:00 — 4 commitsWed 18:00 — 0 commitsWed 19:00 — 15 commitsWed 20:00 — 14 commitsWed 21:00 — 20 commitsWed 22:00 — 22 commitsWed 23:00 — 12 commitsThu 0:00 — 4 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 0 commitsThu 8:00 — 1 commitsThu 9:00 — 3 commitsThu 10:00 — 1 commitsThu 11:00 — 3 commitsThu 12:00 — 1 commitsThu 13:00 — 0 commitsThu 14:00 — 15 commitsThu 15:00 — 9 commitsThu 16:00 — 6 commitsThu 17:00 — 3 commitsThu 18:00 — 4 commitsThu 19:00 — 4 commitsThu 20:00 — 9 commitsThu 21:00 — 12 commitsThu 22:00 — 17 commitsThu 23:00 — 11 commitsFri 0:00 — 6 commitsFri 1:00 — 5 commitsFri 2:00 — 1 commitsFri 3:00 — 2 commitsFri 4:00 — 1 commitsFri 5:00 — 2 commitsFri 6:00 — 1 commitsFri 7:00 — 0 commitsFri 8:00 — 1 commitsFri 9:00 — 7 commitsFri 10:00 — 2 commitsFri 11:00 — 12 commitsFri 12:00 — 4 commitsFri 13:00 — 6 commitsFri 14:00 — 16 commitsFri 15:00 — 6 commitsFri 16:00 — 10 commitsFri 17:00 — 13 commitsFri 18:00 — 2 commitsFri 19:00 — 0 commitsFri 20:00 — 5 commitsFri 21:00 — 12 commitsFri 22:00 — 21 commitsFri 23:00 — 20 commitsSat 0:00 — 11 commitsSat 1:00 — 5 commitsSat 2:00 — 1 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 3 commitsSat 7:00 — 4 commitsSat 8:00 — 0 commitsSat 9:00 — 2 commitsSat 10:00 — 2 commitsSat 11:00 — 3 commitsSat 12:00 — 2 commitsSat 13:00 — 5 commitsSat 14:00 — 6 commitsSat 15:00 — 4 commitsSat 16:00 — 9 commitsSat 17:00 — 6 commitsSat 18:00 — 4 commitsSat 19:00 — 20 commitsSat 20:00 — 19 commitsSat 21:00 — 25 commitsSat 22:00 — 21 commitsSat 23:00 — 20 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits626 (71%)
Community commits255 (29%)

881 commits in total over the last year.

DateListRankStars gained
Aug 19, 2026monthly#13+3,349
Aug 18, 2026monthly#13+3,349
Aug 17, 2026monthly#11+3,175
Aug 16, 2026monthly#12+3,112
Aug 15, 2026monthly#11+3,071
Aug 14, 2026monthly#11+3,016
Aug 13, 2026monthly#12+2,977
Aug 12, 2026monthly#14+2,913
Aug 11, 2026monthly#15+2,848
Aug 10, 2026monthly#16+2,781
Aug 9, 2026monthly#18+2,755
Jul 31, 2026weekly#11+1,260
Jul 30, 2026weekly#11+1,260
Jul 29, 2026weekly#6+1,474
Jul 28, 2026weekly#5+1,676
  • freeCodeCamp/freeCodeCamp

    freeCodeCamp.org's open-source codebase and curriculum. Learn math, programming, and computer science for free.

    456.7K stars · TypeScript

  • openclaw/openclaw

    The AI that really does things. Any OS. Any Platform. The lobster way. 🦞

    391.3K stars · TypeScript

  • anomalyco/opencode

    The open source coding agent.

    211.7K stars · TypeScript

  • n8n-io/n8n

    Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.

    206.7K stars · TypeScript

  • microsoft/vscode

    Visual Studio Code

    193.5K stars · TypeScript

  • firecrawl/firecrawl

    Supercharge your AI agents with data from the web and beyond. Building the library for superintelligence. 🔥

    188.6K stars · TypeScript