1. 为什么我要从 Claude Code 转向 pi1.1 一个“全能选手”带来的隐性成本Claude Code 刚出来那阵子我几乎是第一时间就装上了。原因很简单它能读整个项目、能改多个文件、能跑命令、能理解上下文几乎把“Coding Agent”这个概念该有的能力全塞进了一个命令行工具里。刚开始用的时候确实爽一句自然语言丢过去它就能把一个小功能从零写到能跑。但用得越久我越觉得有点不对劲——这东西太“重”了。我说的“重”不是指安装包大小而是它的行为模式。Claude Code 默认会加载一大堆系统提示、工具定义、上下文管理逻辑每次对话它都在后台做很多你看不见的决策要不要读某个文件、要不要调用某个工具、要不要先问你一句再动手。这些决策在复杂项目里是优势但在日常小任务里就成了负担。比如我只想让它帮我改一个配置文件里的端口号它可能会先读一遍项目结构、再确认一下相关文件、然后才动手改——整个过程花了十几秒而我手动改只需要三秒。更关键的是Claude Code 的“全能”意味着它的行为边界很模糊。你很难预测它下一步会做什么有时候它会自作主张地帮你重构代码有时候又会因为权限问题卡在半路。这种不确定性在团队协作场景里尤其让人头疼——你没法跟同事说“你就按这个流程走”因为每次流程都不一样。1.2 pi 的极简哲学四个工具打天下后来我在一个技术社区里看到有人提到 pi说它是一个“只用四个工具就能干完所有事”的 Coding Agent。我当时的第一反应是四个工具怎么可能Claude Code 光内置工具就不止十个四个工具能干什么但实际用下来之后我发现 pi 的设计思路完全不一样。它不追求“什么都能做”而是追求“该做的事能做好”。pi 的核心工具只有四个读文件、写文件、执行命令、搜索内容。就这四个没有多余的抽象层没有复杂的权限系统没有花哨的上下文管理。你给它一个任务它就用这四个工具去完成不会绕弯子。这种极简设计带来的直接好处是可预测性。你知道它只会做这四件事所以你能清楚地预判它的行为路径。比如你让它“把 config.json 里的 port 改成 8080”它就会直接读文件、改内容、写回去不会先分析项目结构、不会问你要不要备份、不会建议你改用环境变量。这种“直来直去”的风格在需要快速迭代的场景里效率极高。另一个好处是启动速度。pi 的冷启动时间几乎可以忽略不计因为它不需要加载一大堆工具定义和系统提示。我实测下来在同一个项目目录下pi 从输入命令到准备好接受任务大概只需要 0.3 秒左右而 Claude Code 通常要 2 到 3 秒。别小看这两三秒的差距当你一天要调用几十次的时候累积起来就是十几分钟的差距。1.3 oh-my-pi 全家桶把极简工具武装到牙齿pi 本身已经够简洁了但社区里有人觉得还不够——他们想要 pi 的轻量但又不想放弃一些常用功能比如语法高亮、自动补全、历史记录搜索、多会话管理等等。于是就有了 oh-my-pi你可以把它理解成 pi 的“配置全家桶”。oh-my-pi 不是 pi 的替代品而是一套围绕 pi 构建的增强配置。它包含了一系列预设的别名、快捷键绑定、输出格式化规则、以及一些常用的小工具脚本。装上 oh-my-pi 之后你用的还是 pi 的核心逻辑但交互体验会好很多。比如默认的 pi 输出是纯文本oh-my-pi 会给代码块加上语法高亮默认的 pi 没有历史搜索oh-my-pi 集成了模糊查找默认的 pi 只能单会话oh-my-pi 支持快速切换上下文。我自己的感受是pi 是发动机oh-my-pi 是内饰和仪表盘。如果你只是偶尔用一下裸 pi 就够了但如果你打算把 pi 当成日常主力工具oh-my-pi 几乎必装。1.4 这篇文章适合谁看如果你正在用 Claude Code但觉得它有时候太“重”、太“不可控”那这篇文章就是写给你的。我会详细拆解 pi 的四个核心工具怎么用、oh-my-pi 怎么配、以及在实际项目中怎么把这两者结合起来替代 Claude Code 的日常使用场景。如果你还没用过任何 Coding Agent那也没关系。pi 的上手门槛比 Claude Code 低得多你不需要理解复杂的权限模型和上下文管理只需要知道“读、写、跑、搜”这四件事怎么配合就行。我会从最基础的安装开始讲确保你跟着做就能跑起来。如果你是个喜欢折腾配置的人那 oh-my-pi 部分应该会让你很兴奋——它提供了大量的可定制项你可以根据自己的习惯把 pi 调教成完全顺手的形状。2. pi 的四个核心工具到底怎么用2.1 读文件不只是 cat 那么简单pi 的第一个工具是读文件。听起来很简单对吧但 pi 的读文件工具比普通的cat要聪明一些。它支持按行范围读取、支持读取多个文件、支持在读取时自动忽略二进制文件和超大文件。我举个例子。假设你有一个 5000 行的日志文件你只想看最后 100 行。在 pi 里你可以直接说“读 log.txt 的最后 100 行”它会自动计算行号范围只把那 100 行加载到上下文里。这个功能在排查问题时特别有用——你不需要把整个日志文件塞进上下文只需要看关键部分。另一个实用场景是读取多个相关文件。比如你想同时看package.json、tsconfig.json和vite.config.ts你可以一次性让 pi 把这三个文件都读进来。pi 会按顺序读取并在输出里用分隔符标出每个文件的边界。这样你在后续对话里引用它们的时候pi 能清楚地知道哪段内容属于哪个文件。注意pi 的读文件工具默认不会读取.gitignore里列出的文件也不会读取node_modules目录。这个设计是为了避免上下文被无关内容污染。如果你确实需要读取被忽略的文件需要显式指定路径。2.2 写文件精准修改而不是全量覆盖pi 的写文件工具是我最喜欢的一个。它不像普通的echo file那样全量覆盖而是支持精准修改。你可以告诉它“把第 15 行的 port 改成 8080”它就会只改那一行其他内容原封不动。这个能力在修改配置文件时特别重要。比如你有一个 200 行的docker-compose.yml你只想改一个环境变量的值。如果用全量覆盖的方式你需要先把整个文件读出来、改掉那一行、再写回去——中间任何一步出错都可能导致文件损坏。而 pi 的精准修改是原子操作它会在内存里定位到目标行只替换那一部分然后一次性写回。pi 的写文件工具还支持追加模式和插入模式。追加模式就是在文件末尾添加内容插入模式就是在指定行号之前插入内容。这两个模式在写脚本或生成代码时很有用。比如你可以让 pi“在import语句块后面插入一行新的 import”它会自动找到最后一个 import 语句的位置然后在它后面插入。实操心得我通常会让 pi 在修改文件之前先做一个备份。虽然 pi 的精准修改很少出错但在处理关键配置文件时多一层保险总是好的。你可以在 pi 的配置里设置一个“修改前备份”的钩子让它自动把原文件复制一份到.bak目录。2.3 执行命令不只是跑 shellpi 的执行命令工具看起来就是跑 shell 命令但它有几个细节设计得很到位。第一它会自动捕获命令的退出码、标准输出和标准错误并把它们结构化地返回给你。第二它支持设置超时时间避免某个命令卡死导致整个会话挂起。第三它支持在指定目录下执行命令不需要你先cd过去。我经常用 pi 来跑测试。比如我会说“在项目根目录跑npm test超时 30 秒”。pi 就会在后台启动这个命令等待它完成然后把测试结果整理好返回给我。如果测试失败它会自动把失败用例的详细信息提取出来而不是把整个测试输出一股脑丢给我。另一个常用场景是链式命令。pi 支持在一个请求里执行多个命令并且可以用前一个命令的输出作为后一个命令的输入。比如“先跑git diff --name-only看看哪些文件改了然后对每个改动的文件跑eslint”。pi 会自动解析第一个命令的输出然后循环执行第二个命令。这个能力在代码审查场景里特别高效。注意pi 默认不会执行任何需要交互输入的命令。如果你跑了一个需要输入密码的命令它会直接超时失败。这是为了防止会话被阻塞。如果你确实需要交互可以先用echo把输入管道进去或者改用非交互模式的命令参数。2.4 搜索内容比 grep 更懂代码pi 的搜索工具是基于 ripgrep 做的但加了一些代码感知的能力。普通的grep只能按行匹配文本而 pi 的搜索可以理解代码结构。比如你可以搜“所有调用了getUserById函数的地方”它会自动排除注释里的调用、字符串里的调用只返回真正的函数调用。这个能力在重构时特别有用。假设你想把一个函数改名你需要找到所有调用它的地方。用普通grep你会搜出一堆误报——注释里提到的、文档里写的、甚至变量名里包含相同字符串的。而 pi 的搜索会分析语法树只返回真正的调用点。pi 的搜索还支持正则表达式和文件类型过滤。你可以说“在所有.ts文件里搜async function \w”它会只搜索 TypeScript 文件并且只匹配异步函数定义。这个功能在大型项目里能帮你快速定位特定模式的代码。实操心得我习惯在重构之前先用 pi 的搜索工具做一次全面扫描把所有相关引用都列出来。然后我会把这些引用分成三类必须改的、可能改的、不用改的。pi 会把搜索结果按文件分组并显示每个匹配的上下文行这样我就能快速判断哪些需要处理。3. oh-my-pi 全家桶配置实战3.1 安装与基础配置oh-my-pi 的安装方式取决于你用的 shell。如果你用的是 bash 或 zsh可以直接通过包管理器安装或者从源码克隆下来手动配置。我推荐后者因为 oh-my-pi 的配置项很多手动安装能让你更清楚地知道每个文件是干什么的。安装完成后你需要在 shell 的配置文件里加一行 source 命令把 oh-my-pi 的主脚本加载进来。然后你需要设置几个环境变量PI_HOME指向 pi 的安装目录PI_CONFIG指向你的自定义配置文件PI_THEME选择你喜欢的配色方案。oh-my-pi 默认提供三套主题dark、light和solarized。我一般用dark因为终端背景本来就是深色的用light主题反而刺眼。如果你经常在户外用笔记本可以考虑solarized它的对比度更低长时间看不容易累。配置完成后你可以跑pi --version确认安装成功。如果输出里包含了 oh-my-pi 的版本号说明全家桶已经生效了。3.2 快捷键与别名设置oh-my-pi 最实用的功能之一是快捷键绑定。默认情况下它提供了几个常用的快捷键CtrlR搜索历史命令CtrlO打开当前会话的输出日志CtrlL清屏并保留上下文。这些快捷键和大多数 shell 的默认绑定不冲突所以你可以放心用。别名方面oh-my-pi 预置了一些常用操作的简写。比如pir等于pi readpiw等于pi writepie等于pi execpis等于pi search。这些别名能帮你省下不少敲键盘的时间。我自己的习惯是把pi本身也设一个短别名比如p这样调用起来更快。如果你觉得默认别名不够用可以在PI_CONFIG指向的文件里自定义。oh-my-pi 的别名配置语法很简单就是alias 短名完整命令。你可以根据自己的使用频率来定义比如我经常用pi read和pi search就把它们设成了pr和ps。注意别名不要和系统已有命令冲突。比如ps在大多数系统里是查看进程的命令如果你把它覆盖成pi search可能会影响其他脚本的正常运行。我建议在别名前面加一个不常用的前缀比如p-这样既好记又不会冲突。3.3 输出格式化与语法高亮oh-my-pi 默认会给 pi 的输出加上语法高亮。这个功能看起来只是好看但实际上对阅读效率提升很大。当 pi 返回一段代码时高亮能帮你快速区分关键字、字符串、注释和变量名减少理解成本。除了语法高亮oh-my-pi 还会对输出做结构化处理。比如当 pi 返回一个文件列表时oh-my-pi 会自动加上行号和文件大小当 pi 返回搜索结果时oh-my-pi 会把匹配的行高亮显示并显示匹配位置的前后文。这些细节处理让输出更易读也更容易定位关键信息。如果你不喜欢默认的格式化规则可以在配置里关掉或者自定义。oh-my-pi 的格式化配置是按输出类型分组的你可以单独控制代码块、列表、表格、错误信息的显示方式。比如你可以设置错误信息用红色加粗显示这样一眼就能看到问题所在。3.4 多会话管理与上下文切换oh-my-pi 的多会话管理是我觉得最实用的功能之一。默认的 pi 一次只能维护一个会话如果你想同时处理两个不同的任务就需要开两个终端窗口。而 oh-my-pi 允许你在同一个终端里创建多个会话并用快捷键快速切换。每个会话有独立的上下文和历史记录。比如你可以开一个会话专门处理前端代码另一个会话处理后端 API还有一个会话用来跑测试和部署。切换会话时pi 会自动保存当前会话的状态并在切换回来时恢复。这个功能在同时处理多个任务时特别高效。oh-my-pi 还支持会话快照。你可以在某个时间点给当前会话拍一个快照然后继续操作。如果后续操作出了问题你可以回滚到快照点重新开始。这个功能在尝试高风险修改时很有用——你可以先拍快照然后大胆尝试不行就回滚。实操心得我通常会在开始一个复杂任务之前先拍一个快照然后在关键节点再拍一个。这样如果中间某一步出了问题我可以回滚到最近的快照点而不是从头再来。快照文件默认存在~/.pi/snapshots目录下你可以定期清理旧的快照来节省磁盘空间。4. 从 Claude Code 迁移到 pi 的实操路线4.1 哪些场景适合迁移哪些不适合不是所有场景都适合从 Claude Code 迁移到 pi。我自己的经验是简单、明确、重复性高的任务适合用 pi复杂、模糊、需要大量上下文推理的任务适合用 Claude Code。具体来说以下场景用 pi 效率更高修改配置文件、重命名变量或函数、批量替换字符串、跑测试并分析结果、生成简单的样板代码、查找代码引用。这些任务的共同特点是目标明确、步骤固定、不需要太多“理解”成分。而以下场景用 Claude Code 更合适从零设计一个模块、重构复杂的业务逻辑、理解陌生的代码库、处理需要跨多个文件推理的任务。这些任务需要 Agent 有更强的上下文管理能力和推理能力pi 的四个工具在这种场景下会显得不够用。我的建议是两者并存日常小任务用 pi复杂任务用 Claude Code。你不需要二选一而是根据任务类型灵活切换。oh-my-pi 甚至支持在 pi 会话里调用 Claude Code这样你可以在一个界面里完成所有操作。4.2 迁移前的准备工作在正式迁移之前你需要做几件事。第一把你常用的 Claude Code 命令和提示词整理出来看看哪些可以用 pi 的四个工具直接替代。比如“读取文件并修改某一行”在 Claude Code 里可能是一个复合操作在 pi 里就是readwrite两个步骤。第二检查你的项目里有没有依赖 Claude Code 特有功能的脚本或配置。比如有些项目会用 Claude Code 的 API 来做自动化这些需要改成 pi 的调用方式。pi 的 API 更简单但功能也更少你需要确认迁移后不会丢失关键能力。第三准备好 pi 的配置文件。oh-my-pi 的配置项很多建议你先从默认配置开始用一段时间后再根据自己的习惯调整。不要一上来就改一大堆配置那样反而容易出问题。4.3 逐步迁移的实操步骤我推荐的迁移方式是渐进式先在一个小项目上试用 pi熟悉它的工作方式然后逐步把日常任务迁移过去最后再考虑是否完全替代 Claude Code。具体步骤是这样的选一个你熟悉的小项目比如一个个人脚本或小工具。用 pi 完成这个项目里的所有修改任务记录下哪些操作顺畅、哪些操作别扭。根据记录调整 oh-my-pi 的配置把别扭的地方优化掉。把优化后的配置应用到下一个项目重复这个过程。当你觉得 pi 已经能覆盖 80% 的日常任务时就可以考虑把它设为主力工具了。这个过程中最重要的是记录。每次遇到问题都记下来然后想办法解决。你会发现很多问题其实不是 pi 本身的问题而是你的使用习惯需要调整。比如你可能习惯了 Claude Code 的“自动读取相关文件”而 pi 需要你显式指定要读哪些文件。这个习惯改过来之后效率反而更高因为你对上下文的控制更精准了。4.4 迁移后的效率对比与调优我自己的迁移过程大概花了两周。第一周主要是熟悉 pi 的工作方式第二周开始优化配置和流程。迁移完成后我对比了一下效率对于日常的小修改任务pi 的平均完成时间比 Claude Code 快了大约 40%。这个提升主要来自启动速度的提升和行为的可预测性。但也不是所有任务都快了。对于需要大量上下文推理的任务pi 反而更慢因为你需要手动把相关信息喂给它。这种情况下Claude Code 的自动上下文管理优势就体现出来了。所以我的最终方案是pi 处理 70% 的日常任务Claude Code 处理 30% 的复杂任务。调优方面我主要做了三件事一是把常用操作的别名设成最短的形式减少输入时间二是配置了自动备份和快照避免误操作导致数据丢失三是写了一个小脚本用来在 pi 和 Claude Code 之间快速切换。这个脚本会根据当前目录和任务类型自动选择合适的工具进一步减少了手动切换的成本。5. 常见问题与排查技巧实录5.1 pi 启动报错怎么办pi 启动报错最常见的原因是配置文件路径不对。oh-my-pi 会按顺序查找几个默认位置~/.pi/config、~/.config/pi/config、以及当前目录下的.pi/config。如果这些位置都没有配置文件它会使用内置的默认配置。但如果你设置了PI_CONFIG环境变量它就会只读那个文件找不到就报错。排查方法很简单先确认PI_CONFIG指向的文件是否存在然后确认文件内容是否符合 oh-my-pi 的配置语法。oh-my-pi 的配置语法是类 YAML 的但更宽松一些支持注释和空行。如果你不确定语法对不对可以先用默认配置启动然后逐步添加自定义项。另一个常见原因是权限问题。如果你把 pi 安装在系统目录下但当前用户没有写权限pi 在尝试写日志或缓存时就会报错。解决方法要么是改安装目录的权限要么是把PI_HOME指向用户目录下的某个路径。5.2 工具调用失败怎么排查pi 的四个工具都有可能调用失败但原因各不相同。读文件失败通常是路径不对或权限不足写文件失败通常是磁盘满了或文件被锁定执行命令失败通常是命令不存在或超时搜索失败通常是搜索路径不对或正则表达式有语法错误。排查时我习惯按这个顺序来先看错误信息里的具体描述然后确认路径和权限最后检查命令或正则的语法。pi 的错误信息通常比较详细会告诉你具体是哪一步出了问题。如果错误信息不够清楚你可以用pi --debug启动调试模式它会输出更详细的日志。实操心得我遇到最多的问题是执行命令超时。pi 默认的超时时间是 30 秒但有些命令比如安装依赖或跑完整测试套件需要更长时间。你可以在命令后面加--timeout 120来延长超时时间或者在配置里把默认超时改大。但要注意超时时间设得太长会导致会话卡住所以最好根据具体命令来调整。5.3 上下文丢失的预防与恢复pi 的上下文管理比 Claude Code 简单所以更容易出现上下文丢失的情况。最常见的是会话意外中断——比如终端被关闭、网络断开、或者 pi 进程被杀死。这种情况下当前会话的上下文就丢了。预防措施是开启 oh-my-pi 的自动快照功能。它会在每次工具调用后自动保存会话状态这样即使中断了你也可以从最近的快照恢复。恢复命令是pi restore它会列出所有可用的快照你选一个就行。另一个预防措施是定期导出会话。oh-my-pi 支持把当前会话导出成 JSON 文件你可以把这个文件保存下来以后用pi import导入。我通常会在完成一个阶段性任务后导出一次这样即使后续操作出了问题我也可以回到这个检查点。5.4 性能调优的独家技巧pi 的性能主要受两个因素影响上下文大小和工具调用频率。上下文越大pi 处理每个请求的时间就越长工具调用越频繁累积的延迟就越高。优化上下文大小的技巧是按需读取。不要一次性把所有相关文件都读进来而是先读最关键的几个等需要的时候再读其他的。pi 的读文件工具支持按行范围读取你可以只读文件的关键部分而不是整个文件。优化工具调用频率的技巧是合并操作。比如你需要修改三个文件不要分三次调用写文件工具而是先读三个文件、在内存里改好、然后一次性写回。pi 支持批量操作你可以在一个请求里完成多个文件的读写。还有一个技巧是缓存常用结果。如果你经常需要读取某个文件的内容可以把它缓存到 pi 的会话变量里这样后续就不用重复读取了。oh-my-pi 提供了pi cache命令来管理缓存你可以设置缓存的过期时间和最大条目数。5.5 常见问题速查表问题现象可能原因解决方法pi 启动时报配置文件错误配置文件路径不对或语法错误检查PI_CONFIG环境变量用默认配置启动后逐步添加自定义项读文件返回空内容文件路径不对或文件被忽略确认路径是否正确检查.gitignore是否排除了该文件写文件后内容没变文件被锁定或权限不足检查文件权限确认没有其他进程占用该文件执行命令超时命令耗时超过默认超时时间加--timeout参数延长超时或优化命令减少耗时搜索结果不准确正则表达式语法错误或搜索路径不对检查正则语法确认搜索路径包含目标文件会话上下文丢失终端关闭或进程被杀死开启自动快照定期导出会话工具调用返回权限错误当前用户没有对应权限检查文件和目录权限必要时用管理员权限运行输出格式混乱oh-my-pi 格式化配置冲突检查格式化配置关掉冲突的规则6. 我的个人配置与日常使用习惯6.1 我的 oh-my-pi 配置文件我自己的 oh-my-pi 配置经过多次调整现在稳定在一个比较顺手的版本。核心配置项包括主题用dark超时时间设为 60 秒自动快照开启历史记录保留 1000 条别名用p-前缀。我还加了一些自定义的格式化规则。比如错误信息用红色加粗显示代码块用等宽字体搜索结果里的匹配项用黄色背景高亮。这些规则看起来是小事但每天看几百次输出视觉上的舒适度对效率影响很大。另外我配置了一个“修改前备份”的钩子。每次 pi 要写文件之前它会自动把原文件复制到.pi/backups目录下文件名加上时间戳。这样即使改错了我也能快速找回原文件。这个钩子是我自己写的用 shell 脚本实现挂在 pi 的pre-write事件上。6.2 日常任务的工作流我每天的典型工作流是这样的早上到工位后先开一个 pi 会话用pi search扫一遍昨天改动的文件看看有没有遗留问题。然后根据当天的任务列表逐个用 pi 处理。每个任务完成后我会拍一个快照然后继续下一个。对于需要查资料的任务我会在 pi 会话里直接搜代码库而不是切到浏览器。pi 的搜索工具支持正则和文件类型过滤比在浏览器里翻文档快得多。如果搜不到我才会去查外部文档。下午通常会有一些重复性的任务比如批量改配置、跑测试、生成报告。这些任务我会写成 pi 的脚本一键执行。oh-my-pi 支持把一系列操作保存成宏然后用一个命令触发。我常用的宏有三个p-test跑测试并分析结果p-lint跑代码检查并自动修复p-report生成当天的改动报告。6.3 踩过的坑与教训第一个坑是过度依赖自动快照。有一段时间我完全依赖快照来恢复结果有一次快照文件损坏了导致我丢了一整天的改动。从那以后我养成了手动导出的习惯每天至少导出一次会话。第二个坑是别名冲突。我一开始把pi search设成了ps结果和系统的ps命令冲突导致一些脚本跑不起来。后来改成p-s就没问题了。这个教训是别名一定要加前缀不要图省事。第三个坑是超时时间设得太长。我曾经把默认超时设成 300 秒结果有一次跑了一个死循环的命令pi 卡了五分钟才报错。后来我把默认超时改回 60 秒对于确实需要长时间运行的命令单独加--timeout参数。第四个坑是忽略文件权限。有一次我在一个只读目录下跑 pi写文件一直失败但我没看错误信息以为是 pi 的 bug。后来才发现是权限问题。这个教训是遇到问题先看错误信息不要瞎猜。6.4 后续可以扩展的方向pi 和 oh-my-pi 的生态还在发展中有几个方向我觉得值得关注。一是插件系统oh-my-pi 已经开始支持第三方插件你可以写自己的插件来扩展 pi 的能力。比如有人写了一个插件让 pi 能直接操作数据库还有人写了一个插件让 pi 能调用外部 API。二是多 Agent 协作。pi 本身是单 Agent 的但你可以通过 oh-my-pi 的会话管理功能让多个 pi 实例协作完成一个任务。比如一个 pi 负责读代码另一个负责写测试第三个负责跑验证。这种模式在大型重构任务里很有潜力。三是与 CI/CD 集成。pi 的命令行特性让它很容易集成到自动化流程里。你可以在 CI 流水线里调用 pi 来做代码检查、自动修复、生成变更日志等。oh-my-pi 提供了非交互模式的配置适合在 CI 环境里使用。我目前正在尝试把 pi 集成到我的 Git 钩子里让它在每次提交前自动跑一遍代码检查和格式化。这样能减少很多低级错误也能让代码审查更聚焦在逻辑上。如果你也有类似的需求可以从简单的钩子开始试逐步增加复杂度。