本地优先(Local first)
对加载 HeyEddi 技能的每个代理始终开启(Cursor、Claude、Codex、Cloud Run 或任何其他宿主)。在仓库中编辑代码和 Terraform。检查计划。不要改动线上系统。
这与 verify_setup --check 属于同一类门禁。脚本在遇到线上变更时以退出码 1 结束。不要运行该命令。
硬门禁
在任何 Terraform、OpenTofu、Pulumi、gcloud、GAM、Firebase、kubectl、Helm、aws、gsutil、bq 或 Google API 写入之前,运行:
python .agents/skills/heyeddi-local-first/scripts/classify_command.py --check --command "<the exact command>"
从本 hub 出发时,脚本路径为 skills/heyeddi-local-first/scripts/classify_command.py。
退出码与含义
0 且 "action": "allow"——运行它。仅限读取和本地配置。
0 且 "action": "plan"——运行它。然后向用户发出警告,说明该计划将创建、更改或销毁什么。停止。
1 且 "blocked": true——不要运行它。改为编辑文件。
计划命令是指 terraform plan、tofu plan、pulumi preview 或 ansible-playbook --check。
流程
-
在工作树中更改 Terraform、配置或应用代码。
-
对计划命令运行检查器。退出码 0 且 action 为 plan 表示可以运行该计划。
-
向用户发出警告。引用该计划将新增、更改或销毁的资源地址。
-
提交并审查该 diff。线上 apply 保留在项目的部署流水线(HeyEddi CI 使用 Cloud Build terraform-release)中,或由人类在终端中运行。
哪些情况会以退出码 1 结束
- terraform / tofu 的 apply、destroy、import、refresh、state rm、workspace delete
- gcloud 写入(delete、deploy、create、submit、IAM 变更)。list、describe、get、config 和 auth 保持允许。
- GAM 写入,包括日历账户变更。gam info 和 gam print 保持允许。
- firebase deploy、kubectl 写入、helm upgrade、aws 写入、gsutil rm、未使用 --dry_run 的 bq 查询
- 对 Google API 的 curl -X POST、PUT、PATCH 或 DELETE
- 在 bash -c、python -c、$(...)、或本地 .sh / .py 脚本中出现的相同命令
- firebase emulators:start 属于本地操作,保持允许。
工具
脚本与用途:
- classify_command.py --check:遇到线上变更时退出码 1。plan 会打印警告并以退出码 0 结束。
相关内容
- @heyeddi always-on list
- @engineering-excellence 用于代码更改门禁
- HeyEddi CI 的 cloudbuild.yaml 中 terraform-release 步骤是经过审查的 apply 路径