ch4nn0n/fencepost

GitHub: ch4nn0n/fencepost

fencepost 是一个 Claude Code 插件,通过可配置的 YAML 规则集为每次工具调用提供 allow/ask/deny 三级权限控制。

Stars: 1 | Forks: 0

# fencepost **为每一次 Claude Code 工具调用提供可配置的权限网关。** [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b1a85e86a7164948.svg)](https://github.com/ch4nn0n/fencepost/actions/workflows/ci.yml) [![Docs](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/ebbaf90d53164953.svg)](https://ch4nn0n.github.io/fencepost/) [![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](./LICENSE) fencepost 作为 [Claude Code](https://docs.claude.com/en/docs/claude-code) 插件安装,并在 `PreToolUse` hook(加上用于密钥脱敏的 `PostToolUse`)上运行,因此它能在**每次工具调用发生前**对其进行拦截,并根据你控制的 YAML 规则集对其进行评估。每次调用都会解析为以下三种决策之一: | 决策 | 结果 | 向谁显示原因 | |----------|--------------|-----------------| | **allow** | 工具静默运行(快速路径)。 | — | | **ask** | Claude Code 提示你进行批准。 | 你 | | **deny** | 工具被阻止,并提供可操作的替代方案。 | Claude | 拒绝并不是死胡同:fencepost 会引导 Claude 采用建议的替代方案,而不是让它重试同一堵墙。 ## 为什么选择 fencepost - **精心策划、可共享的规则。** 一行代码即可导入针对 `git`、`kubernetes`、`helm`、`ansible`、`filesystem` 等经过实战检验的规则集。 - **真正的 bash 理解能力。** 命令使用 tree-sitter 进行解析,而不是简单的模式匹配——fencepost 能够推理重定向、每个参数、复合命令,甚至内联的 `python -c` / `node -e` 代码片段。 - **临时沙盒。** 将临时文件汇集到 `/tmp/claude` 并将破坏性权限限制在该目录内;文件系统的其余部分保持受控状态。 - **密钥保护。** 使用你已安装的 gitleaks(推荐)/ betterleaks / trufflehog / detect-secrets 中的任意一种,fencepost 会拒绝包含凭据的工具输入,并在工具输出到达模型之前将其中的密钥进行脱敏处理。 - **失败即关闭的安全机制。** 损坏的安全配置会拒绝所有操作,直到人工修复,而不是静默降低安全性。 - **审计追踪。** 每一个决策都会被记录;`/audit` 技能能将实际使用情况转化为具体的配置建议。 fencepost 作为一个小型的已提交 JS bundle 发布(约 280 KB,外加 tree-sitter 语法),因此用户无需构建步骤,也无需下载大型二进制文件。它可以在 **Node**(如果你通过 npm 运行 Claude Code,你已经具备了此环境)或 **Bun** 上运行。 ## 安装 该代码库本身也兼作一个单插件市场: ``` /plugin marketplace add ch4nn0n/fencepost /plugin install fencepost@fencepost ``` hooks 将被注册,并且网关会在下一次工具调用时生效。要在不安装的情况下针对克隆进行测试: ``` git clone https://github.com/ch4nn0n/fencepost.git claude --plugin-dir ./fencepost ``` 有关详细信息,请参阅[安装指南](https://ch4nn0n.github.io/fencepost/docs/getting-started/installation)。 ## 快速开始 在你的项目中创建 `.claude/fencepost.yaml`: ``` import: - claude # allow Claude's built-in tools + enable the /tmp sandbox - git # sensible git porcelain rules default: ask # what to do when nothing matches onError: ask # what to do when a command can't be checked ``` 这就足以发挥作用了: ``` git status # → allow (silent) git push origin main # → ask (you approve) git push --force # → deny (steered to --force-with-lease) ``` 在此之上叠加你自己的规则——导入的规则是基础,你的规则始终优先。请参阅[配置指南](https://ch4nn0n.github.io/fencepost/docs/configuration/config-files)。 ## 内置预设 `claude` · `claude-web` · `git` · `gh` · `kubernetes` · `helm` · `helmfile` · `ansible` · `context7` · `playwright` · `filesystem` · `python-safety` · `secrets` 请参阅[预设参考](https://ch4nn0n.github.io/fencepost/docs/presets)。 ## 开发 ``` bun install bun test # run the test suite bun run typecheck # tsc --noEmit bun run build # bundle src/ → dist/index.js (+ wasm grammars) bun run dev # run the entry point directly ``` `dist/` 是有意提交的——它是插件发布的构建产物——因此每当你更改 `src/` 时,请重新构建并提交它。 文档站点位于 [`docs/`](./docs) (Docusaurus): ``` cd docs bun install bun start # dev server with HMR bun run build # static site → docs/build/ ``` ## 发布 发布过程由 [release-please](https://github.com/googleapis/release-please) 自动化。请编写 [Conventional Commits](https://www.conventionalcommits.org/)(`feat:`、`fix:` 等);release-please 会维护一个**发布 PR**,用于提升版本号(同时更新 `package.json` 和 `.claude-plugin/plugin.json`)并更新 `CHANGELOG.md`。合并该 PR 将会打上发布标签并发布一个可直接安装的插件归档。 ## 许可证 [GNU General Public License v3.0](./LICENSE) 或更高版本。
标签:AI编程助手, Claude Code插件, DevSecOps, MITM代理, 上游代理, 敏感信息脱敏, 数据可视化, 权限控制, 策略引擎, 网络安全挑战, 自动化攻击