---
title: 'PI v11 Damage Control PI'
video_id: f8cfH5XX-XU
url: https://youtu.be/f8cfH5XX-XU
title_en: "The Pi Coding Agent: The ONLY REAL Claude Code COMPETITOR"
channel: IndyDevDan
published: 2026-02-23
duration: "51:36"
topics: [Agent 工程]
noted: 2026-07-07
value: S
part: 13
views: '22.8万'
---


↑ [返回课程总览](00-总览.md) · [上一章](12-v10-System-Select.md) · [下一章](14-v12-Agent-Chain.md)

> IndyDevDan · 51:36 · 发布 2026-02-23 · 22.8万次观看(截至抓取) · [观看原视频](https://youtu.be/f8cfH5XX-XU)
> 🔥 观众最高回放 [29:56](https://youtu.be/f8cfH5XX-XU?t=1796) — 本片高回放时刻见对应章节

## 主旨

写一个 ext 在 hooks 层拦截 `rm -rf` 类高危命令,**把"安全 theatre"用一个 extension 实现,并明确"安全不是审批制,是规则拦截制"**——**演示 Pi 的 hooks 抽象足够细,可以在工具调用边做最严的安全策略,而无需依赖审批条或权限层**。

## 核心论点

1. **Pi 的 onToolCall hook 可以对单个工具 + 路径 / 内容做条件拦挡**——不是模糊的"permisssion mode",而是"这条命令包含 rm -rf / 我拒绝"。([[#1-ontoolcall-hook-在工具调用边-3558|→ 详解1]])
2. **demo:agent 试图 `rm -rf.claude` 删除整个 Claude 配置目录,被拦下**——证明拦截粒度是"命令文本匹配",而非"工具类型"。([[#2-demo-拦-rm--rfclaude-3558|→ 详解2]])
3. **安全策略集中放一个 ext 里**,而不是散落在每个工具的 permission 表上——**降低"安全规则同步"的复杂度**。([[#3-集中式安全规则管理-3558|→ 详解3]])
4. **作者的话呼应"安全 theatre":明确说 Pi 默认 YOLO,但通过 ext 你可以做最严的安全拦截,两者不冲突**。([[#4-与安全-theatre主张不冲突-3558|→ 详解4]])

## 知识点详解

### 1. onToolCall hook 在工具调用边 [35:58](https://youtu.be/f8cfH5XX-XU?t=2158)

`onToolCall` 是 Pi ext 的 hook 系列之一,在工具调用**前**触发——可以决定是否放行 / 改参数 / 抛错。Damage Control ext 用它对**特定命令文本**(rm -rf / sudo / DROP TABLE 等)**做字符串匹配拒接**。

> Inside of PI, you have access to all the available hooks. In the past, we've talked about building a damage control skill to prevent your agents from doing dangerous things like this. ([35:58](https://youtu.be/f8cfH5XX-XU?t=2158))

### 2. demo: 拦 `rm -rf.claude` [35:58](https://youtu.be/f8cfH5XX-XU?t=2158)

> rm -rf.claude. Let's get rid of claude completely. We can't because we have hooks blocking it. ([35:58](https://youtu.be/f8cfH5XX-XU?t=2158))

prompt 写"rm -rf.claude",agent 真的跑这条命令——**钩子在 tool call 之前直接拒,never runs**。这是与 v8 tilldone 同源的拦截机制,v8 拦"必须先建任务清单",v11 拦"特定危险命令"。

### 3. 集中式安全规则管理 [35:58](https://youtu.be/f8cfH5XX-XU?t=2158)

> Just a quick showcase. You can block any command you want. You can control any piece of pie that you want to. All right? And so, we did that with the damage control extension. ([35:58](https://youtu.be/f8cfH5XX-XU?t=2158))

Damage control ext 把所有危险命令集中一个文件里维护,新增的危险模式只需要加一行。**这是把"安全规则"做成单源管理**——避免散落在各工具 permission 表里需要各处同步。

### 4. 与"安全 theatre"主张不冲突 [35:58](https://youtu.be/f8cfH5XX-XU?t=2158)

Pi 默认 YOLO mode 是诚实的——99% 的工具调用无须审批,免 theatre。作者在 01 章就给出会引入 Damage Control extension 演示,**承认你需要安全时,Pi 的扩展机制允许你在 harness 层做最严的拦截**。两者非互斥:默认不审,关键命令拦。

## 可执行步骤

- [ ] 在 ext 里维护一个 `forbiddenPatterns` 数组(`rm -rf` / `:(){:|:&};:` / `mkfs` / `dd if=` 等)
- [ ] 写 onToolCall hook,匹配 `bash` 工具的参数文本,匹配到 forbiddenPatterns 即抛错
- [ ] 跑 prompt "rm -rf.claude" 验证拦截
- [ ] 跑 prompt "drop database production" 验证拦截(需要先把 SQLite / psql 的 drop 命令也加进列表)
- [ ] (可选)加 /unsafe 命令允许临时绕过 hooks,要求用户敲 "I understand"

## 关联

- 互补(同源拦截机制):本片 [10-v8-Tilldone.md](10-v8-Tilldone.md) — v8 也是 onToolCall 拦截,但拦的是"未建任务清单",v11 是拦"危险命令"
- 印证(集中管理优于分散):20 安全法则 — Damage Control 是这个泛概念在 Pi 上的具体 ext 实现
- 互补(安全 theatre 概念的本章加细):本片 [01-介绍.md](01-介绍.md) — 01 给出 Pi 默认 YOLO 是主张,v11 是"你需要安全时怎么做"

## 一手来源与延伸

- Pi extension 文档:[https://pi.dev/](https://pi.dev/) — hooks + ext 集成
- 视频 35:58-36:36(v11 Damage Control 演示,本片最短一章)

## 术语

- **Damage control extension**:本片命名的"危险命令拦截 ext"
- **Forbidden patterns**:危险命令字符串模板,集中在 ext 单文件维护
- **onToolCall hook**:Pi ext 钩子,在工具调用前介入决定是否放行

## 金句

> You can block any command you want. You can control any piece of pie that you want to. ([35:58](https://youtu.be/f8cfH5XX-XU?t=2158)) — 安全 theatre 不必做,但具体危险命令拦截随手加上。

## 立场与利益

- 利益中性:Damage Control 是工程机制,无直接挂商品

## 价值定位

对**本片目标学习者**的价值:

- 适合谁:既要 Pi 的 YOLO 自由,又需要关键命令拦截的工程师
- 解决什么:**用一个 ext 集中管理"危险命令规则"**,避免散落在工具 permission 表
- 认知 vs 实操:**实操偏轻**——主文件 forbiddenPatterns + onToolCall hook 30 行
- 跨源重叠:与 20 安全法则 是同思路,但本片是 harness 工程实现

## 自检问题

1. Damage Control ext 拦截的具体粒度?
   **答案**:在 onToolCall hook 里匹配 bash 工具的参数文本——匹配到 forbiddenPatterns(`rm -rf` 等)即拒,而非模糊的"permission mode"。回跳 [35:58](https://youtu.be/f8cfH5XX-XU?t=2158)
2. Damage Control 与 Pi 默认 YOLO mode 矛盾吗?
   **答案**:不矛盾。YOLO 默认是反对"每步都要审",Damage Control 是"最严的特定规则拦截"。默认无须 theatre,关键危险命令自动拦。回跳 [35:58](https://youtu.be/f8cfH5XX-XU?t=2158)
3. 拦截规则放哪管理?
   **答案**:damage-control ext 单文件里的 forbiddenPatterns 数组,新增危险命令只需一行。集中而非分散。回跳 [35:58](https://youtu.be/f8cfH5XX-XU?t=2158)