360 Secure SkillHub
360 安全技能中心

sdlc-guardrails

引擎与规则分离的红线拦截 Skill:PostToolUse hook 在每次 Write/Edit 时运行 engine/check.py,按项目 .claude/guardrails.yaml 中的 forbid/require/require_if/count_ge 规则拦截违规,无规则文件则为 no-op;另提供 pre-commit 提交兜底与存量违规基线扫描,并含 OVAL prof…

TsCarpe
热度 0.00
最近更新 2026-10-19 00:41:34
分类:开发依赖:代码执行 / 读写文件应用场景:代码审查 / 工作流 / 自动化脚本 / 模板 ...

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add tscarpe/claude-sdlc-skills/sdlc-guardrails
Metadata
name
sdlc-guardrails
description
Deterministic guardrail engine that enforces "write-it-and-it's-wrong" red-lines at write time - a PostToolUse hook runs engine/check.py on every Write/Edit and blocks violations per project-defined guardrails.yaml rules (forbid / require / require_if / count_ge), with pre-commit fallback and --check baseline scanning for legacy code. Engine is mechanism (one global copy), rules are content (per project). Use when 接入或配置红线拦截、给项目编写 guardrails 规则、排查 hook 拦截了或没拦、扫描存量违规基线,或用户说 guardrails、红线引擎、红线拦截、接入红线、规则文件、红线扫描、baseline scan.

sdlc-guardrails:红线拦截引擎

把「写了就是错」的服从性规则从文档下沉为写文件瞬间的确定性拦截:引擎全局一份(本 skill 的 engine/check.py),规则各项目自写(.claude/guardrails.yaml),无规则文件 = no-op。

前置依赖:python3 + PyYAML(engine/check.py);git(pre-commit 提交兜底)。

何时用

  • 新项目接入红线拦截(下方三步接入)
  • 为已接入项目增删规则、调整 glob 与规则类型
  • 排障:为什么拦了 / 为什么没拦
  • 存量代码违规基线扫描(旧账出报告,不阻塞编辑)

架构(引擎与规则分离)

侧 内容 载体
引擎(机制) 检查逻辑,python3 零项目知识 engine/check.py,随 skill 装到用户级 ~/.claude/skills/sdlc-guardrails/
规则(内容) 各项目的红线 项目 .claude/guardrails.yaml,从被检文件向上逐级查找

规则四类:forbid(出现即违规)/ require(至少出现一次)/ require_if(命中 when 则 pattern 必须出现)/ count_ge(pattern 计数 ≥ anchor 计数)。字段写法与样例见 README.md。

三步接入(脆弱操作:按序执行,不给发挥空间)

  1. 挂载 hook:把 templates/settings-hook.json 的 hooks 段合并进项目 .claude/settings.json(保留已有事件),引擎路径用安装位置 ~/.claude/skills/sdlc-guardrails/engine/check.py(npx skills add 全局安装即在此;项目级安装(未加 -g)改用 <项目根>/.claude/skills/sdlc-guardrails/engine/check.py;~ 不展开则改用 $HOME)

  2. 写规则文件:项目根 .claude/guardrails.yaml——不凭空编规则,从用户红线清单或 README.md 样例起步

  3. pipe-test 实测(反馈环,必做):写一个故意违规的文件,执行

    echo '{"tool_input":{"file_path":"<违规文件绝对路径>"}}' \
      | python3 ~/.claude/skills/sdlc-guardrails/engine/check.py
    

    预期输出 {"decision":"block",...}。未实测拦截就宣布接入完成 = 失败。

日常操作

需求 动作
增删规则 编辑项目 guardrails.yaml,每次写入即时生效;改完 pipe-test 复验一条
Edit 存量文件 引擎只查本次新增文本,存量旧账不阻塞编辑者
存量基线报告 执行 python3 <引擎路径> --check <文件...>(违规 exit 1,人类可读输出)
git 提交兜底 复制 templates/pre-commit 到 .githooks/,执行 git config core.hooksPath .githooks(模板默认只查 *.java,非 Java 项目改脚本内过滤串)

边界与排障

  • 规则纯 regex 不做 AST;类型/跨文件分析类规则不在此层,走 CI/测试期(ArchUnit 等)
  • 引擎异常静默 exit 0,永不打断 agent 循环——排障直接跑 pipe-test 看输出,不猜
  • OVAL @Validate↔profiles 跨文件对账:执行 engine/audit_profiles.py(对账工具,不是拦截器)

参考(一层引用)

  • README.md:架构细则、规则语法全量、语义要点(Write/Edit 差异、no-op 行为)、已知边界
  • references/guardrails.example.yaml:23 条规则示例(从零写规则时参考)
  • templates/:settings-hook.json(hook 挂载段)/ pre-commit(提交兜底);回归 runner 模板属 sdlc-test(../sdlc-test/templates/,单独安装本 skill 时该引用仅作来源说明,不依赖其存在)