• heylong

    对pi使用过程中的一些个人经验和理解,欢迎各位佬友前来讨论!

    如果有佬友不熟悉pi的话可以直接在站内或者网上搜,有非常详细的文字,这里就不再做赘述。简单来说,pi就是一个harness的最小实现,具有read, write, edit, bash四个默认启用的功能,没有subagent,没有mcp,这些都可以通过社区或者自己直接向模型提需求拓展出来。以下是pi package的官网:

    Package Catalog · Pi

    那么接下来就先介绍一下我个人的一些extensions

    扩展介绍

    - @narumitw/pi-btw · Packages · Pi 首先是类似Claude Code的一个对话底部栏,使用/btw启动,可以在主对话运行过程中创建一个side thread,启动时读默认截取最多40,000字符作为背景,可以单独设置回答模型和思考强度,是独立的并发请求,回答不会污染原本上下文。适合在执行任务期间问一些问题,但又不希望这些内容进入主对话,比如:xxx函数的作用是什么?

    • @gotgenes/pi-permission-system · Packages · Pi Pi和其他不coding agent不一样,没有权限管理,默认是yolo模式,这个扩展可以给pi加上权限管理,并且可以自定义权限,以下是我的配置(这里我使用ffgrep和fffind替代了原来的grep和find,所以把这两个命令也禁用掉了),使用下来不会像Claude Code一样一直点yes,但也没有codex那种自动审核功能,部分命令还是需要需要自己点确认,这个可以按自己的喜好更改配置。```

    {
    "$schema": "https://raw.githubusercontent.com/gotgenes/pi-packages/refs/heads/main/packages/pi-permission-system/schemas/permissions.schema.json",
    "debugLog": false,
    "permissionReviewLog": false,
    "yoloMode": false,

    "permission": {
    "*": "allow",

    "grep": "deny",
    "find": "deny",

    "external_directory": {
    "*": "ask"
    },

    "path": {
    "*": "allow",

    "*.env": "deny",
    ".env.": "deny",
    "*.env.example": "allow",

    "~/.ssh/*": "deny",

    "~/.pi/agent/auth.json": "deny",
    "~/.pi/agent/models.json": "deny",
    "~/.pi/agent/models-store.json": "deny",

    "~/.pi/agent/settings.json": "ask",
    "~/.pi/agent/trust.json": "ask",
    "~/.pi/agent/SYSTEM.md": "ask",
    "~/.pi/agent/APPEND_SYSTEM.md": "ask",
    "~/.pi/agent/npm/package.json": "ask",
    "~/.pi/agent/npm/package-lock.json": "ask",
    "~/.pi/agent/extensions/pi-permission-system/config.json": "ask"
    },

    "bash": {
    "*": "allow",

    "cmd *": "ask",
    "cmd.exe *": "ask",
    "CMD *": "ask",
    "CMD.exe *": "ask",
    "powershell *": "ask",
    "powershell.exe *": "ask",
    "PowerShell *": "ask",
    "PowerShell.exe *": "ask",
    "pwsh *": "ask",
    "pwsh.exe *": "ask",
    "Pwsh *": "ask",
    "Pwsh.exe *": "ask",
    "bash *": "ask",
    "sh *": "ask",
    "dash *": "ask",
    "zsh *": "ask",
    "fish *": "ask",

    "rm *": "ask",
    "del *": "ask",
    "erase *": "ask",
    "rd *": "ask",
    "rmdir *": "ask",
    "mv *": "ask",

    "git clean *": "ask",
    "git reset --hard *": "ask",
    "git checkout -- *": "ask",
    "git restore *": "ask",
    "git branch -D *": "ask",
    "git stash drop *": "ask",
    "git stash clear *": "ask",

    "git push *": "ask",
    "gh pr create *": "ask",
    "gh pr merge *": "ask",
    "gh pr close *": "ask",
    "gh release create *": "ask",
    "gh release delete *": "ask",
    "npm publish *": "ask",
    "pnpm publish *": "ask",
    "yarn npm publish *": "ask",
    "cargo publish *": "ask",
    "twine upload *": "ask",

    "ssh *": "ask",
    "scp *": "ask",
    "sftp *": "ask",
    "curl *": "ask",
    "wget *": "ask",

    "npx *": "ask",
    "pnpm dlx *": "ask",
    "yarn dlx *": "ask",
    "bunx *": "ask",
    "uvx *": "ask",
    "npm install *": "ask",
    "npm i *": "ask",
    "npm ci *": "ask",
    "npm update *": "ask",
    "pnpm install *": "ask",
    "pnpm i *": "ask",
    "pnpm add *": "ask",
    "pnpm update *": "ask",
    "yarn install *": "ask",
    "yarn add *": "ask",
    "yarn up *": "ask",
    "bun install *": "ask",
    "bun i *": "ask",
    "bun add *": "ask",
    "pip install *": "ask",
    "pip3 install *": "ask",
    "python -m pip install *": "ask",
    "python3 -m pip install *": "ask",
    "py -m pip install *": "ask",
    "uv add *": "ask",
    "uv sync *": "ask",
    "uv pip install *": "ask",
    "pipx install *": "ask",
    "pipx run *": "ask",
    "cargo install *": "ask",
    "go install *": "ask",
    "gem install *": "ask",

    "grep *": "deny",
    "find *": "deny"
    }
    }
    }
    ```- @ff-labs/pi-fff · Packages · Pi 也就是前文说的ffgrep和fffind,相比原来的grep和find速度提升了许多,非常推荐。

    - pi-context-view · Packages · Pi 一个查看上下文占用的小工具,/context injection可以看到完整的system prompt, tool definitions等,界面做的也挺不错

    图片

    - pi-workspace-history · Packages · Pi 可以实现Claude Code上/rewind的效果,回溯对话状态和文件修改。他使用的是shadow git,不需要项目本身有git即可运行。但他原本是基于pi的tree功能(这是pi非常好用的一个功能,下面会详细讲到)实现的,我不希望在使用/tree的同时回溯文件的修改(原因下文会讲到),所以我稍微做了一下修改,用/rewind代替了原来的/tree功能,/tree保持原有功能。使用过程中应避免在用户根目录这类目录下启动pi(默认排除根目录),或者当文件夹内有多个.git目录时也不会启用。

    tree功能

    Pi的tree功能很多人都说好用,但我很少看到有人说为什么好用,我来谈谈我的看法。首先,使用pi内置的/tree命令可以选择一个节点(可以是user message,assistant message或者tool result,可以多次重复选择一个节点),生成一个branch,该branch会携带到该节点之前的上下文内容(可以选择summary或no summary, 这里summary可以选择custom prompt,我一般选择no summary),这样就在一个session内完成多项任务,避免重开一个session浪费无谓的token重新了解文件结构或其他。适合的场景有:开发项目时,在模型了解项目结构和代码的节点,获取干净的上下文进行各自独立的功能开发;或者了解一份项目、一篇文章,进行独立的提问(相比btw,这些问题、过程和结果都会完整写入transcript)。

    关于subagent

    相信有佬注意到了我的扩展里并没有装任何关于subagent的扩展。对于这一点,我的看法是,首先,subagent会引入大量的依赖,这与pi的极简理念相违背,并且pi的作者也认为subagent是"a black box within a black box";pi本身就是完全透明的,并且在一些文献,比如 Towards a Science of Scaling Agent Systems也指出,对于一些工具密集型,推理链长的任务单agent表现已经足够好,某些任务引入多agent效果可能更差。

    我认为Subagent有两个明显的优点,第一:执行任务时有干净的上下文;第二:对于一些可以并行实现的重复任务,subagent可以节省大量时间。对于第一点,我推荐一个项目,是站里看到的,skhoroshavin/pi-supergsd,这个项目就是基于pi的tree功能实现了一个伪subagent的效果,思想很不错。项目是几个月前写的,内置了定制的superpowers skills,如果佬们觉得对于现在的模型superpowers太重了,可以酌情删除,或把思想借鉴过来融入自己的skill(我就借鉴他的思想修改了一下matt的code-reviewer)。对于第二点,我需求不是很大,目前还没想到特别好的方法,也许可以使用herdr或是其他?所以当前我就是用supergsd来替代subagent,轻量且透明。

    上下文管理

    上下文管理我觉得是使用agent过程中的一个很重要的部分,会直接影响到模型表现。不知道什么原因,我总觉得pi的上下文涨的特别快,这一块我还没具体去深入,不知道有没有佬友知道原因,还者是我的幻觉?

    system prompt

    Pi的system是可以完全自己定制的。相比其他厂商,pi默认的提示词少的不只是一点,对比了一圈下来,grok build的提示词是相对较少的,但也比pi多了不少。感兴趣的佬友可以看 https://phistory.cc/ (这也是普适性和个性化的区别,比如Claude Code就强调了很多安全性的东西,包括一些政治正确的东西,比如代词的使用;codex就对形象,以及回复的语气进行了大篇幅的描写)。我直接用SYSTEM.md替换了原本的提示词,加入了个人的一些习惯:```

    System Prompt

    You are a coding agent Pi that helps users complete their tasks using available tools.

    Working Rules

    • Do not assume file contents, code behavior, or task scope. Verify with tools first.
    • If something is genuinely ambiguous and affects the result, ask the user rather than guessing.
    • Stay strictly within the requested scope. Do not modify unrelated files or make unrelated refactors, cleanups, formatting changes, or fixes.
    • Do not silently remove explicit requirements. If a simpler solution cannot fully satisfy them, ask.
    • Lead responses with the result. Be concise and avoid unrequested design essays or feature tours.

    Tool Use

    • Keep tool-call narration brief.
    • Prefer specialized tools over shell equivalents:
    • Use read to inspect file contents instead of cat or sed -n.
    • Use ffgrep to search file contents instead of grep.
    • Use fffind to locate relevant files by name or concept instead of find.

    Engineering Baseline

    • Prefer deletion over addition.
    • For coding tasks, understand the affected flow before editing.
    • Fix root causes, not symptoms. Before changing shared behavior, inspect its callers and fix the common path when possible.

    ``我还写了APPEND_SYSTEM.md对提示词做了补充,主要是参考了ponytail,他本质上也是通过提示词对模型进行软约束,我就直接迁移了一下,也修改了一些skill,比如code-reviewer,省的再多装一个插件了(使用APPEND_SYSTEM.md的原因是可以达到on/off的效果,和ponytail的区别就是无法选择强度了,一直都是full)``

    Decision Ladder

    For coding tasks, stop at the first option that fully solves the task:

    1. Does this need to exist?
    2. Reuse an existing implementation from the codebase.
    3. Use the standard library.
    4. Use a native platform feature.
    5. Use an already-installed dependency.
    6. Use one clear line when it remains readable and correct.
    7. Otherwise, write the minimum code that works.

    Complexity Constraints

    • Prefer boring code over clever code.
    • Avoid unrequested abstractions, single-use factories, single-implementation interfaces, speculative configuration, unnecessary dependencies, and scaffolding for future needs.
    • Use the fewest files and smallest correct diff.

    Non-Negotiable Boundaries

    Never simplify away:

    • trust-boundary input validation
    • error handling that prevents data loss
    • security controls
    • accessibility basics
    • correctness on relevant edge cases

    Non-trivial new logic should leave one minimal runnable check. Trivial changes need no extra test.
    ```magic context

    链接是 GitHub - cortexkit/magic-context: Unbounded context. Memory that manages itself. One session, for life. The hippocampus for coding agents, part of CortexKit. · GitHub 这个也是之前站里的佬友推荐的,一般原生的压缩都是给一段提示词让模型自己总结,我觉得这种压缩效果很难评,会丢失太多东西,而且很模型能力也有很大关系。

    这个项目总体使用下来压缩挺无感的,不会特地打断你进行压缩,并且考虑到了缓存命中的问题,一般都是在cache bust的节点进行压缩,细节我认为保留的不错,本来想在这里讲具体实现的,但感觉太长了,有感兴趣的佬友我可以单独再开一个话题谈一谈压缩。

    一些讨论

    当前我的扩展装的不多,一些常见的扩展比如mcp-adapter、todo类的我都没装,一方面是我当前没有遇到什么必须使用的mcp,还有一个就是佬友们认为todo对模型有实际的提升吗(magic context自带todo,但我觉得那个不太好,后面打算自己修改一下把todo、ctx_note、ctx_aug这些功能都去掉,明确一下边界,具体原因在这里就先不展开了);还有一些,比如web-acccess我是想装还没装,佬友们使用下来感觉怎么样?还有一些修改tui的我也没看到满意的,以及整理tool output类的;还有关于trellis,我本来装了的,但感觉对于个人使用有点重了,佬们怎么看,有没有一些实践说明…

    结尾

    佬们如果有什么其他推荐的扩展或者skill都欢迎来讨论,也欢迎提出自己的看法与见解!

    主楼
  • Angel

    emmmm 佬 关于Windows上的Powershell和Term导致的上下文滚动问题 有办法解决吗^-^^-^^-^^-^^-^

    #1
  • heylong

    哈哈,我也一直有这个问题,还有模型工作时输入会抖动。我之前看issue,好像几个星期前就有人提类似的问题了,一直没更新解决

    #2
  • ther000

    美化tui可以试试pi-open-tui

    #3
  • ilovemusic

    感谢分享,明天上班试试佬说的ffgrep和fffind

    #4
  • Nxty

    我也一直有这个问题,有时候就会直接跳转到最上方,我以为是插件的问题就一直没管 ^-^

    #5
  • Angel

    模型思考的时候不能去看上下文

    只要滚轮敢动一点点 就开始上下文抽搐了 还没法解决


    虽然我也知道是PowerShell和Pi的问题 但我没招啊^-^^-^^-^^-^

    #6
  • Ziphyrien

    有人说是wt那边的问题,等wt那边解决。

    且最近pi有在开发备选的布局系统。

    #7
  • 炫彩小鱼干

    请问佬pi的搜索工具是怎么解决的啊,这几天一直在试着配一个好用的搜索工具,但是只找到了ds官方的websearch能比较好用,直接用curl不少网页都会被拦,有没有比较好的推荐?

    #8
  • son

    选择用了omp 但是omp经常会崩溃 而且占用蛮高的 不知道pi有没有类似问题

    #9
  • Ziphyrien

    这就是屎,omp 和 pi 也一点关系都没有

    图片

    #10
  • son

    pi需要太多东西来自己设定了 搞得头大

    #11
  • son

    这样对比其实也不太公平 pi是把所有东西都砍掉了 其他agent自带一堆功能呢

    #12
  • neroZac

    深度好文,让我收藏一波。Magic Context 确实是一个非常好的库。Tree 的用法我还不是很了解,是相当于筛选对话里的编辑上一个对话,然后重新发吗?还是说是 branch 出一个新的 session 呢?

    #13
  • Ziphyrien

    没用的东西放着就只会耗费资源,性能烂就是烂,看cpu那栏。

    #14
  • coldle

    一个 session,分叉时间线。你可以一个问题先聊 a,聊完了回滚到某个节点再去聊 b,然后等会再跳到另一个时间线

    #15
  • heylong

    很多佬在用pi-web-access,看着还不错,但我还没用

    #16
  • heylong

    很开心对你有帮助!tree不同分支都在一个主session里,树干的上下文是共享的,叶子的是独立的,可以自己去试试,我之前也不了解,试了之后就懂了

    #17
  • Elizabeth1

    我用的是 Firecrawl 的 mcp,搜索效果还不错,一般网站都不会拦截

    #18

发表回复

登录后回复