# pi-cc-permission

> **Plan mode + permission modes** for the [pi coding agent](https://pi.dev). · [npm](https://www.npmjs.com/package/pi-cc-permission) · [GitHub](https://github.com/sowyer666/pi-cc-permission)

给 pi 增加一套「计划模式 + 权限模式」，三种权限档位可选。

## 功能

| 命令 | 作用 |
|---|---|
| `/plan` | 切换**只读计划模式**（禁用 `edit`/`write`，`bash` 限为只读安全命令） |
| `/permission manual` | 每条命令/改动都询问 |
| `/permission auto` | 只询问风险命令 |
| `/permission bypass` | 全部放行（不询问） |
| `/permission` | 查看当前模式 |

底部状态栏显示当前模式：`⏸ plan` · `🛡 manual` · `⚡ auto` · `🟢 bypass`。模式跨会话记忆（`/reload`、resume、分支切换均保留）。

## 模式对照

| 模式 | bash | edit / write |
|---|---|---|
| `manual` | 每条都问 | 每条都问 |
| `auto` | 只问风险命令 | 自动放行 |
| `bypass` | 全部放行 | 全部放行 |

> 风险命令示例：`rm -rf`、`sudo`、`git push` / `git reset --hard`、`npm install` 等（见 `index.ts` 的 `RISKY_BASH`）。

## 安装

```bash
# 从本仓库
pi install git:github.com/sowyer666/pi-cc-permission

# 或本地目录
pi install /path/to/pi-cc-permission
```

安装后执行 `/reload`（或重启 pi）即生效。

## 配置（可选）

启动默认值写在 `~/.pi/agent/permission-modes.json`：

```json
{
  "defaultMode": "manual",
  "startInPlan": false,
  "askForAllBashInManual": true
}
```

- `defaultMode`：`manual` | `auto` | `bypass`
- `startInPlan`：启动即进入计划模式
- `askForAllBashInManual`：`true` = manual 模式连只读 bash 也问；`false` = 只问改动类命令

命令行覆盖：`pi --plan --permission-mode auto`。

## 注意

- 需要 pi `^0.84`（Node `>=22.19`）
- 只读工具 `read` / `grep` / `find` / `ls` 不拦截
- 无交互界面（`pi -p` / JSON 模式）时，本应询问的调用会被**阻止**（fail-closed），`bypass` 除外
- 调整「安全命令 / 风险命令」：编辑 `index.ts` 的 `SAFE_BASH` / `RISKY_BASH` 后 `/reload`

## License
MIT
